【问题标题】:Extracting plus 4 zip code from geocoding using google API, jQuery使用 google API、jQuery 从地理编码中提取加 4 个邮政编码
【发布时间】:2013-03-01 10:25:18
【问题描述】:

我在 jQuery 的帮助下使用谷歌 API 使用地理编码。以下是我尝试过的代码。

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 个邮政编码。

提前致谢。

【问题讨论】:

    标签: jquery geocoding street-address


    【解决方案1】:

    据我所知,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 是您可以使用的少数几个之一,但这应该会给您一个更好的主意,您可以从那里开始搜索。

    【讨论】:

    • 是的,马特。你说得对。我将检查 LiveAddress API。谢谢
    【解决方案2】:

    TLDR

    使用 google place API 的 details request。如果找到,+4 邮政编码将作为“postal_code_suffix”类型的地址组件返回。

    加长版

    Google place API documentation 在解释要使用的地址组件类型方面并不是特别有用。通过 google place API 搜索没有 +4 代码的给定地址:

    https://maps.googleapis.com/maps/api/place/findplacefromtext/json?input=60 MAIN ST,HUNTINGTON NY 11743&inputtype=textquery&fields=place_id&key=<KEY>
    

    提供地点 ID ChIJYWl9Uism6IkRtW81pi9SvgM

    然后我可以使用地点详细信息请求:

    https://maps.googleapis.com/maps/api/place/details/json?place_id=ChIJYWl9Uism6IkRtW81pi9SvgM&key=<KEY>
    

    这会在 adr_address 属性中显示完整的邮政编码:...&lt;span class=\"postal-code\"&gt;11743-8003&lt;/span&gt;...。请注意,自发布此 SO 问题以来,+4 邮政编码可能已更改(是的,+4 邮政编码可能会经常更改!)。此信息在响应中以postal_code_suffix 类型的地址组件更方便地返回:

    ...
    results: {
      ...
      address_components: [
        ...
        { long_name: "8003"
        , short_name: "8003"
        , types: ["postal_code_suffix"]
        }
        ...
      ]
      ...
    }
    ...
    

    【讨论】:

    • *If found 子句暗示获取 +4 邮政编码不可靠。
    猜你喜欢
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多