ArcMapで同じジオメトリの重複フィーチャを削除しますか?


15

フィーチャレイヤーの各ジオメトリを一意に識別することは可能ですか?

基本的に、同じジオメトリで表される多数のデータ行を持つポリゴンフィーチャレイヤーがあります。一意のジオメトリごとに1行が必要です。そのため、ジオメトリの形状に基づいて属性を組み合わせるための、すぐに使用できる方法を探しています。

私はPostgresの世界から来て、そこでこの問題を解決できますが、ESRIツールで非プログラム的にそれを行う方法(または可能かどうか)を知りません。


それで、あなたは同じジオメトリの複数のレコードがあり、同じものを結合したいと言っているのですか?その場合は...面積やそのようなものに基づいて単に溶解できますか?たぶん、ここにあなたの質問がありません。
Clickinaway

それは正しい、彼らは唯一の共有された自然属性がジオメトリ自体である同一のジオメトリです。領域機能する可能性がありますが、2つの異なるジオメトリが同じ領域を持たないという保証はありません。
ディラン・ヘッティンガー

私の投稿をご覧ください。複数のフィールドでディゾルブを実行できます。
ポール

@Paul ....あなたが私の入力を反映するためにあなたの応答を編集したのを見ます。それがお役に立てば幸いです。
Clickinaway

回答:


22

高度なライセンスをお持ちの場合は、同一検索または同一削除を使用できます。

両方を使用して、同じ属性を持つフィーチャを検索または削除できます。または、Shapeフィールドが指定されている場合は、同じジオメトリを検索または削除できます。

高度なライセンスを持っていない場合は、この投稿が役立ちます。

つまり、属性テーブルにX、Yの2つのフィールドを追加し、これらのフィールドでDissolveを実行します。

同じ重心を共有するが幾何学的に同一ではないポリゴンがある場合、他の2つのフィールド(境界と面積)を追加できます。これは、ほとんどすべての通常のケースで同一のジオメトリを識別するのに十分なはずです。以下の@whuberのコメントを参照してください。


それはポイントデータが正しいと推定していますか?最初に重心を作成することを提案することを考えていました。彼はまだ同じジオメトリの行がたくさんあると言っています...それはほとんど、面積クラス/範囲に基づいて分類するように聞こえますか?しかし、それはジオメトリの形状も示しています...だから、私は面積または境界線に基づいて溶解に傾いていました(または比率を達成するためにそれらの2つの組み合わせ)。
Clickinaway

1
実際、私がリンクした投稿はポリゴン用でした。同じ重心を持つ2つの同一でないポリゴンが存在する可能性がある場合は、面積と重心でディゾルブできます。
ポール

+1これはまさに正しい答えです。原則として、重心、境界、および面積は依然としてポリゴンを一意に識別しない可能性がありますが、反例は少し工夫されています。不規則なオブジェクトや自然なオブジェクト、または手動でデジタル化されたオブジェクトを一意のIDにハッシュするには、これらの4つの値が信頼できる必要があります。より簡単に取得できる値が必要な場合は、フィーチャの境界ボックスの座標と頂点数を使用します。
whuber

@whuberすべての頂点の座標を比較することが、同一のジオメトリを決定する唯一の確実な方法でしょうか?ジオメトリの私の背景はかなり弱いので、これはすべて非常に魅力的です。
ポール

あなたの質問に対する答えは、「同一の」という意味によって異なります。例えば、ポリゴンのエッジに沿って新しい頂点を挿入する場合、それは「同一の」ポリゴンであるかどうかです。おそらく、頂点が異なっていても、それは世界の同じ機能を表すという意味です。この観点からの唯一の確実なテストは、2つのポリゴンの(設定された理論上の)差が空かどうかです。しかし、より厳密な見方をすれば、同一性は頂点間の一致を意味しますが、1つのポリゴンが別のポイントで頂点リストを開始する可能性があるため、依然として注意が必要です。
whuber

1

調査データに基づくデータセットがあります。私の問題は、新しいサーベイショットがインポートされる前に古い機能が常に削除されないことです。したがって、異なるジオメトリの「重複」があります。つまり、調査ショットは互いに1/4フィート離れている可能性があります。12000のフィーチャデータセットでは、これをそれぞれにズームインして識別するのは困難です。ArcMap Basic 10.2の使用:私が思いついたハックモデルです。

  1. 元のレイヤーの各フィーチャのバッファー(入力半径付き)(選択または非選択)
  2. バッファレイヤーの各フィーチャを反復処理する
  3. リレーションシップに基づいて元のレイヤーから選択(Centroid w / in機能)
  4. 「行数」選択機能
  5. フィールドバッファーレイヤーへの行カウント値の計算=元のフィーチャの半径内にあるフィーチャの数

私は車輪を再発明しました。また、モデルビルダーに不満を抱き、基本的にすべてをブルドッグにしています。よりエレガントなソリューションが必要です。批判や提案を喜んで受け入れます。

また、これはモデルビルダー内からのみ正しく実行されるようです。ツールボックスから実行しますが、バッファーレイヤーは保存されません。

重複したフィーチャを見つける


1

私は、バッファポリゴンの重複問題の平坦化を克服し、それに対する堅牢なソリューションを見つけたと思うために、しばらくの間同じ質問に対する答えを探していました。実際、@ Whuberのコメント、

原則として、重心、境界線、および面積は依然としてポリゴンを一意に識別しない可能性がありますが、反例は少し工夫されています。

@Paulの答えは、私が挑戦し続ける主な動機でした。これは、他の同一の検出器の中で最も効率的であるため、空間結合ツールのARE_IDENTICAL_TO演算子を使用します。手順は次のとおりです。

  • 入力を自己結合して、すべての形状を互いに異なる状態に保ちます。
  • 言って、行の元OBJECTIDの(つまり、OIDフィールド型)をコピー/維持するためにダミーのフィールドを作成しますEX_OIDを
    • ターゲットと結合の両方のフィーチャパラメーターとして処理する必要があるフィーチャクラスで空間結合を実行します。以前に作成されたダミーフィールドのフィールドマッピング(2回表示される)にFIRSTのマージルールがあることを確認します(これはデフォルトまたはLASTを選択します。他のフィールドは重複の要約を使用するため、目的の出力が得られない場合があります)。このステップでは、すべての重複する(つまり、最初)の上にある共通の形状OBJECTIDを選択します。

次の手順は、WITH PythonまたはWITHOUTの2つの方法で実行できます。

パイソン付き

  • 以下のコードを使用して、検索する一意のIDを抽出します。

print tuple(set([row.getValue("EX_OID_1") for row in arcpy.SearchCursor("Output_of_the_Spatial_Join_Operation")]))

ダミーのOIDフィールドの2番目のコピー(私の場合はEX_OID_1)を使用していることに注意してください。

  • このコードの出力をコピーして、として処理された元のフィーチャクラスの定義 クエリに貼り付けますOBJECTID IN (<PASTE_COPIED_VALUES_HERE>)。その結果、重複するパーツの統一された機能が表示されます。ただし、30,000文字のサイズ制限があります。この問題を解決するには、「Pythonなし」の手順に従う必要があります。

パイソンなし

  • 頻度ツールを使用して、ダミーOIDフィールドの2番目のコピーに一意の値をリストします(私の場合はEX_OID_1です)。

  • 最後に、[ 一致するレコードのみを保持]オプションを選択して、元のフィーチャクラスのOBJECTIDフィールドを頻度ツールのEX_OID_1の出力に結合します。

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