2014-11-29 3 views
-1

Я пытаюсь получить компоненты адреса с помощью API Карт Google, но не могу правильно проанализировать результаты. Мой код выглядит следующим образом:Компоненты адреса Google API

// Ajax Call 
$.ajax({ 
    url: 'queryPage.php?', 
    data: 'varObtainGoogleAddress=y&' + 
      'varAPILink=' + encodeURIComponent(varAPILink), 
    dataType: 'json', 
    success: function(data) { 
     // Formatted Address 
     varFormattedAddress = data.result['formatted_address']; // Works! 
    } 
}); 

Что мне больше всего нравится, это город, штат и почтовый индекс. Любая помощь в этом отношении приветствуется. Я самолюбивый веб-разработчик. :)

+0

Можете ли вы опубликовать пример результата/ответ? – chrki

+0

В приведенном выше коде будут отображаться результаты «отформатированного адреса», однако я хочу отобразить различные «адреса_компоненты» – notyou61

+0

Что вы точно спрашиваете и какую часть API Карт Google вы используете? Вы меняете геокодирование? Возможно, есть способ изменить полученные данные, не совсем понятно, что вы делаете. Разбор адресов сам по себе может быть довольно сложным. – chrki

ответ

0

Я предполагаю, что вы делаете reverse geocode.

Возвращаемый объект выглядит примерно так (из примера):

{ 
    "address_components": [ 
    { 
     "long_name": "Grand St/Bedford Av", 
     "short_name": "Grand St/Bedford Av", 
     "types": [ 
     "bus_station", 
     "transit_station", 
     "establishment" 
     ] 
    }, 
    { 
     "long_name": "Williamsburg", 
     "short_name": "Williamsburg", 
     "types": [ 
     "neighborhood", 
     "political" 
     ] 
    }, 
    { 
     "long_name": "Brooklyn", 
     "short_name": "Brooklyn", 
     "types": [ 
     "sublocality_level_1", 
     "sublocality", 
     "political" 
     ] 
    }, 
... 

Там нет прямого способа доступа к улице в результате, номер дома и т.д., потому что каждая часть адреса может быть несколько типов в в то же время. Вам придется перебирать по address_components и фильтровать в соответствии с тем, что вам нужно.

Вот еще Stackoverflow нить охватывает эту тему: get city from geocoder results?

1

Я написал функцию.

/** 
* geocodeResponse is an object full of address data. 
* This function will "fish" for the right value 
* 
* example: type = 'postal_code' => 
* geocodeResponse.address_components[5].types[1] = 'postal_code' 
* geocodeResponse.address_components[5].long_name = '1000' 
* 
* type = 'route' => 
* geocodeResponse.address_components[1].types[1] = 'route' 
* geocodeResponse.address_components[1].long_name = 'Wetstraat' 
*/ 
function addresComponent(type, geocodeResponse, shortName) { 
    for(var i=0; i < geocodeResponse.address_components.length; i++) { 
    for (var j=0; j < geocodeResponse.address_components[i].types.length; j++) { 
     if (geocodeResponse.address_components[i].types[j] == type) { 
     if (shortName) { 
      return geocodeResponse.address_components[i].short_name; 
     } 
     else { 
      return geocodeResponse.address_components[i].long_name; 
     } 
     } 
    } 
    } 
    return ''; 
} 

пример того, как использовать:

... 
myGeocoder.geocode({'latLng': marker.getPosition()}, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK && results[1]) { 
    var country = addresComponent('country', results[1], true); 
    var postal_code = addresComponent('postal_code', results[1], true); 
    } 
}); 
... 
Смежные вопросы