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

时间:2010-08-05 10:43:27

标签: ruby-on-rails postgresql heroku gis

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

我已经探索过几个选项:

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

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

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

4 个答案:

答案 0 :(得分:8)

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

gem 'geocoder'

http://www.rubygeocoder.com/

你也可以像我之前提到的那样使用geokit-rails3,但它不完整而且没有维护。

gem 'geokit-rails3'

http://github.com/jlecour/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支持处于测试阶段,未来可能会有所变化。