Получение города из города с помощью API карт Google - PullRequest
0 голосов
/ 25 октября 2019

Мне нужно получить город из данного почтового индекса США, и у меня возникли проблемы с такими районами, как Бруклин

, я использую геокод: 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"
           ]

может быть, есть способ связать Бруклин как местность Нью-Йорка, но я не смог его найти.

1 Ответ

0 голосов
/ 25 октября 2019

Это хитрый пример. Прежде всего вы должны знать, что Geocoding API возвращает в массиве компонентов адреса только те компоненты, которые используются для форматирования адреса. В случае Нью-Йорка форматирование адреса очень специфично. Для форматирования адресов используется sublocality_level_1 вместо locality.

Этот факт упоминается в официальной документации API Карт Google.

Обратите внимание, что вам может потребоваться использовать другой наборкомпонентов для согласования с форматами почтовых адресов, используемыми в некоторых регионах. Например, пример кода выбирает компонент местности, который часто представляет городскую часть адреса. Примеры того, как компоненты могут отличаться, включают:

  • В Великобритании и Швеции компонент для отображения города - postal_town.

  • В Японии, компоненты различаются по префектурам.

  • Бруклин и другие части Нью-Йорка не включают город в качестве части адреса. Вместо этого они используют sublocality_level_1.

source: https://developers -dot-devsite-v2-prod.appspot.com / maps / Documentation / javascript/ examples / place-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
    },
    ...
}

Теперь измените геокодирование на координату с результатомвведите 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"
}

Надеюсь, это поможет!

...