2010-08-05 6 views
5

Ho una tabella di posizioni geocodificate con latitudine e longitudine. Vorrei che la mia query sul database restituisse un elenco filtrato di essi, ordinato per distanza da un punto fisso.Come si eseguono query GIS su Heroku utilizzando il database condiviso?

Ci sono alcune opzioni che ho esplorato:

  • Postgresql's earthdistance contrib è probabilmente più vicino alle mie esigenze; tuttavia, non ho trovato alcuna indicazione che questo sia installato sul server db di heroku.
  • PostGIS è la soluzione più spesso prescritta per GIS, ma heroku non ha installato, e il supporto di heroku ha confermato che non hanno intenzione di farlo nel prossimo futuro.

Avrò bisogno di una soluzione che funzioni con Rails3.

Se non ci sono opzioni migliori, dovrò implementare la mia funzione di haversine, che sicuramente sembra reinventare la ruota. Qualche opzione migliore?

risposta

3

Geokit gestirà tutti i calcoli della distanza, utilizzando haversine, nel database. Funziona anche alla grande con heroku e postgres. Altamente raccomandato.

Geokit Gem Rails Geokit Integration

tutto il codice preso dal 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) 
+0

Ho dimenticato di dire che questo è su Rails3, quindi GeoKit non è un'opzione, in quanto non è compatibile con ActiveModel. –

0

Postgis è attualmente disponibile in versione beta (marzo 2012) https://addons.heroku.com/spacialdb

+0

Nonostante il nome furbo, questo non è il database di Postgres di Heroku, ma piuttosto solo un altro servizio di terze parti. –

+0

https://devcenter.heroku.com/articles/is-postgis-available –

0

Heroku ora (febbraio 2013) ha supporto a livello di beta per PostGIS. I dettagli completi sono disponibili sul loro sito (Login richiesto): https://devcenter.heroku.com/articles/heroku-postgres-extensions-postgis-full-text-search#postgis

PostGIS:

aggiunge il supporto per oggetti geografici al database object-relational PostgreSQL. In effetti, PostGIS "abilita spazialmente" il server PostgreSQL, consentendone l'utilizzo come database spaziale backend per i sistemi di informazione geografica (GIS)

Il supporto PostGIS v1.5 su Heroku Postgres è in beta ed è soggetto a modifiche il futuro.

Problemi correlati