Postgis - Convertir el tipo de datos 'geometry_dump' a un tipo 'geometry'

18

Estoy trabajando con un conjunto de datos de límites de propiedad que tiene ST_Union () ejecutado en él, por lo tanto, todos los polígonos aparecen como un polígono múltiple en una fila de una tabla. Me gustaría separarlos para obtener una fila / polígono por separado para cada forma. He intentado ejecutar ST_Dump () en esto y parece separar los polígonos en el conjunto de datos, pero ya no puedo ver esto en un SIG (actualmente estoy usando QGIS). El tipo de datos para esta columna dice que es un 'geometry_dump' y supongo que es por eso que no puedo visualizarlo. Cuando accedo a mi base de datos Postgres desde QGIS, esta nueva tabla aparece bajo el encabezado de conjuntos de datos sin una geometría.

¿Alguien sabe si hay algo que pueda hacer para convertir una 'geometry_dump' en una 'geometry'?

Trubka romana
fuente

Respuestas:

30

El geometry_dumptipo de datos es un tipo compuesto simple con dos campos:

  1. path[] - una matriz 1-d que mantiene la posición de la geometría dentro del objeto volcado, y
  2. geom - un subconjunto de geometría simple del original, que es lo que quieres.

Para acceder geom, solo use (ST_Dump(the_geom)).geom(los paréntesis adicionales son obligatorios, y es un poco complicado al acceder a miembros de tipos compuestos). Por ejemplo:

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)

El manual de PostGIS tiene otros buenos ejemplos para ST_Dump.

Mike T
fuente
Gracias, esto es justo lo que necesitaba. Nunca he usado o me encuentro con la sintaxis SQL con algo como ".geom". Salud.
Roman Trubka
Los corchetes adicionales son importantes, por lo tanto: Correcto: "SELECT (ST_Dump (geom)). Geom FROM table" Incorrecto: "SELECT ST_Dump (geom) .geom FROM table"
HeikkiVesanto