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

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

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

System diagram

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

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

Выберите место, которое не имеет прямого выхода к обочине дороги, чтобы маршрут пришлось искать отдельно. Пунктом назначения будет Собор Парижской Богоматери в Париже, а в качестве отправной точки мы будем использовать железнодорожный вокзал Gare de l'Est (48.87697775149635, 2.3592247806755564).

Gare l'Est

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

1. Запрос API мест

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

Запросы 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, используя типы «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 Routes.

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

Чтобы найти маршрут от станции до зарядной станции рядом с Нотр-Дамом, необходимо выполнить запрос к API Routes. Просто укажите параметры отправной точки и пункта назначения. Дополнительные параметры см. в документации разработчика .

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» последнего шага последнего этапа выбранного маршрута. «latitude»: 48.854937299999996, «longitude»: 2.3505841999999997

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

Directions to Notre Dame

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

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

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

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

Пример 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

Запрос выше выдаёт список терминалов и отдельных мест высадки в этих терминалах. В списке результатов мы находим «London Heathrow Airport Terminal 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 Routes для получения маршрута от Уэмбли до терминала 5

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

Заключение

Как вы видите, усилия по разработке, необходимые для предоставления первоклассного сервиса вашим клиентам, путешествующим на автомобиле, довольно невелики, и вы можете продемонстрировать, как вы думаете о потребностях своих клиентов.

Для разработки вы можете использовать множество доступных библиотек и инструментов, которые помогут вам создавать сервисы для ваших клиентов. Ознакомьтесь с нашим общедоступным репозиторием GitHub для платформы Google Карт .

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

Начало работы с GMP: https://developers.google.com/maps/get-started

Рекомендуемая дополнительная литература

Документация по автозаполнению API Places (новая): https://developers.google.com/maps/documentation/places/web-service/place-autocomplete

Документация API маршрутов: https://developers.google.com/maps/documentation/routes

Авторы

Основной автор: Микко Тойванен | Инженер по решениям платформы Google Maps