Por padrão, a API trata os waypoints intermediários como paradas ao longo de um trajeto.
No entanto, é possível configurar um ponto intermediário como um ponto de passagem via
pelo qual o veículo passa sem parar.
Use waypoints de passagem para moldar ou ajustar um trajeto específico. Em vez de dividir o trajeto em paradas de retirada ou entrega separadas, um waypoint de passagem força o mecanismo de roteamento a passar por um local específico no caminho até o destino, por exemplo, para seguir um segmento de via preferencial ou evitar um perigo conhecido.
Uma rota que contém uma origem, um ou mais waypoints intermediários de passagem e um destino contém apenas um trecho que conecta a origem diretamente ao destino.
Para configurar um waypoint intermediário como um waypoint de passagem, defina a propriedade via do waypoint como true no recurso Waypoint REST ou na mensagem Waypoint gRPC.
Embora a API Routes aceite endereços, IDs de lugar e coordenadas de latitude e longitude, as coordenadas de latitude e longitude, ou latLng, fornecem os ajustes de rota mais precisos para waypoints de passagem.
A propriedade via é mais eficaz quando você cria rotas em resposta ao arrasto de waypoints em um mapa. Essa abordagem permite que você veja como o trajeto final
fica em tempo real e ajuda a colocar pontos de referência em locais acessíveis.
Exemplo: definir um waypoint de passagem
O exemplo a seguir demonstra como definir "via": true em um waypoint intermediário em uma solicitação POST computeRoutes completa:
curl -X POST -d '{ "origin":{ "location":{ "latLng":{ "latitude": 37.419734, "longitude": -122.0827784 } } }, "destination":{ "location":{ "latLng":{ "latitude": 37.417670, "longitude": -122.079595 } } }, "intermediates": [ { "location":{ "latLng":{ "latitude": 37.419734, "longitude": -122.0807784 } }, "via": true } ], "travelMode": "DRIVE" }' \ -H 'Content-Type: application/json' -H 'X-Goog-Api-Key: YOUR_API_KEY' \ -H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.legs' \ 'https://routes.googleapis.com/directions/v2:computeRoutes'
Usar endereços ou IDs de lugar para waypoints de passagem
Embora recomendemos coordenadas de latitude e longitude para rotas de passagem precisas, você também pode especificar waypoints intermediários usando uma string de endereço ou um ID de lugar.
Quando você usa um endereço ou ID de lugar para um waypoint de passagem, a API interpola e ajusta o local à via navegável mais próxima. Esse processo de ajuste à via pode, às vezes, resultar em variações ou imprecisões de rota em comparação com as coordenadas exatas.
Se você especificar um waypoint usando uma string de endereço ou um Plus Code, a API vai geocodificar o local e retornar o ID de lugar correspondente na matriz geocodingResults.intermediates na resposta.
Para cada elemento na matriz intermediates, use a propriedade intermediateWaypointRequestIndex para determinar qual waypoint intermediário na solicitação corresponde ao ID de lugar na resposta.
Exemplo: solicitar IDs de lugar para waypoints de passagem
O exemplo a seguir mostra uma solicitação com três waypoints intermediários de passagem, cada um especificando "via": true:
curl -X POST -d '{ "origin":{ "address": "1600 Amphitheatre Parkway, Mountain View, CA" }, "destination":{ "address": "24 Willie Mays Plaza, San Francisco, CA 94107" }, "intermediates": [ { "address": "450 Serra Mall, Stanford, CA 94305, USA", "via": true }, { "location":{ "latLng":{ "latitude": 37.419734, "longitude": -122.0807784 } }, "via": true }, { "address": "1836 El Camino Real, Redwood City, CA 94063", "via": true } ], "travelMode": "DRIVE" }' \ -H 'Content-Type: application/json' -H 'X-Goog-Api-Key: YOUR_API_KEY' \ -H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.legs,geocodingResults' \ 'https://routes.googleapis.com/directions/v2:computeRoutes'
A resposta inclui a matriz geocodingResults que contém os IDs de lugar da origem, do destino e dos dois waypoints intermediários que você especificou por endereço no índice 0 e no índice 2 da solicitação. A API omite o waypoint intermediário no índice 1 de geocodingResults porque você o especificou usando coordenadas de latitude e longitude:
{ "routes": [ { "distanceMeters": 54200, "duration": "2400s", "legs": [ { "distanceMeters": 54200, "duration": "2400s", "startLocation": { "latLng": { "latitude": 37.4220, "longitude": -122.0841 } }, "endLocation": { "latLng": { "latitude": 37.7786, "longitude": -122.3893 } } } ] } ], "geocodingResults": { "origin": { "geocoderStatus": {}, "type": [ "premise" ], "placeId": "ChIJj38IfwK6j4ARNcyPDnEGa9g" }, "destination": { "geocoderStatus": {}, "type": [ "premise" ], "placeId": "ChIJI7ES6tl_j4ARVpDZoXbWAiY" }, "intermediates": [ { "geocoderStatus": {}, "intermediateWaypointRequestIndex": 0, "type": [ "street_address" ], "placeId": "ChIJvdLMGyq7j4ARScE5tWX_C0Y" }, { "geocoderStatus": {}, "intermediateWaypointRequestIndex": 2, "type": [ "premise" ], "placeId": "ChIJkTc0GKajj4AR9UMsOSHwGD0" } ] } }