ポリゴン近接 (Polygon Neighbors) の仕組み

ArcGIS ジオプロセシング ツール [ポリゴン近接 (Polygon Neighbors)] が隣接リレーションシップを検出して出力テーブルに書き出す方法について説明します。

隣接リレーションシップを検出し、統計情報を計算する方法の詳細

隣接リレーションシップは次のように定義されています。

  • 重複隣接 - そのエリアの全体または一部が他のポリゴンと重複しているポリゴン。
  • エッジ隣接 - 境界を共有している、または境界に接触しているポリゴン。
  • ノード隣接 - 1 つのポイントで接触している (境界が交差または接触している) ポリゴン。

隣接するポリゴンは、[インターセクト (Intersect)] ツールと同じポリゴン規則に従って検出されます。

メモ:

以下の説明は、ツールのダイアログ ボックスを使用することを前提としています。スクリプト構文を使用する場合は、[ポリゴン近接 (Polygon Neighbors)] ツールのドキュメントをご参照ください。

[ポリゴン近接 (Polygon Neighbors)] ツールは、階層ルートをたどって隣接リレーションシップのタイプと統計情報を特定し、出力テーブルに記録します。隣接リレーションシップは 3 種類あり、階層の上位ランクから下位ランクの順では、重複、一致エッジ、およびノード隣接になります。このツールは、上位ランクの隣接リレーションシップを検出すると、リレーションシップ情報を計算して格納し、下位ランクのリレーションシップの解析は省略します。詳細なワークフローは次のとおりです。

  • ソース フィーチャとして使用するポリゴンを選択します。
  • ソース ポリゴンと交差するすべてのポリゴン (隣接リレーションシップ) を検出します。
  • 最初に検出した隣接リレーションシップについて、ソース ポリゴンを以下のように解析します。
    • 隣接ポリゴンが重複隣接であり、[エリアの重複を含める] チェックボックスがオンになっている場合
      • 出力テーブルに [AREA] フィールドを追加します。
      • 重複の面積を計算します。
      • 出力テーブルの [AREA] フィールドで使用される値として算出した面積を記録します。
      • 出力テーブルの [LENGTH] フィールドで使用される値として 0 を記録します。
      • 出力テーブルの [NODE_COUNT] フィールドで使用される値として 0 を記録します。
      • 重複隣接の解析が完了します。次の隣接ポリゴンを解析します。
    • 隣接ポリゴンがエッジ隣接である場合
      • 一致する境界の長さを計算します。
      • [LENGTH] フィールドで使用される値として算出した長さを記録します。
      • [NODE_COUNT] フィールドで使用される値として 0 を記録します。
      • エッジ隣接の解析が完了します。次の隣接ポリゴンを解析します。
    • 隣接ポリゴンがノード隣接である場合
      • 隣接ポリゴンが 1 つのポイントでソース ポリゴンと交差または接触する回数を検出します。
      • [NODE_COUNT] フィールドで使用される値としてこの回数を記録します。
      • [LENGTH] フィールドで使用される値として 0 を記録します。
      • ノード隣接の解析が完了します。次の隣接ポリゴンを解析します。

上記のプロセスの例については、下記をご参照ください。

このツールは、上記のように隣接リレーションシップを検出すると、[フィールドごとにレポート] を使用して、隣接リレーションシップと統計情報を出力テーブルに報告する方法を決定します。一意のポリゴンまたはポリゴン グループを識別し、一意のポリゴンまたはポリゴン グループ別に隣接情報を報告するには、[フィールドごとにレポート] パラメーターを使用します。同じグループに属するすべてのポリゴンが同じフィールド値セットを共有します。

[フィールドごとにレポート] の例 1 - ポリゴンごとに一意の値を持つフィールドの使用

入力の個々のポリゴンの隣接リレーションシップを検出する必要がある場合は、ポリゴンごとに一意の値を持つ入力フィールドを指定します。この例では、9 つのポリゴンの入力テーブルに [myCode] フィールドがあり、このフィールドにはポリゴンごとに一意の値が格納されています。

例 1 - 入力データ

次の表は、[フィールドごとにレポート] として [myCode] フィールドを使用した結果を示しています。ソースのフィールド名 src_myCode と隣接フィーチャのフィールド名 nbr_myCode の接頭辞に注目してください。

例 1 - 出力テーブル

[フィールドごとにレポート] の例 2 - 一意のポリゴン グループを定義する値を持つフィールドの使用

一意のポリゴン グループを識別してグループ別に隣接情報を報告する必要がある場合は、一意の分類値を持つフィールドを指定できます。隣接情報は、一意のグループがどのように関連しているかに基づいて要約されます。この例では、[フィールドごとにレポート] として入力フィールド [myClass] を使用することによって一意のポリゴン グループが識別されます。

例 2 - 入力データ

以下に [フィールドごとにレポート] として [myClass] を使用した結果を示します。

  • グループ A 内のポリゴンの間には、一致エッジが 6 つあり、その長さの合計は 1200 です。
    メモ:

    出力テーブルには、[フィールドごとにレポート] で使用されたソース ポリゴンの値と隣接ポリゴンの値の一意の組み合わせごとに一意のレコードが含まれるだけです。グループ A 内のポリゴンの間には 2 つのリレーションシップがあり、各ポリゴンはソースと隣接フィーチャの両方としてカウントされ、それに対応する隣接フィーチャとソースもグループ A 内のポリゴンであるため、隣接リレーションシップの合計が 1 つのレコードにまとめられています。

  • グループ A とグループ B の間には、一致エッジが 2 つあるのみで、その長さの合計は 200 です。これはグループ B とグループ A の間についても同じです。
  • グループ A とグループ C の間には、一致エッジが 3 つあり、その長さの合計は 300 です。これはグループ C とグループ A の間についても同じです。
  • グループ A とは異なり、グループ B に属するポリゴンは 1 つしかなく、隣接リレーションシップが検出されないため、出力には何も報告されません。

例 2 - 出力データ

[フィールドごとにレポート] の例 3 - 一意のポリゴン グループを定義する値の組み合わせを生成する複数のフィールドの使用

この例では、[myZone] フィールドの値は 1 つのポリゴンの分類を表し、[myClass] フィールドの値は別の分類を表します。

例 3 - 入力データ

[フィールドごとにレポート] として [myZone] フィールドと [myClass] フィールドを指定すると、これら 2 つのフィールドの値が組み合わされて以下の一意のポリゴン グループが定義されます。

  • Z1-A グループ
  • Z1-C グループ
  • Z2-A グループ
  • Z2-B グループ
  • Z2-C グループ

次の出力テーブルは、上記のグループ間の隣接情報を示しています。最初の 8 行は、値 Z1 と [myClass] フィールドの値 (A と C) の組み合わせ (Z1-A と Z1-C) をソースグループとし、それぞれの組み合わせの隣接グループとして該当する [myZone] の値 (Z1 と Z2) と [myClass] の値 (A、B、および C) を一意に組み合わせたものです。以下に具体的に説明します。

  • Z1-A ソース グループ内には一致エッジが 6 つあり (前の例のグループ A と同様)、その長さの合計は 600 です。
  • Z1-A ソース グループは Z1-C 隣接グループのエッジ隣接グループであり、その一致エッジの長さの合計は 200 です。
  • Z1-A ソース グループは Z2-A 隣接グループのエッジ隣接グループであり、その一致エッジの長さの合計は 300 です。
  • Z1-A ソース グループは Z1-B 隣接グループのエッジ隣接グループではありませんが、Z1-B 隣接グループの境界が 1 つのノードで Z1-A ソース グループと接触しているため、ノード隣接グループです。したがって、[LENGTH] の値は 0 であり、[NODE_COUNT] の値は 1 です。
  • 残りの情報についても同じ論理で解釈できます。

例 3 - 出力テーブル

重複ポリゴンが含まれている入力データおよび含まれていない入力データに対する PolygonNeighbors (ポリゴン近接) の実行

以下の例は、エリア重複のある入力データおよびエリア重複のない入力データに対して PolygonNeighbors (ポリゴン近接) を実行した場合に、隣接リレーションシップが階層の上位ランクから下位ランクの順に解析される方法の詳細を示しています。以下のすべての例において、ポリゴンごとに一意の値を含んでいる単一のフィールドが [フィールドごとにレポート] として使用されています。

例 1 - 重複ポリゴンが含まれていない入力データの場合

以下の 2 つの例で使用されている入力データには重複ポリゴンが含まれていません。

a. [エリアの重複を含める] チェックボックスがオフの場合 (デフォルト)

以下に示す 4 つの入力ポリゴンは重複していません。[エリアの重複を含める] チェックボックスをオフにしてこのツールを実行すると、このツールはエッジ隣接とノード隣接のみをこの順序で検出します。たとえばポリゴン 1 をソース ポリゴンとすると、3 つの隣接ポリゴンが検出され、次の情報が出力テーブルに報告されます。

  • ポリゴン 2 にはポリゴン 1 との間に一致エッジが 1 つあるため、これはエッジ隣接です。一致エッジの長さは 100 で、この値が [LENGTH] フィールドに書き出されます。ノード隣接解析は省略され、[NODE_COUNT] フィールドの値は 0 になります。これはポリゴン 4 についても同じです。
  • ポリゴン 5 にはポリゴン 1 との間に一致エッジがないため、[LENGTH] フィールドの値は 0 になります。ただし、ポリゴン 5 は 1 つのポイントでポリゴン 1 と接触しているため、これはポリゴン 1 のノード隣接であり、[NODE_COUNT] フィールドの値は 1 になります。

例 1 - 入力データと出力テーブル

b. [エリアの重複を含める] チェックボックスがオンの場合

この例では、出力テーブルに [AREA] フィールドが追加されます。どのポリゴンも重複していないため、[AREA] フィールドの値はすべて 0 になります。続けてエッジ隣接とノード隣接の解析が実行され、[LENGTH] フィールドと [NODE_COUNT] フィールドの値は上記の例 1a の値と同じになります。

例 2 - 重複ポリゴンが含まれている入力データの場合

以下の 2 つの例で使用されている入力データには重複ポリゴンが含まれています。

a. [エリアの重複を含める] チェックボックスがオフの場合 (デフォルト)

以下の 4 つのポリゴンの場合、どのポリゴンの組み合わせにおいても重複、エッジ、またはノード隣接は 1 つしか存在しません。このツールは、エッジ隣接とノード隣接のみを (この順序で) 検出し、その出力には [AREA] フィールドは含まれません。たとえばポリゴン 1 をソース ポリゴンとすると、3 つの隣接ポリゴンが検出され、次の情報が出力テーブルに報告されます。

  • ポリゴン 2 とポリゴン 5 にはそれぞれポリゴン 1 との間に一致エッジが 1 つあります。エッジの長さは 20 で、この値が [LENGTH] フィールドに書き出されます。ポリゴン 2 は 1 つのポイントでポリゴン 1 と交差していますが、ノード隣接解析は省略され、[NODE_COUNT] フィールドの値は 0 になります。
  • ポリゴン 4 にはポリゴン 1 との間に一致エッジが 1 つあります。一致エッジの長さは 100 で、この値が [LENGTH] フィールドに書き出されます。

例 2a - 入力データと出力テーブル

b. [エリアの重複を含める] チェックボックスがオンの場合

たとえばポリゴン 1 をソース ポリゴンとすると、3 つの隣接ポリゴンが検出され、次の情報が出力テーブルに報告されます。

  • ポリゴン 2 はポリゴン 1 と重複します。重複の面積は 1600 で、この値が [AREA] フィールドに書き出されます。ポリゴン 2 にはポリゴン 1 との間に一致エッジが 1 つあり、またポリゴン 2 は 1 つのポイントでポリゴン 1 と交差していますが、エッジ隣接とノード隣接の解析は省略されます。したがって、[LENGTH] フィールドと [NODE_COUNT] フィールドの値は 0 になります。
  • ポリゴン 4 にはポリゴン 1 との間に一致エッジが 1 つあります。一致エッジの長さは 100 で、この値が [LENGTH] フィールドに書き出されます。
  • ポリゴン 5 にはポリゴン 1 との間に一致エッジが 1 つあります。一致エッジの長さは 20 で、この値が [LENGTH] フィールドに書き出されます。ポリゴン 5 は 1 つのポイントでポリゴン 1 と交差していますが、ノード隣接解析は省略され、[NODE_COUNT] フィールドの値は 0 になります。

例 2b - 入力データと出力テーブル

例 3 - 別のポリゴンと複数のポイントで交差するポリゴンが含まれている入力データの場合

以下の例で使用されている入力データでは、2 つのポリゴン間において重複、エッジ、またはノード隣接が複数存在します。出力フィールド ([AREA]、[LENGTH]、および [NODE_COUNT]) の値は、隣接タイプ別に集計されたリレーションシップの合計数になります。

a. [エリアの重複を含める] チェックボックスがオフの場合 (デフォルト)

以下の 2 つのポリゴンは 2 箇所で重複し、一致エッジは 2 つあります。このツールは、2 つのフィーチャ間の重複は解析せず、代わりに 2 つの一致エッジを検出します。これらの一致エッジの長さの合計は 40 で、この値を [LENGTH] フィールドに書き出します。ノード隣接の解析は省略されるため、[NODE_COUNT] フィールドの値は 0 になります。これはポリゴン 1 がソース ポリゴンであり、ポリゴン 2 が隣接フィーチャである場合でも、その逆の場合でも同じです。

b. [エリアの重複を含める] チェックボックスがオンの場合

同じ 2 つのポリゴンについて、このツールは 2 つのエリア重複を検出します。これら 2 つのエリアの合計は 800 で、この値が [AREA] フィールドに書き出されます。エッジ隣接とノード隣接の解析は省略されます。したがって、[LENGTH] フィールドと [NODE_COUNT] フィールドの値は 0 になります。これはポリゴン 1 がソース ポリゴンであり、ポリゴン 2 が隣接フィーチャである場合でも、その逆の場合でも同じです。

例 3a および 3b - 入力データと出力テーブル

c. [エリアの重複を含める] チェックボックスがオフ (デフォルト) で一致エッジが入力ポリゴン間に存在しない場合

このツールは一致エッジを検出しないため、[LENGTH] フィールドの値は 0 になります。続けてノード隣接の解析を行い、境界が 2 つのポイントで交差していることを検出します。したがって、[NODE_COUNT] フィールドの値は 2 になります。これは、出力テーブルが示すように、ポリゴン 1 がソース ポリゴンであり、ポリゴン 2 が隣接フィーチャである場合でも、その逆の場合でも同じです。

例 3c - 入力データと出力テーブル

例 4 - 特殊なケース

次の 2 つの特殊なケースで使用されている入力データは一見同じに見えますが、以下に説明するように、重複しているエリアが異なります。

a. 別のポリゴンのホールをカバーするポリゴンの場合

この例では、ポリゴン 2 にホールがあり、ポリゴン 1 がそれをカバーしています。2 つのポリゴンが重複していないため、重複隣接解析は不要です。ポリゴン 1 がソース ポリゴンの場合、ポリゴン 2 にはポリゴン 1 との間に一致エッジが 1 つあり、その長さは 200 で、この値が [LENGTH] フィールドに書き出されます。[NODE_COUNT] フィールドの値は 0 になります。同様に、ポリゴン 2 がソース ポリゴンの場合も、ポリゴン 1 にはポリゴン 2 との間に一致エッジが 1 つあり、それぞれのレコードの [LENGTH] フィールドの値は同じになります。

例 4a - 入力データと出力テーブル

b. 別のポリゴンと完全に重複しているポリゴンの場合

この例では、ポリゴン 1 とポリゴン 2 は相互に重複しています。この隣接リレーションシップが解析で検出されるようにするには、[エリアの重複を含める] チェックボックスをオンにする必要があります。ポリゴン 1 がソースであり、ポリゴン 2 が隣接フィーチャである場合でも、その逆の場合でも、重複面積は 2500 で、この値が出力テーブルに報告されます。

例 4b - 入力データと出力テーブル