2014-12-17 4 views
4

Используя API геокодирования Google Maps, я могу получить отформатированный адрес для конкретной координаты. Чтобы получить точное название города, я делаю следующее:Получить определенное название города в Google maps обратное геокодирование

$.ajax({ 
    url: 'http://maps.googleapis.com/maps/api/geocode/json?latlng='+lat+','+long+'&sensor=false', 
    success: function(data){ 
     var formatted = data.results; 
     var address_array = formatted[6].formatted_address.split(','); 
     var city = address_array[0]; 
    } 
}); 

где lat и long получены с помощью браузера координат. Моя проблема заключается в следующем:

От координат 19.2100 и 72.1800, я получаю город как Mumbai, но с подобным набором координат около 3км, я получаю город как Mumbai Suburban. Как я могу получить Mumbai без изменения функции успеха моего кода? Мне кажется, что массив результатов не всегда придерживается того же формата, который создает проблемы при отображении имени города.

+0

координаты вы предоставляете (19.2100,721800) возвращает «Аравийское море» для меня. Предоставьте оба набора координат, с которыми вы действительно видите проблему. – geocodezip

ответ

1

Вам нужно посмотреть тип результата, а не абсолютный индекс в массиве результатов. Итерации через массив результатов, которые ищут запись, которая имеет соответствующий type. Похоже, это было бы:

  • местность указывает объединенный город или город политической сущности

Но данные могут варьироваться в зависимости от региона.

связанный с этим вопрос: Grabbing country from google geocode jquery

Смотрите эту result, выглядит, как вы хотите, чтобы запись как с «локальности» и «политических» типа:

{ 
    "long_name" : "Mumbai", 
    "short_name" : "Mumbai", 
    "types" : [ "locality", "political" ] 
} 
3

Так что я пытался понять это сегодня, и я пришел к этому решению, если это кому-то поможет. Карты Google поставляются с встроенным Geocoder, поэтому вы просто создаете объект геокодера после загрузки API.

Вы можете легко обернуть это функцией и просто вернуть объект с городом, состоянием и почтовым индексом. Этот сайт был полезным, позволив мне видеть, что различные «типы» означают: Reverse Geocoding

var geocoder = new google.maps.Geocoder, 
    latitude = 28.54, //sub in your latitude 
    longitude = -81.39, //sub in your longitude 
    postal_code, 
    city, 
    state; 
geocoder.geocode({'location': {lat:latitude, lng:longitude}}, function(results, status) { 
    if (status === google.maps.GeocoderStatus.OK) { 
    results.forEach(function(element){ 
     element.address_components.forEach(function(element2){ 
     element2.types.forEach(function(element3){ 
      switch(element3){ 
      case 'postal_code': 
       postal_code = element2.long_name; 
       break; 
      case 'administrative_area_level_1': 
       state = element2.long_name; 
       break; 
      case 'locality': 
       city = element2.long_name; 
       break; 
      } 
     }) 
     }); 
    }); 
    } 
}); 
+1

Спасибо Бретту :) Работал как шарм –

Смежные вопросы