Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Accessing PostGIS spatial data from Rails

I need to use an existing PostGIS database from my Rails application. So far I am able to access the DB just fine, GeoRuby nicely converts the 'geom' column into a Point object.

What I am looking for is an easy way to execute ActiveRecord-like queries on those tables, e.g.

Poi.find_within_radius(...)

or similar spatial queries like distance calculations et. al.

I tried several combinations of geokit, accompanying rails plugins but I'm quite sure there must be something better out there in the ruby/rails universe. Any hints?

like image 858
Lakitu Avatar asked Oct 07 '09 14:10

Lakitu


1 Answers

Since you've got GeoRuby, put in your Poi model

SRID = 4326 #WGS84

# geometry column is geom
# pt is a GeoRuby Point
def self.find_within_radius(pt, dist = 0.01)
  self.all :conditions => "ST_DWithin(geom, ST_GeomFromText('POINT(#{pt.x} #{pt.y})', #{SRID}), #{dist})"
end

For distance calculations you can use methods on the point objects

dist_circle = poi1.geom.spherical_distance(poi2.geom)
dist_projected = poi1.geom.euclidean_distance(poi2.geom)
like image 131
synecdoche Avatar answered Sep 17 '22 10:09

synecdoche