如要計算路線,至少必須指定路線起點和路線目的地的位置。您可以在路線上將這些位置定義為路線控點。
除了起點和目的地,您還可以指定不同類型的路線控點,以及路線控點的處理方式。如需更多資訊和範例,請參閱下列主題:
指定路線的地點
如要表示位置,請建立 Waypoint (REST) 或 Waypoint (gRPC) 物件。在航點定義中,您可以透過下列任一方式指定位置:
您可以用相同方式指定要求中所有路線控點的位置,也可以混合使用。舉例來說,您可以為起點航點使用經緯度座標,並為目的地航點使用地點 ID。
為提高效率和準確度,請使用地點 ID,而非經緯度座標或地址字串。地點 ID 具有明確的唯一性,可提供路線規劃的地理編碼優勢,例如存取點和交通變數。這有助於避免因其他指定位置方式而導致的下列情況:
- 如果使用經緯度座標,系統可能會將位置對齊至最靠近這些座標的道路,但這條道路可能不是房源的入口,甚至可能無法快速或安全地通往目的地。
- 地址字串必須先由 Routes API 進行地理編碼,轉換為經緯度座標,才能計算路線。這項轉換可能會影響成效。
指定地點 ID 做為位置
您可以使用地點 ID 指定路線控點的位置。由於經緯度座標會貼齊道路,在某些情況下,地點 ID 可能會提供更準確的結果。
從 Geocoding API 和 Places API (新版) (包括 Autocomplete (新版)) 擷取地點 ID。如要進一步瞭解地點 ID,請參閱地點 ID 總覽。
以下範例使用 placeId 屬性,為 origin 和 destination 傳遞地點 ID:
{ "origin":{ "placeId": "ChIJayOTViHY5okRRoq2kGnGg8o" }, "destination":{ "placeId": "ChIJTYKK2G3X5okRgP7BZvPQ2FU" }, ... }
以經緯度座標指定位置
如要定義路線控點的位置,請使用經緯度座標指定位置 (REST) 或位置 (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」(技術上代表「大不列顛暨北愛爾蘭聯合王國」)。
如果「Toledo」到「Madrid」的路線要求包含 regionCode 參數,系統會將「Toledo」解讀為西班牙的城市,並傳回適當結果:
{ "origin":{ "address": "Toledo" }, "destination":{ "address": "Madrid" }, "travelMode": "DRIVE", "regionCode": "es" }
回應現在包含從西班牙托雷多到西班牙馬德里的路線:
{ "routes": [ { "distanceMeters": 75330, "duration": "4137s", ... } ] }
將位置指定為導覽點權杖
導航點權杖是編碼位置和額外路線背景資訊的字串。導航點權杖可提供精確路線,引導至入口、裝卸區或指定上車區附近的特定出入口。這在食物外送或共乘等情況下很有用,因為取貨或下車地點可能不明確。
您可以呼叫 Geocoding API 的 Destinations 方法,取得導航點權杖。
如要指定導覽點權杖:
- 從 Geocoding API 的
SearchDestinations方法取得navigationPointToken。詳情請參閱 Geocoding API 說明文件。 - 傳遞
navigationPointToken即可建立 Waypoint。
以下範例使用 navigation_point_token 屬性,為 origin 和 destination 傳遞導航點權杖:
{ "origin":{ "navigation_point_token": "ENCODED_NAVIGATION_POINT_TOKEN_FOR_ORIGIN" }, "destination":{ "navigation_point_token": "ENCODED_NAVIGATION_POINT_TOKEN_FOR_DESTINATION" }, ... }
以 Plus Code 指定位置
許多人沒有精確的地址,因此難以收到郵件或包裹。或者,有地址的使用者可能偏好在更明確的地點收件,例如後門或裝卸貨碼頭。
對於沒有實際地址的人或地點,Plus Codes 就像街道地址一樣。與含有街道名稱和號碼的地址不同,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 Stanford, CA 94305, USA」。
舉例來說,您可以指定路線的路線控點
origin和destination,並使用 Plus Codes 計算路線:{ "origin":{ "address": "849VCWC8+R9" }, "destination":{ "address": "CRHJ+C3 Stanford, CA 94305, USA" }, "travelMode": "DRIVE" }
Google Maps Platform API 支援 Plus Code,包括自動完成 (新版)、Place Details (新版) 和 Geocoding API。舉例來說,您可以透過 Geocoding API 反向地理編碼經緯度座標指定的位置,判斷該位置的 Plus Code。