使用Google地图API从区获取城市

4
我需要从给定的美国邮编中获取城市,但是像布鲁克林这样的区域让我很困扰。
我正在使用地理编码: https://maps.googleapis.com/maps/api/geocode/json?address=11214&key=KEY 它返回以下结果。
  {
     "address_components": [
        {
           "long_name": "11214",
           "short_name": "11214",
           "types": [
              "postal_code"
           ]
        },
        {
           "long_name": "Brooklyn",
           "short_name": "Brooklyn",
           "types": [
              "political",
              "sublocality",
              "sublocality_level_1"
           ]
        },
        {
           "long_name": "Kings County",
           "short_name": "Kings County",
           "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"
           ]
        }
     ],
     "formatted_address": "Brooklyn, NY 11214, USA",
     "geometry": {
        "bounds": {
           "northeast": {
              "lat": 40.6163139,
              "lng": -73.98259999999999
           },
           "southwest": {
              "lat": 40.5788159,
              "lng": -74.014775
           }
        },
        "location": {
           "lat": 40.6046106,
           "lng": -73.9982756
        },
        "location_type": "APPROXIMATE",
        "viewport": {
           "northeast": {
              "lat": 40.6163139,
              "lng": -73.98259999999999
           },
           "southwest": {
              "lat": 40.5788159,
              "lng": -74.014775
           }
        }
     },
     "place_id": "ChIJLzmMV-BawokR4tFzc3LaBFI",
     "types": [
        "postal_code"
     ]
  }

我需要一种方法将其与纽约市相关联,我看到的唯一提示是:
   "long_name": "Brooklyn",
           "short_name": "Brooklyn",
           "types": [
              "political",
              "sublocality",
              "sublocality_level_1"
           ]

也许有一种方法将布鲁克林作为纽约市的子地区链接起来,但我找不到它。

邮政编码不是地址。 - MrUpsidown
1个回答

5
这是一个棘手的例子。首先,您应该知道地理编码API仅在地址组件数组中返回用于地址格式化的组件。在纽约市的情况下,地址格式非常特殊。它使用sublocality_level_1来格式化地址,而不是locality。
谷歌地图API的官方文档提到了这一点。
请注意,您可能需要使用不同的组件来与某些区域使用的邮政地址格式对齐。例如,示例代码选择表示地址的城市部分的locality组件。组件可能不同的示例包括:
在英国和瑞典,显示城市的组件是postal_town。
在日本,组件因州而异。
布鲁克林和纽约市的其他地区不包括城市作为地址的一部分。相反,它们使用sublocality_level_1。
来源:https://developers-dot-devsite-v2-prod.appspot.com/maps/documentation/javascript/examples/places-autocomplete-addressform

我能想到的唯一解决方法是使用两个请求:

  • 第一个请求用于获取邮政编码和国家的坐标中心

  • 第二个请求是反向地理编码,使用第一个请求中的坐标和类型为“locality”

例如:

让我们获取邮政编码11214的坐标

https://maps.googleapis.com/maps/api/geocode/json?components=postal_code%3A11214%7Ccountry%3AUS&key=YOUR_API_KEY

它将在响应中返回坐标。
"geometry":{
    "location":{
      "lat":40.6046106,"lng":-73.9982756
    },
    ...
}

现在使用结果类型为locality的逆地理编码来获取该坐标的位置信息。

https://maps.googleapis.com/maps/api/geocode/json?latlng=40.6046106%2C-73.9982756&result_type=locality&key=YOUR_API_KEY

它将返回纽约,这样您就可以将邮政编码和纽约城联系起来。
{
  "plus_code":{
    "compound_code":"J232+RM New York, NY, USA","global_code":"87G8J232+RM"
  },
  "results":[
    {
      "address_components":[
    {
      "long_name":"New York",
      "short_name":"New York",
      "types":[
        "locality","political"
      ]
    },
    {
      "long_name":"New York",
      "short_name":"NY",
      "types":[
        "administrative_area_level_1","political"
      ]
    },
    {
      "long_name":"United States",
      "short_name":"US",
      "types":[
        "country","political"
      ]
    }
      ],
      "formatted_address":"New York, NY, USA",
      "geometry":{
    "bounds":{
      "northeast":{
        "lat":40.9175771,"lng":-73.70027209999999
      },
      "southwest":{
        "lat":40.4773991,"lng":-74.25908989999999
      }
    },
    "location":{
      "lat":40.7127753,"lng":-74.0059728
    },
    "location_type":"APPROXIMATE",
    "viewport":{
      "northeast":{
        "lat":40.9175771,"lng":-73.70027209999999
      },
      "southwest":{
        "lat":40.4773991,"lng":-74.25908989999999
      }
    }
      },
      "place_id":"ChIJOwg_06VPwokRYv534QaPC8g",
      "types":[
    "locality","political"
      ]
    }
  ],
  "status":"OK"
}

希望这能帮助到您!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接