Избегайте разворотов в пунктах выдачи и доставки.

По умолчанию транспортные средства могут подъезжать к месту погрузки или разгрузки с любого направления и уезжать в любом направлении. В некоторых случаях это вынуждает транспортное средство совершать разворот в месте доставки, что может быть затруднительно или невозможно из-за размеров транспортного средства, дорожных знаков в этом месте или обычных дорожных условий.

Чтобы предотвратить изменение направления движения транспортных средств между пунктом прибытия и пунктом отправления в заданном месте погрузки или разгрузки, можно установить 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 нельзя использовать для погрузки и разгрузки, если время прибытия и отправления не совпадают.
  • Когда груз забирается или доставляется по тупиковой дороге, необходимо развернуться, чтобы съехать с дороги.
  • Цель этой функции — предотвращение разворотов в местах погрузки и разгрузки. Развороты между промежуточными точками не предотвращаются.
  • Очень резкие повороты на другую дорогу не считаются разворотами, и, как правило, их не будут объезжать.

В процессе разработки этой функции существуют дополнительные ограничения. Мы ожидаем, что они будут сняты по мере развития функции.