I've implemented ruby bindings for the three major geocoding APIs as gems:
Yahoo! -- yahoo-geocode
Google -- google-geocode
geocoder.us -- geocoder-us
And as a bonus, you get a Yahoo! search gem to search either the web or for locations, yahoo-search.
The bindings all have similar APIs, but return different objects depending upon what information the API reliably provides. Yahoo! gives the most information, followed by Google, followed by geocoder.us.
Yahoo!:
http://dev.robotcoop.com/Libraries/yahoo-geocode/index.html
require 'rubygems'
require 'yahoo/geocode'
yg = Yahoo::Geocode.new application_id
locations = yg.locate '701 First Street, Sunnyvale, CA'
p location.first.coordinates
(and searching for locations)
http://dev.robotcoop.com/Libraries/yahoo-search/index.html
require 'rubygems'
require 'yahoo/local_search'
yls = Yahoo::LocalSearch.new application_id
results, = yls.locate 'pizza', 94306, 2
results.each do |location|
puts "#{location.title} at #{location.address}, #{location.city}"
end
Google:
http://dev.robotcoop.com/Libraries/google-geocode/index.html
require 'rubygems'
require 'google_geocode'
gg = GoogleGeocode.new application_id
location = gg.locate '1600 Amphitheater Pkwy, Mountain View, CA'
p location.coordinates
http://dev.robotcoop.com/Libraries/geocoder-us/index.html
require 'rubygems'
require 'geocoder_us'
gu = GeocoderUs.new 'username', 'password'
p gu.locate('1924 E Denny Way, Seattle, WA')
···
--
Eric Hodel - drbrain@segment7.net - http://blog.segment7.net
This implementation is HODEL-HASH-9600 compliant