Request alternative routes

By default, the Routes API returns the default route, which is typically the fastest route from the origin to the destination. When you request alternative routes, the API returns up to three routes along with the default route. Your customers can then choose a route that best fits their requirements.

Considerations when requesting alternative routes

To request alternative routes, be aware of the following considerations:

  • You can only request alternative routes for routes without intermediate waypoints. Requesting alternative routes when the route specifies intermediate waypoints does not cause an error. However, no alternative routes are returned.

  • The response contains a maximum of three alternative routes. However, sometimes no alternative routes are available so the response only contains the default route.

  • Because of the additional processing required to calculate alternative routes, requesting alternative routes might increase the response time of the API.

Example alternative routes request

Set computeAlternativeRoutes to true to request alternative routes. The following example shows how to request alternative routes in a computeRoutes method (REST) request.

curl -X POST -d '{
  "origin":{
    "location":{
      "latLng":{
        "latitude":42.340173523716736,
        "longitude":-71.05997968330408
      }
    }
  },
  "destination":{
    "location":{
      "latLng":{
        "latitude":42.075698891472804,
        "longitude": -72.59806562080408
      }
    }
  },
  "travelMode": "DRIVE",
  "routingPreference":"TRAFFIC_AWARE",
  "computeAlternativeRoutes": true
}' \
-H 'Content-Type: application/json' -H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.routeLabels' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

In this example, you specify a field mask so that the response contains only the duration, distanceMeters, and routeLabels properties for each route. Your customer can then use that information to choose which route to take. For more information, see Choose what information to return.

Example alternative routes response

In the response, use the routeLabels array property to identify reach route:

  • For the default route, the routeLabels property contains DEFAULT_ROUTE.

  • For any alternate routes, the routeLabels property contains DEFAULT_ROUTE_ALTERNATE.

In this example, the response contains the default route and two alternative routes. Notice that the values of the duration and distanceMeters properties are different for each route:

{
  "routes": [
    {
      "distanceMeters": 150322,
      "duration": "5309s",
      "routeLabels": [
        "DEFAULT_ROUTE"
      ]
    },
    {
      "distanceMeters": 157614,
      "duration": "6879s",
      "routeLabels": [
        "DEFAULT_ROUTE_ALTERNATE"
      ]
    },
    {
      "distanceMeters": 189311,
      "duration": "7376s",
      "routeLabels": [
        "DEFAULT_ROUTE_ALTERNATE"
      ]
    }
   ]
}

Include polylines in the response

To make it easier for the user to select the route, add the polyline for each route to the response. You can then display each polyline on a map.

To add the polyline, include routes.polyline in the field mask:

-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.routeLabels,routes.polyline'

The response then contains the polyline for each route:

{
  "routes": [
    {
      "distanceMeters": 150322,
      "duration": "5309s",
      "polyline": {
        "encodedPolyline": "mrlaGtavpLPLBTm…PgA^qC"
      },
      "routeLabels": [
        "DEFAULT_ROUTE"
      ]
    },
    {
      "distanceMeters": 157614,
      "duration": "6879s",
      "polyline": {
        "encodedPolyline": "DmEd`@e@pCo@pCs@z…PgA^qC"
      },
      "routeLabels": [
        "DEFAULT_ROUTE_ALTERNATE"
      ]
    },
    {
      "distanceMeters": 189311,
      "duration": "7376s",
      "polyline": {
        "encodedPolyline": "FVLL|Af@HPAV…PgA^qC"
      },
      "routeLabels": [
        "DEFAULT_ROUTE_ALTERNATE"
      ]
    }
   ]
}