2013-03-13 69 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

相关问题