5

jQueryの助けを借りてGoogle 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 郵便番号を検索する必要があります。

前もって感謝します。

4

2 に答える 2

5

私の知る限り、Google のジオコーダーは ZIP +4 (アドオン) コードを追加しません。

Google は住所を確認しません。これには、形式の標準化や、ZIP+4 コードの追加が含まれます。

おそらく必要なのは、住所を実際に標準化して検証する API です。LiveAddressのような APIは、おそらくあなたが望むことを行うでしょう。+4 アドオン コードを含むすべてのアドレス コンポーネントが返されます。

私は SmartyStreets の開発者です。これは、質問で指定した住所に対する応答の例です。使用する +4 コードを使用しています。実際には、この配送ポイントには 2 つの +4 コードがあります。1 つは会社である 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 は、使用できる数少ないアドレスの 1 つですが、これにより、より良いアイデアが得られ、そこから検索を開始できます。

于 2013-03-13T14:18:16.003 に答える