計算導航這項工作不僅費時且需要耗用大量資源。如果可以,請事先計算已知的地址 (使用此處描述的服務),並將算出的結果儲存在您個人設計的暫時快取中。
注意︰使用 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=tollsavoid=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[]包含一個警告陣列,以在顯示這些導航時同時顯示。您必須自行處理並顯示這些警告。
可以看這裡。
--
詳情請參閱 這裡
沒有留言:
張貼留言