Azure 地圖服務路線規劃服務的最佳做法

Azure 地圖服務路線規劃服務中的路線指示和路線矩陣 API 可用來計算每個要求路線的預估抵達時間 (ETA)。 路線 API 會考慮一些因素,例如即時交通資訊和歷史交通資料,例如在所要求的日期和時間的一般車速。 API 會根據時間或距離,以序列或最佳化順序,一次傳回多個目的地可行的最短或最快路線。 使用者也可以要求適用於行人、腳踏車騎士和商業車輛 (例如卡車) 的特殊路線和詳細資料。 本文討論呼叫 Azure 地圖服務 路線服務的最佳做法,包括操作說明:

  • 在路線指示 API 和矩陣路線 API 之間選擇
  • 根據即時和歷史交通資料,要求歷史和預測的行車時間
  • 要求路線詳細資料,例如整個路線以及路線每一段路程的時間和距離
  • 要求商業車輛 (例如卡車) 的路線
  • 要求路線上的交通資訊,例如塞車和收費站資訊
  • 要求包含一或多個停駐點 (導航點) 的路線
  • 將一或多個停駐點的路線最佳化,以取得經過每個停駐點 (導航點) 的最佳順序
  • 使用支援點最佳化替代路線。 例如,提供可通過電動車充電站的替代路線。
  • 搭配 Azure 地圖服務 Web SDK 使用路線規劃服務

必要條件

如需路線規劃服務涵蓋範圍的詳細資訊,請參閱路線涵蓋範圍

本文使用 Postman 應用程式來建置 REST 呼叫,但您可以選擇任何 API 開發環境。

在路線指示和矩陣路線之間選擇

路線指示 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 元素。

Points 元素

展開 point 元素以查看路徑的座標清單:

展開的 points 元素

路線指示 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 元素來讀取路線指示。

具有 1 級 hazwaste 的卡車

範例查詢

從上述查詢變更美國危險物品等級,會產生不同的路線來容納這項變更。

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 級危險材料的卡車有更多路線指示。

具有 9 hazwaste 類別的卡車

要求路線上的交通資訊

透過 Azure 地圖服務路線指示 API,開發人員可以在要求中包含 sectionType 參數,來要求每個區段類型的詳細資料。 例如,您可以要求每個塞車區段的速度資訊。 請參閱 sectionType 索引鍵的值清單,以了解您可以要求的各種詳細資料。

範例查詢

下列查詢會將 sectionType 設定為 traffic。 會要求包含從西雅圖到聖地牙哥交通資訊的區段。

https://atlas.microsoft.com/route/directions/json?subscription-key={Your-Azure-Maps-Subscription-key}&api-version=1.0&sectionType=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 以考慮出發地。 然後,將您的目的地新增至結尾,以取得完整的已排序導航點清單。

使用支援點計算替代路線以及使路線偏差

有些情況會讓您想要重新建構路線,以計算參考路線的零或多個替代路線。 例如,您可能想要向客戶展示通過零售商店的替代路線。 在此情況下,您必須使用支援點來讓位置偏差。 以下是讓位置偏差的步驟:

  1. 依原樣計算路線,並且從路線回應取得路徑
  2. 使用路線路徑來尋找路線路徑上或附近的所需位置。 例如,您可以使用景點要求,或在資料庫中查詢您自己的資料。
  3. 根據從路線起點開始的距離排序位置
  4. 將這些位置作為新路線要求中的支援點,新增至張貼路線指示。 若要深入了解支援點,請參閱張貼路線指示 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 開發人員指南(預覽版)。

下一步

若要深入瞭解,請參閱: