Postgis mit Java

Hallo,

ich habe Punkte als Point in postgres gespeichert.

nun möchte ich gerne an diese Punkte via Java heran kommen und verarbeiten.

ich bekomme die Punkte in Java auch als Text dargestellt wie kann ich sie jetzt als Punkt definieren!?

res.getObject(1)=“SRID=31467;POINT(50.540585 7.122855 91.463)”

Point punkt = new Point();
res = this.stmt.executeQuery(query);

punkt = res.getObject(1); // PROBLEM das geht nicht!


Oder gibt es eine Möglichkeit bei einer Abfrage sich direkt X,Y,M des Point zurück, zugeben zulassen.
" select asewkt(point) from daten; "

Danke für eure Hilfe

da schau

PGobject

sorry für die kurze antwort …

ich muss jetzt feierabenden - vielleicht antworte ich spaeter nochmal - wenns noch fragen gibt …

Hallo!

Das was du als Text bekommst ist der Punkt in WKT(WellKnownText-Format). Dabei sind die Zahlen hier Rechtswert und Hochwert, POINT bezeichnet den Geometrietyp (Wer hätte das gedacht :wink: ) und SRID ist die EPSG-Nummer des geographischen Bezugssystems. Das ganze gibt auch als Binärformat WKB. Um das in Java zu verwursten könnte dir das OpenJump-Projekt helfen. Alternativ könntest du über select x|y|z from geom_table auch die jeweiligen Koordinaten direkt ansprechen.

Grüssle Uwe

BTW: rein aus dem Bauch gesagt, deine SRID ist falsch, da dürfte 4326 hingehören (WGS84, lat/lon-Werte), du hast ein GaussKrüger-System (m-Angaben) eingestellt (31467=GK3) :wink:

ach was - da bin ich wieder :slight_smile:

da gibts die klasse PGObject … die kanner entweder ableiten oder einfach so benutzen …

ich hab da schonmal irgendwo was von extensions fuer postgres-jdbc gesehen … da sind ziemlich sicher so geometrie-objekte bei

ich benutz diesen weg fuer custom complex types … hab da inzwischen auch halbwegs ennehmbare lösungen gefunden, um damit zu arbeiten …

Hi,

Danke erst mal für die Antworten.
Also die Alternative: “lternativ könntest du über select x|y|z from geom_table auch die jeweiligen Koordinaten direkt ansprechen.”

ist eine gute Idee.

Ja es gibt extensions fuer postgres-jdbc ich benutze Java Postgis JDBC ich nutze diesen auch aber leider funktioniert das nicht so wie ich das gerne hätte!
Oder ich sehe meinen Fehler nicht!

PGObject gibt es aber wie kann ich daraus ein Postgis Point machen in JAVA!???

Code:
ResultSet res;
Point punkt = new Point();
PGobject pgobj = new PGobject();

pgobj = (PGobject)res.getObject(1);
punkt = gpobj; // ???

naja ich werde es mal weiter probieren Danke euch erst mal

PS: Srid ist erst mal egal :wink:

Was meinst du mit ‘PostGIS’-Punkt? Der String, den du erhälst ist eigentlich die Klartext-Ausgabe eines ‘PostGIS-Punkts’.

Ich vermute aber, du möchtest in irgendeiner Form geographisch vorgehen :wink:
Dann könnte dir das Jump-Projekt helfen. Da könntest du nützliches finden. Aber frag mich net weiter, ich hab sonst wenig mit Java zu tun :wink:

PS: Srid ist erst mal egal > :wink: >

Ich habe dich gewarnt :wink:

CU WotW

die PGObject-Klasse ist nichts weiter als ne Kapsel fuer den Klartext-String von dem z.B. Gisman sprach. I.d.R. würde man fuer irgendeinen Komplexen Typ - wie Point - diese Klasse ableiten - und diese Klasse den String parsen bzw encoden lassen. PGObject hat wohl notwendiger Weise auch noch ein Attribut in dem Der Typ-Name stehen muss PGObject.setType(String name) glaub ich.

PGObjekt selbst kann also nicht viel - ich schaetze aber, dass entsprechende Derrivate in diesen JDBC Extensions existieren - die das erledigen …

ich wuerde mal nach sowas wie PGPoint etc ausschau halten (fals sowas existiert) - wie die dann zu handhaben sind muesste doch dokumentiert sein … ich schaetze dass die im Konstruktor dann ein PGObject aufnehmen oder nen String …

[nachtrag]
wenn da aber nichts derartiges bei ist wuerd ich sowas einfach selbst basteln … musst ja nichtmal von ableiten …

class MyPoint .. {
    public MyPoint(Object o) {
        if (o instanceof PGObject) {
           PGObject pg = (PGObject) o;
           ... det teil auseinander nehmen
        } else
           throw ... 
    }
}

new MyPoint(resultSet.getObject(…)).getXYZ()

Ah Lösung zum Problem gefunden bzw. mit Hilfe. :slight_smile:

Code:

PGgeometry geom = (PGgeometry) res.getObject(1);
System.out.println( geom.getGeometry().getClass().getCanonicalName());
System.out.println( geom.getType());
System.out.println( geom.getGeoType());

if( geom.getGeoType() == Geometry.POINT){
Point p = (Point) geom.getGeometry();
System.out.println( p.toString());

}

Danke auch noch mal an die anderen.