How do you do GIS queries on Heroku using the shared database?

空扰寡人 提交于 2020-01-01 03:21:21

问题


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:

  • Postgresql's earthdistance contrib is probably closest to my needs; however, I've found no indication that this is installed on heroku's db server.
  • PostGIS is the most often prescribed solution for GIS, but heroku does not have it installed, and heroku support confirmed that they have no intention of doing so in the near future.

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?


回答1:


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




回答2:


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)



回答3:


Postgis is currently available in beta (March 2012) https://addons.heroku.com/spacialdb




回答4:


Heroku now (Feb 2013) has beta level support for PostGIS. Full details are available on their site (login required): https://devcenter.heroku.com/articles/heroku-postgres-extensions-postgis-full-text-search#postgis

PostGIS:

adds support for geographic objects to the PostgreSQL object-relational database. In effect, PostGIS “spatially enables” the PostgreSQL server, allowing it to be used as a backend spatial database for geographic information systems (GIS)

PostGIS v1.5 support on Heroku Postgres is in beta and is subject to change in the future.



来源:https://stackoverflow.com/questions/3413919/how-do-you-do-gis-queries-on-heroku-using-the-shared-database

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!