Navigation SDK для iOS предлагает расширенные возможности указания путевых точек, или точек навигации, что позволяет точнее прокладывать маршруты и упрощает прибытие в пункт назначения, особенно если у него несколько входов или определенные точки навигации. Вы можете прокладывать маршруты к точным местоположениям, используя navigationPointToken – строку, в которой закодировано местоположение и дополнительный контекст маршрута. Вы также можете объединить координаты широты и долготы с идентификатором места, чтобы добавить контекст.
Фон
До версии 10.10 вы могли задать Waypoint, используя координаты местоположения или идентификатор места. Хотя иногда это эффективно, маршрутизация исключительно по широте и долготе может привести к неоптимальным точкам высадки или посадки, особенно для больших площадок, парков или зданий с несколькими входами. Результат может быть привязан к ближайшему сегменту дороги, который может не быть наиболее удобной или правильной точкой доступа.
Расширенные параметры путевых точек позволяют предоставить больше контекста.
Как использовать токен точки навигации
Чтобы проложить маршрут к определенной точке, например входу, погрузочной платформе или зоне посадки, используйте navigationPointToken.
Этот токен можно получить, вызвав метод Destinations в Geocoding API. Она представляет собой конкретную точку навигации, связанную с местом.
Чтобы указать токен точки навигации, выполните следующие действия:
Получите
navigationPointTokenиз ответа методаSearchDestinationsGeocoding API.Укажите
navigationPointTokenпри созданииGMSNavigationWaypoint.
Swift
// Create a waypoint using a navigation endpoint token
let waypointTwo = GMSNavigationWaypoint(
navigationPointToken: "ChIJALijSXPhQkARHmIozCCbXsASEgkFVjYHGH6PgBFrbM7wl3..",
title: "Sydney Opera House")
// Route to the waypoint
navigator.setDestinations([waypointTwo]) { [weak self] routeStatus in
self?.handleRouteCallback(status: routeStatus)
}
Objective-C
GMSNavigationWaypoint *waypointTwo =
[[GMSNavigationWaypoint alloc] initWithNavigationPointToken:@"sampleNavigationPointToken"
title:@"Sydney Opera House"];
Как использовать токены точек навигации и маршрутов
Вы можете получить токен точки навигации через Geocoding API, использовать его в запросе Routes API, чтобы получить токен маршрута, а затем передать в Navigation SDK только токен маршрута. Токен маршрута сохраняет точность токена точки навигации. Это полезно, например, при совместных поездках или доставке, когда вы используете Routes API для расчета стоимости поездки и вам нужна точность токена точки навигации.
С помощью токена маршрута Navigation SDK запускает навигацию по тому же маршруту, который вы использовали для расчета цены. Это снижает риск того, что для поездки будут использоваться более длинные или короткие маршруты, что может привести к "ценовым шокам".
Дополнительную информацию о токенах точек навигации и маршрутов в Routes API можно найти в статьях Как указать местоположения для маршрута и Как получить токен маршрута. Подробнее о том, как планировать маршруты с помощью токенов…
На следующей диаграмме показано, как приложение для совместных поездок или доставки использует токены точек навигации и токены маршрутов. Начиная с версии 11.3 приложение водителя передает в Navigation SDK на шаге 7 только токен маршрута.
Объединение идентификатора места и местоположения
Начиная с версии 10.10 при создании путевой точки можно указывать и идентификатор места, и координаты. Этот метод полезен, когда нужно указать точную точку (местоположение), но при этом предоставить контекст всего места (идентификатор места). Это позволяет Navigation SDK предоставлять более подробную информацию о прибытии, выделяя здание пункта назначения или показывая близлежащие достопримечательности, связанные с идентификатором места.
Swift
// Create a waypoint using both the latlng and placeID
let waypoint = GMSNavigationWaypoint(
location: CLLocationCoordinate2DMake(-33.85657945261524, 151.21535034203333),
placeID: "ChIJ3S-JXmauEmsRUcIaWtf4MzE",
title: "Sydney Opera House")
// Route to the waypoint
navigator.setDestinations([waypoint]) { [weak self] routeStatus in
self?.handleRouteCallback(status: routeStatus)
}
Objective-C
CLLocationCoordinate2D location = CLLocationCoordinate2DMake(47.67, -122.20);
GMSNavigationWaypoint *waypoint = [[GMSNavigationWaypoint alloc] initWithLocation:placeID:coordinate title:@"waypoint from location and placeiD"];
Примечания
Если вы укажете и placeID, и location:
- Маршрут в основном нацелен на указанный
location. placeIDпредоставляет контекст, который помогает пользователю сориентироваться на месте.- Резервный вариант. Если SDK определяет, что указанный идентификатор
placeIDсоответствует объекту, который находится слишком далеко от заданного значенияlocation, то идентификаторplaceIDигнорируется. В этом случае маршрут будет проложен только доlocation, а улучшенные функции прибытия в место назначения будут недоступны.
Сводка допустимых конфигураций путевых точек
| Спецификация | location |
placeID |
navigationPointToken |
Поведение маршрутизации | Выделение пункта назначения |
|---|---|---|---|---|---|
| Только координаты местоположения | set | Отсутствует | Отсутствует | Маршруты до сегмента дороги, ближайшего к заданным координатам. | Показывается, если пункт назначения можно определить с высокой точностью. |
| Только идентификатор места | Отсутствует | set | Отсутствует | Маршруты к точке навигации по умолчанию для идентификатора места. | Идентификатор места отправления |
| Только токен точки навигации | Отсутствует | Отсутствует | set | Маршруты к точной точке навигации, представленной токеном. | Пункт назначения, указанный в исходном запросе destinations метода Geocoding API. |
| Координаты местоположения и идентификатор места | set | set | Отсутствует | Маршруты до сегмента дороги, ближайшего к заданным координатам. | Из идентификатора места, если он не слишком далеко от координат широты и долготы. |