指定路線位置

如要計算路線,您必須指定路線起點和路線目的地的最小值。您可以在路線上將這些位置定義為「路線控點」

除了起點和目的地外,您還可以指定不同的路線控點類型,以及路線的路線控點。如需詳細資訊和範例,請參閱下列主題:

指定路線的位置

您可以建立 Waypoint (REST)Waypoint (gRPC) 物件來表示位置。在路線控點定義中,您可以透過下列任一方式指定位置:

您可以透過相同方式在要求中指定所有路線控點的位置,也可以混用兩者。舉例來說,您可以使用起點路線控點的經緯度座標,以及目的地路線控點的地點 ID。

為提高效率和準確度,請使用地點 ID,而不要使用經緯度座標或地址字串。地點 ID 具有唯一性,並為路線規劃 (例如存取點和流量變數) 提供地理編碼優勢。這些建議可避免因其他指定地區方式而引發的下列情況:

  • 如果使用經緯度座標,系統可能會將地點貼合距離這些座標最近的道路,而這可能不是通往該地的存取點,甚至是快速或安全抵達目的地的道路。
  • 地址字串必須先由 Routes API 進行地理編碼,才能將其轉換為經緯度座標,系統才能計算路線。這項轉換可能會影響成效。

將地區指定為地點 ID

您可以使用地點 ID 指定路線控點的位置。由於經緯度座標會對齊道路,因此在某些情況下,地點 ID 可以提供更好的結果。

Geocoding APIPlaces API (包括 Place Autocomplete) 擷取地點 ID。如要進一步瞭解地點 ID,請參閱地點 ID 總覽

以下範例使用 placeId 屬性傳遞 origindestination 的地點 ID:

{
  "origin":{
    "placeId": "ChIJayOTViHY5okRRoq2kGnGg8o"
  },
  "destination":{
    "placeId": "ChIJTYKK2G3X5okRgP7BZvPQ2FU"
  },
  ...
}

將位置指定為經緯度座標

如要在路線控點中定義位置,請使用經緯度座標指定位置 (REST)Location(gRPC)

舉例來說,您可以使用 latitudelongitude 座標指定路徑 origindestination 的路線控點:

{
  "origin":{
    "location":{
      "latLng":{
        "latitude": 37.419734,
        "longitude": -122.0827784
      }
    }
  },
  "destination":{
    "location":{
      "latLng":{
        "latitude": 37.417670,
        "longitude": -122.079595
      }
    }
  },
...
}

以地址字串的形式指定位置

地址字串是以字串表示的常值,例如 "1600 Amphitheatre Parkway, Mountain View, CA, USA。地理編碼是指將地址字串轉換成經緯度座標 (例如緯度 37.423021 和經度 -122.083739) 的程序。

如果您將地址字串做為路線控點位置傳遞,Routes API 會在內部對字串進行地理編碼,將字串轉換成經緯度座標。

舉例來說,如要計算路線,您必須使用地址字串為路徑 origindestination 指定路線控點:

{
  "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 Codes 以經緯度座標顯示,並以數字和字母的形式呈現,而非包含街道名稱和號碼的地址。

Google 開發了 Plus Codes,為所有人提供地址的好處。Plus Code 是衍生自經緯度座標的編碼位置參照,代表面積 1/8000 度乘方數 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」格式合併當地代碼,以及地址中的城市、州/省、郵遞區號和國家/地區部分。

    例如,使用 Plus Codes 指定路徑 origindestination 的路線控點來計算路徑:

    {
      "origin":{
        "address": "849VCWC8+R9"
      },
      "destination":{
        "address": "CRHJ+C3 Stanford, CA 94305, USA"
      },
      "travelMode": "DRIVE"
    }

Google 地圖平台 API 支援 Plus Codes,包括 Place AutocompletePlace DetailsDirections APIGeocoding API。舉例來說,您可以使用 Geocoding API 對經緯度座標指定的位置進行反向地理編碼,以判斷該位置的 Plus Code。