隣接するポリゴンをマージし、すべて(隣接していて隣接していない)をマルチポリゴンとして返しますか?


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

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;

したがって、ジオメトリにアクセスして、geoJSONに変換できます。隣接するジオメトリがマージされ、マージされたポリゴンに含まれていない他のすべてのジオメトリが取得されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.