Unisci poligoni adiacenti e restituisci tutto (adiacente e non adiacente) come Multipolygon?


11

Ho un database postgres con confini amministrativi e la loro geometria. Ognuno di questi confini ha un numero identificativo.

Cosa voglio ottenere:

Per prima cosa voglio selezionare tutte le righe che iniziano con un codice postale particolare. Per esempio:

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

Tutte le geometrie adiacenti devono essere unite e anche quelle che non lo sono devono essere restituite.

Ho provato quelle dichiarazioni:

Questo ho da questa risposta:

Unire un sacco di piccoli poligoni per formare un poligono più grande con PostGIS?

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

Ma questa affermazione restituisce solo quei poligoni che sono adiacenti ma altri non sono inclusi

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

Ricevo 2 righe e sembra che questo potrebbe essere quello che voglio, ma non riesco a ottenere il risultato anche come ST_AsText.

C'è un'affermazione che restituisce tutti i poligoni uniti dove necessario e lo restituisce idealmente come geoJSON o forse come testo?

Risposte:


1

Risposta dell'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;

Quindi puoi accedere alle geometrie e trasformarlo in geoJSON. Le geometrie adiacenti vengono unite e si ottengono tutte le altre geometrie che non sono incluse nel poligono unito.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.