計算導航這項工作不僅費時且需要耗用大量資源。如果可以,請事先計算已知的地址 (使用此處描述的服務),並將算出的結果儲存在您個人設計的暫時快取中。
注意︰使用 Google Directions API 不需要 Maps API 金鑰!
使用限制
Google Directions API 有查詢限制,每天只能發出 2500 個導航要求。進行個別導航要求時,每個要求最多可包含 8 個中繼路點。 Google Maps Premier 客戶每天最多可查詢 100,000 個導航要求,而每個要求中最多可包含 23 個路點。
導航要求
Directions API 要求必須使用下列其中一種格式:
http://maps.google.com/maps/api/directions/output?parameters
其中
output
可為下列任一個值︰json
(建議使用) 表示輸出格式為 JavaScript 物件註解 (JSON)xml
表示輸出格式為 XML
有些參數為必要,而有些參數則為選用。跟網址的標準一樣,這裡的所有參數都會以
&
字元分隔。參數清單和其可能的值列舉如下。Directions API 使用下列網址參數來定義導航要求︰
origin
(必要) — 您要計算導航的地址或經/緯度文字值。*destination
(必要) — 您要計算導航的地址或經/緯度文字值。*mode
(選用,預設為driving
) — 指定計算導航時要使用的交通模式。有效值指定於「交通模式」中。waypoints
(選用) 指定路點陣列。路點會透過讓路線行經指定位置來修改路線。路點可以指定為經/緯度座標或可進行地理編碼的地址。(如需路點的進一步資訊,請參閱「在路線上使用路點」)。
alternatives
(選用),設為true
時,表示「導航」服務可在回應中提供一個以上的替代路線。請注意,提供替代路線可能會延長伺服器的回應時間。avoid
(選用) 表示計算的路線應避開指定的功能。目前這個參數支援下列兩個引數︰
tolls
表示計算的路線應避開收費道路/橋。highways
表示計算的路線應避開高速公路。
language
(選用):結果傳回時使用的語言。請參閱「支援的網域語言清單」。請注意,我們經常更新支援的語言,因此這份清單可能會有遺漏。如果language
不受支援,「導航」服務會嘗試使用瀏覽器的預設語言。您也可以使用http://map.google.com
的本地化網域來明確調整結果。如需詳細資訊,請參閱「區域自訂調整」。sensor
(必要) — 指出導航要求的來源裝置是否附有位置感應器。這個值必須是true
或false
。
交通模式
當您計算導航時,您可以指定要使用哪一種運輸系統
mode
。根據預設,導航會以 driving
導航來計算。目前支援的交通模式有下列幾種︰driving
(預設) 表示使用道路網的標準行車導航。walking
要求使用人行道及行人徒步路徑 (如果有的話) 的步行導航。bicycling
要求使用單車道及專用道路 (目前只適用於美國) 的單車導航。
warnings
以供您向使用者顯示。使用路線上的路點
使用 Directions API 計算路線時,您必須同時指定「路點」。路點可讓您計算繞道其他位置的路線,因此傳回的路線會通過指定的路點。
waypoints
參數會指定路點,路點是由一個以上的地址或位置組成,並以管道字元 |
隔開。例如...http://maps.google.com/maps/api/directions/json?origin=Boston,MA&destination=Concord,MA&waypoints=Charlestown,MA|Lexington,MA&sensor=false
或者您也可以選擇將
optimize:true
傳送到 waypoints
做為第一個引數,如此一來,「導航」服務就可以以更有效率的順序來重新安排路點,讓路線最佳化。這些順序會傳回到 routes
物件的 waypoint_order
欄位中。waypoint_order
欄位會傳回以零為基準的值。例如...http://maps.google.com/maps/api/directions/json?origin=Adelaide,SA&destination=Adelaide,SA&waypoints=optimize:true|Barossa+Valley,SA|Clare,SA|Connawarra,SA|McLaren+Vale,SA&sensor=false
"waypoint_order": [ 1, 0, 2, 3 ]
限制
導航的計算方式必須遵守某些限制︰使用
avoid
參數可指定限制,另外,其中會有一個引數指定要避開的限制。目前支援的限制有兩個︰avoid=tolls
avoid=highways
區域自訂調整
您也可以使用預設的
http://maps.google.com/
網域之外的其他網域,來讓「導航」服務只傳回特定區域的結果。您可以使用任何網域,只要該網域中的主要「Google 地圖」應用程式已啟用行車導航。舉例
http://maps.google.es/maps/api/directions/json?origin=Toledo&destination=Madrid&sensor=false (會找到,因為都是西班牙的城市)
http://maps.google.com/maps/api/directions/json?origin=Toledo&destination=Madrid&sensor=false (找不到,因為「Toledo」會被解讀為美國俄亥俄州的城市)
導航回應
JSON 輸出 / XML 輸出
你可以看這裡
導航回應元素
導航回應包含兩個根元素︰
"status"
包含要求的中繼資料。OK
表示回應包含有效的result
。NOT_FOUND
表示在要求的起點、目的地或路點指定的位置中,至少有一個位置無法進行地理編碼。ZERO_RESULTS
表示系統在起點和目的地之間找不到路線。MAX_WAYPOINTS_EXCEEDED
表示要求中提供了太多的waypoints
。允許的waypoints
上限為 8,且包含起點和目的地 ( Google Maps Premier 客戶的要求最多可包含 23 個路點)。INVALID_REQUEST
表示提供的要求無效。OVER_QUERY_LIMIT
表示服務在允許的時間內已從您的應用程式接收到太多要求。REQUEST_DENIED
表示服務拒絕您的應用程式使用導航服務。UNKNOWN_ERROR
表示伺服器發生錯誤,無法處理導航要求。如果您再試一次,可能會成功進行要求。"routes"
包含一個由起點到目的地的路線陣列。包含巢狀航段和步驟。即使服務並未傳回任何結果 (例如起點和/或目的地不存在時),它還是會傳回一個空的routes
陣列 (XML 回應是由零或更多的
元素組成)。路線也包含版權,所以您必須在顯示路線資訊時同時顯示警告來提醒使用者。routes
欄位裡的每個路線可能包含下列欄位︰summary
包含路線的簡短文字說明,適用於命名路線和區分替代路線。legs[]
包含一個陣列,其中包含指定路線中兩個位置之間路線的航段相關資訊。每指定一個路點或目的地時,就會有一個不同的航段 (如果路線沒有路點,則legs
陣列中只會包含一個航段)。每個航段包含一系列的steps
。每個航段可能包含下列欄位︰steps[]
包含一個步驟陣列,指出旅途中航段每個不同的步驟資訊。步驟是導航路線中最小的組成單位,不僅描述指示,同時也包含距離和期間資訊。html_instructions
包含此步驟的格式化指示,以 HTML 文字字串表示。distance
包含此步驟到下個步驟所涵蓋的距離。如果沒有距離資訊,則不必定義這個欄位。duration
包含執行這個步驟直到下個步驟通常所需的時間。如果沒有時間資訊,則不必定義這個欄位。start_location
包含此步驟起點的位置,以一組lat
和lng
欄位表示。end_location
包含此步驟起點的位置,以一組lat
和lng
欄位表示。distance
表示這個航段所涵蓋的總距離(如果距離未知,這些欄位可能不會出現),欄位中包含下列元素︰value
表示距離 (單位為公尺)text
中的距離表示法為人類可讀的格式,顯示單位與起點使用的單位相同,且使用的語言與要求的指定語言相同。(例如在美國境內,起點會使用英哩和英呎為單位)。請注意,不管顯示的文字使用何種單位系統,distance.value
欄位中永遠包含一個以公尺表示的值。duration
表示這段旅程的總期間(如果期間未知,這些欄位可能不會出現),欄位中包含下列元素︰value
表示期間 (單位為秒)text
包含期間 (人類可讀的表示法)。start_location
包含這個航段的起點經度/緯度座標。由於 Directions API 會使用離起點和終點處最接近的交通選項 (通常是道路) 來計算位置之間的導航,因此start_location
可能和這個航段的起點不同 (例如某一道路不位於起點附近)。end_location
包含這個航段的指定目的地經度/緯度座標。由於 Directions API 會使用離起點和終點處最接近的交通選項 (通常是道路) 來計算位置之間的路線,end_location
可能和這個航段的目的地不同 (例如某一道路不位於目的地附近)。start_address
包含人類可讀格式的地址 (通常是街道地址),代表這個航段的start_location
。end_addresss
包含人類可讀格式的地址 (通常是街道地址),代表這個航段的end_location
。waypoint_order
包含一個陣列,指定計算的路線中任何路點的順序。如果傳送optimize:true
到要求的waypoints
參數中 ,這些路點可能會重新排序。overview_path
包含一個物件,其中存放了一個已編碼的points
和levels
陣列,用來代表結果導航的概略 (順暢) 路徑。copyrights
包含這個路線中要顯示的版權文字。您必須自行處理並顯示這項資訊。warnings[]
包含一個警告陣列,以在顯示這些導航時同時顯示。您必須自行處理並顯示這些警告。
可以看這裡。
--
詳情請參閱 這裡
沒有留言:
張貼留言