ポリゴンの穴を自動的に埋める方法は?


12

QGISには、最大面積、境界線間の距離などのパラメーターを設定することにより、ポリゴンの穴を自動的に埋めるオプションがありますか?非常に「薄い」/小さい穴を削除/埋めたい。


1
(ポリゴン内のリング)に興味がありますか?または、別々のポリゴン間のギャップを減らしますか?
シンバマング

これはQGISベースのソリューションである必要がありますか?PostGISで空間SQLを使用してこれを実現する方法について以前にブログに書いています(geospatial.commons.gc.cuny.edu/2013/11/04/…)。PostGISを実行していない場合は、おそらくSpatiaLiteにこれを適合させることができます。QGISを使用している場合は、ツールチェーンにすでにSpatiaLiteが含まれている可能性があります。
リーハチャドリアン

回答:


11

Processingバージョン2.10.2でQGIS 2.10.1-Pisaを使用すると、Processing Toolboxから利用可能ないくつかのツールがあります。

  • 最大面積を指定できる穴埋めツール。
  • 入力レイヤー全体に適用される穴削除ツール。

お役に立てれば!


1
確認するために、最大面積パラメーター、つまり、埋められる穴の最​​大サイズは?メートルUTMプロジェクトで、最大が10,000だった場合、埋められる最大の穴はヘクタールであり、それよりも大きい穴は残っていることを意味しますか?
BillW

1
@BillW-はい、私はそれがまさにそれであると信じています:)
ジョセフ

10

このシェープファイルでは、ポリゴン間に多くのギャップがあるため、あなたと同じ問題に直面しました。

ギャップのある元のファイル

問題を解決するために、tshiffleの方法を少し変更することができます。

  1. まず、ファイルとその範囲全体をカバーするポリゴンの違いを実行します。

Extent_polygon

Difference_tool

このアクションは、1つのポリゴンのみで構成される新しいシェープファイルを作成するため、単一のパーツに分解する必要があります。そのためには、Vector / Geometry Tools / Multipart to singlepartsツールを使用できます。

差の結果

Multi_to_single

その後、外部エンティティを削除します。これで、新しいシェープファイルに、元のカバレッジのギャップをカバーする複数のポリゴンができました。

gaps_covered

  1. 初期データと単一部分の間の結合を実行します。デフォルトのQGISオプションがデータベースに重複を作成するため、SAGAツールを使用します。

連合

  1. これで、データベース内のすべてのギャップが空のレコードとして表示されます(例:72行)。エリアフィールドを使用してテーブルを並べ替え、元のファイルの最小のポリゴンから値を取得します。この場合、0.13645ヘクタールです。

データベース

  1. 最後に、「スライバーポリゴンの削除」ツールを使用して、画像に設定を表示します。

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

  1. 最終結果にはギャップがありません。

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


パラメーターの選択に関する詳細を追加していただけますか?「価値」とは何ですか?QGISドキュメントページには、詳細が非常に短くなっています。非常にエレガントな返事、最初のユーザーが回答を受け入れていないのは残念です!
user3386170

1
「値」は、比較に使用する大きさです。この例では、使用フィールド「エリア」はヘクタールで設定されているため、0.1は0.1ヘクタール以下のポリゴンを削除することを意味します。
gtapko

gtapko、フェーズ3の詳細を教えてください。私は、おかげでそれを理解することはできません
newGIS

4

もっと洗練された解決策があるかもしれませんが、これは常に私にとってはうまくいきました。

1)「穴埋め」ポリゴンを作成します。これを行うには、元のポリゴンよりも大きな巨大なポリゴンを描画し、「差分」ツールを使用します。はるかに大きなポリゴンを描いた場合、すべての「穴埋め」ポリゴンに加えて、元の形状を囲む単一の大きなポリゴンができます。「穴埋め」ポリゴンを維持したまま、その大きなポリゴンを削除します。

2)「穴埋め」ポリゴンを元のシェープファイルとマージします。特定の基準(X平方キロメートル以下)に適合する穴のみを埋めたい場合は、ここでフィルタリングできます。

3)共通フィールドで新しくマージされたポリゴンを解決します。


ステップ3について不明な点がありますが、どのようにして共通フィールドを見つけることができますか?
iRfAn

このステップでは、共通フィールドは何でもかまいません。目標は、ポリゴン間の境界を単純にディゾルブすることです。既存のフィールドを使用するか、フィールドを追加するだけです。
tshiffle

4

python / shapelyでは、これはポリゴンを埋めることができます:

import shapely
from shapely.geometry import Polygon
filled_shape = Polygon(shape_with_holes.exterior)

2

gtapkoやtshiffleのパスと同じパスをたどるいくつかの説明を見てきましたが、無効なジオメトリにより差分ツールが機能しなくなったため、私にとってはうまくいきませんでした。そこで、100%自動化されていないが、管理可能な独自のソリューションを思いつきました。おそらく誰かがすでにこれを考え出したが、私は私のチャンスを取ります:

1)元の損傷したレイヤーにIDを作成します

ID属性の作成は簡単ですが、私の解決策も同様です。

まず、属性テーブルを開いてから、フィールド計算機に移動する必要があります。これは、そろばんによく似たボタンです。そこで、新しいフィールドを作成するか、既存のフィールドを更新するオプションが与えられます。上の写真では、「ID」という新しいものを作成しています。数式は図の最後にあります。(QGISを別の言語でセットアップしてしまったことはごめんなさい。設計と式は言語バージョン全体でまったく同じなので、ここで邪魔になるとは思わない。)

2)ポリゴンをラインに変換する

この手順は、メニューの[ベクター]> [ジオメトリ ]セクションにあります。変換された形状は次のようになります。

ポリゴンをラインに変換した直後に、正反対の操作を行う必要があります。

3)ラインをポリゴンに変換する

オプションは互いに隣り合っています。繰り返しになりますが、ここで言語の壁を気にしないでください。

4)喜ぶ ステップ2と3を実行した理由は、これらの線がポリゴンと見なされることが確実になったためです。つまり、属性テーブルに独自の線があることになります。チェックアウトすると、次のようになります。

最初のものは常にポリゴン全体です(私を信じてください、今日数百行削除しました...)そして残りは真ん中のゆるい線です。編集を有効にして、アクションの準備をすることができます。これを試すことに決めた場合、留意すべき2つのことは、テーブルをIDごとに整理することです。この方法では、他のプログラムと同様に、データのクラスターを選択するためにシフトを使用します。 。

これはQGISの問題解決のクレームではありませんが、これらのラインが作成する無効なジオメトリのためにツールが機能しない状況に直面している場合は(IDで解消しようとしましたが、うまくいきませんでした)、これは抜け道かもしれません。


画像を更新してもらえますか?リンクが壊れています!
シンバマング

やあ 申し訳ありませんが、どうやらPhotobucketが画像をハイジャックしたため、アクセスできなくなりました。私はすでにチケットを開いており、アクセスを取り戻そうとしています。可能な限りお返事いたします。
エリックリノ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.