ポリゴン間の小さなスペース(スライバー)を削除しますか?[閉まっている]


51

行政区を表すポリゴンのセットがあります。地区は手でデジタル化されており、ポリゴンが接触するはずのポリゴン間に小さなスペース(スライバー)があります。

ポリゴンをスナップしてスペースを削除するにはどうすればよいですか?

QGISが推奨されますが、ArcGISおよび一般的なプログラミングもオプションです。

回答:


27

Eliminateを使用(ArcInfoライセンスが必要)

最大の面積または最も長い共有境界を持つ隣接ポリゴンとマージすることにより、ポリゴンを削除します。Eliminateは、IntersectやUnionなどのオーバーレイ操作の結果である小さなスライバーポリゴンを削除するためによく使用されます。

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00170000005p000000.htm

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

ArcGIS 10のユーザーこのツールのオプションには新しい機能があることに注意してください。

オプション> ex_features(オプション)を使用して、元のPOLYGONまたはPOLYLINEを保持できるようになりました。(省略可能)削除しないポリゴン境界またはその一部を定義する入力ポリラインまたはポリゴンフィーチャクラスまたはレイヤー。


3
それは動物園の場合に機能しますか?データセットにはスライバーはなく、ポリゴン間のギャップがあるようです。
暗闇

3
このツールを使用して、ポリゴン間のギャップを削除しました。ただし、このツールの使用には問題があります。ジオプロセシング中にポリゴンをクラックすると、新しく作成されたポリゴンが一般化されます。そのため、曲線は滑らかではなく、代わりに鋭い「ギザギザ」の線になります。Ymmv。
-amasephy

3
@underdark良い点。ただし、モノリシックな周囲のポリゴン(データセットの境界ボックスなど)とデータを結合することで、常にスライバーを導入できます。興味深い質問は、「除去」がスライバーをマージするポリゴンをどのように選択するかです。これは結果にバイアスをかける可能性があります(バイアスはほとんどのアプリケーションで重要になるとは思いませんが)。この特定の状況では、理想的な解決策はスライバーを分割するか、エラーを平均化することです。
whuber

このツールのオプションの1つは、スライバーを、最も長い境界線(デフォルトオプション)または最大の領域のいずれかを持つ隣接ポリゴンとマージすることです。
ケンブジャ

4
ArcInfoライセンスを持っていない場合、arcscripts.esri.com / details.asp?dbid = 14672にPythonを介してこれを自動化するスクリプトがあります。数年前にうまく使いました。
スティーブンリード

20

QGISで手動でこれを行うには、下部Settings|Project Properties...GeneralタブでSnapping options...スナップするレイヤーをチェックし、モードをto vertex設定し、許容値を2つのポイント間の最短距離よりも小さい値に設定します。よくわからない場合は、単位pixelsと許容値を5のような値に設定して、面倒な詳細がある場合はズームインして、間違った頂点にスナップしないようにしてください。

次に、ベクターレイヤーを編集し、ノードツールを選択して、エラーポイントを対応するものに移動します。

自動的に行うのは少し難しいです。AFAIK QGISには自動化するプラグインがありません。PostGISはスナップ機能を備えたGEOS上に構築されていますが、PostGISには公開されていません。スナップ距離内にある近隣のポリゴンの各ポイントをチェックするクエリを作成することは可能かもしれませんが、それは現在、私の頭の切れるところです。

GRASSにはv.clean.snapがあり、QGIS経由でアクセスできますが、GRASSデータセットを作成する追加のステップがあります。


常にQGIS処理ツールボックスを使用して、v.clean.snapをシェープファイルに直接適用できます。
サンダーカ14

v.clean.snapは使用できません。v.cleanを使用してからスナップツールを選択すると、空のレイヤーが表示されました。文書によると、スナップとはラインを頂点に結合することです。しきい値内で頂点を別の頂点に結合したい。
neogeomat 14

17

QGISに精通している場合:QGISトランク1.9(OSGEOインストーラーを介してqgis.devとしてインストールできます。qgisホームページを参照してください)は、「スライバーポリゴンの削除」と呼ばれるベクターメニューの新しい機能です。欲しいです。問題のあるポリゴンを選択し、共通の境界または面積比率に基づいて隣接するポリゴンにマージできます。やってみて!


3
この答えを更新するために、QGIS 2.18.1では、「スライバーポリゴンの削除」が安定パッケージに含まれており、ベクター->ジオプロセシングツールの下にあります。
ヴァレリーアンダーソン

これは、ポリゴン間のスペースの場合ではなく、メインポリゴンの間にある既存の浮遊スライバーポリゴンに適用されます。
ストラグ

15

QGISユーザーであれば、GRASSは完全なトポロジーGISであるため、GRASSのすべてのパワーを利用できます。QGIS内でGRASSプラグインをアクティブにし、データをインポートする場所/マップセットを作成します。

マップセットを開き、v.in.ogrを使用してダーティレイヤーをインポートします。2つの高度なパラメーター「境界のスナップしきい値」と「インポートする領域の最小サイズ」で再生します。

v.cleanモジュールが提供するオプションを使用することもできます。


10

ArcGISには、参照しているデータなどのデータのギャップを特定して修正するのに役立つトポロジルールがあります。トポロジルールを作成するには、ArcEditorまたはArcInfoライセンス必要で、パーソナルジオデータベースまたはファイルジオデータベースのフィーチャデータセットにフィーチャクラスを格納する必要あります

ギャップを持たないでください」ルールを実装することをお勧めします。必要と思われるすべてのルールを含むルールベースを作成したら、データ内のすべてのエラーを識別するトポロジを検証する必要があります。

次に、エラーインスペクタートポロジエラー修正ツールを使用して、修正するエラーと修正方法を個別にまたは一括で選択できます(つまり、新しいポリゴンを作成してボイドを埋めたり、近くの大きなポリゴンとマージしたりできます)。 。


7

QGIS 2.12(Lyon)Toolboxには、「スライバーポリゴンの削除」機能があります。以前のバージョンにもあると思います。


2

さて、この問題を解決するために再帰スナップを実行するPostGIS関数(QGISで直接使用)を使用しています。結果は非常に良好であり、最良の結果を得るには許容値の良い喜びを要求するだけです。試してみたい場合は、それを確認してください(私の場合、ジオメトリはすべてマルチです。したがって、実行のst_multiです)。

CREATE OR REPLACE FUNCTION dsgsnap(tabela text, snap float) RETURNS void AS 
        $BODY$
            DECLARE
            id int;
            BEGIN
                FOR id in execute('select id from '||tabela)
                LOOP
                    EXECUTE     
                'update '||tabela||' as classe set geom = st_multi(res.geom) 
                from 
                    (
                        select st_snap(a.geom, st_collect(b.geom), '||snap||') as geom, a.id as id 
                        from '||tabela||' a, '||tabela||' b 
                        where a.id != b.id and a.id = '||id||' 
                        group by a.id, a.geom
                    ) as res 
                where res.id = classe.id';
                END LOOP;
                RETURN;                        
            END
        $BODY$
        LANGUAGE plpgsql;

1

完全な解決策ではありませんが、ほとんどの場合、次の2つのいずれかが機能します。

  1. QGISで、GEOJSON形式でレイヤーを保存します。ただし、保存する前に、[名前を付けてレイヤーを保存]ダイアログボックスで、座標精度を3に設定します(15がデフォルトです)。これは、互いに非常に近い頂点を結合する効果があります。

  2. Mapshaperにアクセスして、ファイルをアップロードし、「単純化」をクリックします。左上隅に、検出された線の交点の数が表示され、それらを修正するオプションが表示されます。この修正は約半分の時間で機能することがわかりました。


0

私は使用していませんが、多くのArcEditorおよびArcInfoのみの処理ツールをArcViewレベルライセンス(ArcGIS Standard)に提供するET Geowizardsには、「隣接するポリゴンにマージして不要なポリゴン(スライバ)を削除する」または「削除ウィザード」がありますそれらを削除しますウィザードツールキットは、バック$、250米ドル(あなたが設定されます価格表を)。


0

私は同じ問題に直面しました。ツールを調査することで、ロジックはわかりませんが、簡単に解決しました。![ツールで[データ管理]ツールボックスに移動し、[フィーチャクラス]に移動して、ダブルクリックで統合スクリプトを実行します] [1]

スクリプトウィンドウで問題のあるフィーチャクラスを選択し、XY許容値で複数のポイントで測定ツールを使用して距離を測定して値を追加し、その値を許容値環境に入れて問題を適用して解決します今ではなく、約90%の精度で解決されています。![ここに画像の説明を入力] [2]

上記の回答に記載されている他のすべての方法を試しましたが、隣接するポリゴン間のギャップの自動修正を取得するのは難しく、面倒でした。


1
参照している画像へのリンクを貼り付けると、それらを追加できます。
djq12年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.