Git Product home page Git Product logo

acts_as_geocodable_extra's Introduction

acts_as_geocodable_extra is some tweaks I've made to acts_as_geocodable that I've needed, 
see changelog for details. Original documentation below.



= 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 the plugin

  script/plugin install -x http://source.collectiveidea.com/public/rails/plugins/acts_as_geocodable/

== 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://source.collectiveidea.com/public/rails/plugins/acts_as_geocodable/

Patches and suggestions are welcome!

== To Do

* Documentation!!!
* configurable formulas

acts_as_geocodable_extra's People

Contributors

eliotsykes avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.