Menggabungkan poligon yang berdekatan dan mengembalikan semua (berdekatan dan tidak berdekatan) sebagai Multipolygon?

11

Saya memiliki database postgres dengan batasan administrasi dan geometri mereka. Setiap batas tersebut memiliki nomor identitas.

Apa yang ingin saya capai:

Pertama saya ingin memilih semua baris yang dimulai dengan kode pos tertentu. Sebagai contoh:

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

Semua Geometri yang bersebelahan harus digabung dan yang tidak harus dikembalikan.

Saya sudah mencoba pernyataan itu:

Yang ini saya dapatkan dari jawaban ini:

Bergabung dengan banyak poligon kecil untuk membentuk poligon yang lebih besar menggunakan PostGIS?

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

Tapi pernyataan ini hanya mengembalikan poligon yang berdekatan tetapi yang lain tidak termasuk

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

Saya mendapatkan 2 baris, dan sepertinya ini yang saya inginkan, tetapi saya tidak bisa mendapatkan hasilnya juga ST_AsText.

Apakah ada pernyataan yang mengembalikan semua poligon yang digabungkan jika perlu dan mengembalikannya secara ideal sebagai geoJSON atau mungkin sebagai teks?

Nighthawk
sumber

Jawaban:

1

Jawaban OP:

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;

Jadi, Anda dapat mengakses geometri dan mengubahnya menjadi geoJSON. Geometri yang berdekatan digabungkan dan Anda mendapatkan semua geometri lain yang juga tidak termasuk dalam poligon gabungan.

Kadir Şahbaz
sumber