Postgis - Convertendo o tipo de dados 'geometry_dump' para um tipo 'geometry'

18

Estou trabalhando com um conjunto de dados de limites de propriedade que executou ST_Union (), portanto todos os polígonos aparecem como um polígono múltiplo em uma linha de uma tabela. Gostaria de separá-los para obter uma linha / polígono separado para cada forma. Eu tentei executar ST_Dump () sobre isso e parece separar os polígonos no conjunto de dados, mas não consigo mais ver isso em um GIS (atualmente estou usando o QGIS). O tipo de dados desta coluna diz que é um 'geometry_dump' e presumo que seja por isso que não consigo visualizá-lo. Quando acesso o banco de dados Postgres a partir do QGIS, esta nova tabela é listada sob o cabeçalho de conjuntos de dados sem uma geometria.

Alguém sabe se existe algo que eu possa fazer para converter um 'geometry_dump' em uma 'geometry'?

Roman Trubka
fonte

Respostas:

30

O geometry_dumptipo de dados é um tipo composto simples com dois campos:

  1. path[] - uma matriz 1-d que mantém a posição da geometria dentro do objeto despejado, e
  2. geom - um subconjunto simples de geometria do original, que é o que você deseja.

Para acessar geom, basta usar (ST_Dump(the_geom)).geom(os parênteses extras são necessários e são um pouco complicados ao acessar membros de tipos compostos). Por exemplo:

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)

O manual do PostGIS tem outros bons exemplos para o ST_Dump.

Mike T
fonte
Obrigado, é exatamente isso que eu precisava. Eu nunca usei ou me deparei com a sintaxe SQL com algo como ".geom". Felicidades.
Roman Trubka
Os colchetes extras são importantes para: Correto: "SELECT (ST_Dump (geom)). Geom FROM tabela" Incorreto: "SELECT ST_Dump (geom) .geom FROM tabela"
HeikkiVesanto