如要計算路線矩陣,您至少必須指定一個路線起點和一個路線目的地的位置。
指定路線位置
您可以建立路徑點 (REST) 或路徑點 (gRPC) 物件,以表示位置。在路標定義中,您可以使用下列任一方式指定位置:
您可以在要求中以相同的方式指定所有路線點的位置,也可以混合使用。舉例來說,您可以使用經緯度座標做為原點路標,並使用地點 ID 做為目的地路標。
為提高效率和準確度,請使用地點 ID,而非經緯度座標或地址字串。地點 ID 是明確的唯一 ID,可為路徑規劃提供地理編碼優勢,例如存取點和流量變數。這類功能可避免使用其他方式指定位置時,發生下列情況:
- 使用經緯度座標可能會導致位置連結至最靠近這些座標的道路,而這可能不是物件存取點,甚至不是快速或安全抵達目的地的道路。
- 地址字串必須先經過 Routes API 的地理編碼,才能轉換為經緯度座標,系統才能計算路線。這項轉換可能會影響成效。
將地點指定為地點 ID
您可以使用地點 ID 指定路標的位置。由於經度和緯度座標會對齊道路,因此在某些情況下,地點 ID 可能會提供較佳的結果。
從 Geocoding API 和 Places API (包括 Place Autocomplete) 擷取地點 ID。如要進一步瞭解地點 ID,請參閱「地點 ID 總覽」。
以下範例使用 placeId
屬性,為 origin
和 destination
傳遞地點 ID:
{ "origin":{ "placeId": "ChIJayOTViHY5okRRoq2kGnGg8o" }, "destination":{ "placeId": "ChIJTYKK2G3X5okRgP7BZvPQ2FU" }, ... }
以經緯度座標指定位置
如要在路線控點中定義位置,請使用緯度/經度座標指定 Location (REST) 或 Location(gRPC)。
例如,使用 latitude
和 longitude
座標,為路線 origin
和 destination
指定路線點:
{ "origin":{ "location":{ "latLng":{ "latitude": 37.419734, "longitude": -122.0827784 } } }, "destination":{ "location":{ "latLng":{ "latitude": 37.417670, "longitude": -122.079595 } } }, ... }
將位置指定為地址字串
地址字串是指由字串表示的文字地址 (例如「1600 Amphitheatre Parkway, Mountain View, CA」)。地理編碼是指將地址字串轉換為經緯度座標 (例如緯度 37.423021 和經度 -122.083739) 的程序。
當您將地址字串傳遞為路標的位置時,Routes API 會在內部將字串地理編碼,將其轉換為經緯度座標。
舉例來說,如要計算路線,您可以使用地址字串為路線 origin
和 destination
指定路線控點:
{ "origin":{ "address": "1600 Amphitheatre Parkway, Mountain View, CA" }, "destination":{ "address": "450 Serra Mall, Stanford, CA 94305, USA" }, ... }
在這個範例中,Routes API 會將兩個地址編碼,將其轉換為經緯度座標。
如果地址值含糊不清,Routes API 可能會叫用搜尋作業,以便從類似的地址中區分開來。舉例來說,「1st Street」可以是「1st street NE」或「1st St SE」的完整值或部分值。這個結果可能與 Geocoding API 傳回的結果不同。您可以避免使用地點 ID 造成的誤解。
設定地址的區域
如果您傳遞不完整的地址字串做為路標的位置,API 可能會使用錯誤的地理編碼經緯度座標。舉例來說,您可以提出要求,指定「Toledo」為駕車路線的起點,「Madrid」為目的地:
{ "origin":{ "address": "Toledo" }, "destination":{ "address": "Madrid" }, "travelMode": "DRIVE" }
在這個範例中,「Toledo」會解讀為美國俄亥俄州的城市,而非西班牙的城市。因此,要求會傳回空陣列,表示沒有路徑:
{ [] }
您可以加入 regionCode
參數,將 API 設為只傳回特定區域的結果。這個參數會將區碼指定為 ccTLD (「頂層網域」) 的兩位字元值。大多數 ccTLD 代碼與 ISO 3166-1 代碼相同,但有一些需要注意的例外情況。舉例來說,英國的 ccTLD 是「uk」(.co.uk),而 ISO 3166-1 代碼是「gb」(技術上是「大不列顛與北愛爾蘭聯合王國」實體)。
包含 regionCode
參數的「Toledo」到「Madrid」路線指示要求會傳回適當的結果,因為「Toledo」會解讀為西班牙的城市:
{ "origin":{ "address": "Toledo" }, "destination":{ "address": "Madrid" }, "travelMode": "DRIVE", "regionCode": "es" }
回應現在包含從西班牙托雷多的路線計算結果,到達西班牙馬德里:
{ "routes": [ { "distanceMeters": 75330, "duration": "4137s", ... } ] }
將位置指定為 Plus Code
許多人沒有確切的地址,因此可能無法順利收到貨物。或者,有地址的使用者可能會偏好在更具體的地點 (例如後門或裝卸碼頭) 接受商品。
對於沒有實際地址的人物或地點,Plus Code 就類似街道地址。與街道名稱和門牌號碼的地址不同,Plus code 是以經緯度座標為依據,並以數字和英文字母顯示。
Google 開發 Plus Codes,讓所有人和所有事物都能享有地址的好處。Plus Code 是經過編碼的位置參照,衍生自經緯度座標,表示面積不超過 1/8000 度 x 1/8000 度 (在赤道區約 14 公尺 x 14 公尺) 的區域。對於沒有詳細地址的地點,例如無編號的建築物或無名街道,您可以使用 Plus Codes 取代街道地址。
Plus Code 格式必須是全球代碼或複合代碼:
- 全球代碼由 4 個半形字元的區碼和 6 個半形字元以上的地區代碼組成。
舉例來說,如果地址是「1600 Amphitheatre Parkway, Mountain View, CA」,全球代碼為「849V」,而區域代碼則為「CWC8+R9」。接著,您可以使用完整的 10 個半形字元 Plus Code,將位置值指定為「849VCWC8+R9」。
- 複合代碼由 6 個半形字元以上的地區代碼和明確的位置組成。
舉例來說,「450 Serra Mall, Stanford, CA 94305, USA」的本地代碼為「CRHJ+C3」。如果是複合地址,請將當地代碼與地址的城市、州/省、郵遞區號和國家/地區部分結合,格式為「CRHJ+C3 加利福尼亞州 94305 加州史丹佛」,其中「94305」是郵遞區號。
舉例來說,您可以使用 Plus Codes 為路線
origin
和destination
指定路線控點,藉此計算路線:{ "origin":{ "address": "849VCWC8+R9" }, "destination":{ "address": "CRHJ+C3 Stanford, CA 94305, USA" }, "travelMode": "DRIVE" }
Google 地圖平台 API 支援 Plus Code,包括地點自動完成、地點詳細資料、Directions API 和 Geocoding API。舉例來說,您可以使用 Geocoding API 反向地理編碼以經緯度座標指定的位置,判斷位置的 Plus Code。