ArcGIS Desktopを使用して、1つのシェープファイルから重複するポリゴンをカウントしていますか?


10

16,400ポリゴンのシェープファイルがあります。各ポリゴンは、全世界の鳥種の拡大を示しています。

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

次に、重なり合うポリゴンを数える必要があります。ユニオンとディゾルブを試してみました(ユニオンを数える)が、ユニオンがあまりにも多くのポリゴンで機能しない。

その後、大陸を切り取ろうとしましたが、ポリゴンの数が非常に多いため、これも機能しません。さらに、私もこの方法を試しましたが、成功しませんでした。

したがって、16400のポリゴンが1つのシェープファイルにある場合、重複するポリゴンをカウントする方法があるかどうかを尋ねています。

私は10.0を使用しており、10.2を使用できます。ArcPyソリューションも素晴らしいです。

現在、フィッシュネットを作成し、16400ポリゴンでshpの行を反復処理し、ポリゴンがこのセルにあり、次の行(ポリゴン)を取得する場合、フィッシュネットセルの値フィールドに1を書き込みます。これもフィッシュネットのセル数に含まれる場合+1。

しかし、これが良い解決策であるかどうか、そしてそれを実現する方法はわかりません。または、このアプローチを使用するにはRを学ぶ必要があります。

結果:オーバーラップしているポリゴンから新しいポリゴンができたシェイプと、オーバーラップがカウントされるフィールドになります。

したがって、最終的には、同じ場所にいくつの鳥種が見つかったかを確認できるシェープファイルがあるはずです。


データセットのサイズのため、問題は問題です。答え(および提案するリンク)は正しいですが、メモリの問題が発生します。おそらく、最初に数百メートル(予想精度に基づく)でデータを統合して、数十億の断片ポリゴンの作成を回避することができます。データが変更されるため、コピー先で作業してください。
radouxju 2014年

1
シェープファイルをリージョナルシェープファイルに分割し、リージョナルシェープファイルで分析を実行してから、それらを溶解して完全なファイルを再度取得します。
til_b 2014年

1つの国だけでこの形状をクリップしようとしましたが、エラー999999が返されました。
ノラ

1
ポリゴンの複雑さを軽減するためにダイスツールを見ましたか?また、データをクリップしようとするだけで999999エラーが発生する場合は、ジオメトリのチェックツールを試して、洞察がスローされるかどうかを確認しましたか?
Hornbydd 2014年

2
データの部分的なジオメトリチェックを行いましたが、自己交差がたくさんあります。1. RAMの使用量を最大化し、ページファイルを大きくする2.ジオメトリを修復する3.必​​要に応じて、ポリゴンを単純化する3.データを1 / 3sまたは1 / 4s(または必要なもの)にサブセット化する4. Union-Dissolve-Rasterizeワークフローを実行する以下のように、この答え 5.合計ラスタ。
コットンロックウッド、2014年

回答:


9

カスタムの[ ポリゴンを数える]ツールを使用することをお勧めします。

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

説明:

このサンプルには、1つのツール、[重複ポリゴンを数える]を備えたツールボックスが含まれています。重複するポリゴンを含むフィーチャクラスまたはレイヤーを指定して、重複を削除した新しいフィーチャクラスと、重複するポリゴンの数を含むJoin_Countフィールドを出力します。


私もこれを試しましたが、私のshp(大きすぎる)では機能しません。答えてくれてありがとう
Nora

5

arcpyジオメトリトークンを使用すると、次のようなことを試すことができます。

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

import os
import arcpy

arcpy.env.workspace = r"" #path to workspace
arcpy.env.overwriteOutput = 1

polygon_fc = r"" #path to polygon fc

base = [row for row in arcpy.da.SearchCursor(polygon_fc,["OID@","SHAPE@"])]
compare = base

overlaps_stats = {}

for b in base:
    for c in compare:
        if b[1].overlaps(c[1]):
            #print "{0} overlaps {1}".format(b[0],c[0])
            if overlap_stats.has_key(b[0]):
                overlap_stats[b[0]].append(c[0])
            else:
                overlap_stats[b[0]] = [c[0]]

for key,value in overlap_stats.iteritems():
    print "Polygon {0}:  Overlaps: {1}.".format(key,len(value))

上記のサンプルデータの場合、コードは次のオーバーラップカウントを返します。 ここに画像の説明を入力してください

現状のコードは、少なくとも1つのオーバーラップがあるポリゴンのカウントのみを返します。


@ Nxau:わかりました、私は結果がどのように見えるかを説明するのを間違えたと思います。これは、重なり合うポリゴンから新しいポリゴンができる形でなければなりません。たとえば、あなたの写真では、円4と5が重なっています。新しい形状には3つのポリゴンが必要です。(ユニオンはこの大きな形状では機能しません)。重なり合う領域のフィールドには値2があり、残りの円4と5にはこのフィールドの値1があるはずです。したがって、最終的には、同じ場所にいくつの鳥種が見つかったかを確認できるシェープファイルがあるはずです。スクリプトをありがとう!
ノラ

5

非常に簡単な方法は次のとおりです。

  1. 組合自体にシェープファイル。
  2. マルチパート出力を単一パートに変換します。
  3. 使用加入空間的(ARE_IDENTICAL_TOマッチオプションを使用)重複をカウントするためのツールを。
  4. join_countフィールドを使用してシンボル表示します。

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


1

あなたはこの方法を試したと思います:ArcGIS Desktopでのポリゴンの重なりのカウントとラスタライズ?

16,400ポリゴンはそれほど多くありません。ただし、1つの潜在的な解決策は、通常の空間結合を単純に行うことです。でArcMap toolbox, > Analysis Tools -> Overlap -> Spatial Join

targetjoin機能の両方を同じデータセットに設定し、出力を指定します。残りの設定はそのままにします。

しばらくすると、「結合カウント」列を含むシェープファイルが返されます。これから1を引きます(明らかに各フィーチャがそれ自体と交差する必要があるため)。これは、各ポリゴンの「オーバーラップ」(実際には交差する)の数になります。

私はそれを上演しました


はい、すでにリンクからアプローチを試みました。しかし、このshpではunionを使用することは不可能です。空間結合を試してみたところ、次のエラーが発生しました。エラー000426:メモリ不足です。
ノラ

RAMが4GBのマシンで実行していて、機能の数は約5倍だったので、それほど少ない数では機能しないことに驚いています。データに頂点が多すぎる可能性があります(私の場合は60MB程度でしたが、.shpファイルのサイズはどれくらいですか)。それを一般化してみてください。
GIS-ジョナサン

shpだけがfgdbにある場合、fgdbの容量は1,73 GBです。フォルダ内の形状は2,00GBです。
Nora、

私もこのデータセットを使用しましたが、かなりの数のポリゴンに多くのパーツがあるため、問題の多くが発生すると思います。これを解像度と組み合わせると、これはメモリを大量に消費するタスクになります。
コットンロックウッド2014年

@ Cotton.Rockwood:そして、Rで解決策を見つけましたよね?ツールボックス 'Count Overlapping Polygons'を使用して、値が「join count」のラスターからラスターへのポリゴンよりも500ポリゴン(33選択)入力し、最後にラスター(ModelBuilder)を計算すると思います。時間がかかる...
ノラ

1

「重複ポリゴンのカウント」ツールをダウンロードして試してみました。うまくいくかもしれませんが、非常に長い時間がかかります(おそらくファイルサイズのためですが、私の入力FCには5,000レコードしかありませんでした)。

そのツールが実行されるのを待っている間、別のArcMapウィンドウを開いて、ほんの数ステップで必要なものを取得しました。1)空間結合-ターゲットおよび結合フィーチャーと同じフィーチャークラスを使用し、「1対多に結合」オプションを選択します。2)ディゾルブ-最後のステップの出力を使用します。「TARGET_FID」をディゾルブフィールドとして使用し、統計の場合は、「Join_Count」フィールドを合計するか、「JOIN_FID」フィールドをカウントできます。3)ステップ2からの出力ファイルでは、統計情報フィールド(「SUM_Join_Count」、または「COUNT_JOIN_FID」)からフィールド計算機減算1を使用します-各フィーチャがそれ自体と交差するため。

この方法は、[ポリゴンの数を数える]ツールではなく使用することをお勧めします。このJoin-> Dissolveメソッドを開始する約5分前にCOPツールの実行を開始しました。「ポリゴンのカウント」ツールが終了する前にこれを書き込むのに十分な時間のある結果が得られました。

お役に立てれば!

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