Benachbarte Polygone zusammenführen und alle (benachbarte und nicht benachbarte) als Multipolygon zurückgeben?

11

Ich habe eine Postgres-Datenbank mit administrativen Grenzen und deren Geometrie. Jede dieser Grenzen hat eine Identifikationsnummer.

Was ich erreichen möchte:

Zuerst möchte ich alle Zeilen auswählen, die mit einer bestimmten Postleitzahl beginnen. Beispielsweise:

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

Alle angrenzenden Geometrien sollten zusammengeführt werden, und diejenigen, die nicht benachbart sind, sollten ebenfalls zurückgegeben werden.

Ich habe diese Aussagen ausprobiert:

Diesen habe ich aus dieser Antwort:

Verbinden Sie viele kleine Polygone, um mit PostGIS ein größeres Polygon zu bilden?

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

Diese Anweisung gibt jedoch nur die Polygone zurück, die benachbart sind, andere jedoch nicht enthalten sind

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

Ich bekomme 2 Zeilen und es scheint, dass dies das sein könnte, was ich will, aber ich kann das Ergebnis nicht als ST_AsText erhalten.

Gibt es eine Anweisung, die bei Bedarf alle zusammengeführten Polygone zurückgibt und sie idealerweise als geoJSON oder vielleicht als Text zurückgibt?

Nighthawk
quelle

Antworten:

1

Antwort von 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;

So können Sie auf Geometrien zugreifen und diese in geoJSON umwandeln. Benachbarte Geometrien werden zusammengeführt, und Sie erhalten alle anderen Geometrien, die ebenfalls nicht im zusammengeführten Polygon enthalten sind.

Kadir Şahbaz
quelle