避免在自提点和送货点 U 转

默认情况下,车辆可以从任何方向到达取货或送货地点,然后从任何方向离开。在某些情况下,这会迫使车辆在访问位置掉头,但由于车辆尺寸、位置处的交通标志或通常的交通状况,掉头可能很困难或根本无法实现。

为防止车辆在到达指定上车点或送货点后到出发前改变方向,您可以将相应位置的 avoid_u_turns 设置为 true。在此设置下,车辆将以相同的航向到达和离开该位置,从而避免掉头。在双向道路上,求解器会考虑两个方向,并选择其中一个方向作为路线优化的一部分。

您还可以将 side_of_road 设置为 true,以获取车辆在最靠近途经点的道路一侧到达和离开的路线。在这种情况下,车辆在到达和出发之间也不会改变航向。您可以将 side_of_roadavoid_u_turns 都设置为 true,以实现相同的结果。如需了解详情,请参阅与其他功能的互动

在实践中,当可以安全地过马路到达途经点时,应使用 avoid_u_turns。当不建议或无法进行交叉时,请使用 side_of_road

示例:使用 avoid_u_turns 发出 OptimizeTours 请求

可以使用 RESTgRPC 发出 OptimizeTours 请求。

在发出请求之前,请将以下参数替换为适合您环境的值:

  • 确保您已按照使用 OAuth 中的说明配置应用默认凭据
  • PROJECT_NUMBER_OR_ID 设置为您的 Cloud 项目编号或 ID。

    以下命令会向路线优化 API 发送 OptimizeTours 请求,并同步接收响应。

    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 为 1,则相应响应中的 ShipmentRoute.Visit 会设置 injected_solution_location_token 字段。其值的确切含义是实现细节,但它会编码求解器选择的道路一侧的相关信息。
  • 当您在输入请求中使用 ShipmentRoute.Visit 时,如果该 ShipmentRoute.Visit 对应于 avoid_u_turns = true 中的 VisitRequest,则 ShipmentRoute.Visit 必须包含求解器之前返回的 injected_solution_location_token

限制

系统会尽力避免掉头。在某些情况下,路线可能仍包含掉头:

  • avoid_u_turns 仅适用于支持 side_of_road 的出行方式。具体而言,此功能不支持 WALKING 出行模式。
  • avoid_u_turns 不能用于到达地和出发地不同的取货和送货。
  • 如果取货或送货地点位于尽头路,则必须掉头才能离开该道路。
  • 此功能的目的是避免在上车地点和送达地点掉头。 不会避免航点之间的掉头。
  • 急转弯到另一条道路不被视为掉头,系统通常不会避开此类转弯。

此功能在开发期间还存在其他限制。随着该功能的不断完善,我们预计这些限制会逐步解除。