地理编码会将地址转换为地图上的某个位置。对地址进行地理编码时,响应包含以下信息:
地理编码请求
地理编码请求是一种 HTTP GET 请求。您可以将地址指定为非结构化字符串:
https://geocode.googleapis.com/v4beta/geocode/address/ADDRESS_STRING
或者,以由查询参数表示的结构化地址组成部分集的形式:
https://geocode.googleapis.com/v4beta/geocode/address?STRUCTURED_ADDRESS
您通常会在处理 HTML 表单中捕获的地址组成部分时使用结构化格式。
将所有其他参数作为网址参数传递,或者对于 API 密钥和字段掩码等参数,在标头中作为 GET 请求的一部分传递。
传递非结构化地址字符串
非结构化地址是指格式为字符串或 Plus Code 的地址。例如,以下示例传递了网址编码的地址字符串“1600 Amphitheatre Parkway, Mountain View, CA”:
https://geocode.googleapis.com/v4beta/geocode/address/1600+Amphitheatre+Parkway,+Mountain+View,+CA?key=API_KEY
请注意,网址中的“+”字符会转换为空格。
您还可以使用 curl 命令发出请求:
curl -H "X-Goog-Api-Key: API_KEY" \ "https://geocode.googleapis.com/v4beta/geocode/address/1600+Amphitheatre+Parkway,+Mountain+View,+CA"
地址可以包含多种类型的特殊字符。例如,“7/1 King St, Concord West”中的“/”。将“/”网址编码为 %2F
:
https://geocode.googleapis.com/v4beta/geocode/address/7%2F1+King+St,+Concord+West?key=API_KEY
另一个常见示例是“#”字符,例如“9500 W Bryn Mawr Ave #650, Rosemont”。将“#”网址编码为 %2FE
:
https://geocode.googleapis.com/v4beta/geocode/address/9500+W+Bryn+Mawr+Ave+%23650,+Rosemont?key=API_KEY
在下一个示例中,您将指定一个非结构化地址字符串作为 Plus Code 849VCWC8+R4
。确保您将“+”字符进行网址编码,编码为 %2B
:
https://geocode.googleapis.com/v4beta/geocode/address/849VCWC8%2BR4?key=API_KEY
传递结构化地址
使用 address
查询参数(类型为 PostalAddress
)指定结构化地址。借助 PostalAddress
对象,您可以在请求中将部分或所有地址组成部分指定为单独的查询参数。
例如,如需仅指定地址的邮政编码,请使用 PostalAddress.postalCode
:
https://geocode.googleapis.com/v4beta/geocode/address?address.postalCode=01062&key=API_KEY
如需指定多个地址组成部分(例如 HTML 表单中捕获的地址组成部分),请使用多个查询参数:
https://geocode.googleapis.com/v4beta/geocode/address?address.addressLines=1600+Amphithreater+Pkwy&address.locality=Mountain+View &address.administrativeArea=CA &key=API_KEY
使用 OAuth 发出请求
Geocoding API v4 支持使用 OAuth 2.0 进行身份验证。如需将 OAuth 与 Geocoding API 搭配使用,必须为 OAuth 令牌分配正确的范围。Geocoding API 支持以下范围,可用于正向地理编码:
https://www.googleapis.com/auth/maps-platform.geocode
- 与所有 Geocoding API 端点搭配使用。https://www.googleapis.com/auth/maps-platform.geocode.address
- 仅与GeocodeAddress
搭配使用,用于正向地理编码。
此外,您还可以为所有 Geocoding API 端点使用常规 https://www.googleapis.com/auth/cloud-platform
范围。该范围在开发期间很有用,但在生产期间则不然,因为这是一个通用范围,允许访问所有端点。
如需了解详情和示例,请参阅使用 OAuth。
地理编码响应
地理编码会返回一个 GeocodeAddressResponse
对象,其中包含 GeocodeResult
对象的 results
数组。每个 GeocodeResult
对象都表示一个地点。
完整的 JSON 对象采用以下格式:
{ "results": [ { "place": "//places.googleapis.com/places/ChIJF4Yf2Ry7j4AR__1AkytDyAE", "placeId": "ChIJF4Yf2Ry7j4AR__1AkytDyAE", "location": { "latitude": 37.422010799999995, "longitude": -122.08474779999999 }, "granularity": "ROOFTOP", "viewport": { "low": { "latitude": 37.420656719708511, "longitude": -122.08547523029148 }, "high": { "latitude": 37.4233546802915, "longitude": -122.0827772697085 } }, "formattedAddress": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA", "postalAddress": { "regionCode": "US", "languageCode": "en", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1600 Amphitheatre Pkwy" ] }, "addressComponents": [ { "longText": "1600", "shortText": "1600", "types": [ "street_number" ] }, { "longText": "Amphitheatre Parkway", "shortText": "Amphitheatre Pkwy", "types": [ "route" ], "languageCode": "en" }, ... ], "types": [ "street_address" ], "plusCode": { "globalCode": "849VCWC8+R4", "compoundCode": "CWC8+R4 Mountain View, CA, USA" } } ] }
必需参数
address
- 要进行地理编码的街道地址或 Plus Code。根据相关国家/地区的邮政服务所使用的地址格式指定地址。应避免使用其他地址元素,例如企业名称以及单元号、房间号或楼层号。街道地址元素应以空格分隔,并进行网址编码,编码为%20
。例如,传递地址“24 Sussex Drive Ottawa ON”时,应采用以下格式: 按如下所示设置 Plus Code 的格式。加号经网址编码为24%20Sussex%20Drive%20Ottawa%20ON
%2B
,空格经网址编码为%20
:- 全局代码是包含 4 个字符的区号和至少包含 6 个字符的区域代码。例如,将“849VCWC8+R9”编码为
849VCWC8%2BR9
。 - 混合代码是至少包含 6 个字符的区域代码,具有明确的位置信息。例如,将“CWC8+R9 Mountain View, CA, USA”编码为
CWC8%2BR9%20Mountain%20View%20CA%20USA
。
- 全局代码是包含 4 个字符的区号和至少包含 6 个字符的区域代码。例如,将“849VCWC8+R9”编码为
可选参数
locationBias
指定要搜索的区域,格式为
Viewport
。 此位置用作偏差,这意味着系统可以返回指定位置附近的结果,包括该区域附近但不在该区域内的结果。将区域指定为矩形视口。矩形是一个纬度-经度视口,表示为两个对角线相对的低点和高点。低点标记矩形的西南角,高点表示矩形的东北角。
视口被视为一个闭合区域,这意味着它包含其边界。纬度范围必须介于 -90 度到 90 度之间(含),经度范围必须介于 -180 度到 180 度之间(含):
- 如果
low
=high
,则视口由该单个点组成。 - 如果
low.longitude
>high.longitude
,则经度范围会反转(视口会跨越 180 度经度线)。 - 如果
low.longitude
= -180 度且high.longitude
= 180 度,则视口包含所有经度。 - 如果
low.longitude
= 180 度且high.longitude
= -180 度,则经度范围为空。 - 如果
low.latitude
>high.latitude
,则纬度范围为空。
必须同时填充下限和上限,并且所表示的框不得为空。空视口会导致错误。
例如,此查询字符串定义了一个完全包含纽约市的视口:
?locationBias.rectangle.low.latitude=40.477398
&locationBias.rectangle.low.longitude=-74.259087 &locationBias.rectangle.high.latitude=40.91618 &locationBias.rectangle.high.longitude=-73.70018 - 如果
languageCode
返回结果所用的语言。
- 请参阅支持的语言列表。Google 会经常更新支持的语言,因此该列表可能并非详尽无遗。
-
如果未提供
languageCode
,API 会默认使用en
。如果您指定的语言代码无效,API 会返回INVALID_ARGUMENT
错误。 - 该 API 会尽力提供用户和当地人都能看懂的街道地址。为了实现这一目标,它会返回本地语言的街道地址,并在必要时根据首选语言将地址音译为用户可读的文字。所有其他地址均以首选语言返回。地址组成部分全部以同一种语言返回,该语言是从第一个组成部分中选择的。
- 如果首选语言中没有相应名称,API 会使用最接近的匹配项。
- 首选语言对 API 选择返回的结果集以及返回顺序有较小的影响。地理编码器会根据语言以不同的方式解读缩写,例如街道类型的缩写,或者在一种语言中有效但在另一种语言中无效的同义词。
regionCode
地区代码,以 双字符 CLDR 代码值表示。没有默认值。大多数 CLDR 代码都与 ISO 3166-1 代码完全一致。
在对地址进行地理编码(即正向地理编码)时,此参数可以影响但不会完全限制服务返回指定区域的结果。在对位置或地点进行地理编码时(反向地理编码或地点地理编码),可以使用此参数设置地址格式。在任何情况下,此参数都可能会根据适用法律影响结果。
位置信息偏差
使用 locationBias
参数指示地理编码服务优先显示给定视口(表示为边界框)中的结果。locationBias
参数定义了此边界框的西南角和东北角的纬度/经度坐标。
例如,针对地址“华盛顿”的地理编码请求可以返回华盛顿特区和美国华盛顿州的结果:
https://geocode.googleapis.com/v4beta/geocode/address/Washington?key=API_KEY
响应的格式如下:
{ "results": [ { "place": "//places.googleapis.com/places/ChIJW-T2Wt7Gt4kRKl2I1CJFUsI", "placeId": "ChIJW-T2Wt7Gt4kRKl2I1CJFUsI", "location": { "latitude": 38.9071923, "longitude": -77.0368707 }, "granularity": "APPROXIMATE", "viewport": { "low": { "latitude": 38.7916449, "longitude": -77.119759 }, "high": { "latitude": 38.9958641, "longitude": -76.909393 } }, "bounds": { "low": { "latitude": 38.7916449, "longitude": -77.119759 }, "high": { "latitude": 38.9958641, "longitude": -76.909393 } }, "formattedAddress": "Washington, DC, USA", "addressComponents": [ { "longText": "Washington", "shortText": "Washington", "types": [ "locality", "political" ], "languageCode": "en" }, ... ], "types": [ "locality", "political" ] }, { "place": "//places.googleapis.com/places/ChIJ-bDD5__lhVQRuvNfbGh4QpQ", "placeId": "ChIJ-bDD5__lhVQRuvNfbGh4QpQ", "location": { "latitude": 47.7510741, "longitude": -120.7401386 }, "granularity": "APPROXIMATE", "viewport": { "low": { "latitude": 45.543541, "longitude": -124.84897389999999 }, "high": { "latitude": 49.0024945, "longitude": -116.91607109999998 } }, "bounds": { "low": { "latitude": 45.543541, "longitude": -124.84897389999999 }, "high": { "latitude": 49.0024442, "longitude": -116.91607109999998 } }, "formattedAddress": "Washington, USA", "addressComponents": [ { "longText": "Washington", "shortText": "WA", "types": [ "administrative_area_level_1", "political" ], "languageCode": "en" }, ... ], "types": [ "administrative_area_level_1", "political" ] } ] }
不过,如果我们添加一个 locationBias
参数,将边界框定义在美国东北部周围,那么此地理编码只会返回华盛顿特区:
https://geocode.googleapis.com/v4beta/geocode/address/Washington?locationBias.rectangle.low.latitude=36.47&locationBias.rectangle.low.longitude=-84.72 &locationBias.rectangle.high.latitude=43.39 &locationBias.rectangle.high.longitude=-65.90 &key=API_KEY
区域偏向
在地理编码请求中,您可以使用 regionCode
参数指示地理编码服务返回偏向特定地区的结果。此参数采用
双字符 CLDR 代码值,用于指定地区偏差。大多数 CLDR 代码都与 ISO 3166-1 代码相同。
regionCode
没有默认值。例如,“Toledo”的地理编码会返回美国和西班牙的结果:
https://geocode.googleapis.com/v4beta/geocode/address/Toledo?key=API_KEY
回答:
{ "results": [ { "place": "//places.googleapis.com/places/ChIJeU4e_C2HO4gRRcM6RZ_IPHw", "placeId": "ChIJeU4e_C2HO4gRRcM6RZ_IPHw", "location": { "latitude": 41.652805199999996, "longitude": -83.5378674 }, "granularity": "APPROXIMATE", "viewport": { "low": { "latitude": 41.579513, "longitude": -83.6944089 }, "high": { "latitude": 41.733036, "longitude": -83.4493851 } }, "bounds": { "low": { "latitude": 41.579513, "longitude": -83.6944089 }, "high": { "latitude": 41.733036, "longitude": -83.4493851 } }, "formattedAddress": "Toledo, OH, USA", "addressComponents": [ { "longText": "Toledo", "shortText": "Toledo", "types": [ "locality", "political" ], "languageCode": "en" }, ... ], "types": [ "locality", "political" ] }, { "place": "//places.googleapis.com/places/ChIJkwyrlqwLag0RiQIn2fdIshM", "placeId": "ChIJkwyrlqwLag0RiQIn2fdIshM", "location": { "latitude": 39.8628296, "longitude": -4.0273067 }, "granularity": "APPROXIMATE", "viewport": { "low": { "latitude": 39.8116682, "longitude": -4.179933 }, "high": { "latitude": 39.9251319, "longitude": -3.8148935 } }, "bounds": { "low": { "latitude": 39.8116682, "longitude": -4.179933 }, "high": { "latitude": 39.9251319, "longitude": -3.8148935 } }, "formattedAddress": "Toledo, España", "addressComponents": [ { "longText": "Toledo", "shortText": "Toledo", "types": [ "administrative_area_level_4", "political" ], "languageCode": "es" }, ... ], "types": [ "administrative_area_level_4", "political" ] }, ... ] }
如果地理编码请求中包含 regionCode=es
(西班牙),则“托莱多”的地理编码只会返回西班牙的结果:
https://geocode.googleapis.com/v4beta/geocode/address/Toledo?regionCode=es&key=API_KEY