共用方式為


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

載運第 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=USHazmatClass9&travelMode=truck&instructionsType=text&query=51.368752,-0.118332:41.385426,-0.128929

下列回應適用於載運第 9 級危險材料的卡車,其危險性低於第 1 級危險材料。 展開 guidance 元素以讀取指示時,您會發現指示不相同。 載運第 1 級危險材料的卡車有更多路線指示。

載運第 9 級危險廢棄物的卡車

要求路線上的交通資訊

透過 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 開發人員指南 (預覽)

下一步

若要深入瞭解,請參閱: