我有一张经纬度地理位置的经纬度表。我希望我的数据库查询返回它们的过滤列表,按固定点的距离排序。
我已经探索过几个选项:
我需要一个适用于Rails3的解决方案。
如果没有更好的选择,我将必须实现我自己的半身功能,这肯定似乎重新发明轮子。有更好的选择吗?
答案 0 :(得分:8)
我现在(2011年7月)建议使用地理编码器
gem 'geocoder'
你也可以像我之前提到的那样使用geokit-rails3,但它不完整而且没有维护。
gem 'geokit-rails3'
答案 1 :(得分:3)
Geokit将在数据库中使用hasrsine处理所有距离计算。它也适用于heroku和postgres。强烈推荐。
Geokit Gem Rails Geokit Integration
所有代码取自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)
答案 2 :(得分:0)
Postgis目前处于测试阶段(2012年3月) https://addons.heroku.com/spacialdb
答案 3 :(得分:0)
Heroku现在(2013年2月)对PostGIS有beta级支持。其详细信息可在其网站上找到(需要登录):https://devcenter.heroku.com/articles/heroku-postgres-extensions-postgis-full-text-search#postgis
PostGIS的:
将对地理对象的支持添加到PostgreSQL对象关系数据库中。实际上,PostGIS“空间支持”PostgreSQL服务器,允许它用作地理信息系统(GIS)的后端空间数据库
Heroku Postgres的PostGIS v1.5支持处于测试阶段,未来可能会有所变化。