Postgis-Werte umrechnen

Hallo,

weiß Jemand von Euch, wie man die in einer Postgres-Datenbank enthaltenen WKB-Werte einfach in die für die Projektion üblichen Hoch-Rechts-Werte umrechnen kann?

Gruß Bernd :slight_smile:

Du kannst folgendermaßen auf die Werte zugreifen:

astext(geometry)

Statt “0101000000F99FFC35DF7B33C12E20B446B22634C1” hättest du dann “POINT(-1276895.210886 -1320626.276186)” (das sind jetzt Lambert-Koordinaten)
Bei Polygonen sieht das dann natürlch etwas anders aus.

Wenn du die X,Y,Z-Koordinaten direkt ansprechen willst, dann läuft das folgendermaßen:
X(geometry)
Y(geometry)
Z(geometry)

Ist es das was du wolltest?

Hallo Maik,

ich brauch eher dieses Koodinaten-System:

klickmich

Ein schönes Wochenende wünscht Euch allen

Bernd :wink:

Hallo Pegasus,


wenn Du die Geometrien umrechnen möchtest, dann


SELECT Transform(Name_der_Geometriespalte, SRID_der_Zielprojektion) FROM Name_der_Tabelle;


Deine Frage ist nicht eindeutig! Mit welchem Koordinatensystem hast Du die Daten in die DB geladen?


Gruß
Harald

Also das Koordinatensystem ist egal! Es wird in dem angegeben in dem du sie eingelesen hast. Ich hab das nur dazugeschrieben, damit du dich nicht über die Zahlen im Beispiel wunderst. Viele Leute kennen nur das geographische Koordinatensystem und wundern sich dann über solche Werte.

Hallo Harald,

ich weiß, ich habe noch gehörige Verständnisprobleme in Verbindung mit POSTGIS, zumal mein räumliches Vorstellungsvermögen sehr schlecht ist - komme eben aus der Ecke der kaufmännischen Programmierung.

Die Daten liegen im WKB-Format in der Geometriespalte; ich möchte 2 zusätzliche Spalten mit den Rechts-Hochwerten hinzufügen, um permanente Umrechnung während der Verarbeitung der Grafikdaten zu vermeiden.

Gruß Bernd :slight_smile:

Also das würde so gehen:
ALTER TABLE xyz ADD COLUMN rechtswert
ALTER TABLE xyz ADD COLUMN hochwert

UPDATE yxz SET rechtswert=X(the_geom)
UPDATE yxz SET hochwert=Y(the_geom)

Das geht allerdings nur mit Punkten. Bei Polygonen müsste man komplett anders ran gehen.Allerdings macht das meiner Meinung dann auch keinen Sinn.
Die Umrechnung sollte eigentlich ziemlich schnell sein, so dass ein entsprechender SELECT mit Umrechnung (also jedes mal) nicht viel mehr Ressourcen fressen sollte als ein SELECT ohne.
Wenn das ganze nicht später operationell laufen soll, dann würde ich das ganze nicht separat abspeichern (wobei, ich würde es noch nicht mal dann machen). Das schafft nur Redundanz und das wollen wir ja vermeiden.

Hallo Maik,

habe die Spalten Rechts- und Hochwert im int8-Format angelegt.
Die Abfrage läuft fehlerfrei durch, aber die Spalten sind leer.

The_geom ist ein WKB-Feld; müssen hier noch irgendwelche Positionsangaben gegeben werden?

Gruß Bernd

Sorry, Maik, habe ich nicht gelesen…wir haben Multiline.

Somit geht es m.E. nicht mit 2 neuen Tabellenspalten, sondern ich muss jeweils
mindestens 10 neue anlegen, da es entsprechend viele Werte sein können.

Gruß Bernd :wink:

Ja, das könntest du schon machen. Ich weiß jetzt nicht was du damit machen willst. Aber ich halte es nicht für besonders sinnvoll.

Hallo Maik,

da hast Du vollkommen Recht; über den Sinn dieser Aktion könnte man streiten, zumal die zusätzlichen Datenfelder die Bank aufblähen.

Da die Postgis-Datenbank mit DELPHI ausgelesen werden soll und hier mit den Gauß-Krüger-System gearbeitet wird, spart man sich das Umrechnen, wenn schon die entsprechenden Tabellen in der Datenbank existieren.

Ob diese Zeitersparnis messbar ist oder nicht, werde ich auf alle Fälle testen.

Gruß Bernd :wink:

Kannst dann ja mal berichten. Würde mich interessieren.

Gruß Maik

Hallo Bernd,


für mich ließt sich das sehr abenteuerlich. Auch schon die Akrobatik mit der die Daten in die DB gekommen sind. Nun, wenn man nichts probiert lernt man auch nichts!


Ich lese, dass Du im Grunde genommen nur ein Datenblatt mit den Hoch- und Rechtswerten brauchst. Dazu braucht man kein PostGIS! Evtl. könnte man den gesamten Verlauf (Daten aufbereiten, diverses konvertieren, Daten in DB Laden) noch einmal scannen ob es keine Abkürzung gibt.


Wie man die Stützpunkte aus einer Multiline destiliert, weiß ich gerade auch nicht. Der Loader shp2pgsql erstellt immer Multiline, auch wenn die Geometrie Line ist. Mein Vorschlag wäre, zu prüfen ob es sich um Multiline handelt:


Select NumGeometries(geometry) from table;


Rückgabe ist die Anzahl der Linien! Nächster Schritt ist eine Abfrage über die Anzahl der Stützpunkte pro Linie:


Select NumPoints(GeometryN(geometry, int [hier muss hoch gezählt werden])) from table;


Mit dem Ergebnis kannst Du die einzelnen Stützpunktepunkte in der jeweiligen Linie ansteuern:


Select astext(PointN((GeometryN(geometry, int[Zähler für die Linien])), int[Zähler für die Punkte])) from table;


Nun hast Du die Stützpunkte und kannst mit Maiks Vorschlag fortfahren:


Select x[y](astext(PointN((GeometryN(geometry, int[Zähler für die Linien])), int[Zähler für die Punkte]))) from table;


Wenn Du zu einem einfacheren Weg findest, melde ich schon einmal mein Interesse an.


Bis dahin


Gruß Harald