cITeco

Hauptsächlich Höhlen, IT und Umwelt, aber auch eventuell anderes.
Wenden Sie sich bei Problemen einfach an die Beschwerdestelle in Raum 3b.

5.9.08

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/

Labels: , ,

4 Comments:

At 16:40, Anonymous Anonym said...

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

 
At 17:10, Blogger gormo said...

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...

 
At 22:13, Anonymous Anonym said...

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

 
At 09:15, Anonymous Anonym said...

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