Иногда вам может потребоваться спланировать маршрут, который ваше приложение предоставляет пользователям. Использование токена маршрута из Routes API, Routes Preferred API или Route Optimization API может помочь вам указать две вещи для запланированного маршрута:
Полилиния для маршрута
Цели вашего маршрута
Например, вот несколько примеров целей маршрутизации, которые могут у вас возникнуть:
Минимизируйте время доставки . Компания, занимающаяся доставкой еды, может захотеть минимизировать время, необходимое для ее доставки.
Минимизируйте время в пути или расход топлива . Логистический бизнес может захотеть повысить эффективность работы своих водителей и снизить затраты на топливо.
Минимизировать время доставки к месту назначения . Операция по отправке услуг может захотеть минимизировать время, необходимое для доставки операторам запроса на задание.
Снижение затрат и повышение безопасности . Компания, занимающаяся совместными поездками, может захотеть найти маршрут, который будет дешевле для пассажиров и избегает определенных зон по соображениям безопасности.
Дополнительные сведения о планировании маршрута с использованием токена маршрута см. в разделах Запрос токена маршрута в API маршрутов и Полилинии перехода и токены маршрута в API оптимизации маршрута.
Зачем использовать токен маршрута для целей маршрута
С помощью токена маршрута из Routes API, Routes Preferred API или Route Optimization API вы получаете больший контроль над предоставленным маршрутом:
Заранее спланируйте маршрут , чтобы навигационный SDK мог его использовать, когда это возможно.
Выберите лучший маршрут для использования Navigation SDK . Если вы запрашиваете токены маршрута при создании маршрутов в Routes API, вы получаете токен маршрута для каждого сгенерированного маршрута. Затем вы можете выбрать токен для маршрута, который хотите использовать, при передаче его в Navigation SDK.
Оцените цену заранее , включая примерное расчетное время прибытия и расстояние. Хотя фактическая стоимость и время могут различаться, эта оценка уменьшает разрыв между ожидаемой и фактической стоимостью маршрута.
Укажите более сложные цели маршрута , например экологический маршрут или кратчайший маршрут.
Как работают токены маршрутов
Вы можете использовать Routes API, Routes Preferred API или Route Optimization API для планирования маршрута с использованием целей маршрута. Вы можете передать токен маршрута, возвращенный любым из этих API, в навигационный SDK, чтобы указать маршрут вашего автомобиля.
Вот что происходит, когда вы запрашиваете и используете токен маршрута:
Routes API, Routes Preferred API или Route Optimization API возвращают зашифрованный токен маршрута, который включает полилинию маршрута и цели маршрута.
Вы передаете токен маршрута в навигационный SDK.
Navigation SDK извлекает маршрут, а если маршрут недоступен из-за изменения условий, он извлекает наиболее подходящий маршрут.
Во время движения по маршруту, если движение транспорта или другие дорожные условия меняются или транспортное средство отклоняется от запланированного маршрута, измененные маршруты постоянно пытаются подобрать лучший маршрут на основе целей маршрута в маркере.
Этот процесс максимально увеличивает степень близости фактического маршрута к запланированному.
Почему запланированный маршрут может быть выполнен не совсем точно
Рассматривайте запланированный маршрут и цели маршрута как рекомендации, которым нужно следовать: они не носят предписывающий характер. Вы можете увидеть разницу между запланированным маршрутом и маршрутом, предоставленным управляемой навигацией, из-за различий в дорожных условиях, начальной позиции или других параметрах, которые изменились с момента создания запланированного маршрута. Эта разница может привести к несоответствию между запланированными и фактическими целями по расстоянию и расчетному времени прибытия, а также к другим важным характеристикам поездки.
Планирование маршрута с использованием маркера маршрута
Вы можете спланировать маршрут, создав токен маршрута и затем передав его в Navigation SDK, как описано в следующих шагах:
Шаг 1. Создайте токен маршрута с помощью Routes API, Routes Preferred API или API оптимизации маршрутов.
Запросите токен маршрута одним из следующих методов:
API маршрутов :
computeRoutes
. Дополнительные сведения о запросе токена маршрута в API маршрутов см. в разделах Вычисление маршрута и Запрос токена маршрута .Предпочитаемый API маршрутов :
computeCustomRoutes
. Дополнительные сведения о запросе токена маршрута в API-интерфейсе Routes Preferred см. в разделе Планирование маршрута .API оптимизации маршрутов :
optimizeTours
илиbatchOptimizeTours
. Дополнительные сведения о запросе токена маршрута в API оптимизации маршрута см. в разделе «Лилинии перехода и токены маршрута» .
Настройте запрос Routes API или Routes Preferred API, чтобы он соответствовал требованиям для использования токена маршрута:
- Установите для
travel_mode
значениеDRIVING
илиTWO_WHEELER
- Установите для
routing_preference
TRAFFIC_AWARE
илиTRAFFIC_AWARE_OPTIMAL
- НЕ используйте путевые точки
Via
.
- Установите для
Шаг 2. Передайте токен маршрута в навигационный SDK.
Сохраните токен маршрута . В навигационном SDK настройте строку для хранения токена маршрута. Например:
String routeToken = "route token returned by Routes API";
Пример возвращаемого токена маршрута:
{ // Other fields "routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g", }
Передайте токен маршрута в Navigation SDK с помощью метода
Navigator.setDestinations
, указав те же путевые точки пункта назначения, которые вы использовали при создании токена маршрута:setDestinations(List
destinations, CustomRoutesOptions customRoutesOptions, DisplayOptions displayOptions); Например:
CustomRoutesOptions customRoutesOptions = CustomRoutesOptions.builder() .setRouteToken(routeToken) .setTravelMode(TravelMode.DRIVING) .build();
Метод Navigator.setDestinations
возвращает статус запроса. Если он находит маршрут от местоположения транспортного средства до заданного пункта назначения, он возвращает RouteStatus.OK
.
Дополнительные сведения об этом методе см. в разделе Navigator.setDestinations
.
Пример
В следующем примере кода показано, как указать запланированный маршрут с помощью токена маршрута.
ArrayList <Waypoint> destinations = Lists.newArrayList();
Waypoint waypoint1 =
Waypoint.builder()
.setLatLng(10, 20)
.setTitle("title")
.setVehicleStopover(true)
.build();
destinations.add(waypoint1);
Waypoint waypoint2 =
Waypoint.builder()
.setPlaceId("ChIJYV-J-ziuEmsRIMyoFaMedU4")
.setTitle("title")
.setVehicleStopover(true)
.build()
destinations.add(waypoint2);
String routeToken = "route token returned by Routes API";
CustomRoutesOptions customRoutesOptions =
CustomRoutesOptions.builder()
.setRouteToken(routeToken)
.setTravelMode(TravelMode.DRIVING)
.build();
// Existing flow to get a Navigator.
NavigationApi.getNavigator(...);
// Existing flow for requesting routes.
ListenableResultFuture<RouteStatus> routeStatusFuture =
navigator.setDestinations(destinations, customRoutesOptions);
// Or with display options.
DisplayOptions displayOptions = new DisplayOptions();
ListenableResultFuture<RouteStatus> routeStatusFuture =
navigator.setDestinations(destinations, customRoutesOptions, displayOptions);
Как взаимодействуют токены маршрутов и навигационный SDK
Вот как взаимодействуют маршрут, созданный Navigation SDK, и запланированный маршрут в токене маршрута:
Отменяет любые ранее установленные пункты назначения.
Использует стартовую локацию автомобиля.
Адаптируется к дорожным условиям и дорожным условиям. См . раздел «Почему запланированный маршрут может быть не выполнен точно» .
Игнорирует следующие параметры маршрутизации как ненужные:
-
avoidsHighways
-
avoidsTolls
-
avoidsFerries
-
licensePlateRestriction
-
Далее следует :
Опции, связанные с маршрутными точками , такие как предпочтение обочины дороги.
Цели маршрута . Если навигационному SDK необходимо скорректировать возвращенный маршрут, он использует цели маршрута, указанные вами при запросе токена маршрута. По этой причине вам следует использовать те же параметры, связанные с путевой точкой, которые вы указали в Routes API.