ポリゴン近接とペアワイズ ポリゴン近接の仕組み

このトピックでは、[ポリゴン近接 (Polygon Neighbors)][ペアワイズ ポリゴン近接 (Pairwise Polygon Neighbors)] ツールが近傍を検索し、出力テーブルを入力する方法について説明します。

隣接リレーションシップの検索と統計の計算

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

  • オーバーラップ隣接 - そのエリア全体または一部とオーバーラップしているポリゴン。
  • エッジ隣接 - 境界を共有している、または境界に接しているポリゴン。
  • ノード隣接 - 1 つのポイントで接しているポリゴン ([ポリゴン近接 (Polygon Neighbors)] ツールの場合、境界が接しているか、交差しているかのいずれか。[ペアワイズ ポリゴン近接 (Pairwise Polygon Neighbors)] ツールの場合、境界が接している)。

[ポリゴン近接 (Polygon Neighbors)] ツールの場合、隣接するポリゴンは [インターセクト (Intersect)] ツールと同じポリゴンのルールを使用して検出されます。

[ペアワイズ ポリゴン近接 (Pairwise Polygon Neighbors)] ツールの場合、隣接するポリゴンは [ペアワイズ インターセクト (Pairwise Intersect)] ツールと同じポリゴンのルールを使用して検出されます。

どちらのツールも、階層パスをたどって近傍のタイプと統計を特定して、出力テーブルに記録します。 隣接リレーションシップは、階層の上位から下位の順に、オーバーラップ、一致エッジ、ノード隣接になります。 このツールは、上位の近傍を検出すると、リレーションシップ情報を計算して格納し、下位のリレーションシップの解析はスキップします。 このツールは、次のワークフローを使用します:

  1. ソース フィーチャとして使用するポリゴンを選択します。
  2. ソース ポリゴンと交差するすべてのポリゴンを検出します (近傍の検索)。
  3. 最初に検出した近傍について、ソース ポリゴンを次のように解析します:
    • 隣接ポリゴンがオーバーラップ隣接で、[エリアのオーバーラップを含める] パラメーターがオンになっている場合、以下が実行されます:
      1. 出力テーブルに AREA フィールドを追加します。
      2. オーバーラップの面積を計算します。
      3. 出力テーブルの AREA フィールドで使用される値として算出した面積を記録します。
      4. 出力テーブルの LENGTH フィールドで使用される値として 0 を記録します。
      5. 出力テーブルの NODE_COUNT フィールドで使用される値として 0 を記録します。

        オーバーラップ隣接の解析が完了しました。

      6. 次の隣接ポリゴンを解析します。
    • 隣接ポリゴンがエッジ隣接の場合、以下が実行されます:
      1. 一致する境界の長さを計算します。
      2. 出力テーブルの LENGTH フィールドで使用される値として算出した長さを記録します。
      3. 出力テーブルの NODE_COUNT フィールドで使用される値として 0 を記録します。

        エッジ隣接の解析が完了しました。

      4. 次の隣接ポリゴンを解析します。
    • 隣接ポリゴンがノード隣接の場合、以下が実行されます:
      1. 隣接ポリゴンがポイントでソース ポリゴンと交差および接触する ([ペアワイズ ポリゴン近接 (Pairwise Polygon Neighbors)] ツールは接触のみを使用) 回数を検出します。
      2. 出力テーブルの NODE_COUNT フィールドで使用される値としてこの回数値を記録します。
      3. 出力テーブルの LENGTH フィールドで使用される値として 0 を記録します。

        ノード隣接の解析が完了しました。

      4. 次の隣接ポリゴンを解析します。

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

フィールドごとにレポートの例

次のサブセクションでは、[フィールドごとにレポート] パラメーターを使用した例について説明します:

ポリゴンごとに個別値を持つフィールドの使用

入力の個々のポリゴンの隣接を検出するには、ポリゴンごとに個別値を持つ入力フィールドを指定します。 この例では、9 つのポリゴンの入力テーブルに myCode フィールドがあり、このフィールドにはポリゴンごとに個別値が格納されています。

入力データ

次の表は、[フィールドごとにレポート] パラメーター値として myCode フィールドを使用した結果を示しています。 ソース フィールド名と隣接フィールド名の接頭辞は src_myCodenbr_myCode です。

出力テーブル

一意のポリゴン グループを定義する値を持つフィールドの使用

一意のポリゴン グループを識別してグループ別に隣接情報をレポートするには、一意の分類値を持つフィールドを指定します。 隣接情報は、一意のグループがどのように関連しているかに基づいて集計されます。 この例では、[フィールドごとにレポート] パラメーター値として myClass を使用することにより一意のポリゴン グループが識別されます。

入力データ

次に、[フィールドごとにレポート] パラメーター値として myClass フィールドを使用した結果を示します:

  • グループ A からグループ A の他のポリゴンまでの一致エッジの全長は 1200 です。これは、グループ A 内にあるポリゴン間の 6 つの一致エッジから得られます。
    注意:

    出力テーブルには、[フィールドごとにレポート] パラメーターを使用して指定したソース ポリゴンと隣接ポリゴンの値の一意の組み合わせごとに一意のレコードだけが含まれます。 グループ A がソースとして、隣接がリレーションシップの一方の側として使用され、逆のリレーションシップもグループ A がソースおよび隣接として使用されるため、隣接リレーションシップの両側の合計が 1 つのレコードに含まれます。

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

出力テーブル

一意のポリゴン グループを定義する値の組み合わせを生成する複数のフィールドの使用

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

入力データ

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

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

以下の出力テーブルは、これらのグループの隣接情報を示しています。 最初の 8 行は、myClass フィールドの値と組み合わせた Z1 値の一意のグループが Z1 と Z2 でソース グループとその隣接グループとなることを表しています:

  • 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 です。

出力テーブル

オーバーラップ ポリゴンが含まれている入力データおよび含まれていない入力データ

以下の例は、エリアのオーバーラップがある入力データおよびエリアのオーバーラップがない入力データを実行したときに、階層の上位から下位の順に隣接リレーションを解析する方法の詳細を示しています。 例では、ポリゴンごとに一意の値を含んでいる単一のフィールドが [フィールドごとにレポート] パラメーター値に使用されます。 どの例でも、[ポリゴン近接 (Polygon Neighbors)] ツールと [ペアワイズ ポリゴン近接 (Pairwise Polygon Neighbors)] ツールの違いについての説明があります。

オーバーラップ ポリゴンが含まれていない入力データ

次の 2 つのケースで使用されている入力データにはオーバーラップ ポリゴンが含まれていません。

エリアのオーバーラップを含めるパラメーターがオフ

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

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

入力データと出力テーブル

エリアのオーバーラップを含めるパラメーターがオン

[エリアのオーバーラップを含める] パラメーターがオンになっている場合、出力テーブルには AREA フィールドが含まれます。 どのポリゴンもオーバーラップしていないため、AREA フィールドの値はすべて 0 になります。 エッジ隣接とノード隣接の解析が引き続き実行され、LENGTH フィールドと NODE_COUNT フィールドの値は、比較可能な [フィールドごとにレポート] パラメーターの例と同じになります。

オーバーラップ ポリゴンが含まれている入力データ

次の 2 つの例で使用されている入力データにはオーバーラップ ポリゴンが含まれています。

エリアのオーバーラップを含めるパラメーターがオフ

以下の 4 つのポリゴンの場合、任意の 2 つのポリゴン間でオーバーラップ隣接、エッジ隣接、またはノード隣接は 1 度しか発生しません。 [エリアのオーバーラップを含める] パラメーターをオフにすると、このツールは、エッジ隣接とノード隣接のみを (この順序で) チェックし、出力には AREA フィールドは含まれません。 たとえば、ポリゴン 1 をソース ポリゴンとして使用すると、3 つの隣接ポリゴンが検出され、次の情報が出力テーブルにレポートされます:

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

入力データと出力テーブル

エリアのオーバーラップを含めるパラメーターがオン

たとえば、ポリゴン 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 フィールドに書き込まれます。 1 つのポイントでポリゴン 1 と交差していますが、ノード隣接解析はスキップされます ([ペアワイズ ポリゴン近接 (Pairwise Polygon Neighbors)] ツールは接触のみを使用するため、この交差状況は考慮されません)。 NODE_COUNT フィールドの値は 0 です。

入力データと出力テーブル

別のポリゴンと複数回交差するポリゴンが含まれている入力データ

以下で説明する例で使用されている入力データでは、2 つのポリゴン間においてオーバーラップ隣接、エッジ隣接、またはノード隣接が複数回発生します。 出力フィールド (AREALENGTHNODE_COUNT) の値は、各隣接タイプの出現回数の合計になります。

エリアのオーバーラップを含めるパラメーターがオフ

以下の 2 つのポリゴンは 2 か所でオーバーラップし、一致エッジが 2 つあります。 エリアのオーバーラップを含めるパラメーターがオフになっている場合、このツールは 2 つのフィーチャ間のオーバーラップは解析しません。 2 つの一致エッジを検出します。2 つの一致エッジの長さの合計 40 を LENGTH フィールドに書き込みます。 ノード隣接の解析はスキップされるため、値 0 が NODE_COUNT フィールドに入力されます。 これは、ポリゴン 1 がソース ポリゴンで、ポリゴン 2 が隣接である場合でも、またその逆の場合でも同じです。

エリアのオーバーラップを含めるパラメーターがオン

以下の同じ 2 つのポリゴンについて、エリアのオーバーラップを含めるパラメーターがオンになっている場合、このツールは 2 つのエリアのオーバーラップを検出し、2 つのエリアの合計 800 を AREA フィールドに書き込みます。 エッジ隣接とノード隣接の解析はスキップされ、値 0 が LENGTH フィールドと NODE_COUNT フィールドに入力されます。 これは、ポリゴン 1 がソース ポリゴンで、ポリゴン 2 が隣接である場合でも、またその逆の場合でも同じです。

入力データと出力テーブル

エリアのオーバーラップを含めるパラメーターがオフで一致エッジが入力ポリゴン間に存在しない

このシナリオでは、どちらのツールも一致エッジを検出しないため、0 が LENGTH フィールドに書き込まれます。 引き続きノード隣接の解析を行い、[ポリゴン近接 (Polygon Neighbors)] ツールは境界が 2 回交差していることを検出します。[ペアワイズ ポリゴン近接 (Pairwise Polygon Neighbors)] ツールは交差リレーションシップを考慮しないため、空の出力を返します。 [ポリゴン近接 (Polygon Neighbors)] ツールは交差リレーションシップを考慮するため、値 2 を NODE_COUNT フィールドに書き込みます。 これは、次の出力テーブルに示すように、ポリゴン 1 がソース ポリゴンで、ポリゴン 2 が隣接である場合でも、またその逆の場合でも同じです:

入力データと出力テーブル

特殊なケース

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

別のポリゴンのホールをカバーするポリゴン

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

入力データと出力テーブル

別のポリゴンと完全にオーバーラップしているポリゴン

このケースでは、ポリゴン 1 とポリゴン 2 は相互にオーバーラップしています。 この隣接リレーションシップが解析で検出されるようにするには、[エリアのオーバーラップを含める] パラメーターをオンにする必要があります。 ポリゴン 1 がソース ポリゴンで、ポリゴン 2 が隣接である場合でも、またその逆の場合でも、オーバーラップ面積 2500 が出力テーブルにレポートされます。

入力データと出力テーブル