許容値を使用してQGIS(GEOS)でポリゴンを溶解する


11

洪水で浸水したエリアを表すポリゴンベクターレイヤーがあります。レイヤーは、一部の領域が複数の小さなタッチポリゴンで構成されるように作成されています(下のスクリーンショットの「オリジナルデータ」とラベル付けされています)。

接触するポリゴンをディゾルブしたいです。GEOSライブラリを使用するQGISのfToolsでディゾルブジオプロセシングツールを使用すると、予期しない結果が生じます(「QGIS fToolsでディゾルブ」を参照)。これらの問題で言及されているように、GEOSはポリゴンが接触しているかどうかの判断にしきい値を使用していないようです。

http://trac.osgeo.org/qgis/ticket/3126

http://trac.osgeo.org/qgis/ticket/3184

http://hub.qgis.org/issues/2806

ArcGISでの同じアプローチにより、期待される結果が得られます(「ArcGIS 10.1で解決する」を参照)。

明らかにこれはバグではなく、GEOSの「機能」です。予期した結果を生成する必要があるデータを修正する方法はありますか?精度のわずかな低下(数cm?)が許容される場合があります。理想的には、ソリューションは、前処理ステップとしてQGISプラグインに書き込むことができるものです。

関連する質問(回答なし):QGISのジオプロセシングツールの許容値を設定する方法は?

シェープファイルとしてのサンプルデータへのリンク:https : //www.dropbox.com/s/c8ns7wwfv289ad0/sample.zip

ポリゴンを分解する v.dissolve


回避策は、最初にfToolsで溶解したポリゴンを拡大してから縮小することです(最初に正のバッファーで、次に負のバッファーでバッファーすることにより)。
ジェイク

私はこれを試してみましたが、他の問題が発生します(例i.stack.imgur.com/LnFJy.png)。ここで、青い領域は、バッファリング/ディゾルブ/ネガティブバッファリングされるときに作成されます。これは元の問題よりもあまり良くありません。元の「シャープ」コーナーを回復する方法がわかりません。
-Snorfalorpagus

回答:


14

この場合、最初にトポロジを修正してディゾルブツールを支援する必要があるようです。GRASSでこれを行う方法は次のとおりです。

シェープファイルをロードすると、GRASSはそれを次のように認識します。

各十字はエリアをマークします。境界線上にいくつかの十字があることがわかります。これらは、境界線間のわずかなオフセットによって生じるスライバーポリゴンです。

  1. 実際のポリゴン間のギャップによって形成されたスライバーポリゴンを削除します。

    v.clean input=sample output=tempA --o tool=rmarea thresh=0.001
  2. 境界線をスナップします。

    v.clean input=tempA output=tempB --o tool=snap thresh=0.001
  3. 新しい交差点で境界線を分割します。

    v.clean input=tempB output=tempA --o tool=break thresh=0.001
  4. 現在重複している境界線を削除します。

    v.clean input=tempA output=tempB --o tool=rmdupl thresh=0.001
  5. ポリゴンを分解します

    v.dissolve input=tempB output=cleaned --o column=ID

その他:


@ジェイクありがとう。これは非常に明確な答えです。残念ながら、プロセスをデータセット全体(2500km2をカバー)に適用しようとすると、スナップツールからエラーが表示されます。「エラー:G_realloc:snap.c:186で144720024バイトのメモリを割り当てることができません」。小さいチャンクに分割する必要があると思います。ただし、交差点/空間インデックス付けを高速化するために既に0.25km2の正方形に分割しているため、これで問題ありません(これはサンプルデータの「ID」フィールドです)。
Snorfalorpagus

7

GRASS GISコマンドv.dissolveを使用します(Sextanteプラグイン-> GRASSコマンド->ベクター)

あなたの例をすぐに再現する場合: ここに画像の説明を入力してください

v.dissolveの結果:

ここに画像の説明を入力してください

説明

問題は簡単に理解できます。2つのエリアが共通の境界線を共有している場合、シェープファイルにはトポロジがありません。その境界線は2回デジタル化され、重複して保存されます。

シェープファイルを編集しようとすると、これがはっきりとわかります。

ここに画像の説明を入力してください

GRASS GIS(ArcGISとして)は、トポロジGIです。GRASSでシェープファイルをインポートすると、結果のレイヤーにはトポロジがあります。2つの領域間の共通の境界線は一度存在し、共有されます。

ここに画像の説明を入力してください

このため、シェープファイルをディゾルブ(2つの境界をディゾルブ)したい場合(QGIS、GvSIG、OpenJUMP、または古いArcView 3.xで)問題が発生する可能性があります。ArcUserI:Understanding Topology and Shapefilesを参照してください。

GRASSでは、v.dissolveは同じカテゴリ番号を持つエリア間の共通の境界を解消するように設計されています


1
私の推測では、これは数値の問題であり、OPのジオメトリのかなり良いコピーが同じ数値プロパティをキャプチャするのだろうか?
チャウ

@Chau:v.dissolveOPの問題に対処する許容パラメータがあります。
ジェイク

その詳細を上記の答えに組み込む必要があります。明確にするために感謝します:)
チャウ

問題のシェープファイルとして元のデータへのリンクを追加しました。使用するv.dissolveと、機能の真ん中にある小さな正方形が「塗りつぶされる」ことを除いて、機能するように見えます。i.stack.imgur.com/AA59l.png
Snorfalorpagus

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