2014-11-29 5 views
-1

Google Maps API를 사용하여 주소 구성 요소를 얻으려고하지만 결과를 제대로 구문 분석 할 수 없습니다. 내 코드는 다음과 같습니다 :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

위의 코드는 "형식화 된 주소"결과를 생성하지만 다양한 "address_components"를 표시하려고합니다. – notyou61

+0

정확하게 쿼리하는 것은 무엇이고 Google Maps API의 어떤 부분을 사용하고 있습니까? 지오 코딩을 리버스합니까? 어쩌면 결과 데이터를 수정할 수있는 방법이있을 수 있습니다. 현재 수행중인 작업이 명확하지 않습니다. 주소 자체를 파싱하는 것은 상당히 어려울 수 있습니다. – 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을 반복하고 필요한 것에 따라 필터링해야합니다. 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); 
    } 
}); 
...