Rake-Task für PostGIS in Ruby On Rails
Ich arbeite im Moment an einem Höhlenkataster für unseren Verein (und als Diplomarbeit), das ich mit Ruby (On Rails) schreibe. Dabei benutze ich als Datenbank-Backend PostGIS und als GIS-Framework den UMN MapServer.
Ein Problem, das auftrat, war das Einfügen der PostGIS-Funktionalität nach einem Datenbank-Drop. Dieses Problem habe ich mit einem eigenen Rake-Task gelöst.
Herunterladen unter http://pastie.org/pastes/266701/
4 Comments:
Hi gormo,
es scheint, dass Du Dich gut mit PostGIS-Integration in Rails auskennst, deshalb wage ich es, Die einige Fragen zu stellen:
- GeoRuby bietet nur rudimentäre Funktionen für Geometrien, richtig? Also bspw. Schnitt, Vereinigung usw. kann es nicht, oder?
- Kannst Du in Deiner Umgebung auf die PostGIS-Funktioen zugreifen, also z.B. mit:
sql = "select * from my_schema.my_geometries where st_intersects(geom, geom)"
@my_geometry = MyGeometry.find_by_sql(sql)
(natürlich ein etwas sinnloser Aufruf...)?
Ich bekomme die Fehlermeldung: Mfunction st_intersects(public.geometry, public.geometry) does not exist HNo function matches the given name and argument type...
In pgAdmin funktionierts aber.
Ich habe das Gem GeoRuby und das Plugin SpatialAdapter installiert. Die Spatial-Unterstützung funktioniert auch: Ich kann in Tabellen Geometrien anlegen, sie auslesen, die GeoRuby-Funktionen darauf anwenden, usw.
Aber es wäre sehr sehr hilfreich, wenn ich alle PostGIS-Funktionen ausführen könnte. Mir scheint, dass meine Umgebung zwar die Postgres-Funktionen beherrscht, die PostGIS-Spracherweiterung aber nicht bekannt ist. Wo müßte ich das konfigurieren, und wie?
Herzlichen Dank, wenn Du mir weiterhelfen kannst, Grüße
Hi c_christoph,
bei mir funktioniert der find_by_sql-Aufruf auch, wenn ich das Schema nicht mit angebe, d.h.
en = Entrance.find_by_sql("select description from entrances where st_intersects(geom,geom) LIMIT 1")
liefert das Objekt mit einer korrekten description.
Ich tippe darauf, das rails sich irgendwie an der Schema-Angabe verschluckt...
Hi gormo,
Danke für Deine Antwort. Leider lag's daran nicht, Dein Besipiel funktioniert bei mir nicht. Ich vermute immer noch, dass die PostGIS-Funktionen von meiner Rails-Umgebung nicht gefunden werden.
Muss man ein spezielles gem installieren? Ich habe Postgres mit "postgres-pr (0-4-0)" angebunden. Ich glaube, dazu gibt es auch eine Alternative. Außerdem habe ich noch "GeoRuby (1.3.1)". Welche gems benutzt Du ("gem list --local") ?
Nochmal Danke, Grüße
Hi,
ich habe den Fehler nun doch selbst entdeckt: Die PostGIS-Funktionen lagen in meiner DB in einem anderen Schema ("public") als die Tabellen meiner Applikation. "set search_path to public, my_schema;" vor jedem sql-Aufruf aus Rails lößt das Problem fürs Erste.
Grüße
Kommentar veröffentlichen
<< Home