Navigation SDK для iOS предлагает расширенные возможности указания путевых точек или точек навигации, обеспечивая более точную маршрутизацию и более удобное прибытие, особенно для пунктов назначения с несколькими входами или определенными точками навигации. Вы можете прокладывать маршруты к точным местоположениям, используя navigationPointToken – строку, в которой закодировано местоположение и дополнительный контекст маршрута. Вы также можете объединить координаты широты и долготы с идентификатором места, чтобы добавить контекст.
Фон
До версии 10.10 вы могли задавать Waypoint с помощью координат или идентификатора места. Хотя иногда это эффективно, маршрутизация исключительно по широте и долготе может привести к неоптимальным точкам высадки или посадки, особенно для больших площадок, парков или зданий с несколькими входами. Результат может быть привязан к ближайшему сегменту дороги, который может не быть наиболее удобной или правильной точкой доступа.
Расширенные параметры путевых точек позволяют решить эту проблему, предоставляя больше контекста.
Как использовать токен точки навигации
Чтобы построить наиболее точный маршрут к определенным точкам доступа, например входам, погрузочным платформам или зонам посадки, можно использовать navigationPointToken.
Этот токен можно получить, вызвав метод Destinations в Geocoding API. Она представляет собой конкретную точку навигации, связанную с местом.
Чтобы указать токен точки навигации, выполните следующие действия:
Получите
navigationPointTokenиз ответа метода Destinations в Geocoding 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. Чтобы узнать, как спланировать маршрут с помощью токена маршрута, ознакомьтесь с разделом Планирование маршрута.
На этой диаграмме показано, как приложение для совместных поездок или доставки использует токены точек навигации и токены маршрутов:
Объединение идентификатора места и местоположения
Начиная с версии 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. |
| Координаты местоположения и идентификатор места | se | set | отсутствует | Маршруты до сегмента дороги, ближайшего к заданным координатам. | Из идентификатора места, если он не слишком далеко от координат широты и долготы. |