Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

merb-geokit git fork from svn

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 lib
Octocat-spinner-32 script
Octocat-spinner-32 spec
Octocat-spinner-32 LICENSE
Octocat-spinner-32 README
Octocat-spinner-32 Rakefile
Octocat-spinner-32 TODO
README
merb_geokit
===========

A plugin for the Merb framework that provides the geokit rails plugin.
This is mostly just a port of the rails plugin to merb format.  You should
see the documentation on the geokit project for more instructions.

site: http://geokit.rubyforge.org/
rdoc: http://geokit.rubyforge.org/api/index.html


using with merb
===============

Install with
# svn co http://merb-geokit.googlecode.com/svn/trunk/ merb_geokit
# cd merb_geokit
# rake package
# gem install pkg/merb_geokit-x.x.x.gem

Include it in Merb in your dependencies.rb file in the config dir
dependency "merb_geokit"

When you first startup merb it will copy a default geokit.rb file
to your config directory.  You should edit that file and add your API
keys to it.


geocoding
=========
This plugin comes with several geocoding interfaces.  You will need to sign
up for an API key for at least Google and Yahoo.

GeoKit::Geocoders::GoogleGeocoder.geocode(someaddress)
GeoKit::Geocoders::YahooGeocoder.geocode(someaddress)
GeoKit::Geocoders::UsGeocoder.geocode(someaddress)
GeoKit::Geocoders::CaGeocoder.geocode(someaddress)
GeoKit::Geocoders::IpGeocoder.geocode(someaddress)

eg:

>> address = "1600 Pennsylvania Avenue NW, Washington, DC"
=> "1600 Pennsylvania Avenue NW, Washington, DC"
>> puts GeoKit::Geocoders::GoogleGeocoder.geocode(address).to_yaml
--- !ruby/object:GeoKit::GeoLoc 
city: Washington
country_code: US
full_address: 1600 Pennsylvania Ave NW, Washington, DC 20006, USA
lat: 38.898774
lng: -77.036655
precision: address
provider: google
state: DC
street_address: 1600 Pennsylvania Ave Nw
success: true
zip: "20006"
=> nil

session/cookie location store
=============================

If you want to store the geocode location of the user in a session
or cookie, based on IP address, then add the following to the top of
the Application controller

before :store_ip_location

then you will have:

session[:geo_location]
cookies[:geo_location]

acts_as_mappable
================

Acts as mappable works with ActiveRecord objects and will allow you to
do work with locations.  This would take an address, city, and state
and automatically look it up and populate the database with the results
from the search, including the lat, lng, and zip.

class Location < ActiveRecord::Base
  acts_as_mappable
  validate :validate_address, :ensure_unique_address

  private
  def validate_address
    address = "#{self.address}, #{self.city}, #{self.state}"
    geo=GeoKit::Geocoders::YahooGeocoder.geocode(address)
    unless geo.success && geo.street_address
      errors.add(:address, "Could not find address") 
    end
    if geo.success
      self.lat, self.lng, self.zip = geo.lat,geo.lng,geo.zip
      self.address, self.city, self.state = geo.street_address, geo.city, geo.state
    end
  end

  def ensure_unique_address
    unless Location.find_all_by_address_and_zip(self.address,self.zip).empty?
      errors.add(:address, "has already been taken")
    end
  end

end


rake tasks
==========

This plugin also adds rake tasks.  You must supply the address as an
environmental variable.  

$ rake -T geo

rake geo:ip      # Lookup up the address of an IP
rake geo:google  # Look up an address on google
rake geo:yahoo   # Look up an address on yahoo
rake geo:us      # Look up an address on us_geocoder
rake geo:ca      # Look up an address on ca_geocoder
rake geo:multi   # Look up an address using the failover

For example:

rake geo:ip ADDR="72.14.207.99"
rake geo:google ADDR="1600 Pennsylvania Avenue NW, Washington, DC"
Something went wrong with that request. Please try again.