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

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

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

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

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

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

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

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

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

Дополнительные сведения о планировании маршрута с использованием токена маршрута см. в разделе Запрос токена маршрута .

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

С помощью токена маршрута из Routes или Routes Preferred API вы получаете больше контроля над предоставляемым маршрутом:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Планирование маршрута с использованием маркера маршрута

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

Шаг 1. Создайте токен маршрута с помощью API Routes или Routes Preferred API.

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

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

    • Установите для travel_mode значение DRIVING
    • Установите 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. Передайте токен маршрута в Navigation SDK с помощью метода mapView.navigator setDestinations , указав те же путевые точки пункта назначения, которые вы использовали при создании токена маршрута:

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

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

Дополнительные сведения об этом методе см. в Navigator.setDestinations .

Пример

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

Быстрый

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: {...})

Цель-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 setDestinations:@[waypoint1, waypoint2]
                         routeToken:routeToken
                           callback:^(GMSRouteStatus routeStatus){...}];

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

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

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

  • Использует стартовую локацию автомобиля.

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

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

    • avoidsHighways
    • avoidsTolls
    • avoidsFerries
    • licensePlateRestriction
  • Далее следует :

    • Опции, связанные с путевыми точками , такие как предпочтение обочины дороги.

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