По умолчанию автомобили могут подъезжать к месту забора или доставки с любого направления и уезжать в любом направлении. В некоторых случаях это вынуждает автомобиль разворачиваться в месте визита, что может быть затруднительно или невозможно из-за габаритов автомобиля, дорожных знаков или обычной дорожной обстановки.
Чтобы предотвратить изменение направления движения транспортных средств между пунктом прибытия и отправления для заданного пункта забора или доставки, можно установить для avoid_u_turns значение True для этого пункта. При такой настройке транспортное средство будет прибывать и выезжать из пункта назначения с одинаковым направлением, избегая таким образом разворота. На дорогах с двусторонним движением решатель учитывает оба направления и выбирает одно из них для оптимизации маршрута.
Вы также можете установить значение true side_of_road , чтобы получить маршрут, по которому транспортное средство прибывает и уезжает по обочине дороги, ближайшей к путевой точке. В этом случае транспортное средство также не меняет направление между прибытием и отправлением. Для достижения того же результата можно установить значение true side_of_road и avoid_u_turns . Подробнее см. в разделе «Взаимодействие с другими функциями» .
На практике следует использовать avoid_u_turns , когда пересечь дорогу для достижения точки маршрута безопасно. side_of_road следует использовать, когда переход дороги не рекомендуется или невозможен.
Пример: создание запроса OptimizeTours с помощью avoid_u_turns
Запросы OptimizeTours можно делать с использованием REST или gRPC .
Перед созданием запроса замените следующие параметры на значения, соответствующие вашей среде:
- Убедитесь, что у вас настроены учетные данные приложения по умолчанию , как описано в разделе Использование OAuth .
Задайте PROJECT_NUMBER_OR_ID в качестве номера или идентификатора вашего облачного проекта.
Следующая команда отправляет запрос
OptimizeToursв API оптимизации маршрутов и синхронно получает ответ.curl -X POST 'https://routeoptimization.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID:optimizeTours' \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ --data @- <<EOM { "model": { "shipments": [ { "pickups": [ { "arrivalLocation": { "latitude": 37.42506261000996, "longitude": -122.09535511930135 }, "avoidUTurns": true } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.42421503206021, "longitude": -122.09526063135228 }, "avoidUTurns": true } ] } ], "vehicles": [ { "travelMode": "DRIVING", "costPerKilometer": 1.0 } ], } } EOM
После завершения запроса вы получите ответное сообщение.
Взаимодействие с другими функциями
-
avoid_u_turnsможно использовать вместе сside_of_road = true. В этом случае развороты избегаются, но решатель выбирает маршрут, при котором транспортное средство находится на той же стороне дороги, что и точка маршрута, аналогично установке толькоside_of_road = true. - Если для определённого запроса на посещение
avoid_u_turns = true, то в полеShipmentRoute.Visitв соответствующем ответе установлено полеinjected_solution_location_token. Точное значение этого поля зависит от реализации, но оно кодирует информацию о стороне дороги, выбранной решателем. - При использовании
ShipmentRoute.Visitкак части входного запроса, если этотShipmentRoute.VisitсоответствуетVisitRequest, в которомavoid_u_turns = true, тоShipmentRoute.Visitдолжен содержатьinjected_solution_location_tokenранее возвращенный решателем.
Ограничения
Избегать разворотов — наилучший вариант. В некоторых ситуациях маршрут может содержать развороты:
-
avoid_u_turnsработает только с режимами передвижения, поддерживающимиside_of_road. В частности, она не поддерживается в режиме передвиженияWALKING. -
avoid_u_turnsнельзя использовать для забора и доставки груза, когда время прибытия и отправления не совпадает. - Если грузоперевозчик или курьер находится в тупике, необходимо сделать разворот, чтобы съехать с дороги.
- Цель этой функции — избежать разворотов в местах посадки и доставки. Развороты между точками маршрута не избегаются.
- Очень крутые повороты на другую дорогу не считаются разворотами, и их, как правило, не избегают.
На данный момент эта функция находится в стадии разработки. Мы ожидаем, что по мере её развития они будут сняты.
-
avoid_u_turnsнельзя использовать вместе сinterpret_injected_solutions_using_labels.