19 votos

Postgis - Conversión del tipo de datos 'geometry_dump' en un tipo 'geometry

Estoy trabajando con un conjunto de datos de límites de propiedades sobre el que se ha ejecutado ST_Union(), por lo que 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 distinto para cada forma. He probado a ejecutar ST_Dump() y parece que separa los polígonos en el conjunto de datos, pero ya no puedo verlo en un SIG (actualmente utilizo QGIS). El tipo de datos de esta columna indica que se trata de un "geometry_dump" y supongo que por eso no puedo visualizarlo. Cuando accedo a mi base de datos Postgres desde QGIS, esta nueva tabla aparece bajo el título de conjuntos de datos sin geometría.

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

34voto

hernan43 Puntos 566

En geometry_dump es un simple tipo compuesto con dos campos:

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

Para acceder geom sólo tiene que utilizar (ST_Dump(the_geom)).geom (los paréntesis adicionales son necesarios, y son un poco complicados cuando se accede 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)

En Manual PostGIS tiene otros buenos ejemplos para ST_Dump.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X