Skip to content
Snippets Groups Projects
Name Last commit Last update
lib
tasks
test
MIT-LICENSE
README.rdoc
Rakefile
init.rb

Geocoder

Geocoder is a simple plugin for Rails that provides object geocoding (via Google Maps) and some utilities for working with geocoded objects. The code can be used as a standalone method provider or included in a class to give objects geographic awareness.

Setup

Use the Rails plugin install script:

script/plugin install git://github.com/alexreisner/geocoder.git

To add geocoding features to a class:

geocoded_by :location

Be sure your class defines attributes for storing latitude and longitude (use float or double database columns) and a location (human-readable address to be geocoded). These attribute names are all configurable, for example:

geocoded_by :address,
  :latitude  => :lat,
  :longitude => :lon

A geocodable string is basically anything you’d use to search Google Maps. Any of the following are acceptable:

714 Green St, Big Town, MO
Eiffel Tower, Paris, FR
Paris, TX, US

If your model has address, city, state, and country attributes your location method might look something like this:

def location
  [address, city, state, country].compact.join(', ')
end

Features

Assuming Venue is a geocoded model:

Venue.find_near('Omaha, NE, US', 20)  # venues within 20 miles of Omaha
Venue.geocoded                        # venues with coordinates
Venue.not_geocoded                    # venues without coordinates

Assuming obj has a valid string for its location:

obj.fetch_coordinates              # returns coordinates [lat, lon]
obj.fetch_and_assign_coordinates   # writes values to object

Find distance between object and a point:

obj.distance_to(40.71432, -100.23487)       # in miles
obj.distance_to(40.71432, -100.23487, :km)  # in kilometers

Some utility methods are also available:

# distance (in miles) between Eiffel Tower and Empire State Building
Geocoder.distance_between( 48.858205,2.294359,  40.748433,-73.985655 )

# look up coordinates of some location (like searching Google Maps)
Geocoder.fetch_coordinates("25 Main St, Cooperstown, NY")

Please see the code for more methods and detailed information about arguments.

Copyright © 2009 Alex Reisner, released under the MIT license