Этот документ представляет собой обновление старой статьи , в которой использовались предыдущие версии API GMP. Этот контент обновлен до новой версии Places API, выпущенной в 2023–2024 годах, и Routes API, выпущенной в 2023 году.
Обычно, когда пользователь едет к объекту интереса (POI), ему фактически требуется навигация к ближайшему месту, например, к парковке или точке доступа. Представьте себе водителя, которому нужно поехать в аэропорт или в торговый центр. При поездке в аэропорт водитель пытается добраться до терминала или пункта высадки, а не до центра территории аэропорта. Аналогично, парковка рядом с торговым центром может быть гораздо лучшим вариантом для пользователя с автомобилем. В этом случае при разработке приложения или службы для помощи водителю сначала найдите место, куда он направляется, а затем предложите водителю дополнительные пункты назначения рядом с этим местом. Такой подход позволяет вам улучшить обслуживание своих клиентов и продемонстрировать, что вы цените их время, с помощью небольшого, но разумного усилия по разработке, использующего данные о местоположении, предоставленные платформой Google Maps.
Мы покажем, как вы можете использовать новый API Places API и API Routes последовательно или в сочетании, чтобы определить правильное место для парковки рядом с пунктом назначения. Это решение направлено на устранение неопределенности и множественных взаимодействий, чтобы найти место для парковки, приближаясь к конечному пункту назначения. Взгляните на два примера того, как эти случаи могут быть реализованы в деталях.
Пример 1. Туристическая достопримечательность без парковки.
Выберите место, которое не связано напрямую с обочиной, чтобы маршрут нужно было искать отдельно. Пункт назначения — Нотр-Дам в Париже, а в качестве отправной точки мы будем использовать железнодорожную станцию Gare de l'Est (48.87697775149635, 2.3592247806755564).
Водитель покидает станцию примерно в 16 минутах к северу от Нотр-Дама. Нотр-Дам — известная туристическая достопримечательность на острове с мостом, несколькими улицами с односторонним движением и отсутствием большой парковки поблизости, так что это должно быть интересной задачей.
- Запрос API мест
В этом примере запроса API Places используется текстовый поиск для поиска Нотр-Дама. Подробности смотрите в документации разработчика . «$APIKEY» в этих примерах — это ключ API, который у вас есть для API-интерфейсов мест и маршрутов платформы Google Карт, включенных в Google Cloud Console. Более подробное объяснение см. в документации по началу работы с платформой Google Maps .
Новые запросы Places API имеют новый формат. Поля ответа больше не фиксированы, и как разработчик вы должны определить маску поля в заголовке. Использование маски поля определено в документации .
curl -X POST --data @notre_dame.json \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: $APIKEY" \
-H 'X-Goog-FieldMask: places.id,places.displayName,places.formattedAddress,places.location' \
'https://places.googleapis.com/v1/places:searchText'
С содержимым notre_date.json для параметров поиска:
{
"textQuery": "Notre Dame, Paris",
"languageCode": "en"
}
Ответ на приведенный выше запрос дает следующие координаты широты и долготы:
{
"places": [
{
"id": "ChIJATr1n-Fx5kcRjQb6q6cdQDY",
"formattedAddress": "6 Parvis Notre-Dame - Pl. Jean-Paul II, 75004 Paris, France",
"location": {
"latitude": 48.852968200000007,
"longitude": 2.3499021
},
"displayName": {
"text": "Cathédrale Notre-Dame de Paris",
"languageCode": "en"
}
}
]
}
Как видите, координаты действительно указывают на Нотр-Дам.
Разработчикам или поставщикам услуг рекомендуется автоматически подсказывать водителю: «Ищете парковку возле Нотр-Дама?» или если у водителя есть электромобиль, возможно, вам стоит поискать зарядную станцию. Пользовательский опыт будет различаться в зависимости от устройства и экрана, но в этом случае стоит рассмотреть тонкий диалоговый текст, который исчезает через короткое время. Чтобы найти парковку возле Нотр-Дама, выполните поиск поблизости API Places с типами «parking» и «electric_vehicle_charging_station» в радиусе 500 метров. В следующем примере результаты будут смещены в сторону парковочных мест в пределах 500 метров от Нотр-Дама.
curl -X POST -d '{
"includedTypes": ["parking", "electric_vehicle_charging_station"],
"maxResultCount": 10,
"rankPreference": "DISTANCE",
"locationRestriction": {
"circle": {
"center": {
"latitude": 48.852968200000007,
"longitude": 2.3499021},
"radius": 500.0
}
}
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: $APIKEY" \
-H "X-Goog-FieldMask: places.displayName,places.location" \
https://places.googleapis.com/v1/places:searchNearby
Первый результат — зарядная станция по адресам 48.854981, 2.350629, хотя к моменту запуска этого примера ваши результаты могут измениться. Используйте это местоположение в следующей части, где мы будем выполнять запрос API маршрутов.
- **Запрос API маршрутов **
Чтобы найти маршрут от станции до зарядной станции недалеко от Нотр-Дама, вам необходимо выполнить запрос Routes API. Просто установите параметры происхождения и назначения. Дополнительные параметры см. в документации разработчика .
curl -X POST -d '{
"origin":{
"location":{
"latLng":{
"latitude": 48.87697775149635,
"longitude": 2.3592247806755564
}
}
},
"destination":{
"location":{
"latLng":{
"latitude": 48.854981,
"longitude": 2.350629
}
}
},
"travelMode": "DRIVE",
"routingPreference": "TRAFFIC_AWARE",
"departureTime": "2024-05-16T15:01:23.045123456Z",
"computeAlternativeRoutes": false,
"routeModifiers": {
"avoidTolls": false,
"avoidHighways": false,
"avoidFerries": false
},
"languageCode": "en-US",
"units": "METRIC"
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: $APIKEY" \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.legs,routes.polyline.encodedPolyline' \
'https://routes.googleapis.com/directions/v2:computeRoutes'
Ответ API маршрутов обычно содержит несколько предложений маршрутов. Чтобы включить данные маршрута в ответ, определите «routes.legs» в маске поля. Каждый маршрут состоит из нескольких «этапов», каждый из которых содержит несколько «шагов», показывающих расстояние и координаты. Чтобы найти конечные координаты, до которых можно добраться на автомобиле, используйте поле «endLocation» последнего шага последнего этапа выбранного вами маршрута. «широта»: 48,854937299999996, «долгота»: 2,3505841999999997
Это место может показаться не лучшим выбором, но если вы посмотрите на карту или Google Street View, вы обнаружите, что это место находится в нескольких минутах ходьбы, примерно в 6-7 минутах, от Нотр-Дама.
Пешеходный маршрут от парковки зарядной станции до Нотр-Дама
Резюме для примера 1
Как видите, для поиска места для парковки автомобиля требуется всего лишь несколько вызовов API и отображение предложения водителю. Это экономит время ваших пользователей, поскольку они не ездят по улицам с односторонним движением и не пытаются найти место, где можно оставить машину, в многолюдной туристической достопримечательности. Подводя итог, мы выполнили следующие запросы API:
- Текстовый поисковый запрос API Places для поиска координат Нотр-Дама
- API-интерфейс Places выполняет поиск поблизости, чтобы найти парковку со станцией зарядки электромобилей в пределах 500 метров от этих координат.
- Запрос API маршрутов для поиска маршрута к зарядной станции
Пример 2. Сопровождение к терминалу крупного аэропорта.
Рассмотрим другой пример, когда водитель пытается добраться до большой территории с множеством мест, POI или потенциальных точек высадки. Водитель выезжает со стадиона Уэмбли, Великобритания (51.557263604707224, -0.2794575145680608) и пытается добраться до терминала 5 лондонского аэропорта Хитроу .
Что замечательно в новом автозаполнении Places API, так это возможность определять основной тип в качестве критерия поиска в сочетании с API, прогнозирующим дополнительные помещения в качестве потенциальных результатов поиска. В данном случае это означает, что поиск аэропорта также вернет терминалы. Полный список типов, которые можно включить или исключить, вы можете найти в документации .
curl -X POST -d '{
"input": "Heathrow",
"includedPrimaryTypes": ["airport"]
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: $APIKEY" \
https://places.googleapis.com/v1/places:autocomplete
Приведенный выше запрос дает нам список терминалов и отдельных точек высадки на этих терминалах. В списке результатов мы можем найти «Терминал 5 лондонского аэропорта Хитроу» и его идентификатор места:
"place_id" : "ChIJo21hnPxxdkgRksRL0KQRWII",
Используя параметр «placeId», мы можем сообщить API маршрутов, что пытаемся достичь места, а не каких-то произвольных координат.
curl -X POST -d '{
"origin":{
"location":{
"latLng":{
"latitude": 51.557263604707224,
"longitude": -0.2794575145680608
}
}
},
"destination":{
"placeId": "ChIJo21hnPxxdkgRksRL0KQRWII"
},
"travelMode": "DRIVE",
"routingPreference": "TRAFFIC_AWARE",
"departureTime": "2024-05-16T15:01:23.045123456Z",
"computeAlternativeRoutes": false,
"languageCode": "en-US",
"units": "METRIC"
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: $APIKEY" \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.legs,routes.polyline.encodedPolyline' \
'https://routes.googleapis.com/directions/v2:computeRoutes'
Опять же, как и в предыдущем примере, прочитав все шаги в ответе JSON, вы найдете последнюю часть пути, а также координаты широты и долготы конечного местоположения (51,4714348, «долгота»: -0,48967890000000003).
Резюме для примера 2
Как и в предыдущем примере, усилия по разработке улучшенного управления для водителя очень малы, а выгоды, сэкономленные водителю во времени, можно измерить. Мы выполнили следующие запросы:
- Запрос автозаполнения API Places (новый) для поиска терминала 5 аэропорта Хитроу
- Запрос API маршрутов для получения маршрута от Уэмбли до терминала 5.
Этот пример лишь поверхностно описывает новые функции Places API. Взгляните на некоторые новые типы мест, такие как взлетно-посадочная полоса и международный аэропорт.
Заключение
Как видите, усилия по разработке, необходимые для предоставления услуг премиум-класса вашим клиентам, путешествующим на автомобиле, довольно невелики, и вы можете продемонстрировать, как вы думаете о потребностях своих клиентов.
В целях разработки вы можете использовать множество доступных библиотек и инструментов, которые помогут вам создавать сервисы для ваших клиентов. Ознакомьтесь с нашим общедоступным репозиторием GitHub для платформы Google Maps .
Следующие действия
Начало работы с GMP: https://developers.google.com/maps/get-started.
Рекомендуем дальнейшее чтение
Документация по автозаполнению Places API (новая): https://developers.google.com/maps/documentation/places/web-service/place-autocomplete.
Документация по API маршрутов: https://developers.google.com/maps/documentation/routes.
Авторы
Основной автор: Микко Тойванен | Инженер по решениям платформы Google Maps