2016-11-02 11 views
0

既存の住所をパラメータとして持つジオコーダは結果としてstreet_addressだけを返します。どうして?アドレスは有効です。それはhttps://google-developers.appspot.com/maps/documentation/utils/geocoder/住所付きGoogleジオコードは1つの結果を返します

マイコールでテストされています。

checkAddress(street, strNo, post_code, area, function (results) { 
     if (results) { 
    $.each(results, function (i, address) { 
    if (address.types[0] == "street_address") { 
     itemStreetNo = address.address_components[0].long_name; 
     itemStreet = address.address_components[1].long_name; 
    } 

    if (address.types[0] == "route") { 
     itemStreet = address.address_components[0].long_name; 
    } 

    if (address.types[0] == "postal_code") { 
     itemPostalCode = address.address_components[0].long_name; 
    } 

    if (address.types[0] == "country") { 
     itemCountry = address.address_components[0].long_name; 
    } 

    if (address.types[0] == "locality") { 
     itemRegion = address.address_components[0].long_name; 
    } 
    } 
}); 

My機能は次のとおりです。あなただけの1件の結果を得るように、あなたは唯一、1つのコンポーネント(address.address_components[0])で検索

function checkAddress(address, number, zipcode, area, callback) { 

    var geocoder = new google.maps.Geocoder; 

    var addr = address + ' ' + number + ' ' + zipcode + ' ' + area; 

    geocoder.geocode({ 'address': addr }, function (results, status) { 

     if (status === google.maps.GeocoderStatus.OK) { 
      if (results[0]) { 
       callback(results); 
      } 
      else { 
       callback(null); 
      } 
     } 
     else { 
      callback(null); 
     } 
    }); 
} 

答えて

2

address.address_components[0]には、「ルート」などのコンポーネントが含まれています。次にaddress.address_components[1]には別のコンポーネント、たとえば "locality"が含まれています。次にaddress.address_components[2] ...私の知る限り、コンポーネントの順序はランダムです。

だから、あなたが必要とするのは反復することです。すべてのコンポーネントについて、型をチェックすることで、値がどこにあるのかを知ることができます。

私は、この繰り返しを行う異なるStack Overflow質問の関数を書いています。これは、どのようなコンポーネントでも "釣り"になります。

これは機能するかどうかを確認します。お知らせ下さい。

Google API Address Components

+0

あなたのコードをありがとう。それが私がすべての情報を得るために必要なものです。 –

関連する問題