Объединить смежные полигоны и вернуть все (смежные, а не смежные) как Мультиполигон?


11

У меня есть база данных postgres с административными границами и их геометрией. Каждая из этих границ имеет идентификационный номер.

Чего я хочу добиться:

Сначала я хочу выбрать все строки, которые начинаются с определенного почтового индекса. Например:

SELECT * FROM "post" WHERE "post"."ident" LIKE '101%'

Все те геометрии, которые находятся рядом, должны быть объединены, а те, которые нет, также должны быть возвращены.

Я попробовал эти заявления:

Вот этот я получил из этого ответа:

Объединение множества маленьких полигонов в большой полигон с помощью PostGIS?

with t as (
select (st_dump(geom)).geom 
from "post"
where "post"."ident" LIKE '593%'
) select ST_UNION(geom) from t;

Но это утверждение возвращает только те многоугольники, которые являются смежными, но другие не включены

with t as (
select (st_dump(geom)).geom 
from "post"
where "post"."ident" LIKE '593%'
) select ((ST_Dump(ST_UNION(geom)))) from t;

Я получаю 2 строки, и кажется, что это может быть то, что я хочу, но я не могу получить результат как ST_AsText.

Есть ли оператор, который возвращает все полигоны, объединенные там, где это необходимо, и в идеале возвращает его как geoJSON или, возможно, как текст?

Ответы:


1

Ответ ОП:

with t as (
select (st_dump(geom)).geom 
from "post"
where "post"."ident" LIKE '593%'
) select ST_AsGeoJSON((ST_Dump(ST_UNION(geom))).geom) from t;

Таким образом, вы можете получить доступ к геометрии и преобразовать ее в geoJSON. Смежные геометрии объединяются, и вы получаете все другие геометрии, которые также не включены в объединенный многоугольник.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.