Postgis - Conversion du type de données 'geometry_dump' en type 'geometry'

18

Je travaille avec un ensemble de données de limites de propriété sur lequel ST_Union () a été exécuté, donc tous les polygones apparaissent comme un polygone multiple sur une ligne d'une table. Je voudrais les séparer afin d'obtenir une ligne / polygone distincte pour chaque forme. J'ai essayé d'exécuter ST_Dump () sur cela et il semble séparer les polygones dans le jeu de données mais je ne peux plus voir cela dans un SIG (j'utilise actuellement QGIS). Le type de données pour cette colonne indique qu'il s'agit d'un 'geometry_dump' et je suppose que c'est pourquoi je ne peux pas le visualiser. Lorsque j'accède à ma base de données Postgres à partir de QGIS, cette nouvelle table est répertoriée sous l'en-tête des ensembles de données sans géométrie.

Est-ce que quelqu'un sait s'il y a quelque chose que je peux faire pour convertir un 'geometry_dump' en 'geometry'?

Roman Trubka
la source

Réponses:

30

Le geometry_dumptype de données est un type composite simple avec deux champs:

  1. path[] - un tableau 1-d tenant la position de la géométrie à l'intérieur de l'objet vidé, et
  2. geom - un sous-ensemble de géométrie simple de l'original, ce que vous voulez.

Pour y accéder geom, utilisez simplement (ST_Dump(the_geom)).geom(les parenthèses supplémentaires sont obligatoires, et c'est un peu un piège lors de l'accès aux membres à partir de types composites). Par exemple:

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)

Le manuel PostGIS contient d'autres bons exemples pour ST_Dump.

Mike T
la source
Merci, c'est exactement ce dont j'avais besoin. Je n'ai jamais utilisé ou rencontré de syntaxe SQL avec quelque chose comme ".geom". À votre santé.
Roman Trubka
Les crochets supplémentaires sont importants pour: Correct: "SELECT (ST_Dump (geom)). Table geom FROM" Incorrect: "SELECT ST_Dump (geom) .geom FROM table"
HeikkiVesanto