Спланировать маршрут

Иногда вам может потребоваться спланировать маршрут, который ваше приложение предоставляет пользователям. Использование токена маршрута из Routes API, Routes Preferred API или Route Optimization API может помочь вам указать две вещи для запланированного маршрута:

  • Полилиния для маршрута

  • Цели вашего маршрута

Например, вот несколько примеров целей маршрутизации, которые могут у вас быть:

  • Минимизация времени доставки : Компания, занимающаяся доставкой еды, может стремиться минимизировать время, необходимое для доставки заказов.

  • Минимизация времени в пути или расхода топлива : логистическая компания может стремиться повысить эффективность работы своих водителей и снизить затраты на топливо.

  • Минимизация времени в пути : диспетчерская служба может стремиться минимизировать время, необходимое для доставки операторов к месту выполнения запроса.

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

Для получения дополнительной информации о планировании маршрута с использованием токена маршрута см. раздел «Запрос токена маршрута» в API маршрутов и «Полилинии переходов и токены маршрута» в API оптимизации маршрутов.

Зачем использовать токен маршрута для обозначения целей маршрута?

Используя токен маршрута из Routes API, Routes Preferred API или Route Optimization API, вы получаете больший контроль над предоставляемым маршрутом:

  • По возможности, заранее спланируйте маршрут , который будет использоваться навигационным SDK.

  • Выберите оптимальный маршрут для использования SDK навигации . Если вы запрашиваете токены маршрута при генерации маршрутов в API маршрутов, вы получаете токен маршрута для каждого сгенерированного маршрута. Затем вы можете выбрать токен для маршрута, который хотите использовать, при передаче его в SDK навигации.

  • Заранее оцените стоимость поездки , включая предполагаемое время прибытия и расстояние. Хотя фактическая стоимость и время могут отличаться, такая оценка сократит разрыв между ожидаемой и фактической стоимостью маршрута.

  • Укажите более сложные цели построения маршрута , такие как экономичный маршрут или кратчайший путь.

Как работают маршрутные токены

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

Вот что происходит, когда вы запрашиваете и используете токен маршрута:

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

  2. Вы передаете токен маршрута в SDK навигации.

  3. SDK навигации получает маршрут, или, если маршрут недоступен из-за изменившихся условий, он получает наиболее подходящий маршрут.

  4. В процессе движения по маршруту, если меняются дорожные условия, например, интенсивность движения или другие факторы, или если транспортное средство отклоняется от запланированного маршрута, измененные маршруты постоянно пытаются подобрать оптимальный маршрут, исходя из целей маршрута, указанных в токене.

Этот процесс позволяет максимально приблизить фактический маршрут к запланированному.

Почему запланированный маршрут может быть не соблюден в точности

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

Спланируйте маршрут, используя токен маршрута.

Вы можете спланировать маршрут, создав токен маршрута и передав его в SDK навигации, как описано в следующих шагах:

Шаг 1: Создайте токен маршрута, используя API маршрутов, API предпочтительных маршрутов или API оптимизации маршрутов.

  1. Запросите токен маршрута одним из следующих способов:

  2. Настройте запрос к Routes API или Routes Preferred API в соответствии с требованиями для использования токена маршрута:

    • Установите travel_mode в DRIVING или TWO_WHEELER
    • Установите routing_preference в TRAFFIC_AWARE или TRAFFIC_AWARE_OPTIMAL
    • НЕ используйте Via точки.

Шаг 2: Передайте токен маршрута в SDK навигации.

  1. Сохранение токена маршрута : В SDK навигации укажите строку для хранения токена маршрута. Например:

    let routeToken = "route token returned by Routes API"
    

    Пример возвращенного токена маршрута:

    {
    // Other fields
    "routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g",
    }
    
  2. Передайте токен маршрута в SDK навигации, используя метод mapView.navigator setDestinations , указав те же путевые точки назначения, которые вы использовали при создании токена маршрута:

    mapView.navigator?.continueToNextDestination([waypoint1, waypoint2], routeToken: routeToken, callback: {...})
    

    Метод Navigator.continueToNextDestination возвращает статус запроса. Если маршрут от местоположения пользователя до указанного пункта назначения найден, он возвращает RouteStatus.OK .

Сценарии с несколькими остановками

Вы можете настроить максимум 25 путевых точек.

Метод setDestinations не поддерживает маршруты с несколькими остановками. Используйте continueToNextDestination() для перехода к следующему участку маршрута.

Пример

Приведенные ниже примеры кода демонстрируют, как получить запланированный маршрут.

Быстрый

let location = CLLocationCoordinate2D(latitude: 47.67, longitude: -122.20)
let waypoint1 = GMSNavigationWaypoint(location: location, title: "waypoint from location")!
let waypoint2 = GMSNavigationWaypoint(placeID: "samplePlaceID", title: "waypoint from Place ID")!

let routeToken = "route token returned by Routes API"
mapView.navigator?.setDestinations([waypoint1, waypoint2], routeToken: routeToken, callback: {...})

Objective-C

CLLocationCoordinate2D location = CLLocationCoordinate2DMake(47.67, -122.20);
GMSNavigationWaypoint *waypoint1 = [[GMSNavigationWaypoint alloc] initWithLocation:coordinate title:@"waypoint from location"];
GMSNavigationWaypoint *waypoint2 = [[GMSNavigationWaypoint alloc] initWithPlaceID:@"samplePlaceID"
                                                                            title:@"waypoint from Place ID"];
NSString *routeToken = @"route token returned by Routes API";

[mapView.navigator continueToNextDestination:@[waypoint1, waypoint2]
                         routeToken:routeToken
                           callback:^(GMSRouteStatus routeStatus){...}];

Как взаимодействуют токены маршрута и SDK навигации

Вот как взаимодействуют маршрут, сгенерированный Navigation SDK, и запланированный маршрут в токене маршрута:

  • Заменяет любые ранее установленные пункты назначения.

  • Использует место старта транспортного средства.

  • Учитывает дорожные и транспортные условия. См. раздел «Почему запланированный маршрут может быть пройден не совсем точно» .

  • Следующие параметры, связанные с маршрутизацией, игнорируются как ненужные:

    • avoidsHighways
    • avoidsTolls
    • avoidsFerries
    • licensePlateRestriction
  • Подписчики :

    • Параметры, связанные с путевой точкой , например, предпочтительное направление движения по дороге.

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