ich bin absoluter PostGis anfänger. Ich habe eine Tabelle mit geometry: poi(id:int,name:string,address:string,geom:geometry)
der Inhalt wurde mit
INSERT **** GeometryFromText(‘POINT("+lon+" “+lat+”)’,4326))*112
eingefügt.
Ein Tupel schaut nun so aus:
(13, Testplatz, Muenchen, 01070000A0E61000000100000001010000805E11FC6F25134840A417B5FB553027400000000000000000)
Wie kann ich nung aus dieser Geometriespalte die dazugehörenden Lon und Lat Werte auslesen? Mit .getString() kriege nur den String… Mir würde es wahrscheinlich auch reihen einen POINT oder POLYGON zu extrahieren…
Dürfte nicht so schwer sein, oder? aber ich habe leider keine Ahnung, wurde aus der PostGIS Referenz leider auch nicht schlau
Ich weiss auch noch nicht, warum meine Vorgängerin die Punkte vor dem Einfügen mit 112 Multipliziert hat.
Du kannst die Funktionen ST_X(geometry) und ST_Y(geometry) nutzen wenn es Punkte sind, oder du kannst auch gleich KML rausschreiben mit ST_AsKML(geometry) für alle Geometrien
also etwa so:
select id, ST_X(geom), ST_Y(geom) from geomtabelle;
oder
select id, ST_AsKML(geom) from geomtabelle;
Das 112 würde ich mal deuten, das sie jeden Punkt 112 mal angelegt hat, was aber auch nicht mehr Sinn ergibt
Vielleicht wollte sie ja Lat/Lon in Kilometer umrechnen.
Man sagt ja als Faustregel, dass 1° ca. 111km sind. Also mal so ganz krass über den Daumen gepeilt. Vielleicht dachte sie ja, dass die Umrechnung damit erledigt ist. Die Leute sind da manchmal sehr kreativ was solche Sachen angeht.
also ist das eher “schwachsinn”??
wenn das falsch ist, nehme ich es nämlich raus und hoffe, dass ich mit dem Datensatz trotzdem noch arbeiten kann )
Besser geeignet wären wahrscheinlich die postGis eigene distance() Funktion?
ST_AsKML(geom)
wird mir hoffentlich weiterhelfen, ich habe nämlich nicht nur Punkte sondern auch Polygone… Muss ich da noch was beachten um aus dem ResultSet die Lat/Lon WErte auszulesen?
Hoi!
Ich bin jetzt frecherweise davon ausgegangen, das du PostGIS 1.3.x benutzt. Da wurden die Befehlsbezeichnungen an SQL-MM(?)-Bezeichnungen angepasst. Vorher war das einfach askml(geometry).
Wenn PostGIS richtig installiert ist sollte das auch funktionieren, zumindest die Funktion finden. Einbinden braucht man da eigentlich nichts.
Womit greifst du denn auf die DB zu?
ich arbeite mit jsp und greife über eine Java Methode auf die DB zu.
die function distance() funktioniert z.B.
Ich hatte die Abfrage schon auf askml(geometry) geändert. die findet er leider auch nicht, aber wie gesagt, wird die funktion von Java falsch als asukml(geometry) weitergegeben
Ich weiss leider nicht, welche postgis version installiert ist, wie kann ich das herausfinden?
Hm, version() sollte eine PostgreSQL-Funktion sein, die dir die Serverversion sagt. Die andere gibt die Postgis-Version zurück. Kannst du sie direkt als SQL absetzen?
Bei PostGIS 1.1.6 funktionieren dei ST_Befehle noch nicht und ich bin nicht sicher, ob da schon asKML() implementiert wurde. Aber es gibt einen GML-Export, der könnte eventuell auch weiterhelfen. AFAIK gibt es da auch schon GML-KML-Konverter.
Also in diesem Fall würde ich updaten. Bei deine Version ist etwas veraltet. So gesehen fehlen dir auch noch eine ganze Stange andere Funktionen. Das Update sollte sich also auf jeden Fall lohnen. Dann dürfte asKML auch funktionieren.