「地理編碼」一詞通常是指將清楚易懂的地址轉譯成地圖上的某個位置。相反地,將地圖上的某個位置轉譯成清楚易懂的地址的程序稱為「反向地理編碼」。
反向地理編碼要求
必要參數
latlng
:緯度與經度座標,指出您希望以最接近的使用者可理解地址指定位置。key
:應用程式的 API 金鑰。這個金鑰會識別您的應用程式,以便管理配額。瞭解如何取得金鑰。
選用參數
以下是您可以在反向地理編碼要求中加入的選用參數:
language
:傳回結果的語言。- 查看支援語言清單。Google 會經常更新支援的語言,因此這份清單可能未涵蓋所有情況。
- 如果未提供
language
,地理編碼器會嘗試使用Accept-Language
標頭中指定的偏好語言,或傳送要求的來源網域。 - 地理編碼器會盡可能提供使用者和街道地址可判讀的街道地址。為了達到這個目標,系統會傳回當地語言的街道地址,然後視需要將音譯為使用者可理解的指令碼,並觀察偏好的語言。所有其他地址都會以偏好語言傳回。所有地址元件都傳回相同的語言,並從第一個元件中選擇。
- 如果偏好語言不提供名稱,地理編碼器會使用最接近的值。
region
:區碼,指定為 ccTLD (「頂層網域」) 的兩位字元值這個參數也會根據適用法律來影響結果。result_type
— 指定一或多個地址類型的篩選器,並以直立線 (|
) 分隔。如果參數包含多個地址類型,API 會傳回與任何類型相符的所有地址。處理注意事項:result_type
參數不會將搜尋範圍限制在指定的地址類型。反而,result_type
會把結果當做搜尋後篩選器:API 會擷取指定latlng
的所有結果,然後捨棄不符合指定地址類型的結果。支援的值如下:street_address
表示精確的街道地址。route
表示具名道路 (例如「國道一號」)。intersection
表示主要的十字路口,通常有兩條主要道路交會。political
表示政治實體。這個類型通常表示某些行政管理區的多邊形區域。country
表示國家政治實體,且通常是地理編碼器所傳回的最高順位類型。administrative_area_level_1
表示國家/地區層級底下的第一順位行政實體。在美國境內,這類行政層級是指州。部分國家沒有這類行政層級。在大多數情況下,administrative_area_level_1 簡稱會與 ISO 3166-2 子行政區以及其他廣泛流通的清單密切相符。然而,地理編碼結果是根據多種信號和位置資料計算得出,因此我們對於結果無法做出保證。administrative_area_level_2
表示國家/地區層級底下的第二順位行政實體。在美國境內,這類行政層級是指郡。部分國家沒有這類行政層級。administrative_area_level_3
表示國家/地區層級底下的第三順位行政實體。這個類型表示小型行政單位。部分國家沒有這類行政層級。administrative_area_level_4
表示國家/地區層級底下的第四順位行政實體。這個類型表示小型行政單位。部分國家沒有這類行政層級。administrative_area_level_5
表示國家/地區層級底下的第五順位行政實體。這個類型表示小型行政單位。部分國家沒有這類行政層級。administrative_area_level_6
表示國家/地區層級底下的第六順位行政實體。這個類型表示小型行政單位。部分國家沒有這類行政層級。administrative_area_level_7
表示國家/地區層級底下的第七順位行政實體。這個類型表示小型行政單位。部分國家沒有這類行政層級。colloquial_area
表示實體的常用替代名稱。locality
表示自治城市或鄉鎮的政治實體。sublocality
表示縣市底下的第一順位行政實體。某些地點可能會收到以下其中一種額外類型:sublocality_level_1
到sublocality_level_5
。每個鄉鎮市區層級都是一個行政實體。數字越大表示地理區域越小。neighborhood
表示具名社區premise
表示具名地點,通常是建築物或具有共同名稱的建築物群subpremise
表示具名地點底下的第一順位實體,通常是具有共同名稱的建築物群中的單一建築物plus_code
表示經過編碼的位置參照,衍生自經緯度。對於沒有詳細地址的地點,Plus Codes 可用於取代街道地址,例如無編號的建築物或無名街道。詳情請參閱 https://plus.codes。postal_code
表示國家/地區郵政地址所使用的郵遞區號。natural_feature
表示明顯的自然地貌。airport
表示機場。park
表示具名公園。point_of_interest
表示具名搜尋點。一般來說,這些「搜尋點」是當地著名的實體,無法輕易歸入其他類別,例如「帝國大廈」或「艾菲爾鐵塔」。
location_type
— 一或多個地點類型的篩選器,以管道 (|
) 分隔。如果參數包含多個位置類型,API 會傳回與任何類型相符的所有地址。處理注意事項:location_type
參數不會限制搜尋特定位置類型。反而,location_type
會作為搜尋後篩選器:API 會擷取指定latlng
的所有結果,然後捨棄不符合指定位置類型的結果。可能出現的值如下:"ROOFTOP"
只會傳回 Google 會將街道資訊準確性的街道地址。"RANGE_INTERPOLATED"
只會傳回在兩個精確點之間 (例如十字路口) 插入的約略地址 (通常是在道路上)。內插範圍通常表示街道地址沒有屋頂地理編碼。"GEOMETRIC_CENTER"
只會傳回地點 (例如折線) 或多邊形 (區域) 等幾何中心的中心。"APPROXIMATE"
只會傳回地址為約略地址。
如果同時提供 result_type
和 location_type
篩選器,API 只會傳回同時符合 result_type
和 location_type
值的結果。如果不接受任何篩選器值,API 會傳回 ZERO_RESULTS
。
反向地理編碼的範例
下列查詢包含布魯克林某位置的經緯度值:
https://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&key=YOUR_API_KEY
上述查詢傳回下列結果:
{
"results" : [
{
"address_components" : [
{
"long_name" : "277",
"short_name" : "277",
"types" : [ "street_number" ]
},
{
"long_name" : "Bedford Avenue",
"short_name" : "Bedford Ave",
"types" : [ "route" ]
},
{
"long_name" : "Williamsburg",
"short_name" : "Williamsburg",
"types" : [ "neighborhood", "political" ]
},
{
"long_name" : "Brooklyn",
"short_name" : "Brooklyn",
"types" : [ "sublocality", "political" ]
},
{
"long_name" : "Kings",
"short_name" : "Kings",
"types" : [ "administrative_area_level_2", "political" ]
},
{
"long_name" : "New York",
"short_name" : "NY",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "United States",
"short_name" : "US",
"types" : [ "country", "political" ]
},
{
"long_name" : "11211",
"short_name" : "11211",
"types" : [ "postal_code" ]
}
],
"formatted_address" : "277 Bedford Avenue, Brooklyn, NY 11211, USA",
"geometry" : {
"location" : {
"lat" : 40.714232,
"lng" : -73.9612889
},
"location_type" : "ROOFTOP",
"viewport" : {
"northeast" : {
"lat" : 40.7155809802915,
"lng" : -73.9599399197085
},
"southwest" : {
"lat" : 40.7128830197085,
"lng" : -73.96263788029151
}
}
},
"place_id" : "ChIJd8BlQ2BZwokRAFUEcm_qrcA",
"types" : [ "street_address" ]
},
... Additional <code>results[]</code> ...
請注意,反向 Geocoder 會傳回一個以上的結果。"formatted_address"
結果不僅是郵寄地址,也可以使用任何表述地理的方式為地點命名。舉例來說,針對芝加哥市的某個定點進行地理編碼時,這個地理編碼定點可以標示為街道地址、城市 (芝加哥)、州名 (伊利諾州) 或國家/地區 (美國)。對 Geocoder 而言,這些都是「地址」。反向地理編碼器會將這些類型傳回為有效的結果。
反向地理編碼器會比對政治實體 (國家/地區、州/省、城市和社區)、街道地址和郵遞區號。
下方顯示先前查詢傳回 formatted_address
值的完整清單。
{
"plus_code" : {
"compound_code" : "P27Q+MCM New York, NY, USA",
"global_code" : "87G8P27Q+MCM"
},
"results" : [
{
"formatted_address" : "277 Bedford Ave, Brooklyn, NY 11211, USA",
...
"types" : [ "street_address" ]
},
{
"formatted_address" : "279 Bedford Ave, Brooklyn, NY 11211, USA",
...
"types" : [ "premise" ]
},
{
"formatted_address" : "277 Bedford Ave, Brooklyn, NY 11211, USA",
...
"types" : [ "establishment", "point_of_interest" ]
},
{
"formatted_address" : "291-275 Bedford Ave, Brooklyn, NY 11211, USA",
...
"types" : [ "route" ]
},
{
"formatted_address" : "P27Q+MC New York, NY, USA",
...
"types" : [ "plus_code" ]
},
{
"formatted_address" : "South Williamsburg, Brooklyn, NY, USA",
...
"types" : [ "neighborhood", "political" ]
},
{
"formatted_address" : "Brooklyn, NY 11211, USA",
...
"types" : [ "postal_code" ]
},
{
"formatted_address" : "Williamsburg, Brooklyn, NY, USA",
...
"types" : [ "neighborhood", "political" ]
},
{
"formatted_address" : "Kings County, Brooklyn, NY, USA",
...
"types" : [ "administrative_area_level_2", "political" ]
},
{
"formatted_address" : "Brooklyn, NY, USA",
...
"types" : [ "political", "sublocality", "sublocality_level_1" ]
},
{
"formatted_address" : "New York, NY, USA",
...
"types" : [ "locality", "political" ]
},
{
"formatted_address" : "New York, USA",
...
"types" : [ "administrative_area_level_1", "political" ]
},
{
"formatted_address" : "United States",
...
"types" : [ "country", "political" ]
}
],
"status" : "OK"
}
這個 API 會傳回不同類型的地址,從最具體的街道地址到較籠統的政治實體,例如社區、城市、郡/縣和州/省。最明確的地址通常是最顯眼的結果,如本例所示。如要比對特定類型的地址,請參閱下方的根據類型限制結果部分。因此,彼此之間的相對位置可能會有所不同。
依類型篩選的反向地理編碼
以下範例會篩選傳回的地址,只納入位置類型為 ROOFTOP
和 street_address
的地址類型的地址。
https://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452
&location_type=ROOFTOP&result_type=street_address&key=YOUR_API_KEY
注意:這些篩選器僅適用於反向地理編碼。
反向地理編碼回應
反向地理編碼回應的格式與地理編碼回應相同。請參閱「地理編碼回應」一節。 以下是反向地理編碼回應中的狀態碼。
反向地理編碼狀態碼
地理編碼回應物件中的 "status"
欄位除了包含要求的狀態之外,還可能包含偵錯資訊,方便您追溯反向地理編碼失敗的原因。"status"
欄位可能包含下列值:
"OK"
表示沒有發生任何錯誤,且傳回至少一個地址。"ZERO_RESULTS"
表示反向地理編碼成功,但沒有傳回任何結果。如果地理編碼器在遠端位置傳遞latlng
,就有可能發生這種情況。"OVER_QUERY_LIMIT"
表示您已超過配額。"REQUEST_DENIED"
表示要求遭拒。這可能是因為要求含有result_type
或location_type
參數,但不含 API 金鑰。"INVALID_REQUEST"
通常表示下列其中一項:- 缺少查詢 (
address
、components
或latlng
)。 - 提供的
result_type
或location_type
無效。
- 缺少查詢 (
"UNKNOWN_ERROR"
表示伺服器發生錯誤,因此無法處理要求。如果再試一次,要求可能會成功。
反向地理編碼加號
地理編碼回應中的 plus_code
欄位包含加號,可概略設定查詢的經緯度。此外,JSON 結果陣列在多數情況下都會包含具有 plus_code
類型的完整地理編碼結果,以及包含 Plus Code 的地址。解碼後的 Plus Code 和要求點之間的距離應小於 10 公尺。