Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用google API、jQuery从地理编码中提取plus 4邮政编码_Jquery_Geocoding_Street Address - Fatal编程技术网

使用google API、jQuery从地理编码中提取plus 4邮政编码

使用google API、jQuery从地理编码中提取plus 4邮政编码,jquery,geocoding,street-address,Jquery,Geocoding,Street Address,我在jQuery的帮助下使用GoogleAPI使用地理编码。下面是我尝试的代码 jQuery(document).ready(function () { var geocoder = new google.maps.Geocoder(); jQuery('AddressPicker1').autocomplete({ source: function (request, response) { geocoder.geocode({ address: request.ter

我在jQuery的帮助下使用GoogleAPI使用地理编码。下面是我尝试的代码

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);

 }
jQuery(文档).ready(函数(){
var geocoder=new google.maps.geocoder();
jQuery('AddressPicker1')。自动完成({
来源:功能(请求、响应){
geocoder.geocode({address:request.term},函数(结果,状态){
if(status==google.maps.GeocoderStatus.OK){
响应(jQuery.map)(结果、函数(项){
var streetNumber=“”;
var streetName=“”;
var cityName=“”;
var-zip=“”;
var country=“”;
var countyName=“”;
var state=“”;
对于(变量组件=0;组件-1){
streetNumber=项目。地址\组件[component]。长\名称;
}
if(jQuery.inArray(“route”,item.address_components[component].types)>-1){
streetName=item.address\u components[component].long\u name;
}
if(jQuery.inArray(“locality”,item.address_components[component].types)>-1){
cityName=item.address\u components[component].long\u name;
}
if(jQuery.inArray(“邮政编码”,item.address\u组件[component].types)>-1){
zip=项目。地址\u组件[component]。长\u名称;
}
if(jQuery.inArray(“国家”,item.address_components[component].types)>-1){
国家/地区=项目。地址\u组件[component]。长\u名称;
}
if(jQuery.inArray(“管理区\级别\ 2”,item.address \组件[组件].types)>-1){
countyName=item.address\u components[component]。长\u名称;
}
if(jQuery.inArray(“管理区\级别\ 1”,项.地址\组件[组件].types)>-1){
状态=项。地址\u组件[component]。短\u名称;
}
}
}
返回{
标签:item.u地址,
值:item.u地址,
纬度:item.geometry.location.lat(),
经度:item.geometry.location.lng(),
街道号:街道号,
街道名称:街道名称,
城市:cityName.toUpperCase(),
zip:zip,
国家:国家,,
county:countyName.toUpperCase(),
州:州
}
}));
}
});
},
选择:功能(事件、用户界面){
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('geocodedlongities').val(ui.item.longitude);
}
我在搜索时遇到了这个问题,加上4个邮政编码。我没有在回复中得到额外的4位数字。 例如,对于搜索文本,“纽约州亨廷顿大街60号,邮编11743-6961”。 我通过响应中的“postal_code”属性检索到了“11743”。但我无法从响应中检索到“6961”

在这种情况下,是否有获取完整邮政编码的选项

或者我需要尝试其他方法来搜索+4邮政编码


提前感谢。

据我所知,谷歌的地理编码器没有附加ZIP+4(附加)代码

谷歌不验证地址,这包括标准化其格式,这反过来又包括附加邮政编码+4

您可能需要的是一个真正标准化和验证地址的API。像这样的API可能会执行您想要的操作。它将返回所有地址组件,包括+4加载项代码

我是SmartyStreets的开发人员。下面是一个关于您在问题中给出的地址的回复示例,使用+4代码——在这个交付点实际上有两个+4代码,因为其中一个是公司,即基督教青年会,我将在这里展示一个:

{
    "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主页上的完整结果:

无论如何,这就是地址验证和地理编码的区别。地理编码只是将地址转换为坐标,但如果您需要+4代码,则需要地址验证API。LiveAddress是您可以使用的少数几个API之一,但这会给您一个更好的主意,您可以从那里开始搜索。

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

长版本 Google place API在解释要使用的地址组件类型方面没有特别的帮助。通过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>
这显示了
adr\u address
属性中的完整邮政编码:
…11743-8003…
。请注意,自发布此问题后,+4邮政编码可能已更改(是的,+4邮政编码可能会频繁更改!)。在响应中,此信息作为带有
邮政编码\u后缀的地址组件返回更方便:

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

是的,马特。你说得对。我会检查一下LiveAddress API。谢谢
*如果找到
子句意味着获取+4邮政编码不可靠。
...
results: {
  ...
  address_components: [
    ...
    { long_name: "8003"
    , short_name: "8003"
    , types: ["postal_code_suffix"]
    }
    ...
  ]
  ...
}
...