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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  3. Навигационный SDK извлекает маршрут или, если маршрут недоступен из-за изменившихся условий, извлекает наиболее подходящий маршрут.

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

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

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

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

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

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

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

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

    • API маршрутов : computeRoutes . Для получения дополнительной информации о запросе токена маршрута в API маршрутов см. Вычисление маршрута и Запрос токена маршрута .

    • Routes Preferred API : computeCustomRoutes . Для получения дополнительной информации о запросе маркера маршрута в Routes Preferred API см. раздел Планирование маршрута .

    • Route Optimization API : optimizeTours или batchOptimizeTours . Для получения дополнительной информации о запросе токена маршрута в Route Optimization API см. Transition Polylines and Route Tokens .

  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 настройте строку для сохранения токена маршрута. Например:

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

Метод Navigator.setDestinations возвращает статус запроса. Если маршрут найден от местоположения пользователя до указанного пункта назначения, он возвращает RouteStatus.OK .

Более подробную информацию об этом методе см. в GMSNavigator.setDestinations .

Пример

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

Быстрый

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

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

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

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

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

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

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

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

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

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