PostGISを使用して(定義された)断片ポリゴンを削除しますか?[閉まっている]


9

SQL(PostgreSQLのPostGIS用)を作成して、最も長いエッジを持つ隣接するポリゴンとマージすることにより、データセットからスリーバーポリゴン(元のデータセットで誤った「ギャップ」であった細長いスリーバーと小さな不規則なポリゴンを含む)を削除するにはどうすればよいですか?

データセット(テーブル名: "Vegetation"があり、説明列(列名: "desc")にスリーバーまたは "実際の"ポリゴンとして識別される数千のポリゴンが "sliver"または "main"として含まれています。[編集:事前データセットをPostGISにインポートするには、GRASSにインポートすることでクリーンアップしました(これは、すべてのギャップを小さなポリゴンに変換した後、メインデータセットとマージした方法です。スナップ許容値と過去の最小領域を増やしたかどうかを確認しました ' GRASSインポートの1 'で、目的の機能が失われ始めました。]

私の理解では、次の手順が必要になる場合があります。

  1. 最も長いエッジを共有する各スライバー(Vegetation.desc = "sliver")に隣接するポリゴン(Vegetation.desc = "main")を特定します。
  2. 各スライバーとその隣接するメインポリゴンの間のエッジを特定します。ステップ1で特定した最長のエッジを共有します(おそらくST_Relateを使用します)。
  3. ステップ2で返されたエッジIDを使用して、各スライバーと隣接するメインポリゴンの間のエッジを削除します(おそらくST_RemEdgeModFaceを使用します)。

私はSQLについて非常に基本的な知識しか持っておらず、上記のプロセスは私の能力を超えています。


「postgisトポロジー」拡張機能。私が正しく理解している場合は、平均スバーバーよりも大きな許容差でトポロジーを作成すると、形状がクリーンになります。しかし、私はそのようなことを何もしてい
ません

一部の「スライバー」のサイズが原因で十分に大きな許容誤差を持つトポロジーを作成することで、多くの解決策を失うと思います(本文の説明を参照)。これは私の理解が限られているためかもしれません、そしてより簡単な解決策は大歓迎です!
DavidM 2014年

GISとデータクリーニングへようこそ。FMEにアクセスできますか?非常に使いやすく、ポリゴンから断片を削除するオプションがいくつかあります。代替 gis.stackexchange.com/questions/24365/...とGoogleは、PL / pgSQLのご質問(彼らはどのように良いアイデアなし)への回答を見つけるように見えます。とは言っても、私が知っている非常に簡単な方法はありません。手でクリーニングすることは「最も簡単な」方法ですが、時間がかかる場合があります
simplexio

銀色のものは、ユニオンを作成する場合に穴を残しますか、それとも交差するアーティファクトまたは両方の種類の「丸め誤差」がありますか?
ハックフィン2014年

1
ARCGISトライアルを使用し、消去機能を適用することで、(現在のプロジェクトの)問題を一時的に解決しました。これはうまくいきました。私はまだpostgisを使用してSQLソリューションを作成することに熱心です。
DavidM 2014

回答:


3

SQL ServerでGADM2データセットから形状を集約するときにこれを使用します。

SET @g2 = @g1.STBuffer(1).Reduce(1).STBuffer(-1).Reduce(1)

reduce()近似値のビット荒いが、良い- 100倍の倍にまで拡張された遺物と速度物事クリアします。

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