使用 Google 地图 API 从自治市获取城市

Gon*_*nte 4 google-maps google-maps-api-3

我需要从给定的美国邮政编码获取城市,但我在布鲁克林等行政区遇到问题

我使用地理编码: 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"
     ]
  }
Run Code Online (Sandbox Code Playgroud)

我需要一种方法将其与纽约市联系起来,我看到的唯一提示是

   "long_name": "Brooklyn",
           "short_name": "Brooklyn",
           "types": [
              "political",
              "sublocality",
              "sublocality_level_1"
           ]
Run Code Online (Sandbox Code Playgroud)

也许有一种方法可以将布鲁克林连接为纽约市的一个次区域,但我找不到它。

xom*_*ena 5

这是一个棘手的例子。首先,您应该知道地理编码 API 在地址组件数组中仅返回用于地址格式化的组件。对于纽约市,地址格式非常具体。它使用 sublocality_level_1 而不是 locality 来格式化地址。

Google Maps API 的官方文档中提到了这一事实。

请注意,您可能需要使用一组不同的组件来与某些区域使用的邮政地址格式保持一致。例如,示例代码选择位置组件,它通常表示地址的城市部分。组件差异的示例包括:

  • 在英国和瑞典,显示城市的组件是 postal_town。

  • 在日本,各县的组成部分有所不同。

  • 布鲁克林和纽约市的其他地区不包括该城市作为地址的一部分。相反,他们使用 sublocality_level_1。

来源: https: //developers-dot-devsite-v2-prod.appspot.com/maps/documentation/javascript/examples/places-autocomplete-addressform

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

  • 第一次请求邮政编码和国家以获取邮政编码中心的坐标

  • 第二个请求是对来自第一个请求的坐标进行反向地理编码,类型为局部性

例如

让我们获取邮政编码 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
    },
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在使用结果类型局部性对坐标进行反向地理编码

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"
}
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助!