По умолчанию транспортные средства могут прибывать к месту получения или доставки с любого направления, а затем уезжать в любом направлении. В некоторых случаях это вынуждает транспортное средство развернуться в месте посещения, что может быть затруднено или невозможно из-за размера транспортного средства, дорожных знаков на месте или обычных условий дорожного движения.
Чтобы транспортные средства не меняли направление между прибытием и отправлением для данного места посадки или доставки, вы можете установить avoid_u_turns значение true для этого места. При этой настройке транспортное средство прибудет и покинет место с тем же курсом, избегая разворота. На дорогах с двусторонним движением решатель рассмотрит оба направления и выберет одно в рамках оптимизации маршрута.
Вы также можете установить для side_of_road значение true, чтобы получить маршрут, по которому транспортное средство прибывает и уезжает на стороне дороги, ближайшей к путевой точке. В этом случае транспортное средство также не меняет курс между прибытием и отправлением. Для достижения того же результата можно установить для side_of_road и avoid_u_turns значение true. Подробности см. в разделе Взаимодействие с другими функциями .
На практике 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.