I recently was given a task which required some geocoding. Eventually the geocodes will find there way into a google map. The temptation with google maps is the geocode everything using googles built in geocoding. This is great for a couple of points. However if you are going to have many points you are better off caching the longitude and latitude for speedy marker sets.
in order to get yahoo-geocoder working you’ll want to install the gem
Gem install yahoo-geocode
After that simple step you will want to reboot any mongrel or webrick servers that are running to ensure that the new gem is loaded in your environment.
once installed you need to get a key from yahoo
you should be ready to go now. using the yahoo geocode api to cache latitude and longitude is as simple as this
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
require 'yahoo/geocode' class Post < ActiveRecord::Base before_validation :fillfields validates_presence_of :latitude validates_presence_of :zipcode, :if=>:in_us? validates_presence_of :city def in_us? country=='US' end private def fillfields yg=Yahoo::Geocode.new "Your api id goes here" begin locations = yg.locate self.zipcode+', '+self.city+', '+self.country self.longitude=locations.first.longitude self.latitude =locations.first.latitude self.city = locations.first.city self.country = locations.first.country rescue self.errors.add_to_base('Validation could not be done') end end end
As you can see everything is nicely tucked away in the posts model. There are no changes to the views or controllers for this one. After that you can call:
to start consuming the locations in google maps or any other mapping software for that matter.