Об’єднати сусідні багатокутники та повернути всі (суміжні та не сусідні) як багатополігони?


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.