Computing a Route Examples

You can retrieve a set of routes from the Routes Preferred API by sending an HTTP POST request to the following resource:

 https://routespreferred.googleapis.com/v1:computeRoutes 

Include your request options, formatted in JSON, in the message body. For information about the complete set of options, see the computeRoutes Request Body .

Example request body

The following JSON code demonstrates how to construct a typical request body for a computeRoutes request.

 POST /v1:computeRoutes
Host: routespreferred.googleapis.com
Content-Type: application/json
X-Goog-Api-Key: YOUR_API_KEY 
X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.polyline.encodedPolyline

{
  "origin":{
    "location":{
      "latLng":{
        "latitude": 37.419734,
        "longitude": -122.0827784
      }
    }
  },
  "destination":{
    "location":{
      "latLng":{
        "latitude": 37.417670,
        "longitude": -122.079595
      }
    }
  },
  "travelMode": "DRIVE",
  "routingPreference": "TRAFFIC_AWARE",
  "polylineQuality": "OVERVIEW",
  "departureTime": "2019-10-15T15:01:23.045123456Z",
  "computeAlternativeRoutes": false,
  "routeModifiers": {
    "avoidTolls": false,
    "avoidHighways": false,
    "avoidFerries": false
  },
  "languageCode": "en-US",
  "units": "IMPERIAL"
} 

Example response body

The following JSON code is an example of the response body returned from the above call to computeRoutes .

  { 
  
 "routes" 
 : 
  
 [ 
 { 
 "distanceMeters": 772, 
 "duration": "165s", 
 "polyline": { 
 "encodedPolyline": "ipkcFfichVnP@j@BLoFVwM{E?" 
 } 
 } 
  
 ] 
 } 
 

Example gRPC Request

The following shows an example gRPC request.

Go

 package 
  
 main 
 import 
  
 ( 
  
 "context" 
  
 "fmt" 
  
 "log" 
  
 "time" 
  
 routespreferred 
  
 "developers.google.com/maps/go/routespreferred/v1" 
  
 "google.golang.org/api/option" 
  
 routespb 
  
 "google.golang.org/genproto/googleapis/maps/routes/v1" 
  
 "google.golang.org/genproto/googleapis/type/latlng" 
  
 "google.golang.org/grpc/metadata" 
 ) 
 const 
  
 ( 
  
 // https://cloud.google.com/iam/docs/creating-managing-service-account-keys#creating_service_account_keys 
  
 credentialsFile 
  
 = 
  
 "service-account.json" 
  
 // Note that setting the field mask to * is OK for testing, but discouraged in 
  
 // production. 
  
 // For example, for ComputeRoutes, set the field mask to 
  
 // "routes.distanceMeters,routes.duration,routes.polyline.encodedPolyline" 
  
 // in order to get the route distances, durations, and encoded polylines. 
  
 fieldMask 
  
 = 
  
 "*" 
 ) 
 func 
  
 main 
 () 
  
 { 
  
 ctx 
 , 
  
 cancel 
  
 := 
  
 context 
 . 
 WithTimeout 
 ( 
 context 
 . 
 Background 
 (), 
  
 30 
 * 
 time 
 . 
 Second 
 ) 
  
 defer 
  
 cancel 
 () 
  
 // instantiate a client 
  
 c 
 , 
  
 err 
  
 := 
  
 routespreferred 
 . 
 NewRoutesPreferredClient 
 ( 
 ctx 
 , 
  
 option 
 . 
 WithCredentialsFile 
 ( 
 credentialsFile 
 )) 
  
 defer 
  
 c 
 . 
 Close 
 () 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 log 
 . 
 Fatal 
 ( 
 err 
 ) 
  
 } 
  
 // create the origin using a latitude and longitude 
  
 origin 
  
 := 
  
& routespb 
 . 
 Waypoint 
 { 
  
 LocationType 
 : 
  
& routespb 
 . 
 Waypoint_Location 
 { 
  
 Location 
 : 
  
& routespb 
 . 
 Location 
 { 
  
 LatLng 
 : 
  
& latlng 
 . 
 LatLng 
 { 
  
 Latitude 
 : 
  
 37.417670 
 , 
  
 Longitude 
 : 
  
 - 
 122.0827784 
 , 
  
 }, 
  
 }, 
  
 }, 
  
 } 
  
 // create the destination using a latitude and longitude 
  
 destination 
  
 := 
  
& routespb 
 . 
 Waypoint 
 { 
  
 LocationType 
 : 
  
& routespb 
 . 
 Waypoint_Location 
 { 
  
 Location 
 : 
  
& routespb 
 . 
 Location 
 { 
  
 LatLng 
 : 
  
& latlng 
 . 
 LatLng 
 { 
  
 Latitude 
 : 
  
 37.417670 
 , 
  
 Longitude 
 : 
  
 - 
 122.079595 
 , 
  
 }, 
  
 }, 
  
 }, 
  
 } 
  
 // create the request with additional options 
  
 req 
  
 := 
  
& routespb 
 . 
 ComputeRoutesRequest 
 { 
  
 Origin 
 : 
  
 origin 
 , 
  
 Destination 
 : 
  
 destination 
 , 
  
 TravelMode 
 : 
  
 routespb 
 . 
 RouteTravelMode_DRIVE 
 , 
  
 RoutingPreference 
 : 
  
 routespb 
 . 
 RoutingPreference_TRAFFIC_AWARE 
 , 
  
 ComputeAlternativeRoutes 
 : 
  
 true 
 , 
  
 Units 
 : 
  
 routespb 
 . 
 Units_METRIC 
 , 
  
 LanguageCode 
 : 
  
 "en-us" 
 , 
  
 RouteModifiers 
 : 
  
& routespb 
 . 
 RouteModifiers 
 { 
  
 AvoidTolls 
 : 
  
 false 
 , 
  
 AvoidHighways 
 : 
  
 true 
 , 
  
 AvoidFerries 
 : 
  
 true 
 , 
  
 }, 
  
 PolylineQuality 
 : 
  
 routespb 
 . 
 PolylineQuality_OVERVIEW 
 , 
  
 } 
  
 // set the field mask 
  
 ctx 
  
 = 
  
 metadata 
 . 
 AppendToOutgoingContext 
 ( 
 ctx 
 , 
  
 "X-Goog-Fieldmask" 
 , 
  
 fieldMask 
 ) 
  
 // execute rpc 
  
 resp 
 , 
  
 err 
  
 := 
  
 c 
 . 
 ComputeRoutes 
 ( 
 ctx 
 , 
  
 req 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 // "rpc error: code = InvalidArgument desc = Request contains an invalid 
  
 // argument" may indicate that your project lacks access to Routes Preferred 
  
 log 
 . 
 Fatal 
 ( 
 err 
 ) 
  
 } 
  
 fmt 
 . 
 Printf 
 ( 
 "Duration of route %d" 
 , 
  
 resp 
 . 
 Routes 
 [ 
 0 
 ]. 
 Duration 
 . 
 Seconds 
 ) 
 } 
  

Calculating toll fees example

The following example uses the computeRoutes method to return toll information with an estimated price when a toll pass is used.

This feature is enabled with the routes.travelAdvisory.tollInfo field mask specified in the request. The toll pass is specified in the route_modifiers field. The toll price returned is based on the pricing used by the specified pass. If more than one pass is specified, the least expensive pricing is returned.

Request:

  curl 
 - 
 X 
 POST 
 - 
 d 
 '{ 
 "origin":{ 
 "location":{ 
 "lat_lng":{ 
 "latitude":47.7020056, 
 "longitude":-122.3479236 
 } 
 } 
 }, 
 "destination":{ 
 "location":{ 
 "lat_lng":{ 
 "latitude":47.6192234, 
 "longitude": -122.1676792 
 } 
 } 
 }, 
 "travel_mode":"DRIVE", 
 "route_modifiers":{ 
 "vehicle_info":{ 
 "emission_type": "GASOLINE" 
 }, 
 "toll_passes": [ 
 "US_MA_EZPASSMA", 
 "US_WA_GOOD_TO_GO" 
 ] 
 } 
 }' 
 \ 
 - 
 H 
 'Content-Type: application/json' 
 \ 
 - 
 H 
 'X-Goog-Api-Key: <YOUR_API_KEY>' 
 \ 
 - 
 H 
 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.travelAdvisory.tollInfo,routes.legs.travelAdvisory.tollInfo' 
 \ 
 'https://routespreferred.googleapis.com/v1alpha:computeRoutes' 
 

Response:

 {
  "routes": [
    {
      "legs": [
        {
          "travelAdvisory": {
            "tollInfo": {
              "estimatedPrice": [
                {
                  "currencyCode": "USD",
                  "units": "3",
                  "nanos": 400000000
                }
              ]
            }
          }
        }
      ],
      "distanceMeters": 22496,
      "duration": "1400s",
      "travelAdvisory": {
        "tollInfo": {
          "estimatedPrice": [
            {
              "currencyCode": "USD",
              "units": "3",
              "nanos": 400000000
            }
          ]
        }
      }
    }
  ]
} 
Create a Mobile Website
View Site in Mobile | Classic
Share by: