Советы по созданию наилучшего пользовательского опыта при навигации по местам с автомобилем

Этот документ представляет собой обновление старой статьи , в которой использовались предыдущие версии API GMP. Этот контент обновлен до новой версии Places API, выпущенной в 2023–2024 годах, и Routes API, выпущенной в 2023 году.

Обычно, когда пользователь едет к объекту интереса (POI), ему фактически требуется навигация к ближайшему месту, например, к парковке или точке доступа. Представьте себе водителя, которому нужно поехать в аэропорт или в торговый центр. При поездке в аэропорт водитель пытается добраться до терминала или пункта высадки, а не до центра территории аэропорта. Аналогично, парковка рядом с торговым центром может быть гораздо лучшим вариантом для пользователя с автомобилем. В этом случае при разработке приложения или службы для помощи водителю сначала найдите место, куда он направляется, а затем предложите водителю дополнительные пункты назначения рядом с этим местом. Такой подход позволяет вам улучшить обслуживание своих клиентов и продемонстрировать, что вы цените их время, с помощью небольшого, но разумного усилия по разработке, использующего данные о местоположении, предоставленные платформой Google Maps.

System diagram

Мы покажем, как вы можете использовать новый API Places API и API Routes последовательно или в сочетании, чтобы определить правильное место для парковки рядом с пунктом назначения. Это решение направлено на устранение неопределенности и множественных взаимодействий, чтобы найти место для парковки, приближаясь к конечному пункту назначения. Взгляните на два примера того, как эти случаи могут быть реализованы в деталях.

Пример 1. Туристическая достопримечательность без парковки.

Выберите место, которое не связано напрямую с обочиной, чтобы маршрут нужно было искать отдельно. Пункт назначенияНотр-Дам в Париже, а в качестве отправной точки мы будем использовать железнодорожную станцию ​​​​Gare de l'Est (48.87697775149635, 2.3592247806755564).

Gare l'Est

Водитель покидает станцию ​​примерно в 16 минутах к северу от Нотр-Дама. Нотр-Дам — известная туристическая достопримечательность на острове с мостом, несколькими улицами с односторонним движением и отсутствием большой парковки поблизости, так что это должно быть интересной задачей.

  1. Запрос 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"
      }
    }
  ]
}

Как видите, координаты действительно указывают на Нотр-Дам.

Notre Dame entrance photoMap of Notre Dame area

Разработчикам или поставщикам услуг рекомендуется автоматически подсказывать водителю: «Ищете парковку возле Нотр-Дама?» или если у водителя есть электромобиль, возможно, вам стоит поискать зарядную станцию. Пользовательский опыт будет различаться в зависимости от устройства и экрана, но в этом случае стоит рассмотреть тонкий диалоговый текст, который исчезает через короткое время. Чтобы найти парковку возле Нотр-Дама, выполните поиск поблизости 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 маршрутов.

  1. **Запрос 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 минутах, от Нотр-Дама.

Directions to Notre Dame

Пешеходный маршрут от парковки зарядной станции до Нотр-Дама

Резюме для примера 1

Как видите, для поиска места для парковки автомобиля требуется всего лишь несколько вызовов API и отображение предложения водителю. Это экономит время ваших пользователей, поскольку они не ездят по улицам с односторонним движением и не пытаются найти место, где можно оставить машину, в многолюдной туристической достопримечательности. Подводя итог, мы выполнили следующие запросы API:

  • Текстовый поисковый запрос API Places для поиска координат Нотр-Дама
  • API-интерфейс Places выполняет поиск поблизости, чтобы найти парковку со станцией зарядки электромобилей в пределах 500 метров от этих координат.
  • Запрос API маршрутов для поиска маршрута к зарядной станции

Пример 2. Сопровождение к терминалу крупного аэропорта.

Map of Heathrow airport

Рассмотрим другой пример, когда водитель пытается добраться до большой территории с множеством мест, 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).

Terminal 5 Street View

Резюме для примера 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