Postgis - преобразование типа данных geometry_dump в тип geometry

18

Я работаю с набором данных границ свойств, на котором запущен ST_Union (), поэтому все многоугольники отображаются в виде многоугольника в одном ряду таблицы. Я хотел бы выделить их, чтобы получить отдельный ряд / многоугольник для каждой фигуры. Я попытался запустить ST_Dump () для этого, и кажется, что он разделяет полигоны в наборе данных, но я больше не могу просматривать это в ГИС (в настоящее время я использую QGIS). Тип данных для этого столбца говорит, что это «geometry_dump», и я предполагаю, что именно поэтому я не могу его визуализировать. Когда я получаю доступ к своей базе данных Postgres из QGIS, эта новая таблица отображается под заголовком наборов данных без геометрии.

Кто-нибудь знает, могу ли я что-то сделать, чтобы преобразовать 'geometry_dump' в 'geometry'?

Роман Трубка
источник

Ответы:

30

Тип geometry_dumpданных - это простой составной тип с двумя полями:

  1. path[] - 1-й массив, содержащий положение геометрии в выгруженном объекте, и
  2. geom - простое подмножество геометрии оригинала, то, что вы хотите.

Чтобы получить доступ geom, просто используйте (ST_Dump(the_geom)).geom(дополнительные скобки требуются, и это немного сложнее при доступе к членам из составных типов). Например:

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)

В руководстве PostGIS есть и другие хорошие примеры для ST_Dump.

Майк Т
источник
Спасибо, это как раз то, что мне было нужно. Я никогда не использовал и не встречал синтаксис SQL с чем-то вроде «.geom». Приветствия.
Роман Трубка
Дополнительные скобки важны так: Правильно: «SELECT (ST_Dump (geom)). Geom FROM таблица» Неправильно: «SELECT ST_Dump (geom) .geom FROM таблица»
HeikkiVesanto