如何从街道地址获取城市,州和邮政编码?

时间:2013-07-29 15:55:52

标签: ruby google-maps street-address

是否有任何宝石/方式可以让我从街道地址中检索城市,州和邮政编码?例如:

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 个答案:

答案 0 :(得分:4)

红宝石geocoder gem就是这样做的:

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

搜索地址并显示结果。

答案 1 :(得分:0)

您可以尝试SmartyStreets'自动填充API。我在SmartyStreets工作并帮助写了它。你可以在主页上试试。我看到你在美国境外有地址,SmartyStreets自动填充目前仅限美国,但也许它仍然有用。但是,SmartyStreets确实提供其他服务,例如国际地址验证。

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

实际上没有给出任何其他答案,并且所有这些答案实际上都会返回无效结果,因此请务必在完成之前进行验证。请注意,只有少数几个国家/地区实际拥有数据来验证交付点级别的街道地址(如房屋或商家),有些国家/地区可以使用街道地址,其中一些国家/地区至少需要城市/地区的粒度。

答案 2 :(得分:-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>

答案 3 :(得分:-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)。