I have a table of geocoded locations with latitude and longitude. I'd like my database query to return a filtered list of them, ordered by distance from a fixed point.
There are a few options which I've explored:
I'll need a solution which works with Rails3.
If there are no better options, i'll have to implement my own haversine function, which sure seems like reinventing the wheel. Any better options?
I would now (July 2011) recommend using geocoder
gem 'geocoder'
http://www.rubygeocoder.com/
You could also use geokit-rails3 as I previously mentioned but it isn't complete and isn't maintained.
gem 'geokit-rails3'
http://github.com/jlecour/geokit-rails3
Geokit will handle all of the distance calculations, using haversine, in the database. It also works great with heroku and postgres. Highly recommend.
Geokit Gem Rails Geokit Integration
all code taken from the github
class Location < ActiveRecord::Base
acts_as_mappable :default_units => :miles,
:default_formula => :sphere,
:distance_field_name => :distance,
:lat_column_name => :lat,
:lng_column_name => :lng
end
Store.find :all, :bounds=>[sw_point,ne_point]
bounds=Bounds.from_point_and_radius(home,5)
stores=Store.find :all, :include=>[:reviews,:cities] :bounds=>bounds
stores.sort_by_distance_from(home)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With