2016-02-10 6 views
1

Я некоторые геометрические формы, хранящиеся в этой таблице (140K)PostGIS - Объединение буферов геометрии в различных группах (при пересечении)

CREATE TABLE буферов (рк целое число NOT NULL, геометрия геом (MultiPolygon, 4326),)

- buffers geometries from table "buffers" -

и я хотел бы создать (если это возможно) новую таблицу (buffersmerged), который будет содержать результирующие геометрии, где предварительные просмотры являются сгруппированными только Whe n их пересекающихся между собой.

Мой ожидаемый результат, как при использовании в QGIS инструмент Buffer (s), проверяющий «растворение результатов буфера», но я бы хотел, а не просто большую уникальную геометрию в качестве вывода, более маленькие группы (один для каждая группа пересекающихся геометрий)

- this is the expected result -

пожалуйста, вы можете помочь мне понять, как я могу построить запрос, который позволяет мне сделать это? (Включен Postgres + PostGIS) Спасибо

Stefano

ответ

0

ли вам нужны атрибуты тоже?

Если нет, то этот запрос должен делать эту работу:

CREATE TABLE buffersmerged AS 
SELECT (ST_dump(ST_union(a.geom))).geom 
FROM buffers a, buffers b 
WHERE ST_intersects(a.geom,b.geom) AND a.id != b.id; 
+0

Прежде всего, спасибо за быстрый ответ. Нет, мне не нужны никакие атрибуты, просто геометрия. Как только я запускаю свой код, у меня есть таблица, которая выглядит неплохо, но без какой-либо геометрии. То, что я сделал, чтобы исправить это (возможно, не сексуально), заключалось в создании таблицы с уже определенным двумя столбцами (pk, geom), где вторая уже была определена как POLYGON. И теперь это работает! Спасибо – Stefano

+0

Странно, по мне заявление работало. Может быть, вы можете отредактировать мой ответ и добавить свое обходное решение? Не забудьте принять ответ, если он работает. –

+0

перед редактированием я покажу вам обход: > CREATE TABLE buffersmerged (pk serial NOT NULL PRIMARY KEY, геометрия геометрии (POLYGON, 4326)); , а затем:. > INSERT INTO buffersmerged (GEOM) > SELECT (ST_dump (ST_union (a.geom))) геом > из буферов а, б буферы > ГДЕ ST_intersects (a.geom, b.geom) И a.pk! = b.pk; , вероятно, есть способ сделать один запрос, но я не знаю, как это сделать. как принять ответ? верхняя стрелка? – Stefano

 Смежные вопросы

  • Нет связанных вопросов^_^