2010-10-14 50 views

回答

19
gem install geokit 

在IRB:

require 'geokit' 
geo = GeoKit::Geocoders::MultiGeocoder.multi_geocoder('90210') 
if geo.success 
    geo.state # => CA 
    geo.city # => Beverly Hills 
end 
+0

最優秀的趕上!我忘記了geokit。 – 2010-10-15 00:25:27

+1

https://github.com/geokit/geokit – scarver2 2014-05-05 12:40:15

0

查看Jason的回答。它很好地工作。


問題是USPS不允許批量下載他們的郵政編碼列表,除非您爲此付費。谷歌的API,它是由Splashlin提到的寶石使用,似乎不再支持城市和國家,而是現在返回區號:

require 'open-uri' 
require 'json' 

json = JSON::parse(open('http://maps.google.com/maps/geo?q=852581').read) 
puts json 
# >> {"name"=>"852581", "Status"=>{"code"=>602, "request"=>"geocode"}} 

這個頁面顯示,你可以滾你自己的一些方法。數據的來源可能不是最新的,但:

http://www.ruby-forum.com/topic/48815

7

更輕便的選擇是Area gem

require 'area' 

'11211'.to_region #=> "Brooklyn, NY" 
+2

只是實施區,並得說 - 它非常棒!對api的感覺比geokit多。 – 2012-07-12 07:31:59

+1

如果地區涵蓋了您的地理編碼需求,那它確實是一個很好的寶石。 – theIntuitionist 2012-08-29 05:54:18

+0

Heh。修改像String這樣的核心類的庫並不是我稱之爲「輕量級」的東西。 – Dogweather 2013-09-05 07:13:55