По умолчанию API рассматривает промежуточные точки маршрута как остановки. Однако вы можете настроить промежуточную точку как сквозную точку, via которую транспортное средство проезжает без остановки.
Используйте промежуточные точки для формирования или корректировки конкретного маршрута. Вместо разделения маршрута на отдельные точки посадки или высадки, промежуточная точка заставляет систему построения маршрута проходить через определенное место по пути к месту назначения — например, чтобы следовать по предпочтительному участку дороги или избегать известной опасности.
Маршрут, включающий начальную точку, одну или несколько промежуточных точек и конечную точку, содержит только один участок маршрута , который напрямую соединяет начальную точку с конечной точкой.
Чтобы настроить промежуточную точку маршрута как сквозную, установите свойство via этой точки маршрута в true либо в ресурсе REST Waypoint , либо в сообщении gRPC Waypoint .
Хотя API маршрутов принимает адреса, идентификаторы мест, а также координаты широты и долготы, именно координаты широты и долготы ( latLng ) обеспечивают наиболее точную корректировку маршрута для промежуточных точек.
Свойство via наиболее эффективно при создании маршрутов путем перетаскивания путевых точек на карте. Такой подход позволяет видеть, как выглядит конечный маршрут в реальном времени, и помогает размещать путевые точки в доступных местах.
Пример: Задать промежуточную точку для прохождения через препятствие.
Следующий пример демонстрирует, как установить значение "via": true для промежуточной точки маршрута в полном POST-запросе computeRoutes :
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'
Использование адресов или идентификаторов мест для промежуточных точек маршрута.
Хотя для точного построения маршрута мы рекомендуем использовать координаты широты и долготы, вы также можете указать промежуточные точки маршрута, используя адресную строку или идентификатор места.
При использовании адреса или идентификатора места в качестве точки маршрута, API интерполирует и привязывает местоположение к ближайшей проходимой дороге. Этот процесс привязки к дороге иногда может приводить к отклонениям маршрута или неточностям по сравнению с точными координатами.
Если вы укажете путевую точку с помощью адресной строки или кода Plus , API выполнит геокодирование местоположения и вернет соответствующий идентификатор места в массиве geocodingResults.intermediates в ответе.
Для каждого элемента в массиве intermediates используйте свойство intermediateWaypointRequestIndex , чтобы определить, какая промежуточная точка в запросе соответствует идентификатору места (Place ID) в ответе.
Пример: Запрос идентификаторов мест для промежуточных точек маршрута.
В следующем примере показан запрос с тремя промежуточными точками маршрута, каждая из которых указывает значение "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'
В ответе содержится массив geocodingResults включающий идентификаторы мест (Place ID) для начальной и конечной точек, а также двух промежуточных точек, указанных вами по адресу в запросе с индексами 0 и 2. API исключает промежуточную точку с индексом 1 из массива geocodingResults поскольку вы указали ее с помощью координат широты и долготы:
{ "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" } ] } }