Построй маршрут

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

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

  • Цели маршрута

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

  • Минимизация времени доставки. Например, компания, доставляющая еду, может стремиться минимизировать время доставки.

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

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

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

Дополнительную информацию о планировании маршрута с помощью токена маршрута можно найти в разделе Получение токена маршрута в Routes API и Переходные ломаные линии и токены маршрутов в Route Optimization API.

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

Токен маршрута из Routes API, Routes Preferred API или Route Optimization API позволяет лучше контролировать маршрут:

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

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

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

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

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

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

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

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

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

  3. Navigation SDK запускает навигацию по запланированному маршруту, даже если доступен более быстрый маршрут.

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

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

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

Навигация начинается по запланированному маршруту, но фактический маршрут может отличаться от него в следующих ситуациях:

  • Транспортное средство начинает движение не из запланированной начальной точки.
  • Дорожные условия или ситуация на дорогах изменились во время поездки.
  • Транспортное средство отклоняется от запланированного маршрута.

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

Как спланировать маршрут с помощью токена маршрута

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

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

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

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

    • Присвойте travelMode значение DRIVE или TWO_WHEELER.
    • Присвойте routingPreference значение TRAFFIC_AWARE или TRAFFIC_AWARE_OPTIMAL.
    • Не используйте путевые точки Via.

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

  1. Сохраните токен маршрута. В Navigation 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: {...})
    

    Метод setDestinations передает статус запроса в функцию обратного вызова. Если маршрут от местоположения пользователя до указанного пункта назначения найден, статус будет .OK (GMSRouteStatusOK).

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

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

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

Пример

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

Swift

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

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

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

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

    • avoidsHighways
    • avoidsTolls
    • avoidsFerries
    • licensePlateRestriction
    • режим передвижения, заданный в приложении;
  • Учитывает эти настройки при расчете или корректировке маршрута:

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

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