对位置进行反向地理编码

欧洲经济区 (EEA) 开发者

反向地理编码会将地图位置转换为直观易懂的地址。您可以使用位置的纬度和经度坐标来表示地图位置。

对某个位置进行反向地理编码时,响应包含以下内容:

此 API 会返回不同类型的地址,从最具体的街道地址到不那么具体的政治实体,例如街区、市、县和州。最准确的地址通常是第一个结果。如果您想匹配特定类型的地址,请使用 types 参数。

反向地理编码请求

反向地理编码请求是 HTTP GET 请求。您可以将位置 指定为非结构化字符串

https://geocode.googleapis.com/v4/geocode/location/LATITUDE,LONGITUDE

也可以指定为一组结构化的纬度和经度 坐标,以查询参数表示:

https://geocode.googleapis.com/v4/geocode/location?location.latitude=LATITUDE&location.longitude=LONGITUDE

在处理 HTML 表单中捕获的位置组成部分时,您通常会使用结构化格式。

传递所有其他参数时,请使用网址参数;对于 API 密钥或字段掩码等参数,请在标头中传递,作为 GET 请求的一部分。例如:

传递非结构化位置字符串

非结构化位置是指格式为以逗号分隔的纬度和经度坐标字符串的位置:

https://geocode.googleapis.com/v4/geocode/location/37.4225508,-122.0846338?key=API_KEY

或者在 curl 命令中:

curl -X GET -H 'Content-Type: application/json' \
-H "X-Goog-Api-Key: API_KEY" \
"https://geocode.googleapis.com/v4/geocode/location/37.4225508,-122.0846338"

传递结构化位置

使用 location 查询参数(类型为 LatLng)指定结构化位置。 借助 LatLng 对象,您可以将纬度和经度指定为单独的查询参数:

https://geocode.googleapis.com/v4/geocode/location?location.latitude=37.4225508&location.longitude=-122.0846338&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.location - 仅与 GeocodeLocation 搭配使用,用于反向地理编码。

此外,您还可以将通用 https://www.googleapis.com/auth/cloud-platform 范围用于所有 Geocoding API 方法。该作用域在开发期间非常有用,但在生产环境中则不适用,因为它是一个通用作用域,允许访问所有方法。

如需了解详情和示例,请参阅使用 OAuth

反向地理编码响应

反向地理编码会返回一个 GeocodeLocationResponse 对象,其中包含:

  • results 数组,其中包含表示地点的 GeocodeResult 对象。

    反向地理编码器会在 results 数组中返回多个结果。这些结果不仅有邮政地址,还包括对某个位置进行的任何地理位置上的命名。例如,对芝加哥市的某个点进行地理编码时,经过地理编码的点可以标注为街道地址、城市(芝加哥)、所在州(伊利诺伊州)或国家/地区(美国)。这些对地理编码器来说都是“地址”。反向地理编码器会将这些类型中的任何一种作为有效结果返回。

  • plusCode 字段(类型为 PlusCode)包含最能近似请求中纬度和经度的 Plus Code。此外,results 数组的每个元素都包含一个 Plus Code。解码后的 Plus Code 与请求点之间的距离小于 10 米。

完整的 JSON 对象采用以下形式:

{
  "results": [
    {
      "place": "//places.googleapis.com/places/ChIJV-FZF7i7j4ARo4ZOUoecZFU",
      "placeId": "ChIJV-FZF7i7j4ARo4ZOUoecZFU",
      "location": {
        "latitude": 37.422588300000008,
        "longitude": -122.0846489
      },
      "granularity": "ROOFTOP",
      "viewport": {
        "low": {
          "latitude": 37.421239319708512,
          "longitude": -122.0859978802915
        },
        "high": {
          "latitude": 37.423937280291511,
          "longitude": -122.08329991970851
        }
      },
      "formattedAddress": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
      "addressComponents": [
        {
          "longText": "1600",
          "shortText": "1600",
          "types": [
            "street_number"
          ]
        },
        {
          "longText": "Amphitheatre Parkway",
          "shortText": "Amphitheatre Pkwy",
          "types": [
            "route"
          ],
          "languageCode": "en"
        },
        {
          "longText": "Mountain View",
          "shortText": "Mountain View",
          "types": [
            "locality",
            "political"
          ],
          "languageCode": "en"
        },
        {
          "longText": "Santa Clara County",
          "shortText": "Santa Clara County",
          "types": [
            "administrative_area_level_2",
            "political"
          ],
          "languageCode": "en"
        },
        {
          "longText": "California",
          "shortText": "CA",
          "types": [
            "administrative_area_level_1",
            "political"
          ],
          "languageCode": "en"
        },
        {
          "longText": "United States",
          "shortText": "US",
          "types": [
            "country",
            "political"
          ],
          "languageCode": "en"
        },
        {
          "longText": "94043",
          "shortText": "94043",
          "types": [
            "postal_code"
          ]
        }
      ],
      "types": [
        "street_address"
      ],
      "plusCode": {
        "globalCode": "849VCW83+PM",
        "compoundCode": "CW83+PM Mountain View, CA, USA"
      }
    },
    {
      "place": "//places.googleapis.com/places/ChIJj61dQgK6j4AR4GeTYWZsKWw",
      "placeId": "ChIJj61dQgK6j4AR4GeTYWZsKWw",
      "location": {
        "latitude": 37.4220541,
        "longitude": -122.08532419999999
      },
      "granularity": "ROOFTOP",
      "viewport": {
        "low": {
          "latitude": 37.4207051197085,
          "longitude": -122.08667318029148
        },
        "high": {
          "latitude": 37.423403080291493,
          "longitude": -122.08397521970851
        }
      },
      "formattedAddress": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
      "addressComponents": [
        {
          "longText": "1600",
          "shortText": "1600",
          "types": [
            "street_number"
          ]
        },
        {
          "longText": "Amphitheatre Parkway",
          "shortText": "Amphitheatre Pkwy",
          "types": [
            "route"
          ],
          "languageCode": "en"
        },
        {
          "longText": "Mountain View",
          "shortText": "Mountain View",
          "types": [
            "locality",
            "political"
          ],
          "languageCode": "en"
        },
        {
          "longText": "Santa Clara County",
          "shortText": "Santa Clara County",
          "types": [
            "administrative_area_level_2",
            "political"
          ],
          "languageCode": "en"
        },
        {
          "longText": "California",
          "shortText": "CA",
          "types": [
            "administrative_area_level_1",
            "political"
          ],
          "languageCode": "en"
        },
        {
          "longText": "United States",
          "shortText": "US",
          "types": [
            "country",
            "political"
          ],
          "languageCode": "en"
        },
        {
          "longText": "94043",
          "shortText": "94043",
          "types": [
            "postal_code"
          ]
        }
      ],
      "types": [
        "establishment",
        "point_of_interest"
      ],
      "plusCode": {
        "globalCode": "849VCWC7+RV",
        "compoundCode": "CWC7+RV Mountain View, CA, USA"
      }
    },
   ...
  ],
  "plusCode": {
    "globalCode": "849VCWF8+24H",
    "compoundCode": "CWF8+24H Mountain View, CA, USA"
  }
}

必需参数

  • 地理位置

    纬度和经度坐标,用于指定您希望获取最接近的直观易懂地址的位置。

可选参数

  • languageCode

    返回结果所用的语言。

    • 请参阅 支持的语言列表。Google 会经常更新 支持的语言,因此该列表可能并非详尽无遗。
    • 如果未提供 languageCode,API 会默认使用 en。如果您指定了无效的语言代码,API 会返回 INVALID_ARGUMENT 错误。
    • API 会尽力提供用户和当地人都能看懂的街道地址。为实现这一目标,API 会以当地语言返回街道地址,并在必要时根据首选语言将街道地址音译为用户可读的文字。所有其他 地址均以首选语言返回。地址组成部分全部以同一种语言返回,该语言是从第一个组成部分中选择的。
    • 如果首选语言中没有名称,API 会使用最接近的匹配项。
    • 首选语言对 API 选择返回的结果集以及返回结果的顺序影响不大。地理编码器会根据语言以不同的方式解读缩写,例如街道类型的缩写,或者在一种语言中有效但在另一种语言中无效的同义词。
  • regionCode

    地区代码,以 两个字符组成的 CLDR 代码值表示。没有默认值。大多数 CLDR 代码都与 ISO 3166-1 代码相同。

    对地址进行地理编码(即正向地理编码)时,此参数可以影响但不会完全限制服务返回指定区域的结果。对位置或地点进行地理编码(即反向地理编码地点地理编码)时,可以使用此参数设置地址的格式。在所有情况下,此参数都可能会根据适用法律影响结果。

  • granularity

    一个或多个位置粒度,以单独的查询参数指定,如 Granularity 所定义。 如果您指定了多个 granularity 参数,API 会返回与任何粒度匹配的所有地址。

    granularity 参数不会 将搜索范围限制为指定的位置粒度。相反, granularity 会充当搜索后过滤器。API 会提取指定 location 的所有结果 ,然后舍弃与指定位置粒度不匹配的结果 。

    如果您同时指定了 typesgranularity,则 API 只会返回与两者都匹配的结果。例如:

    https://geocode.googleapis.com/v4/geocode/location/37.4225508,-122.0846338?granularity=ROOFTOP&granularity=GEOMETRIC_CENTER&key=API_KEY
  • 类型

    一个或多个地址类型,以单独的查询参数指定。如果您指定了多个types参数,API 会返回与任何类型匹配的所有地址。

    types 参数不会 将搜索范围限制为指定的地址类型。相反, types 会充当搜索后过滤器。API 会提取指定位置的所有 结果,然后舍弃与指定地址类型不匹配的 结果。

    如果您同时指定了 typesgranularity,则 API 只会返回与两者都匹配的结果。例如:

    https://geocode.googleapis.com/v4/geocode/location/37.4225508,-122.0846338?types=administrative_area_level_2&types=locality&key=API_KEY

    支持使用以下值:

    地址类型和地址组成部分类型

    响应中 GeocodeResult 正文内的 types 数组表示 地址类型。地址类型的示例包括街道地址、国家/地区或政治实体。types 数组在 AddressComponents 字段的 GeocodeResult 正文表示地址每个部分的类型。示例包括门牌号码或国家/地区。

    地址可能具有多种类型。这些类型可以视为“标记”。 例如,许多城市都带有 politicallocality 类型的标记。

    对于地址类型和地址组成部分类型数组,地理编码器都支持并返回以下类型:

    地址类型 说明
    street_address 精确的街道地址。
    route 已命名的路线(例如“US 101”)。
    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_1sublocality_level_5。每个子级市行政区级别都是一个行政实体。数字越大,表示的地理区域越小
    neighborhood 表示已命名的社区。
    premise 表示已命名的位置,通常是具有常见名称的建筑或建筑群。
    subpremise 表示 premise 级别以下的、可寻址的实体,例如公寓、单元或套房。
    plus_code 表示经过编码的位置引用,衍生自纬度和经度。在没有街道地址的地点(例如建筑物未编号,或者街道未命名),Plus Code 可替代街道地址使用。如需了解详情,请参阅 https://plus.codes
    postal_code 表示国家/地区内邮寄地址所用的邮政编码。
    natural_feature 表示某个明显的自然地貌。
    airport 表示机场。
    park 表示已命名的公园。
    point_of_interest 表示已命名的地图注点。通常情况下,这些“地图注点”是当地的著名实体,无法轻易归入其他类别,例如“帝国大厦”或“埃菲尔铁塔”。

    空的类型列表表示特定地址组成部分没有对应的已知类型(例如法国的地点 [Lieu-dit])。

  • FieldMask

    创建响应字段掩码,以指定要在响应中返回的字段。使用网址参数 $fieldsfields,或者使用 HTTP 标头 X-Goog-FieldMask,将响应字段掩码传递给方法。例如,以下请求只会返回响应的 placeID 字段。

    curl -X GET -H 'Content-Type: application/json' \
    -H 'X-Goog-FieldMask: results.placeId' \
    -H "X-Goog-Api-Key: API_KEY" \
    "https://geocode.googleapis.com/v4/geocode/location/37.4225508,-122.0846338"
    
    响应如下:
    {
      "results": [
        {
          "placeId": "ChIJHRNUiQK6j4ARJ__Hrbt6qsE"
        },
        {
          "placeId": "ChIJj38IfwK6j4ARNcyPDnEGa9g"
        },
        {
          "placeId": "ChIJ1yjFJ1-7j4ARG_RVqFD1h7k"
        },
        {
          "placeId": "ChIJ09H2YwK6j4ARoF7qfCBxhB8"
        },
        ...
      ]
    }

    如需了解详情,请参阅选择要返回的字段