迴轉迴避功能是路線最佳化功能,可避免車輛在拜訪行程的特定取貨或送貨地點迴轉。設定迴轉迴避後,車輛抵達和離開拜訪地點時,就會朝向相同方向。
迴轉迴避功能的運作方式如下:
- 您可以在特定行程中設定迴轉迴避屬性。
- API 會考量雙向道路的兩個行車方向,並選擇最佳路徑。
- API 會產生車輛抵達和離開的路線,且車輛不會在拜訪地點迴轉。司機可能需要過馬路才能抵達這個地點。
如果車輛尺寸、交通標誌或一般路況導致難以或無法迴轉,這個屬性就非常適合。
屬性
迴轉迴避屬性是在 VisitRequest 物件中定義。
這個物件用於出貨內容的 pickups 和 deliveries 陣列中。
| 屬性 | 類型 | 說明 |
|---|---|---|
avoidUTurns |
布林值 | 如果設為 true,API 會禁止車輛在這個拜訪地點迴轉。車輛抵達和離開時會朝向同一方向。 |
範例
本節將介紹兩種範例:
- 程式碼範例,說明迴轉迴避的結構。
- 包含這項功能的要求範例。
程式碼範例
以下範例顯示取貨和送貨服務中的 avoidUTurns 結構:
"pickups":[ { "arrivalLocation": { "latitude": 37.42506261000996, "longitude": -122.09535511930135 }, "avoidUTurns": true } ], "deliveries":[ { "arrivalLocation": { "latitude": 37.42421503206021, "longitude": -122.09526063135228 }, "avoidUTurns": true } ]
要求範例
以下範例顯示基本的 optimizeTours 要求,其中包含迴轉迴避功能。這項要求包含下列元素:
- 出貨內容,包含
model物件內的取貨和送達資訊。 - 將取貨和送貨地點的
avoidUTurns屬性設為true,防止車輛在這些停靠站變更方向。
{ "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 } ] } }
使用 sideOfRoad 避免迴轉
雖然「sideOfRoad」是獨立功能,但與迴轉迴避功能密切相關,因為這項功能會將車輛導向最靠近目的地的道路側,避免許多迴轉。這會強制車輛從特定方向接近拜訪地點,因此不需要迴轉。
在實務上,如果可以安全地步行過馬路前往造訪地點,就應該避免迴轉。如果建議不要或無法過馬路,請考慮改為將 sideOfRoad 設為 true。
sideOfRoad 屬性是在 Waypoint 物件中定義。
與其他功能的互動
迴轉迴避功能會透過下列方式與其他路線規劃功能互動:
- 道路側:將
avoidUTurns和sideOfRoad都設為true,可稍微提高避免迴轉的機率,同時將車輛導向最靠近造訪地點的道路側。不過,這樣做會導致迴轉迴避限制相關的額外複雜度。對於大多數造訪地點,只要設定其中一個屬性,就足以避免迴轉。 - 插入的解決方案:使用迴轉迴避功能時,API 回應會在產生的
ShipmentRoute.Visit中加入injectedSolutionLocationToken,記錄所選道路的哪一側。如果日後要將這個造訪記錄做為注入的解決方案,用於後續要求,請務必將這個權杖傳回 API。
限制
迴轉迴避功能會盡可能運作,在下列情況下,API 產生的路線仍可能包含迴轉:
- 旅行模式設為
DRIVING以外的模式。 - 特定造訪地點的抵達和出發地點不同。在這種情況下,API 會傳回錯誤。
- 該地點位於死巷,因此需要迴轉才能離開。
- 迴轉發生在路線上,而非實際拜訪地點。
- 這項動作是指急轉彎到另一條道路,API 不會將其歸類為迴轉。