При расчете маршрутов (в том числе при перерасчете) в качестве лучшего маршрута по умолчанию возвращается маршрут, навигация по которому занимает меньше всего времени. Но вы можете изменить стратегию маршрутизации, чтобы вместо этого возвращался более короткий из альтернативных маршрутов.
Более короткий – это самый короткий из оптимальных маршрутов, рассчитанных на основе нашей модели стоимости по умолчанию. Более короткий маршрут может не быть абсолютно самым коротким, поскольку такой вариант может быть неудобным. Например, если самый короткий маршрут составляет 10 км и занимает 50 минут, а другой маршрут – 15 км, но занимает всего 20 минут, то второй вариант является оптимальным, поскольку тратить 30 минут, чтобы сократить путь на 5 км, нецелесообразно.
После того как вы зададите стратегию маршрутизации для поездки, она не изменится до завершения поездки. Чтобы изменить стратегию маршрутизации для существующей поездки, необходимо очистить пункты назначения и сбросить их, используя новую стратегию маршрутизации.
Получение сведений о маршруте
Чтобы определить, какая стратегия маршрута является оптимальной для данной путевой точки, вызовите getRouteInfoForDestination(), чтобы получить сведения о маршруте как для лучшего маршрута по умолчанию, так и для абсолютно более короткого маршрута. В частности, указывается продолжительность поездки и расстояние до путевой точки назначения.
Эти сведения поступают из GMSNavigationRouteInfo в обратном вызове.
Пример
В следующем примере кода показано, как получить сведения о маршруте для каждой из двух стратегий маршрутизации.
Swift
let routingOptions = GMSNavigationRoutingOptions()
navigator?.getRouteInfoForDestination(destination,
routingOptions: routingOptions) { routeInfo in
...
}
Objective-C
GMSNavigationRoutingOptions *routingOptions =
[[GMSNavigationRoutingOptions alloc] init];
[navigator getRouteInfoForDestination:destination
withRoutingOptions:routingOptions
callback:^(GMSNavigationRouteInfo *routeInfo){...}];
Как настроить стратегию маршрутизации
Вы можете настроить стратегию маршрутизации с помощью GMSNavigationRoutingOptions и задать routingStrategy при вызове setDestinations().
routingStrategy принимает одно из следующих перечисляемых значений:
| Перечисляемое значение | Описание |
|---|---|
| GMSNavigationRoutingStrategyDefaultBest | Маршруты ранжируются по модели стоимости по умолчанию Navigation SDK. Это стратегия маршрутизации по умолчанию. |
| GMSNavigationRoutingStrategyShorter | Ранжирует маршруты по расстоянию. Маршрут с самым высоким рейтингом является самым коротким из возвращенных. |
Пример
В примере кода ниже показано, как задать стратегию прокладки более короткого маршрута.
Swift
let routingOptions = GMSNavigationRoutingOptions(routingStrategy: .shorter)
navigator?.setDestinations(destinations,
routingOptions: routingOptions) { routeStatus in
...
}
Objective-C
GMSNavigationRoutingOptions *routingOptions = [[GMSNavigationRoutingOptions alloc] initWithRoutingStrategy:GMSNavigationRoutingStrategyShorter];
[navigator setDestinations:destinations
routingOptions:routingOptions
callback:^(GMSRouteStatus routeStatus){...}];
Маршруты с паромами
По умолчанию Navigation SDK для iOS исключает маршруты, включающие паромы. Если вы хотите, чтобы в маршрутах учитывались паромы, задайте для параметра avoidsFerries значение false.
Пример
Swift
self.mapView.navigator?.avoidsFerries = false
Objective-C
self.mapView.navigator.avoidsFerries = NO
Формат выноски маршрута.
При выборе стратегии "Более короткий маршрут" на выносках вдоль маршрута показывается расстояние. Но вы можете использовать уточнения с расчетным временем прибытия.
Как настроить формат выноски маршрута
Вы можете изменить формат выноски маршрута, задав routeCalloutFormat в GMSMapView. routeCalloutFormat принимает одно из следующих перечисляемых значений:
| Перечисляемое значение | Описание |
|---|---|
| GMSNavigationRouteCalloutFormatDefault | Показывает оставшееся время при использовании стратегии маршрутизации по умолчанию. Показывает оставшееся расстояние при использовании стратегии маршрутизации "Более короткий маршрут". |
| GMSNavigationRouteCalloutFormatTime | Показывает оставшееся время. |
| GMSNavigationRouteCalloutFormatDistance | Показывает оставшееся расстояние. |
Пример
В примере кода ниже показано, как настроить формат выноски маршрута.
Swift
self.mapView.routeCalloutFormat = .time
Objective-C
_mapView.routeCalloutFormat = GMSNavigationRouteCalloutFormatTime;