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

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

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

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