Skip to content
This repository


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Geokit for DataMapper

branch: master

Fetching latest commit…


Cannot retrieve the latest commit at this time

Octocat-spinner-32 lib
Octocat-spinner-32 spec
Octocat-spinner-32 .gitignore
Octocat-spinner-32 LICENSE
Octocat-spinner-32 Rakefile
Octocat-spinner-32 TODO
Octocat-spinner-32 VERSION.yml
Octocat-spinner-32 dm-geokit.gemspec


A mixin for Datamapper models that enables geographic functionality.

  • Search for content via DataMapper-style query methods, e.g. Location.all(:address.near => {:origin => 'Portland, OR', :distance => 5.mi})
  • Sort by distance easily: Location.all(:address.near => {:origin => 'Portland, OR', :distance => 5.mi}, :order => [:address_distance.desc])
  • Ability to specify multiple fields that are geocodable (mostly)


Basic Class Definition:

class Location
  include DataMapper::Resource
  include DataMapper::GeoKit
  property :id, Serial
  has_geographic_location :address

This will automatically generate fields and methods for use with the DM Object, prefixed with the field name specified. Since the above example used the field :address, the following fields would be generated:

  • address_street_address
  • address_city
  • address_state
  • address_zip
  • address_country_code
  • address_full_address
  • address_lat
  • address_lng

You can either reference those fields directly, or use the proxy object returned by calling .address on your object:

l = Location.all(:address.near => {:origin => 'Portland, OR', :distance => 5.mi})

l.each do |loc|
  puts loc.address # .to_s yields string representation of full address, e.g. "12345 My St. Portland, OR USA"
  puts loc.address.inspect # the proxy object, GeographicLocation, with matching methods for each property
  puts loc.address.street_address # getting the street_address from the proxy object
  puts loc.address_street_address # directly access the SQL column

The GeographicLocation proxy object is a convenience to allow you to compare and sort results in Ruby.


  • geokit >= 1.5.0
  • dm-core >= 1.0.2
  • dm-aggregates >= 1.0.2
Something went wrong with that request. Please try again.