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

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

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

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

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

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

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

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

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

Дополнительную информацию о планировании маршрута с использованием токена маршрута см. в разделах Запрос токена маршрута в API маршрутов и Полилинии перехода и токены маршрута в API оптимизации маршрутов.

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

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

  • Заранее спланируйте маршрут, который будет использоваться навигационным 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. Навигационный SDK извлекает маршрут или, если маршрут недоступен из-за изменившихся условий, извлекает наиболее подходящий маршрут.

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

Этот процесс максимально приближает реальный маршрут к запланированному.

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

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

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

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

Шаг 1: Создайте токен маршрута с помощью API маршрутов, API предпочтительных маршрутов или API оптимизации маршрутов.

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

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

    • Установите travel_mode на DRIVING или TWO_WHEELER
    • Установите для routing_preference значение TRAFFIC_AWARE или TRAFFIC_AWARE_OPTIMAL
    • НЕ используйте точки маршрута Via

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

  1. Сохранение токена маршрута : в Navigation SDK настройте строку для хранения токена маршрута. Например:

    String routeToken = "route token returned by Routes API";

    Пример возвращаемого токена маршрута:

    {
    // Other fields
    "routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g",
    }
    
  2. Передайте токен маршрута в 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);

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

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

  • Переопределяет все ранее установленные пункты назначения.

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

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

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

    • avoidsHighways
    • avoidsTolls
    • avoidsFerries
    • licensePlateRestriction
  • Следует :

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

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