2013-03-13 75 views
3

我使用的是使用谷歌API的地理編碼,藉助jQuery。以下是我試過的代碼。使用谷歌API,jQuery的地理編碼提取加4郵政編碼

jQuery(document).ready(function() { 
var geocoder = new google.maps.Geocoder(); 
jQuery('AddressPicker1').autocomplete({ 
    source: function (request, response) { 
     geocoder.geocode({ address: request.term}, function (results, status) { 
     if (status === google.maps.GeocoderStatus.OK) { 
      response(jQuery.map(results, function(item) { 
      var streetNumber = ""; 
      var streetName = ""; 
      var cityName = ""; 
      var zip = ""; 
      var country = ""; 
      var countyName = ""; 
      var state = ""; 

      for (var component =0; component < item.address_components.length; component++) { 
      if (item.address_components[component] != undefined && item.address_components[component] != null) { 
        if (jQuery.inArray("street_number", item.address_components[component].types) > -1){ 
         streetNumber = item.address_components[component].long_name; 
        } 

        if (jQuery.inArray("route", item.address_components[component].types) > -1){ 
         streetName = item.address_components[component].long_name; 
        } 

        if (jQuery.inArray("locality", item.address_components[component].types) > -1){ 
         cityName = item.address_components[component].long_name; 
        } 

        if (jQuery.inArray("postal_code", item.address_components[component].types) > -1){ 
         zip = item.address_components[component].long_name; 
        } 

        if (jQuery.inArray("country", item.address_components[component].types) > -1){ 
         country = item.address_components[component].long_name; 
        } 

        if (jQuery.inArray("administrative_area_level_2", item.address_components[component].types) > -1){ 
         countyName = item.address_components[component].long_name; 
        } 

        if (jQuery.inArray("administrative_area_level_1", item.address_components[component].types) > -1){ 
         state = item.address_components[component].short_name; 
        } 
      } 
      } 
    return { 
     label : item.formatted_address, 
     value : item.formatted_address, 
     latitude : item.geometry.location.lat(), 
     longitude : item.geometry.location.lng(), 
     streetNo : streetNumber, 
     streetName : streetName, 
     city : cityName.toUpperCase() , 
     zip : zip, 
     country : country, 
     county : countyName.toUpperCase(), 
     state : state 
    } 

    })); 
    } 
}); 
}, 
select: function (event, ui) { 
     jQuery('StreetNumber').val(ui.item.streetNo); 
     jQuery('StreetName').val(ui.item.streetName); 
     jQuery('City').val(ui.item.city); 
     jQuery('Zip').val(ui.item.zip); 
     jQuery('Country').val(ui.item.country); 
     jQuery('CountyName').val(ui.item.county); 
     jQuery('StateCode').val(ui.item.state); 
     jQuery('GeocodedLatitude').val(ui.item.latitude); 
     jQuery('GeocodedLongitude').val(ui.item.longitude); 

} 

我在搜索時遇到了問題加上4個郵政編碼。我在回覆中沒有獲得額外的4位數字。 例如,對於搜索文本「60 MAIN ST,HUNTINGTON NY 11743-6961」。 我通過響應中的'postal_code'屬性檢索'11743'。但我無法從響應中檢索'6961'。

在這種情況下是否有任何選項可以獲取完整的郵政編碼?

或者我需要嘗試其他方式搜索加4個郵政編碼。

在此先感謝。

回答

2

據我所知,Google的地址解析器不會附加ZIP +4(插件)代碼。

Google不驗證地址,其中包括標準化其格式,其中包括附加ZIP + 4代碼。

您可能需要的是實際標準化和驗證地址的API。像LiveAddress這樣的API可能會做你想做的。它將返回所有地址組件,包括+4插件代碼。

我是SmartyStreets的開發人員。以下是您在問題中給出的地址的響應示例,您使用的是+4代碼 - 在此交付點實際上有兩個+4代碼,因爲其中一個是公司YMCA,我將只顯示這裏的一個:

{ 
    "input_index": 0, 
    "candidate_index": 1, 
    "addressee": "Ymca", 
    "delivery_line_1": "60 Main St", 
    "last_line": "Huntington NY 11743-6961", 
    "delivery_point_barcode": "117436961606", 
    "components": { 
     "primary_number": "60", 
     "street_name": "Main", 
     "street_suffix": "St", 
     "city_name": "Huntington", 
     "state_abbreviation": "NY", 
     "zipcode": "11743", 
     "plus4_code": "6961", 
     "delivery_point": "60", 
     "delivery_point_check_digit": "6" 
    }, 
    "metadata": { 
     "record_type": "F", 
     "county_fips": "36103", 
     "county_name": "Suffolk", 
     "carrier_route": "C037", 
     "congressional_district": "03", 
     "rdi": "Commercial", 
     "latitude": 40.87179, 
     "longitude": -73.42655, 
     "precision": "Zip7" 
    }, 
    "analysis": { 
     "dpv_match_code": "Y", 
     "dpv_footnotes": "AABB", 
     "dpv_cmra": "N", 
     "dpv_vacant": "N", 
     "active": "Y" 
    } 
} 

下面是對SmartyStreets網頁上的全部結果查詢:http://smartystreets.com/?street=60%20Main%20St&city=Huntington&state=NY&zipcode=11743

無論如何,這就是差別了地址驗證和地理編碼。地理編碼僅將地址轉換爲座標,但如果您需要+4代碼,則需要地址驗證API。 LiveAddress是您可以使用的幾個中的一個,但這應該會給您一個更好的主意,您可以從那裏開始搜索。

+0

是Matt。你是對的。我將檢查有關LiveAddress API。謝謝 – Ramasamy 2013-03-14 06:50:05

相關問題