Postgis - Перетворення типу даних 'geometry_dump' у тип 'geometry'


18

Я працюю з набором меж властивостей, у яких ST_Union () працює на ньому, тому всі багатокутники відображаються як багатокутник в одному рядку таблиці. Я хотів би розділити їх, щоб отримати окремий рядок / багатокутник для кожної форми. Я спробував запустити ST_Dump () на цьому, і, схоже, відокремив полігони в наборі даних, але я більше не можу переглядати це в ГІС (я зараз використовую QGIS). Тип даних для цього стовпця говорить, що це "geometry_dump", і я припускаю, що тому я не можу його візуалізувати. Коли я отримую доступ до своєї бази даних Postgres з QGIS, ця нова таблиця занесена до заголовка наборів даних без геометрії.

Хтось знає, чи є щось, що я можу зробити, щоб перетворити "geometry_dump" на "geometry"?

Відповіді:


31

Тип geometry_dumpданих - це простий складений тип з двома полями:

  1. path[] - 1-d масив, що займає положення геометрії в межах викинутого об'єкта, і
  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". Ура.
Роман Трубка

1
Додаткові дужки важливі, тому: Правильно: "SELECT (ST_Dump (geom)). Geom ІЗ таблиці" Неправильно: "SELECT ST_Dump (geom) .geom FROM table"
HeikkiVesanto
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.