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

最好是使用谷歌地图的东西。

4

4 回答 4

4

ruby geocoder gem正是这样做的:

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

这将搜索地址并显示结果。

于 2013-07-29T16:03:56.043 回答
0

你可以试试SmartyStreets的自动完成 API。我在 SmartyStreets 工作并帮助编写它。你可以在主页上试试。我看到您有美国以外的地址,SmartyStreets 自动完成功能目前仅限于美国,但也许它仍然会有所帮助。但是,SmartyStreets 确实提供其他服务,例如国际地址验证。

从技术上讲,它接受一个“前缀”(可以只是一个街道地址),并会建议多达 10 个城市/州的组合。从那里,您将继续使用 LiveAddress API 来验证地址的有效性,以填写邮政编码等。

尚未给出的其他答案实际上都没有这样做,并且所有这些答案实际上都会返回无效结果,因此请务必确保在完成之前对其进行验证。请注意,只有少数国家实际上有数据来验证送货点级别的街道地址(如房屋或企业),有些国家有街道,大多数国家至少有城市/地区粒度。

于 2013-07-29T17:08:33.970 回答
-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>
于 2013-07-29T16:03:07.657 回答
-1

如果您可以使用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

此外,如果您使用的是 Google Maps API,则必须根据其服务条款在页面上的某处显示地图 (Google)。

于 2013-07-29T16:08:49.490 回答