簡介
Distance Matrix API 要求的格式如下:
https://maps.googleapis.com/maps/api/distancematrix/outputFormat?parameters
其中 outputFormat 可以是下列任一值:
json(建議) 表示以 JavaScript 物件標記法 (JSON) 輸出。xml表示輸出內容為 XML。
有些是必要參數,有些則是自選參數。依照網址標準,所有參數都會以 & 字元分隔。所有保留字元 (例如加號「+」) 都必須經過網址編碼。以下列出參數及其可能值。
必要參數
-
目的地
一或多個地點,用來做為計算移動距離和時間的終點。目的地的參數選項與來源的參數選項相同。
-
來源
計算移動距離和時間的起點。您可以提供一或多個地點,並以直立線字元 (|) 分隔,地點形式可以是地點 ID、地址或經緯度座標:
-
地點 ID:如果提供地點 ID,必須加上
place_id:前置字元。 -
地址:如果傳遞地址,服務會對字串進行地理編碼,並轉換為經緯度座標,以計算距離。這個座標可能與 Geocoding API 傳回的座標不同,例如建築物入口而非中心點。
注意:建議使用地點 ID,而非地址或經緯度座標。使用座標時,系統一律會將點對齊最接近這些座標的道路,但這可能不是房產的存取點,甚至不是能快速或安全抵達目的地的道路。使用地址會提供建築物中心的距離,而非建築物入口的距離。
- 座標:如果您傳遞經緯度座標,系統會將座標對齊最近的道路。建議傳遞地點 ID。如果傳遞座標,請確保經緯度值之間沒有空格。
-
Plus Code 必須採用全球代碼或複合代碼格式。請按照這裡指定的格式設定 Plus Codes (加號在網址中會逸出為 %2B,空格則逸出為 %20):
-
全球代碼是 4 個半形字元的區碼,加上 6 個半形字元以上的地區代碼 (例如
849VCWC8+R9會編碼為849VCWC8%2BR9)。 -
複合代碼是 6 個半形字元以上的地區代碼,加上明確的位置 (
CWC8+R9 Mountain View, CA, USA會編碼為CWC8%2BR9%20Mountain%20View%20CA%20USA)。
-
全球代碼是 4 個半形字元的區碼,加上 6 個半形字元以上的地區代碼 (例如
-
編碼折線:您也可以使用編碼折線演算法,提供一組經過編碼的座標。如果您有大量原點,使用編碼折線可大幅縮短網址,因此特別實用。
-
編碼折線必須以
enc:開頭,後面接著半形冒號:。例如:origins=enc:gfo}EtohhU: -
您也可以加入多條編碼折線,並以直立線字元
|分隔。例如:origins=enc:wc~oAwquwMdlTxiKtqLyiK:|enc:c~vnAamswMvlTor@tjGi}L:|enc:udymA{~bxM:
-
編碼折線必須以
-
地點 ID:如果提供地點 ID,必須加上
選用參數
-
arrival_time
指定大眾運輸路線的偏好抵達時間,以世界標準時間 1970 年 1 月 1 日午夜起算,單位為秒。您可以指定
departure_time或arrival_time,但不能兩者同時指定。請注意,arrival_time必須指定為整數。 -
避免
系統可能會根據特定限制計算距離。 使用 avoid 參數即可指出限制,並為該參數提供引數,指出要避免的限制。系統支援下列限制:
-
tolls表示計算出的路線應避開收費道路/橋梁。 -
highways表示計算出的路線應避開高速公路。 -
ferries表示計算出的路線應避開渡輪。 -
indoor表示計算出的路線應避免步行和轉乘路線的室內階梯。
您可以將收費站、高速公路和渡輪的任意組合傳遞至 avoid 參數,要求系統規劃避開這些地點的路線。例如
avoid=tolls|highways|ferries。注意:新增限制不會排除包含受限功能的路線,但會將結果偏向較有利的路線。 -
-
departure_time
指定偏好的出發時間。您可以指定時間,以自世界標準時間 1970 年 1 月 1 日午夜起經過的秒數表示。如果指定的
departure_time晚於 9999-12-31T23:59:59.999999999Z,API 會將departure_time設為 9999-12-31T23:59:59.999999999Z。或者,您也可以指定「now」值,將出發時間設為目前時間 (精確至最接近的秒數)。在下列兩種情況下,可以指定出發時間:-
如果要求中的交通方式為大眾運輸,您可以選擇指定
departure_time或arrival_time。如未指定時間,departure_time會預設為現在 (也就是出發時間預設為目前時間)。 -
如果要求使用「開車」交通方式:您可以指定
departure_time,接收路線和行程時間 (回應欄位:duration_in_traffic),其中會將路況納入考量。departure_time必須設為目前時間或未來時間,不得設為過去的時間。
注意:如未指定出發時間,路線和所需時間的選擇將取決於路網,以及不考慮時間的平均路況。受到路網變動、平均路況更新,以及這項服務的分散性質影響,特定要求的結果可能會隨時間而改變。此外,在時間或頻率都沒有限制的情況下,即使兩條路線幾乎相同,結果還是有可能不同。注意:如果mode=driving的每要求限制為 100 個元素,請使用departure_time提出距離矩陣要求。來源數量乘以目的地數量,即為元素數量。 -
如果要求中的交通方式為大眾運輸,您可以選擇指定
-
language
傳回結果時使用的語言。
- 查看支援語言清單。Google 會經常更新支援的語言,因此這份清單可能不完整。
-
如果未提供
language,API 會嘗試使用Accept-Language標頭中指定的偏好語言。 - API 會盡量提供使用者和當地人都能辨識的街道地址。為達成這個目標,系統會以當地語言傳回街道地址,並視需要根據偏好語言,將地址音譯為使用者可讀取的文字。所有其他地址都會以偏好語言顯示。地址元件一律會以同一種語言傳回,而該語言是從第一個元件中選擇。
- 如果偏好語言沒有名稱,API 會使用最接近的名稱。
- 偏好語言對 API 選擇傳回的結果集和傳回順序影響不大。地理編碼器會根據語言解讀縮寫,例如街道類型縮寫,或在某種語言中有效但在另一種語言中無效的同義字。舉例來說,utca 和 tér 是匈牙利文的街道同義詞。
-
模式
計算距離和路線時,您可以指定要使用的交通方式。根據預設,系統會使用
DRIVING模式。 根據預設,系統會計算行車路線。系統支援下列交通方式:-
driving(預設) 表示使用路網的標準行車路線或距離。 -
walking會要求沿途設有人行道和騎樓 (如有) 的步行路線或距離。 -
bicycling會要求沿途設有單車道與專用道路的單車路線或距離 (如有)。 -
transit會要求使用大眾運輸路線 (如有) 取得路線或距離。如果將模式設為大眾運輸,可以選擇指定departure_time或arrival_time。如未指定時間,departure_time會預設為現在 (也就是出發時間預設為目前時間)。您也可以視需要加入transit_mode和/或transit_routing_preference。
注意:步行和單車路線有時無法明確提供人行道或單車道指示,因此這些路線會在傳回的結果中傳回警告,而您必須向使用者顯示這些警告。注意:系統最多可顯示過去 7 天或未來 100 天的交通行程,但須視資料供應商提供的交通資訊而定。大眾運輸時刻表經常變動,可搭乘的大眾運輸行程可能會隨時間改變,且無法保證預測結果在很長一段時間內都一致。 -
-
區域
區碼,指定為 ccTLD (「頂層網域」) 的兩位字元值。大多數 ccTLD 代碼與 ISO 3166-1 代碼相同,但有一些需要注意的例外情況。舉例來說,英國的 ccTLD 是「uk」(.co.uk),而 ISO 3166-1 代碼是「gb」(技術上是指「大不列顛及北愛爾蘭聯合王國」實體)。
-
traffic_model
指定計算交通時間時要採用的假設。這項設定會影響回應中 duration_in_traffic 欄位傳回的值,其中包含根據歷來平均值預估的交通時間。
traffic_model參數只能用於行車路線,且要求必須包含departure_time。這個參數的可用值包括:-
best_guess(預設) 表示傳回的 duration_in_traffic 應是最準確的預估交通時間 (根據歷來路況和即時車流量兩者的已知相關資訊計算而得)。departure_time距離現在的時間越近,即時車流量的影響力就越大。 -
pessimistic表示傳回的 duration_in_traffic 在大多數日子應該都會比實際交通時間長,但偶爾路況特別差時,實際交通時間可能會超過這個值。 -
optimistic表示傳回的 duration_in_traffic 在大多數日子應該都會比實際交通時間短,但偶爾路況特別好時,實際交通時間可能會短於這個值。
在大多數情況下,
best_guess的預設值會提供最有用的預測結果。由於預測模型整合了即時路況資訊,best_guess預測的行程時間可能比optimistic短,也可能比pessimistic長。best_guess -
-
transit_mode
指定一或多個偏好的交通方式。這個參數只能用於大眾運輸路線。這個參數支援下列引數:
-
bus表示計算出的路線應優先選擇以公車做為交通方式。 -
subway表示計算出的路線應優先選擇以地鐵做為交通方式。 -
train表示計算出的路線應優先選擇以火車做為交通方式。 -
tram表示計算出的路線應優先選擇以電車和輕軌電車做為交通方式。 -
rail表示計算出的路線應優先選擇以火車、電車、輕軌電車和地鐵做為交通方式。這相當於transit_mode=train|tram|subway。
-
-
transit_routing_preference
指定大眾運輸路線的偏好設定。使用這個參數時,您可以自訂調整傳回的選項,而不接受 API 選擇的預設最佳路線。這個參數只能用於大眾運輸路線。這個參數支援下列引數:
-
less_walking表示計算出的路線應優先選擇步行距離較短的選項。 -
fewer_transfers表示計算出的路線應優先選擇轉乘次數較少的選項。
-
-
個單元
指定顯示結果時要使用的單位系統。
注意:這項單位系統設定只會影響距離欄位中顯示的文字。距離欄位的值一律以公尺表示。
要求範例
這個範例使用經緯度座標指定目的地座標:
網址
https://maps.googleapis.com/maps/api/distancematrix/json ?destinations=40.659569%2C-73.933783%7C40.729029%2C-73.851524%7C40.6860072%2C-73.6334271%7C40.598566%2C-73.7527626 &origins=40.6655101%2C-73.89188969999998 &key=YOUR_API_KEY
curl
curl -L -X GET 'https://maps.googleapis.com/maps/api/distancematrix/json?origins=40.6655101%2C-73.89188969999998&destinations=40.659569%2C-73.933783%7C40.729029%2C-73.851524%7C40.6860072%2C-73.6334271%7C40.598566%2C-73.7527626&key=YOUR_API_KEY'
這個範例使用加號代碼指定目的地座標:
網址
https://maps.googleapis.com/maps/api/distancematrix/json ?destinations=San%20Francisco &origins=849VCWC8%2BR9 &key=YOUR_API_KEY
curl
curl -L -X GET 'https://maps.googleapis.com/maps/api/distancematrix/json?origins=849VCWC8%2BR9&destinations=San%20Francisco&key=YOUR_API_KEY'
以下範例顯示使用編碼折線的相同要求:
網址
https://maps.googleapis.com/maps/api/distancematrix/json ?destinations=enc%3A_kjwFjtsbMt%60EgnKcqLcaOzkGari%40naPxhVg%7CJjjb%40cqLcaOzkGari%40naPxhV%3A &origins=40.6655101%2C-73.89188969999998 &key=YOUR_API_KEY
curl
curl -L -X GET 'https://maps.googleapis.com/maps/api/distancematrix/json?origins=40.6655101%2C-73.89188969999998&destinations=enc%3A_kjwFjtsbMt%60EgnKcqLcaOzkGari%40naPxhVg%7CJjjb%40cqLcaOzkGari%40naPxhV%3A&key=YOUR_API_KEY'
交通資訊
如果符合所有下列條件 (這些是在「距離矩陣」回應中收到 duration_in_traffic 欄位的必要條件),系統會使用車流量資訊:
- 交通方式的
mode參數為driving或未指定 (driving是預設的交通方式)。 - 要求內含有效的
departure_time參數。departure_time可以設為目前時間,也可設為未來的時間,不得設為過去的日期。
您也可以在要求中加入 traffic_model 參數,指定計算交通時間時要採用的假設。
下列網址會啟動距離矩陣要求,計算麻州波士頓/麻州查爾斯鎮與麻州列星頓/麻州康科特之間的行車距離。要求包含出發時間,符合在 Distance Matrix 回應中傳回 duration_in_traffic 欄位的所有規定。
網址
https://maps.googleapis.com/maps/api/distancematrix/json ?departure_time=now &destinations=Lexington%2CMA%7CConcord%2CMA &origins=Boston%2CMA%7CCharlestown%2CMA &key=YOUR_API_KEY
curl
curl -L -X GET 'https://maps.googleapis.com/maps/api/distancematrix/json?origins=Boston%2CMA%7CCharlestown%2CMA&destinations=Lexington%2CMA%7CConcord%2CMA&departure_time=now&key=YOUR_API_KEY'
JSON
{ "destination_addresses": ["Lexington, MA, USA", "Concord, MA, USA"], "origin_addresses": ["Boston, MA, USA", "Charlestown, Boston, MA, USA"], "rows": [ { "elements": [ { "distance": { "text": "33.3 km", "value": 33253 }, "duration": { "text": "27 mins", "value": 1620 }, "duration_in_traffic": { "text": "34 mins", "value": 2019 }, "status": "OK", }, { "distance": { "text": "41.5 km", "value": 41491 }, "duration": { "text": "33 mins", "value": 1981 }, "duration_in_traffic": { "text": "39 mins", "value": 2342 }, "status": "OK", }, ], }, { "elements": [ { "distance": { "text": "31.1 km", "value": 31100 }, "duration": { "text": "26 mins", "value": 1543 }, "duration_in_traffic": { "text": "29 mins", "value": 1754 }, "status": "OK", }, { "distance": { "text": "39.3 km", "value": 39338 }, "duration": { "text": "32 mins", "value": 1904 }, "duration_in_traffic": { "text": "35 mins", "value": 2077 }, "status": "OK", }, ], }, ], "status": "OK", }
XML
OK Boston, MA, USA Charlestown, Boston, MA, USA Lexington, MA, USA Concord, MA, USA |
OK 1620 27 mins 33253 33.3 km 2018 34 mins OK 1981 33 mins 41491 41.5 km 2342 39 mins |
OK 1543 26 mins 31100 31.1 km 1759 29 mins OK 1904 32 mins 39338 39.3 km 2077 35 mins
位置修飾符
你可以使用位置修飾符,透過 side_of_road 修飾符指定要使用的道路側,或指定航向來指出正確的行進方向,藉此指示駕駛人應如何前往特定位置。
指定計算出的路線必須經過道路的特定側
指定地點時,您可以要求計算出的路線通過路線控點偏向的道路側,方法是使用 side_of_road: 前置字串。舉例來說,這項要求會傳回長途路線的距離,讓車輛在偏向航點的路側結束行程:
網址
https://maps.googleapis.com/maps/api/distancematrix/json ?destinations=side_of_road%3A37.7663444%2C-122.4412006 &origins=37.7680296%2C-122.4375126 &key=YOUR_API_KEY
curl
curl -L -X GET 'https://maps.googleapis.com/maps/api/distancematrix/json?origins=37.7680296%2C-122.4375126&destinations=side_of_road%3A37.7663444%2C-122.4412006&key=YOUR_API_KEY'
使用 side_of_road: 搭配編碼折線時,系統會將修飾符套用至折線上的每個位置。舉例來說,這項要求中的兩個目的地都使用這個參數:
網址
https://maps.googleapis.com/maps/api/distancematrix/json ?destinations=side_of_road%3Aenc%3A%7BoqeF%60fejV%5BnC%3A &origins=San%20Francisco%20City%20hall &key=YOUR_API_KEY
curl
curl -L -X GET 'https://maps.googleapis.com/maps/api/distancematrix/json?origins=San%20Francisco%20City%20hall&destinations=side_of_road%3Aenc%3A%7BoqeF%60fejV%5BnC%3A&key=YOUR_API_KEY'
side_of_road: 修飾符只能搭配以下限制使用:
- 交通方式的
mode參數為driving或未指定 (driving是預設的交通方式)。
指定計算出的路線應具有特定航向
指定位置時,您可以要求計算出的路線以特定頂角通過該位置。這個標題會以 heading=X: 前置字元指定,其中 X 是介於 0 (含) 和 360 (不含) 之間的整數角度值。0 代表北方,90 代表東方,依此類推 (順時針方向)。舉例來說,在這項要求中,計算出的路線會先從起點向東行駛,然後迴轉:
網址
https://maps.googleapis.com/maps/api/distancematrix/json ?destinations=37.773245%2C-122.469502 &origins=heading%3D90%3A37.773279%2C-122.468780 &key=YOUR_API_KEY
curl
curl -L -X GET 'https://maps.googleapis.com/maps/api/distancematrix/json?origins=heading%3D90%3A37.773279%2C-122.468780&destinations=37.773245%2C-122.469502&key=YOUR_API_KEY'
heading=X: 修飾符只能用於下列限制:
- 交通方式的
mode參數為driving、bicycling或未指定 (driving是預設的交通方式)。 - 未針對相同位置指定
side_of_road修飾符。 - 位置以經緯度值指定。您不得將
heading與地址、地點 ID 或編碼折線搭配使用。
距離矩陣要求和回應
以下範例顯示 HTTP 要求,要求從加拿大卑詩省溫哥華和美國華盛頓州西雅圖到美國加州舊金山,以及加拿大卑詩省維多利亞的距離和時間。
網址
https://maps.googleapis.com/maps/api/distancematrix/json ?destinations=San%20Francisco%7CVictoria%20BC &language=fr-FR &mode=bicycling &origins=Vancouver%20BC%7CSeattle &key=YOUR_API_KEY
curl
curl -L -X GET 'https://maps.googleapis.com/maps/api/distancematrix/json?origins=Vancouver%20BC%7CSeattle&destinations=San%20Francisco%7CVictoria%20BC&mode=bicycling&language=fr-FR&key=YOUR_API_KEY'
這項要求會傳回四個元素 (即 兩個起點乘以兩個目的地):
| 溫哥華到舊金山 | 溫哥華到維多利亞 |
| 西雅圖到舊金山 | 西雅圖到維多利亞 |
結果會以資料列形式傳回,每個資料列包含一個起點,以及每個目的地。
JSON
{ "destination_addresses": ["San Francisco, Californie, États-Unis", "Victoria, BC, Canada"], "origin_addresses": ["Vancouver, BC, Canada", "Seattle, Washington, États-Unis"], "rows": [ { "elements": [ { "distance": { "text": "1 712 km", "value": 1711765 }, "duration": { "text": "3 jours 16 heures", "value": 318119 }, "status": "OK", }, { "distance": { "text": "140 km", "value": 139695 }, "duration": { "text": "6 heures 49 minutes", "value": 24567 }, "status": "OK", }, ], }, { "elements": [ { "distance": { "text": "1 452 km", "value": 1451704 }, "duration": { "text": "3 jours 2 heures", "value": 266680 }, "status": "OK", }, { "distance": { "text": "146 km", "value": 146500 }, "duration": { "text": "2 heures 53 minutes", "value": 10374 }, "status": "OK", }, ], }, ], "status": "OK", }
XML
OK Vancouver, BC, Canada Seattle, Washington, États-Unis San Francisco, Californie, États-Unis Victoria, BC, Canada |
OK 318119 3 jours 16 heures 1711765 1 712 km OK 24567 6 heures 49 minutes 139695 140 km |
OK 266680 3 jours 2 heures 1451704 1 452 km OK 10374 2 heures 53 minutes 146500 146 km
DistanceMatrixResponse
| 欄位 | 必填 | 類型 | 說明 |
|---|---|---|---|
|
required | 陣列<字串> |
API 從原始要求傳回的地址陣列。與 |
|
required | 陣列<字串> |
API 從原始要求傳回的地址陣列。這些資訊會由地理編碼器格式化,並根據要求中傳遞的語言參數進行本地化。這類內容應按原樣讀取。請勿以程式輔助方式剖析格式化地址。 |
|
required | Array<DistanceMatrixRow> |
元素陣列,其中又分別包含 詳情請參閱 DistanceMatrixRow。 |
|
required | DistanceMatrixStatus |
內含要求的狀態,還可能包含偵錯資訊,方便您追查要求失敗的原因。 詳情請參閱 DistanceMatrixStatus。 |
|
選用 | 字串 |
字串,包含處理要求時發生的任何錯誤,以人類可解讀的文字表示。 |
DistanceMatrixStatus
服務傳回的狀態碼。
OK表示回應包含有效的結果。-
INVALID_REQUEST表示提供的要求無效。 -
MAX_ELEMENTS_EXCEEDED:表示起點與目的地產生的結果超過每項查詢的限制。 -
MAX_DIMENSIONS_EXCEEDED:表示起點或目的地的數量超出每項查詢的限制。 -
OVER_DAILY_LIMIT表示下列任一情況:- API 金鑰遺失或無效。
- 您的帳戶尚未啟用帳單功能。
- 超過自行設定的用量上限。
- 您提供的付款方式已失效 (例如信用卡已過期)。
-
OVER_QUERY_LIMIT表示服務在允許的時間範圍內,收到應用程式傳送過多要求。 -
REQUEST_DENIED表示服務拒絕您的應用程式使用距離矩陣服務。 -
UNKNOWN_ERROR表示伺服器發生錯誤,無法處理距離矩陣要求。如果再試一次,要求可能會成功。
DistanceMatrixRow
| 欄位 | 必填 | 類型 | 說明 |
|---|---|---|---|
|
required | Array<DistanceMatrixElement> |
Distance Matrix API 傳回結果時,會將結果放在 JSON 資料列陣列中。即使沒有傳回任何結果 (例如來源和/或目的地不存在時),系統仍會傳回空白陣列。 資料列會根據要求中來源參數的值排序。每個資料列對應一個來源,而該資料列中的每個元素,則對應來源與目的地值的配對。 每個資料列陣列都包含一或多個元素項目,這些項目則包含單一來源/目的地配對的相關資訊。 詳情請參閱 DistanceMatrixElement。 |
DistanceMatrixElement
| 欄位 | 必填 | 類型 | 說明 |
|---|---|---|---|
|
required | DistanceMatrixElementStatus |
元素的狀態。 詳情請參閱 DistanceMatrixElementStatus。 |
|
選用 | TextValueObject |
這條路線的總距離,以公尺 (值) 為單位,格式為文字。文字值會使用原始要求的單位參數或起點區域指定的單位系統。 詳情請參閱 TextValueObject。 |
|
選用 | TextValueObject |
行經這條路線所需的時間,以秒為單位 (值欄位),格式為文字。文字表示方式會根據查詢的語言參數進行本地化。 詳情請參閱 TextValueObject。 |
|
選用 | TextValueObject |
根據目前和過去的車流量狀況,估算這條路線的行車時間。如要瞭解可要求回傳樂觀、悲觀或最佳預估值的選項,請參閱
詳情請參閱 TextValueObject。 |
|
選用 | 票價 |
如果存在,則包含這條路線的總車資 (也就是總票價)。這個屬性只會針對大眾運輸要求傳回,且僅適用於提供車資資訊的大眾運輸服務供應商。 詳情請參閱「車資」。 |
票價
路線的總車資。
{
"currency" : "USD",
"value" : 6,
"text" : "$6.00"
}
| 欄位 | 必填 | 類型 | 說明 |
|---|---|---|---|
|
required | 字串 |
ISO 4217 貨幣代碼,表示金額採用的貨幣。 |
|
required | 字串 |
以所要求語言格式化的總車資金額。 |
|
required | 數字 |
總車資金額,以指定的貨幣為單位。 |
DistanceMatrixElementStatus
OK表示回應包含有效的結果。-
NOT_FOUND表示無法針對這個起點和/或目的地組合進行地理編碼。 -
ZERO_RESULTS表示系統在起點和目的地之間找不到路線。 -
MAX_ROUTE_LENGTH_EXCEEDED表示要求的路線過長,無法處理。
TextValueObject
包含數值及其格式化文字表示法的物件。
| 欄位 | 必填 | 類型 | 說明 |
|---|---|---|---|
|
required | 字串 |
字串值。 |
|
required | 數字 |
數值。 |