Маршрут до точек навигации

Navigation SDK для iOS предлагает расширенные возможности указания путевых точек или точек навигации, обеспечивая более точную маршрутизацию и более удобное прибытие, особенно для пунктов назначения с несколькими входами или определенными точками навигации. Вы можете прокладывать маршруты к точным местоположениям, используя navigationPointToken – строку, в которой закодировано местоположение и дополнительный контекст маршрута. Вы также можете объединить координаты широты и долготы с идентификатором места, чтобы добавить контекст.

Фон

До версии 10.10 вы могли задавать Waypoint с помощью координат или идентификатора места. Хотя иногда это эффективно, маршрутизация исключительно по широте и долготе может привести к неоптимальным точкам высадки или посадки, особенно для больших площадок, парков или зданий с несколькими входами. Результат может быть привязан к ближайшему сегменту дороги, который может не быть наиболее удобной или правильной точкой доступа.

Расширенные параметры путевых точек позволяют решить эту проблему, предоставляя больше контекста.

Как использовать токен точки навигации

Чтобы построить наиболее точный маршрут к определенным точкам доступа, например входам, погрузочным платформам или зонам посадки, можно использовать navigationPointToken.

Этот токен можно получить, вызвав метод Destinations в Geocoding API. Она представляет собой конкретную точку навигации, связанную с местом.

Чтобы указать токен точки навигации, выполните следующие действия:

  1. Получите navigationPointToken из ответа метода Destinations в Geocoding API.

  2. Укажите 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 отсутствует Маршруты до сегмента дороги, ближайшего к заданным координатам. Из идентификатора места, если он не слишком далеко от координат широты и долготы.