Azure 地圖服務路線規劃服務的最佳做法
Azure 地圖服務路線規劃服務中的路線指示和路線矩陣 API 可用來計算每個要求路線的預估抵達時間 (ETA)。 路線 API 會考慮一些因素,例如即時交通資訊和歷史交通資料,例如在所要求的日期和時間的一般車速。 API 會根據時間或距離,以序列或最佳化順序,一次傳回多個目的地可行的最短或最快路線。 使用者也可以要求適用於行人、腳踏車騎士和商業車輛 (例如卡車) 的特殊路線和詳細資料。 本文討論呼叫 Azure 地圖服務 路線服務的最佳做法,包括操作說明:
- 在路線指示 API 和矩陣路線 API 之間選擇
- 根據即時和歷史交通資料,要求歷史和預測的行車時間
- 要求路線詳細資料,例如整個路線以及路線每一段路程的時間和距離
- 要求商業車輛 (例如卡車) 的路線
- 要求路線上的交通資訊,例如塞車和收費站資訊
- 要求包含一或多個停駐點 (導航點) 的路線
- 將一或多個停駐點的路線最佳化,以取得經過每個停駐點 (導航點) 的最佳順序
- 使用支援點最佳化替代路線。 例如,提供可通過電動車充電站的替代路線。
- 搭配 Azure 地圖服務 Web SDK 使用路線規劃服務
必要條件
如需路線規劃服務涵蓋範圍的詳細資訊,請參閱路線涵蓋範圍。
您可以使用 Postman 或 bruno 之類的任何 API 開發環境來執行本文所示的 HTTP 要求範例,或建置 REST 呼叫。
在路線指示和矩陣路線之間選擇
路線指示 API 會傳回指示,包括路線路徑的行進時間和座標。 路線矩陣 API 可讓您計算一組由出發地和目的地位置定義的路線行進時間和距離。 針對每個指定出發地,矩陣 API 會計算從該出發地到每個指定目的地路線的成本 (行進時間和距離)。 這些 API 都可讓您指定參數,例如所需的出發時間、抵達時間和車輛類型,例如汽車或卡車。 都會據以使用即時或預測性交通資料,以傳回最佳路線。
如果您的案例如下,請考慮呼叫路線指示 API:
- 要求兩個或更多已知位置之間的最短或最快駕駛路線,以取得快遞車輛的精確抵達時間。
- 要求詳細的路線指引,包括路線幾何,以在地圖上將路線視覺化
- 指定客戶位置清單,計算造訪每個客戶位置並回到出發地的最短可能路線。 此案例通常稱為旅行推銷員問題。 您可以在一個要求中通過最多 150 個導航點 (停駐點)。
- 使用單一 API 呼叫,將查詢批次傳送至路線指示批次 API。
如果您的案例如下,請考慮呼叫矩陣路線 API:
- 計算一組出發地與目的地之間的行進時間和距離。 例如,您有 12 位司機,而且需要尋找最接近、有空的司機,從餐廳接送食物快遞。
- 依其實際行進距離或時間排序潛在路線。 矩陣 API 只會傳回每個出發地和目的地組合的行進時間和距離。
- 根據行進時間或距離的叢集資料。 例如,您的公司有 50 名員工,請從辦公室找到在 20 分鐘內居住的所有員工。
以下是顯示路線指示和矩陣 API 一些功能的比較:
Azure 地圖服務 API | 要求中的查詢數目上限 | 避免區域 | 卡車和電動車路線 | 導航點和旅行推銷員最佳化 | 支援點 |
---|---|---|---|---|---|
取得路線指示 | 1 | ✔ | ✔ | ||
張貼路線指示 | 1 | ✔ | ✔ | ✔ | ✔ |
張貼路線指示批次 | 700 | ✔ | ✔ | ||
張貼路線矩陣 | 700 | ✔ |
若要深入了解電動車路線規劃功能,請參閱我們的教學課程,了解如何使用 Azure Notebooks 搭配 Python 為電動車規劃路線。
要求歷程記錄和即時資料
根據預設,路線規劃服務會假設行進模式是汽車,而出發時間是現在。 除非路線計算要求另有指定,否則會根據即時交通狀況傳回路線。 路線規劃引擎會考慮固定時間相依的交通限制,例如「下午 4:00 至下午 6:00 期間不得左轉」。 除非您特別要求會忽略目前即時交通的路線,否則會考慮道路封閉,例如道路工程。 若要忽略目前的交通,請在您的 API 要求中將 traffic
設定為 false
。
路線計算 travelTimeInSeconds 值包含交通所造成的延遲。 當出發時間設定為現在時,利用目前和歷史的行進時間資料來產生。 如果您的出發時間設定在未來,API 會根據歷史資料傳回預測的行進時間。
如果您在要求中包含 computeTravelTimeFor=all 參數,則回應中的摘要元素會有下列欄位,包括歷史交通狀況:
元素 | 描述 |
---|---|
noTrafficTravelTimeInSeconds | 就像是路線不會因為交通狀況 (例如因為壅塞) 而造成路線延遲所計算的預估行進時間 |
historicTrafficTravelTimeInSeconds | 使用時間相依歷史交通資料計算的預估行進時間 |
liveTrafficIncidentsTravelTimeInSeconds | 使用即時速度資料計算的預估行進時間 |
下一節示範如何使用討論的參數對路線 API 進行呼叫。
範例查詢
在以下第一個範例中,出發時間在撰寫時設定為未來。
https://atlas.microsoft.com/route/directions/json?subscription-key={Your-Azure-Maps-Subscription-key}&api-version=1.0&query=51.368752,-0.118332:51.385426,-0.128929&travelMode=car&traffic=true&departAt=2025-03-29T08:00:20&computeTravelTimeFor=all
此回應包含摘要元素,如下範例所示。 因為出發時間設定在未來,所以 trafficDelayInSeconds 值是零。 travelTimeInSeconds 值是使用時間相依歷史交通資料來計算。 因此在此情況下,travelTimeInSeconds 值等於 historicTrafficTravelTimeInSeconds 值。
"summary": {
"lengthInMeters": 2131,
"travelTimeInSeconds": 248,
"trafficDelayInSeconds": 0,
"departureTime": "2025-03-29T08:00:20Z",
"arrivalTime": "2025-03-29T08:04:28Z",
"noTrafficTravelTimeInSeconds": 225,
"historicTrafficTravelTimeInSeconds": 248,
"liveTrafficIncidentsTravelTimeInSeconds": 248
},
範例查詢
在接下來的範例中,我們有一個即時路線要求,出發時間是現在。 不會在 URL 中明確指定,因為是預設值。
https://atlas.microsoft.com/route/directions/json?subscription-key={Your-Azure-Maps-Subscription-key}&api-version=1.0&query=47.6422356,-122.1389797:47.6641142,-122.3011268&travelMode=car&traffic=true&computeTravelTimeFor=all
回應包含摘要,如下列範例所示。 因為壅塞,所以 trafficDelaysInSeconds 值大於零。 也大於 historicTrafficTravelTimeInSeconds。
"summary": {
"lengthInMeters": 16637,
"travelTimeInSeconds": 2905,
"trafficDelayInSeconds": 1604,
"departureTime": "2020-02-28T01:00:20+00:00",
"arrivalTime": "2020-02-28T01:48:45+00:00",
"noTrafficTravelTimeInSeconds": 872,
"historicTrafficTravelTimeInSeconds": 1976,
"liveTrafficIncidentsTravelTimeInSeconds": 2905
},
要求路線和路程詳細資料
根據預設,路線規劃服務會傳回座標陣列。 此回應將會包含座標,在名稱為 points
的清單中組成路徑。 路線回應也包含從路線開始的距離和預估經過時間。 這些值可用來計算整個路線的平均速度。
下圖顯示 points
元素。
展開 point
元素以查看路徑的座標清單:
路線指示 API 支援藉由指定 instructionsType 參數使用不同指示格式。 若要格式化指示讓電腦方便處理,請使用 instructionsType=coded。 使用 instructionsType=taged,將指示顯示為適用於使用者的文字。 此外,指示也可以格式化為文字,其中指示的某些元素會標示,而指令會以特殊格式呈現。 如需詳細資訊,請參閱支援的指示類型清單。
當要求指示時,回應會傳回名為 guidance
的新元素。 guidance
元素會保存兩項資訊:每個轉彎指示和摘要指示。
instructions
元素會保留行程的每個轉彎指示,而 instructionGroups
則具有摘要指示。 每個指示摘要涵蓋一段行程,其中可能涵蓋多條道路。 API 可以傳回路線區段的詳細資料。 例如,塞車的座標範圍或目前的交通速度。
要求商業車輛的路線
Azure 地圖服務路線 API 支援商業車輛路線,涵蓋商業卡車路線。 API 會考慮指定的限制。 例如,車輛的高度和重量,以及車輛是否載運危險貨物。 例如,如果車輛載運易燃物,路線引擎會避免住宅區域附近的特定隧道。
範例查詢
下列範例要求會查詢商業卡車的路線。 卡車載運第 1 級危險廢棄物。
https://atlas.microsoft.com/route/directions/json?subscription-key={Your-Azure-Maps-Subscription-key}&api-version=1.0&vehicleWidth=2&vehicleHeight=2&vehicleCommercial=true&vehicleLoadType=USHazmatClass1&travelMode=truck&instructionsType=text&query=51.368752,-0.118332:41.385426,-0.128929
路線 API 會傳回指示,以容納卡車和危險廢棄物的維度。 您可以展開 guidance
元素來讀取路線指示。
範例查詢
從上述查詢變更美國危險物品等級,會產生不同的路線來容納這項變更。
https://atlas.microsoft.com/route/directions/json?subscription-key={Your-Azure-Maps-Subscription-key}&api-version=1.0&vehicleWidth=2&vehicleHeight=2&vehicleCommercial=true&vehicleLoadType=USHazmatClass9&travelMode=truck&instructionsType=text&query=51.368752,-0.118332:41.385426,-0.128929
下列回應適用於載運第 9 級危險材料的卡車,其危險性低於第 1 級危險材料。 展開 guidance
元素以讀取指示時,您會發現指示不相同。 載運第 1 級危險材料的卡車有更多路線指示。
要求路線上的交通資訊
透過 Azure 地圖服務路線指示 API,開發人員可以在要求中包含 sectionType
參數,來要求每個區段類型的詳細資料。 例如,您可以要求每個塞車區段的速度資訊。 請參閱 sectionType 索引鍵的值清單,以了解您可以要求的各種詳細資料。
範例查詢
下列查詢會將 sectionType
設定為 traffic
。 會要求包含從西雅圖到聖地牙哥交通資訊的區段。
https://atlas.microsoft.com/route/directions/json?subscription-key={Your-Azure-Maps-Subscription-key}&api-version=1.0§ionType=traffic&query=47.6062,-122.3321:32.7157,-117.1611
回應包含適合指定座標上交通的區段。
此選項可用來在轉譯地圖時為區段著色,如下圖所示:
計算並最佳化有多個站點的路線
Azure 地圖服務目前提供兩種形式的路線最佳化:
根據要求的路線類型進行最佳化,而不需變更導航點的順序。 如需詳細資訊,請參閱 RouteType。
旅行推銷員最佳化,這會變更導航點的順序,以取得造訪每個停駐點的最佳順序
針對多停駐點路線,最多可以在單一路線要求中指定 150 個導航點。 開始和結束座標位置可以相同,就像來回行程一樣。 但是您必須提供至少一個額外的導航點,才能進行路線計算。 您可以將導航點新增至出發地與目的地座標之間的查詢。
如果您想要最佳化造訪指定導航點的最佳順序,則需要指定 computeBestOrder=true。 此案例也稱為旅行推銷員最佳化問題。
範例查詢
下列查詢會要求六個導航點的路徑,將 computeBestOrder
參數設定為 false
。 這也是 computeBestOrder
參數的預設值。
https://atlas.microsoft.com/route/directions/json?api-version=1.0&subscription-key={Your-Azure-Maps-Subscription-key}&computeBestOrder=false&query=47.606544,-122.336502:47.759892,-122.204821:47.670682,-122.120415:47.480133,-122.213369:47.615556,-122.193689:47.676508,-122.206054:47.495472,-122.360861
回應描述路徑長度為 140,851 公尺,行進這段路徑需要 9,991 秒。
下圖說明此查詢所產生的路徑。 此路徑是一個可能的路線。 這不是根據時間或距離的最佳路徑。
此路線導航點順序為:0、1、2、3、4、5 和 6。
範例查詢
下列查詢會要求相同六個導航點的路徑,如上述範例所示。 這次 computeBestOrder
參數設定為 true
(旅行推銷員最佳化)。
https://atlas.microsoft.com/route/directions/json?api-version=1.0&subscription-key={Your-Azure-Maps-Subscription-key}&computeBestOrder=true&query=47.606544,-122.336502:47.759892,-122.204821:47.670682,-122.120415:47.480133,-122.213369:47.615556,-122.193689:47.676508,-122.206054:47.495472,-122.360861
回應描述路徑長度為 91,814 公尺,行進這段路徑需要 7,797 秒。 因為 API 傳回最佳化路線,所以這裡的行進距離和行進時間都較低。
下圖說明此查詢所產生的路徑。
最佳路線具有下列導航點順序:0、5、1、2、4、3 和 6。
提示
路線規劃服務的最佳化導航點順序資訊會提供一組索引。 其中排除出發地和目的地索引。 您必須將這些值遞增 1 以考慮出發地。 然後,將您的目的地新增至結尾,以取得完整的已排序導航點清單。
使用支援點計算替代路線以及使路線偏差
有些情況會讓您想要重新建構路線,以計算參考路線的零或多個替代路線。 例如,您可能想要向客戶展示通過零售商店的替代路線。 在此情況下,您必須使用支援點來讓位置偏差。 以下是讓位置偏差的步驟:
- 依原樣計算路線,並且從路線回應取得路徑
- 使用路線路徑來尋找路線路徑上或附近的所需位置。 例如,您可以使用景點要求,或在資料庫中查詢您自己的資料。
- 根據從路線起點開始的距離排序位置
- 將這些位置作為新路線要求中的支援點,新增至張貼路線指示。 若要深入了解支援點,請參閱張貼路線指示 API 文件。
呼叫張貼路線指示時,您可以設定最小偏差時間或距離條件約束,以及支援點。 如果您想要提供替代路線,而且也想要限制行進時間,請使用這些參數。 使用這些條件約束時,替代路線會遵循從指定時間或距離之出發地點的參考路線。 換句話說,其他路線會根據指定的條件約束,與參考路線分歧。
下圖是轉譯具有時間與距離指定偏差限制之替代路線的範例。
在 Web 應用程式中使用路線規劃服務
Azure 地圖服務 Web SDK 提供服務模組。 此模組是協助程式程式庫,透過使用 JavaScript 或 TypeScript,可讓您輕鬆地在 Web 或 Node.js 應用程式中使用 Azure 地圖服務 REST API 服務。 服務模組可用來在地圖上呈現傳回的路線。 模組會自動決定要搭配 GET 和 POST 要求使用的 API。
注意
Azure 地圖服務 Web SDK 服務模組淘汰
Azure 地圖服務 Web SDK 服務模組現在已被取代,且將於 9/30/26 淘汰。 若要避免服務中斷,建議您在 9/30/26 以前移轉至 Azure 地圖服務 JavaScript REST SDK。 如需詳細資訊,請參閱 JavaScript/TypeScript REST SDK 開發人員指南 (預覽)。
下一步
若要深入瞭解,請參閱: