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

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

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

System diagram

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

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

Выберите место, не имеющее прямого соединения с дорогой, чтобы маршрут нужно было прокладывать отдельно. Пункт назначения — собор Нотр-Дам в Париже, а в качестве отправной точки мы будем использовать железнодорожный вокзал Гар де л'Эст (48.87697775149635, 2.3592247806755564).

Gare l'Est

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

1. Запрос к API Places

В этом примере запроса к API Places используется текстовый поиск для нахождения Нотр-Дама. Подробности см. в документации для разработчиков . "$APIKEY" в этих примерах — это ключ API, который у вас есть для API Places и Routes платформы Google Maps, включенных в консоли Google Cloud. Более подробное объяснение см. в документации по началу работы с платформой Google Maps .

Запросы к новому API Places имеют новый формат. Поля ответа больше не фиксированы, и разработчику необходимо определить маску поля в заголовке. Использование маски поля описано в документации .

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

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

2. Запрос к API маршрутов

Чтобы найти маршрут от станции до зарядной станции рядом с Нотр-Дамом, необходимо выполнить запрос к 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" в fieldmask. Каждый маршрут состоит из нескольких "участков", каждый из которых содержит несколько "шагов", показывающих пройденное расстояние и координаты. Чтобы найти конечные координаты, до которых можно добраться на автомобиле, используйте поле "endLocation" последнего шага последнего участка выбранного вами маршрута. "широта": 48.854937299999996, "долгота": 2.3505841999999997

Возможно, это место покажется не самым лучшим вариантом, но если вы посмотрите на карту или Google Street View, то увидите, что оно находится в нескольких минутах ходьбы от Нотр-Дама, примерно в 6-7 минутах.

Directions to Notre Dame

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

Краткое изложение примера 1

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

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

Пример 2. Как добраться до терминала в крупном аэропорту.

Map of Heathrow airport

Рассмотрим другой пример, когда водитель пытается добраться до большой территории, на которой расположено множество мест, точек интереса или потенциальных мест высадки. Водитель выезжает со стадиона Уэмбли, Великобритания (51.557263604707224, -0.2794575145680608) и пытается добраться до терминала 5 лондонского аэропорта Хитроу .

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

curl -X POST -d '{
  "input": "Heathrow",
  "includedPrimaryTypes": ["airport", "parking"]
}' \
-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 Platform .

Следующие действия

Начало работы с 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