PostGISを使用して隣接するポリゴンを単純化しますか?


24

隣接するポリゴンのセットを単純化する問題が発生しました。Douglas–Peuckerアルゴリズム(多くのオープンソースツールで使用)を使用して各ポリゴンを個別に単純化すると、通常、結果のポリゴンは隣接しなくなります。この問題は、たとえば、国/県の国境を簡素化するときに存在します。

誰かがPostGISを使用して解決策を持っていますか?

回答:


19

トポロジーベクトルモデルは、必要なものを提供します。非トポロジストレージ(シェープファイルなど)では、ジオメトリ間の単一のエッジが2回格納されます。位相ベクトルでは、領域は線とは別に保存されるため、トポロジに影響を与えることなく調整を行うことができます。良い図が見つからなかったので、この単純な例を作成しました。エリアA、B、Cは、それらを分離する線の交差点(1〜4を接続)から計算されます。 トポロジカルベクトルの例

このモデルは、ArcInfoによってカバレッジとして、GRASSのデフォルトのベクトルモデルとして使用され、PostGISで実験的なPostGISトポロジツールとともに使用できます。おそらく、より単純なソリューションは、データをラインワークに変換し、冗長なセグメントを削除し、単純化した後にポリゴンを再作成することです。


15

ポリゴンをラインに変換し、それらのラインを単純なカバレッジエッジにし、それらのエッジを単純化し、再びポリゴンに構築し、最後にポイントインポリゴンを使用して古いポリゴンの属性を再結合します新しいもの。

CREATE TABLE rings AS SELECT (ST_DumpRings(polys)).geom AS rings FROM polytable;
CREATE TABLE simplerings AS SELECT ST_Union(rings) AS simplerings FROM rings;
CREATE TABLE newpolycollection AS SELECT ST_Polygonize(ST_Simplify(simplerings, 10.0)) AS geom FROM simplerings;
CREATE TABLE newpolysnoattributes AS SELECT (ST_Dump(geom)).geom FROM newpolycollection;
CREATE TABLE newpolytable AS SELECT new.geom, old.attr FROM newpolysnoattributes new, polytable old WHERE ST_Contains(new.geom, ST_PointOnSurface(old.polys));

上記にはエラーがありますが、核となる概念はそこにあります。必要に応じて、1つのクエリですべてを実行できます。



-1

テッセレーションする必要があります。ジオメトリを作成する古いARC / INFO理論では、1つのポリラインによって2つの隣接するジオメトリが作成され、このポリラインを共有していました。したがって、一般化すると、同じポリラインを参照したため、両方の境界線が一般化されました。

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