Иногда вам может понадобиться спланировать маршрут, который будет предлагаться пользователям в вашем приложении. Используя токен маршрута из 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, как описано ниже.
Шаг 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 в соответствии с требованиями к использованию токена маршрута:
- Установите для параметра
travel_modeзначениеDRIVEилиTWO_WHEELER. - Установите для параметра
routing_preferenceзначение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 необходимо скорректировать возвращенный маршрут, он использует цели маршрута, указанные при запросе токена маршрута. Поэтому вам следует использовать те же параметры, связанные с путевыми точками, которые вы указали в Routes API.