ArcGISのフィールド計算機を使用してポリゴンに穴があるかどうかを確認する方法


10

一部のサードパーティソフトウェアは、穴のあるポリゴン(ドーナツポリゴン)を処理できません。それらを見つけるために、私は常にArcView 3フィールド計算機を使用しています。

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

ただし、ArcGISでこれを実行しようとすると、次のようになります。

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

したがって、問題は、それをArcGISで正しく作成する方法です。


パーツが期待どおりに機能しないことに驚いたので、掘り下げました。どうやらドーナツは時々(?)内部リングを備えた単一部品の特徴ある可能性があることがわかります- このページの最後のコードブロックの前の文/グラフィックを参照してください。私はまた、Pythonでそれらを検出するスクリプトに関するスレッドを見ましが、フィールド計算機ではそうではありませんでした。
Chris W、

私はコードブロックを使用してそれを行うことができますが、醜いです。メインラインprt = shp.getPart(0)feat = arcpy.Polygon(prt)。feat.areaを計算してshp.areaと比較するのに十分です
FelixIP

関連リソース:gis.stackexchange.com/questions/27255エリア比較ソリューションは醜いかもしれませんが、それは機能し、Field Calculator内で機能しているようです。回答として投稿する価値があるかもしれません。
Chris W、

@Hornbyddにクレジットを付けたいと思います。彼の答えは整数を比較するからです。私自身(ずっと前から知っていました)は
倍精度数を

回答:


19

部品点数では正しい答えが得られません。穴のないマルチパートポリゴンを作成できます。シナリオについては、下の画像を参照してください。

マルチパートポリゴン

これは、ArcObjectsを呼び出してポリゴンに穴があるかどうかを確認することができるので、ArcGIS 10より前の単純なクエリでしたが、ESBはVBScripting環境でこのサポートの多くを削除し、今ではかなり役に立たなくなっています。 ...

とにかく、あなたはいくつかのPythonでこの質問を解決することができます:

def hasHole(geom):
  parts = geom.partCount
  boundaries = geom.boundary().partCount
  if boundaries > parts:
    return 1
  else:
    return 0

式ボックスには、次のものを配置します。

hasHole(!Shape!)

エレガントな答えをありがとう。ArcView 3がない場合に使用したものは信頼性が低くなりました。@ ChrisWへの私のコメントを参照してください
FelixIP

1

2つの表現の違いについて言及していますか?はいの場合、下の方はPythonをパーサーとして使用しており、上の方はVBを使用しているようです。ArcGISの[フィールド計算]ウィンドウでこれを変更するには、PythonではなくVBを選択するだけで、一番上の式が機能します。


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