Łączyć sąsiednie wielokąty i zwrócić wszystkie (sąsiadujące i nie sąsiadujące) jako Multipolygon?

11

Mam bazę danych Postgres z granicami administracyjnymi i ich geometrią. Każda z tych granic ma numer identyfikacyjny.

Co chcę osiągnąć:

Najpierw chcę wybrać wszystkie wiersze, które zaczynają się od określonego kodu pocztowego. Na przykład:

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

Wszystkie sąsiednie geometrie powinny zostać połączone, a te, które nie są, również powinny zostać zwrócone.

Próbowałem tych oświadczeń:

Ten mam z tej odpowiedzi:

Łączenie wielu małych wielokątów w celu utworzenia większego wielokąta za pomocą PostGIS?

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

Ale to zdanie zwraca tylko te wielokąty, które są sąsiadujące, ale inne nie są uwzględnione

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

Dostaję 2 wiersze i wydaje się, że to może być to, czego chcę, ale nie mogę uzyskać wyniku również jako ST_AsText.

Czy istnieje instrukcja, która zwraca wszystkie połączone wielokąty w razie potrzeby i zwraca je idealnie jako geoJSON, a może jako tekst?

Nighthawk
źródło

Odpowiedzi:

1

Odpowiedź 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;

Aby uzyskać dostęp do geometrii i przekształcić ją w geoJSON. Przyległe geometrie są scalane, a wszystkie inne geometrie nie są uwzględnione w scalonym wielokącie.

Kadir Şahbaz
źródło