Геокодер Google Map возвращает несколько результатов по полному названию города (с округом, штатом).

У меня есть следующий адрес:

«Челси, Нью-Йорк, Нью-Йорк, США»

По вышеуказанному адресу:

Город = «Челси» Округ = «Нью-Йорк» Штат = «Нью-Йорк» Страна = «США»

Когда я передаю этот адрес в Google Geocoder API, он возвращает несколько результатов, в то время как я ожидаю один результат, потому что каждая часть (имя, округ, штат, страна) названия города указана в адресе.

Вот фрагмент кода:

(Предполагается, что необходимые файлы уже включены)

var geocoder = new google.maps.Geocoder();

geocoder.geocode({ "address": "Chelsea, New York, NY, USA" }, function (results, status) {

                    if (status == google.maps.GeocoderStatus.OK) {
                  if (results.length == 1) {                       
                      // do something
                        }
                      else{
                         // do something
                        }

Я буду признателен за вашу помощь. Спасибо.


person Abdul Basit    schedule 04.01.2014    source источник


Ответы (1)


Геокодер находит 2 совпадения со строкой «Челси, Нью-Йорк, Нью-Йорк, США».

[ 0 ]: Chelsea, New York, NY, USA (40.7497717, -73.99769459999999)
[ 1 ]: Travis - Chelsea, Staten Island, NY, USA (40.5890113, -74.19151769999996)

Ваше предположение, что вы получите «один результат, потому что каждая часть (название, округ, штат, страна) названия города указана в адресе», неверно.

Первый:

{
  "address_components": [
    {
      "long_name": "Chelsea",
      "short_name": "Chelsea",
      "types": [
        "neighborhood",
        "political"
      ]
    },
    {
      "long_name": "Manhattan",
      "short_name": "Manhattan",
      "types": [
        "sublocality",
        "political"
      ]
    },
    {
      "long_name": "New York",
      "short_name": "New York",
      "types": [
        "locality",
        "political"
      ]
    },
    {
      "long_name": "New York",
      "short_name": "New York",
      "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": "Chelsea, New York, NY, USA",
  "geometry": {
    "bounds": {
      "ea": {
        "d": 40.7373582,
        "b": 40.7570384
      },
      "fa": {
        "b": -74.00886300000002,
        "d": -73.98779150000001
      }
    },
    "location": {
      "nb": 40.7497717,
      "ob": -73.99769459999999
    },
    "location_type": "APPROXIMATE",
    "viewport": {
      "ea": {
        "d": 40.7373582,
        "b": 40.7570384
      },
      "fa": {
        "b": -74.00886300000002,
        "d": -73.98779150000001
      }
    }
  },
  "types": [
    "neighborhood",
    "political"
  ]
}

Секунда:

{
  "address_components": [
    {
      "long_name": "Travis - Chelsea",
      "short_name": "Travis - Chelsea",
      "types": [
        "neighborhood",
        "political"
      ]
    },
    {
      "long_name": "Staten Island",
      "short_name": "Staten Island",
      "types": [
        "sublocality",
        "political"
      ]
    },
    {
      "long_name": "New York",
      "short_name": "New York",
      "types": [
        "locality",
        "political"
      ]
    },
    {
      "long_name": "Richmond",
      "short_name": "Richmond",
      "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": "Travis - Chelsea, Staten Island, NY, USA",
  "geometry": {
    "bounds": {
      "ea": {
        "d": 40.57709699999999,
        "b": 40.603491
      },
      "fa": {
        "b": -74.20663830000001,
        "d": -74.17552469999998
      }
    },
    "location": {
      "nb": 40.5890113,
      "ob": -74.19151769999996
    },
    "location_type": "APPROXIMATE",
    "viewport": {
      "ea": {
        "d": 40.57709699999999,
        "b": 40.603491
      },
      "fa": {
        "b": -74.20663830000001,
        "d": -74.17552469999998
      }
    }
  },
  "types": [
    "neighborhood",
    "political"
  ]
}
person geocodezip    schedule 04.01.2014
comment
Можете ли вы объяснить, почему мое предположение неверно. - person Abdul Basit; 06.01.2014
comment
Поскольку геокодер возвращает два результата, соответствующие вашей входной строке Челси, Нью-Йорк, Нью-Йорк, США, один из которых находится в округе Ричмонд, штат Нью-Йорк, поэтому он не применяет какой-либо порядок на входе (и я не ожидал это к). - person geocodezip; 06.01.2014
comment
К вашему сведению, я бы отказался от округа, поскольку «округ» не является частью почтового адреса. - person Andrew - OpenGeoCode; 06.01.2014