2010-08-05 6 views
5

Ich habe eine Tabelle von geocodierten Standorten mit Längen- und Breitengrad. Ich möchte, dass meine Datenbankabfrage eine gefilterte Liste von ihnen zurückgibt, sortiert nach Entfernung von einem festen Punkt.Wie machen Sie GIS-Abfragen auf Heroku mit der gemeinsamen Datenbank?

Es gibt ein paar Optionen, die ich untersucht habe:

  • Postgresql's earthdistance contrib wird wahrscheinlich am nächsten meine Bedürfnisse; Ich habe jedoch keinen Hinweis gefunden, dass dies auf dem Datenbankserver von Heroku installiert ist.
  • PostGIS ist die am häufigsten vorgeschriebene Lösung für GIS, aber heroku hat sie nicht installiert, und die Unterstützung von Heroku hat bestätigt, dass sie dies in naher Zukunft nicht beabsichtigen.

Ich brauche eine Lösung, die mit Rails3 funktioniert.

Wenn es keine besseren Optionen gibt, muss ich meine eigene hairsine Funktion implementieren, die das Rad neu zu erfinden scheint. Irgendwelche besseren Möglichkeiten?

Antwort

3

Geokit behandelt alle Entfernungsberechnungen mit hairsine in der Datenbank. Es funktioniert auch gut mit Heroku und Postgres. Sehr empfehlenswert.

Geokit Gem Rails Geokit Integration

alle aus dem Github genommen Code

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

Ich habe vergessen zu erwähnen, dass dies auf Rails3 ist, daher ist GeoKit keine Option, da es nicht mit ActiveModel kompatibel ist. –

0

Postgis ist derzeit in der Beta (März 2012) https://addons.heroku.com/spacialdb

+0

Trotz des schlauen Namens ist dies nicht die Postgres-Datenbank von Heroku, sondern nur ein weiterer Service von Drittanbietern. –

+0

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

0

Heroku jetzt (Februar 2013) hat Beta-Level-Support für PostGIS. Alle Einzelheiten sind auf ihrer Website zur Verfügung (Anmeldung erforderlich): https://devcenter.heroku.com/articles/heroku-postgres-extensions-postgis-full-text-search#postgis

PostGIS:

Unterstützung für geografische Objekte in der objektrelationale Datenbank PostgreSQL erstellt. Tatsächlich aktiviert PostGIS den PostgreSQL - Server "räumlich", so dass er als Backend - Spatial - Database für Geographische Informationssysteme (GIS) verwendet werden kann.

PostGIS v1.5 Unterstützung für Heroku Postgres ist in der Beta - Version und kann sich ändern die Zukunft.