Иногда вам может потребоваться спланировать маршрут, который ваше приложение предоставляет пользователям. Используя токен маршрута из 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, чтобы указать, как он должен прокладывать маршрут для вашего транспортного средства.
Вот что происходит, когда вы запрашиваете и используете токен маршрута:
Routes API, Routes Preferred API или Route Optimization API возвращает зашифрованный токен маршрута, который включает ломаную линию маршрута и цели маршрута.
Вы передаете токен маршрута в Navigation SDK.
Navigation SDK запускает навигацию по запланированному маршруту, даже если доступен более быстрый маршрут.
Если во время поездки меняются условия дорожного движения или автомобиль съезжает с запланированного маршрута, Navigation SDK рассчитывает новый маршрут, соответствующий целям и параметрам, заданным в токене маршрута.
Это позволяет максимально приблизить фактический маршрут к запланированному.
Почему запланированный маршрут может не соблюдаться в точности
Навигация начинается по запланированному маршруту, но фактический маршрут может отличаться от него в следующих ситуациях:
- Транспортное средство начинает движение не из запланированной начальной точки.
- Дорожные условия или ситуация на дорогах изменились во время поездки.
- Транспортное средство отклоняется от запланированного маршрута.
Эти различия могут повлиять на расстояние, расчетное время прибытия и другие важные характеристики поездки, которые вы запланировали.
Как спланировать маршрут с помощью токена маршрута
Чтобы спланировать маршрут, создайте токен маршрута и передайте его в Navigation SDK, как описано ниже.
Шаг 1. Создайте токен маршрута с помощью Routes API, Routes Preferred API или Route Optimization API
Запросите токен маршрута одним из следующих способов:
Routes API:
computeRoutes. Подробнее о том, как запросить токен маршрута в Routes API, рассказывается в статьях Расчет маршрута и Получение токена маршрута.Routes Preferred API:
computeCustomRoutes. Подробнее о том, как запросить токен маршрута в Routes Preferred API…Route Optimization API:
optimizeToursилиbatchOptimizeTours. Подробнее о том, как запросить токен маршрута в Route Optimization API, рассказывается в статье Ломаные линии переходов и токены маршрутов.
Настройте запрос Routes API или Routes Preferred API в соответствии с требованиями для использования токена маршрута:
- Присвойте
travelModeзначениеDRIVEилиTWO_WHEELER. - Присвойте
routingPreferenceзначениеTRAFFIC_AWAREилиTRAFFIC_AWARE_OPTIMAL. - Не используйте путевые точки
Via.
- Присвойте
Шаг 2. Передайте токен маршрута в Navigation SDK
Сохраните токен маршрута. В Navigation SDK настройте строку для хранения токена маршрута. Пример:
let routeToken = "route token returned by Routes API"Пример возвращенного токена маршрута:
{ // Other fields "routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g", }Передайте токен маршрута в 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 обрабатывает запланированный маршрут:
Переопределяет все ранее заданные целевые страницы.
Использует начальное местоположение автомобиля.
Учитывает состояние дорог и загруженность трафика. Подробнее о том, почему маршрут может не соблюдаться в точности…
Использует параметры маршрутизации, заданные в токене маршрута, а не следующие настройки в приложении, в том числе при расчете нового маршрута во время поездки:
avoidsHighwaysavoidsTollsavoidsFerrieslicensePlateRestriction- режим передвижения, заданный в приложении;
Учитывает эти настройки при расчете или корректировке маршрута:
Цели маршрута из токена маршрута, например экологичный или кратчайший маршрут. Если Navigation SDK нужно скорректировать маршрут, он использует цели маршрута, которые вы указали при запросе токена маршрута.
Настройки путевых точек из вашего приложения, например предпочтительная сторона дороги. Используйте те же параметры, связанные с путевыми точками, которые вы указали при запросе токена маршрута.