2013-07-29 115 views
0

是否有任何寶石/方式可以讓我從街道地址中檢索城市,州和郵政編碼?例如:如何從街道地址獲取城市,州和郵編?

results = Search.find("100 Rue de la Paix") 
results.each do |address| 
    address.city  => "Timbuktu" 
    address.state  => "Timbuktu Region" 
    address.country  => "Mali" 
    address.post_code => "123456" 
end 

最好的東西,使用谷歌地圖。

+0

我不這麼認爲。地址匹配只能進行probablistically,這意味着它並不總是給你一個明確的匹配結果。最好,任何這樣的系統(如果存在的話)都可能能夠返回一系列的可能性。您無法獲得定義了各種屬性的單個輸出。 – sawa

+0

我知道這是經常付錢的圖書館。看看Google Map API。如果你尋找免費的替代品,他們通常在不是全世界的地區/國家實施。 OpenStreetMap似乎這樣做:http://wiki.openstreetmap.org/wiki/Nominatim – glautrou

+1

@sawa我會很高興返回一個數組的東西! – user2630970

回答

4

紅寶石geocoder gem正是這麼做的:

require 'geocoder' 
Geocoder.search('100 Rue de la Paix') 
=> # Array of results 

此搜索地址並顯示結果。

+1

謝謝! +1如果/當我可以。 – user2630970

+0

英語專有名詞是首都。嘗試「紅寶石」,而不是「紅寶石」。 –

-1

嘗試OpenStreetMap

要求:

結果:

<searchresults timestamp="Sat, 07 Nov 09 14:42:10 +0000" querystring="135 pilkington, avenue birmingham" polygon="true"> 
    <place 
    place_id="1620612" osm_type="node" osm_id="452010817" 
    boundingbox="52.548641204834,52.5488433837891,-1.81612110137939,-1.81592094898224" 
    polygonpoints="[['-1.81592098644987','52.5487429714954'],['-1.81592290792183','52.5487234624632'],...]" 
    lat="52.5487429714954" lon="-1.81602098644987" 
    display_name="135, Pilkington Avenue, Wylde Green, City of Birmingham, West Midlands (county), B72, United Kingdom" 
    class="place" type="house"> 
    <house>135</house> 
    <road>Pilkington Avenue</road> 
    <village>Wylde Green</village> 
    <town>Sutton Coldfield</town> 
    <city>City of Birmingham</city> 
    <county>West Midlands (county)</county> 
    <postcode>B72</postcode> 
    <country>United Kingdom</country> 
    <country_code>gb</country_code> 
    </place> 
</searchresults> 
+0

謝謝!如果/當我可以的時候+1! – user2630970

0

如果你可以使用JavaScript:

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script> 
<script> 
    function codeAddress(address) { 
     var geocoder = new google.maps.Geocoder(); 
     geocoder.geocode({ 'address': address }, function (results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 

       city = results[0].address_components[2].long_name; 
       state = results[0].address_components[4].long_name; 
       country = results[0].address_components[5].long_name; 
       postalCode = results[0].address_components[6].long_name; 

       // Example... 
       alert(city); 

      } 
     }); 
    } 

    var address = "100 Rue de la Paix"; 
    codeAddress(address); 
</script> 

如果您需要了解該位置的任何詳細信息,你可以參考這個文檔:https://developers.google.com/maps/documentation/geocoding/#GeocodingResponses

此外,如果您使用的是谷歌地圖API ,您必須根據其服務條款在頁面某處顯示地圖(Google)。

+0

我在HTML中創建一個表單,這是一個好主意!謝謝! +1 –

0

您可以嘗試SmartyStreets自動完成API。我在SmartyStreets工作,並幫助編寫它。你可以在主頁上試試它。我看到你在美國以外的地址,SmartyStreets自動完成功能目前僅在美國使用,但也許它仍然有幫助。但是,SmartyStreets確實提供其他服務,如國際地址的驗證。

從技術上講,它接受一個「前綴」(可以只是一個街道地址),並會建議多達10個城市/州組合。從那裏,您將繼續使用LiveAddress API驗證地址的有效性,以填寫郵政編碼等。

尚未給出的其他答案實際上是這樣做的,它們都將實際返回無效結果,因此請務必在完成之前對其進行驗證。請注意,只有少數國家實際上有數據可以在交付點級別驗證街道地址(如房屋或商業),有些國家可以做街道,至少大部分城市/地區都是這樣做的。

相關問題