Postgis - Konvertieren des Datentyps 'geometry_dump' in einen 'geometry'-Typ

18

Ich arbeite mit einem Datensatz von Eigenschaftsgrenzen, auf dem ST_Union () ausgeführt wurde, sodass alle Polygone als Mehrfachpolygon in einer Zeile einer Tabelle angezeigt werden. Ich möchte diese trennen, damit ich für jede Form eine separate Reihe / ein Polygon erhalte. Ich habe versucht, ST_Dump () auszuführen, und es scheint, die Polygone in der Datenmenge zu trennen, aber ich kann dies nicht mehr in einem GIS anzeigen (ich verwende derzeit QGIS). Der Datentyp für diese Spalte besagt, dass es sich um einen 'geometry_dump' handelt, und ich gehe davon aus, dass ich ihn aus diesem Grund nicht visualisieren kann. Wenn ich über QGIS auf meine Postgres-Datenbank zugreife, wird diese neue Tabelle unter der Überschrift der Datensätze ohne Geometrie aufgeführt.

Weiß jemand, ob ich etwas tun kann, um einen 'geometry_dump' in einen 'geometry' umzuwandeln?

Roman Trubka
quelle

Antworten:

30

Der geometry_dumpDatentyp ist ein einfacher zusammengesetzter Typ mit zwei Feldern:

  1. path[] - ein 1-d-Array, das die Position der Geometrie innerhalb des abgelegten Objekts enthält, und
  2. geom - eine einfache Geometrie-Teilmenge des Originals, die Sie möchten.

Um darauf zuzugreifen geom, verwenden Sie einfach (ST_Dump(the_geom)).geom(die zusätzlichen Klammern sind erforderlich und sind ein kleines Problem, wenn Sie auf Mitglieder aus zusammengesetzten Typen zugreifen). Beispielsweise:

WITH data AS (SELECT 'MULTIPOLYGON (((170 190, 110 150, 200 120, 170 190)), 
  ((220 160, 230 110, 280 120, 220 160)), 
  ((220 200, 260 240, 270 190, 220 200)))'::geometry AS the_geom)

SELECT ST_AsText( (ST_Dump(the_geom)).geom )
FROM data;
                 st_astext
--------------------------------------------
 POLYGON((170 190,110 150,200 120,170 190))
 POLYGON((220 160,230 110,280 120,220 160))
 POLYGON((220 200,260 240,270 190,220 200))
(3 rows)

Das PostGIS-Handbuch enthält weitere gute Beispiele für ST_Dump.

Mike T
quelle
Danke, das ist genau das, was ich brauchte. Ich habe noch nie SQL-Syntax mit so etwas wie ".geom" verwendet oder bin auf sie gestoßen. Prost.
Roman Trubka
Die zusätzlichen Klammern sind wichtig: Richtig: "SELECT (ST_Dump (geom)). Geom FROM table" Falsch: "SELECT ST_Dump (geom) .geom FROM table"
HeikkiVesanto 29.11.16