你如何使用共享数据库在Heroku上进行GIS查询?

Jas*_*n S 5 gis postgresql ruby-on-rails heroku

我有一张经纬度地理位置的经纬度表.我希望我的数据库查询返回它们的过滤列表,按固定点的距离排序.

我探索过几个选项:

  • Postgresql的earthdistance contrib可能最接近我的需求; 但是,我没有发现这是在heroku的数据库服务器上安装的迹象.
  • PostGIS是最常用的GIS解决方案,但heroku没有安装它,并且heroku支持证实他们不打算在不久的将来这样做.

我需要一个适用于Rails3的解决方案.

如果没有更好的选择,我将必须实现我自己的半身功能,这似乎重新发明轮子.有更好的选择吗?

swr*_*bel 8

我现在(2011年7月)建议使用地理编码器

gem 'geocoder'
Run Code Online (Sandbox Code Playgroud)

http://www.rubygeocoder.com/

您也可以像我之前提到的那样使用geokit-rails3,但它不完整且无法维护.

gem 'geokit-rails3'
Run Code Online (Sandbox Code Playgroud)

http://github.com/jlecour/geokit-rails3


Jes*_*ott 3

Geokit 将使用数据库中的半正矢处理所有距离计算。它也可以很好地与 heroku 和 postgres 配合使用。强烈推荐。

Geokit Gem Rails Geokit 集成

所有代码均取自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)
Run Code Online (Sandbox Code Playgroud)