collectiveidea / acts_as_geocodable
- Source
- Commits
- Network (10)
- Issues (1)
- Downloads (3)
- Wiki (1)
- Graphs
-
Branch:
master
| name | age | message | |
|---|---|---|---|
| |
.gitignore | Wed Dec 02 18:23:10 -0800 2009 | |
| |
CHANGELOG | Fri Aug 08 01:50:51 -0700 2008 | |
| |
MIT-LICENSE | Sun Oct 01 22:08:33 -0700 2006 | |
| |
README | Wed Oct 21 01:49:18 -0700 2009 | |
| |
Rakefile | Wed Oct 21 01:49:18 -0700 2009 | |
| |
VERSION | Thu Feb 04 12:40:46 -0800 2010 | |
| |
about.yml | Tue Feb 13 06:33:02 -0800 2007 | |
| |
acts_as_geocodable.gemspec | Thu Feb 04 12:40:50 -0800 2010 | |
| |
generators/ | Sat Oct 04 13:10:10 -0700 2008 | |
| |
install.rb | Sun Oct 01 19:05:53 -0700 2006 | |
| |
lib/ | Thu Feb 04 12:40:01 -0800 2010 | |
| |
rails/ | Wed Oct 21 01:42:08 -0700 2009 | |
| |
test/ | Thu Feb 04 12:40:01 -0800 2010 | |
| |
uninstall.rb | Sun Oct 01 19:05:53 -0700 2006 |
README
= acts_as_geocodable
acts_as_geocodable is a plugin to help build geo-aware applications. It automatically geocodes your models when they are
saved, giving you the ability to search by location and calculate distances between records.
== Usage
event = Event.create :street => "777 NE Martin Luther King, Jr. Blvd.",
:locality => "Portland", :region => "Oregon", :postal_code => 97232
event.geocode.latitude #=> 45.529100000000
event.geocode.longitude #=> -122.644200000000
event.distance_to "49423" #=> 1807.66560483205
Event.find(:all, :within => 50, :origin => "97232")
Event.find(:nearest, :origin => "Portland, OR")
== Upgrading
If you're upgrading from a previous version of this plugin, note that :city has been renamed to :locality to be
consistent with Graticule 0.2. Create a migration that has:
rename_column :geocodes, :city, :locality
Also remember to change your mapping in your geocodable classes to use the :locality key instead of :city:
class Event < ActiveRecord::Base
acts_as_geocodable :address => {:street => :address1, :locality => :city,
:region => :state, :postal_code => :zip}
end
== Installation
Graticule[link:http://rubyforge.org/projects/graticule] is used for all the heavy lifting.
gem install graticule --include-dependencies
Install as a plugin
script/plugin install git://github.com/collectiveidea/acts_as_geocodable.git
Or, install as a gem
gem install acts_as_geocodable --source=http://gemcutter.org
== Upgrading
Before October 2008, precision wasn't included in the Geocode model. Make sure you add a string precision column to your
geocode table if you're upgrading from an older version, and update Graticule.
== Configuration
Create the required tables
script/generate geocodable_migration add_geocodable_tables
rake db:migrate
Set the default geocoder in your environment.rb file.
Geocode.geocoder = Graticule.service(:yahoo).new 'your_api_key'
Then, in each model you want to make geocodable, add acts_as_geocodable.
class Event < ActiveRecord::Base
acts_as_geocodable
end
The only requirement is that your model must have address fields. By default, acts_as_geocodable looks for attributes
called +street+, +locality+, +region+, +postal_code+, and +country+. To change these, you can provide a mapping in the
<tt>:address</tt> option:
class Event < ActiveRecord::Base
acts_as_geocodable :address => {:street => :address1, :locality => :city, :region => :state, :postal_code => :zip}
end
If that doesn't meet your needs, simply override the default +to_location+ method in your model, and return a
Graticule::Location with those attributes set.
acts_as_geocodable can also update your address fields with the data returned from the geocoding service:
class Event < ActiveRecord::Base
acts_as_geocodable :normalize_address => true
end
== IP-based Geocoding
acts_as_geocodable adds a remote_location method in your controllers that uses http://hostip.info to guess remote users
location based on their IP address.
def index
@nearest = Store.find(:nearest, :origin => remote_location) if remote_location
@stores = Store.find(:all)
end
Keep in mind that IP-based geocoding is not always accurate, and often will not return any results.
== Development
The source code is available at:
http://github.com/collectiveidea/acts_as_geocodable
git://github.com/collectiveidea/acts_as_geocodable.git
Patches and suggestions are welcome!
== To Do
* Documentation!!!
* configurable formulas

