Postgis - Conversione del tipo di dati "geometry_dump" in un tipo di "geometria"


18

Sto lavorando con un set di dati di limiti di proprietà su cui è stato eseguito ST_Union (), quindi tutti i poligoni vengono visualizzati come multi poligoni in una riga di una tabella. Vorrei separarli in modo da ottenere una riga / poligono separati per ogni forma. Ho provato a eseguire ST_Dump () su questo e sembra separare i poligoni nel set di dati, ma non riesco più a visualizzarlo in un GIS (attualmente sto usando QGIS). Il tipo di dati per questa colonna dice che è un 'geometry_dump' e presumo che sia per questo che non riesco a visualizzarlo. Quando accedo al mio database Postgres da QGIS questa nuova tabella è elencata sotto l'intestazione dei set di dati senza geometria.

Qualcuno sa se c'è qualcosa che posso fare per convertire un 'geometria_ discarica' in una 'geometria'?

Risposte:


30

Il geometry_dumptipo di dati è un tipo composito semplice con due campi:

  1. path[] - una matrice 1-d che mantiene la posizione della geometria all'interno dell'oggetto scaricato, e
  2. geom - un semplice sottoinsieme di geometrie dell'originale, che è quello che vuoi.

Per accedere geom, basta usare (ST_Dump(the_geom)).geom(sono necessarie le parentesi extra, ed è un po 'un problema quando si accede ai membri da tipi compositi). Per esempio:

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)

Il manuale PostGIS contiene altri buoni esempi di ST_Dump.


Grazie, questo è proprio quello di cui avevo bisogno. Non ho mai usato o trovato sintassi SQL con qualcosa come ".geom". Saluti.
Roman Trubka,

Le parentesi extra sono importanti quindi: Corretto: "SELECT (ST_Dump (geom)). Geom FROM table"
Errato
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.