面邻域的工作原理

ArcGIS 地理处理工具面邻域查找邻域和填充输出表的方式。

有关如何查找邻域关系和计算统计数据的详细信息

邻域关系按以下方式进行定义:

  • 重叠邻域 - 面的全部或部分区域重叠
  • 边邻域 - 面具有共同或接触边界
  • 结点邻域 - 面在某一点处接触(边界交叉或接触)

根据与相交工具相同的面规则查找邻域面。

注:

以下讨论假定使用工具对话框。有关脚本语法,请参阅面邻域工具文档。

面邻域工具按照等级路径确定要在输出表中记录的邻域类型和统计数据。邻域关系、重合边和结点邻域按照从高到低的等级顺序进行重叠。一旦找到更高顺序的邻域,该工具计算和存储关系信息并跳过较低顺序关系的分析。详细的工作流如下:

  • 选择要用作源要素的面。
  • 查找与源面相交的所有面(查找邻域)。
  • 对于找到的第一个邻域,分析源面的以下各种情况:
    • 如果邻域面是重叠邻域,并且包括区域重叠复选框被选中
      • 将“面积”字段添加至输出表。
      • 计算重叠的面积。
      • 在输出表“面积”字段中记录计算出的面积以供使用。
      • 在输出表“长度”字段中记录 0 以供使用。
      • 在输出表 NODE_COUNT 字段中记录 0 以供使用。
      • 重叠邻域分析完成。分析下一个邻域面。
    • 如果邻域面是边邻域
      • 计算重合边界的长度。
      • 在“长度”字段中记录计算出的长度以供使用。
      • 在 NODE_COUNT 字段中记录 0 以供使用。
      • 边邻域分析完成。分析下一个邻域面。
    • 如果邻域面是结点邻域
      • 查找邻域面在某一点处与源面交叉和接触的次数。
      • 在 NODE_COUNT 字段中记录此计数值以供使用。
      • 在“长度”字段中记录 0 以供使用。
      • 结点邻域分析完成。分析下一个邻域面。

有关上述过程的示例,请参考下文

如上文所述,一旦找到邻域关系,该工具使用按字段报告确定如何在输出表中报告邻域关系和统计数据。按字段报告参数用于确定唯一面或面组,并按唯一面或面组报告其邻域信息。同一组的面具有一组相同的字段值。

按字段报告示例 1 - 针对每个单独的面使用具有唯一值的字段

如果需要在输入中查找每个单独的面的邻域,则针对每个面指定具有唯一值的输入字段。在本示例中,九个面的输入表中有字段 myCode,该字段含有每个单独的面的唯一值。

示例 1 - 输入数据。

下表显示了将 myCode 字段用作按字段报告的结果。请注意源和邻域字段名称的前缀:src_myCode 和 nbr_myCode。

示例 1 - 输出表。

按字段报告示例 2 - 使用具有定义唯一面组功能的值的字段

如果需要确定唯一面组并按组报告邻域信息,则可以指定具有分类的唯一值的字段。根据唯一组的关联方式汇总邻域信息。在本示例中,通过将输入字段 myClass 用作按字段报告确定唯一面组。

示例 2 - 输入数据。

以下是将 myClass 用作按字段报告的结果:

  • 对于组 A 到组 A 的其他面,重合边的总长度为 1200,其中包括组 A 的面中的六条重合边。
    注:

    输出表将仅包含按字段报告中所使用的源和邻域面值的每个唯一组合的唯一记录。由于将组 A 用作源和将邻域用作关系的一侧,并且反向关系也将组 A 用作源和邻域,因此邻域关系两侧的总长度在一条记录中。

  • 在组 A 和组 B 之间,只有两条总长度为 200 的重合边。同样,在组 B 和组 A 之间的情况也是如此。
  • 在组 A 和组 C 之间,有三条总长度为 300 的重合边。同样,在组 C 和组 A 之间的情况也是如此。
  • 与组 A 不同,在组 B 到组 B 的其他面找不到任何邻域关系;因此,在输出中没有报告任何内容。

示例 2 - 输出数据。

按字段报告示例 3 - 使用多个字段,其组合值定义唯一面组

在本示例中,字段 myZone 中的值表示面的一个分类;字段 myClass 中的值表示另一个分类。

示例 3 - 输入数据。

当将两个字段 myZone 和 myClass 都指定为按字段报告时,这两个字段的组合值将产生以下唯一面组:

  • Z1-A 组
  • Z1-C 组
  • Z2-A 组
  • Z2-B 组
  • Z2-C 组

下面的输出表显示了上述组中的邻域关系。前八行表示 Z1 值的唯一组与字段 myClass 的值相结合成为 Z1 和 Z2 的源组及其邻域组。特别情况有:

  • Z1-A 源组的组自身内有六条重合边(类似于前面示例中的组 A);因此,重合边的总长度为 600。
  • Z1-A 源组是 Z1-C 邻域组的边邻域;重合边的总长度为 200。
  • Z1-A 源组是 Z2-A 邻域组的边邻域;重合边的总长度为 300。
  • Z1-A 源组不是 Z1-B 邻域组的边邻域,但 Z1-B 邻域组边界在某个结点与 Z1-A 源组接触,因此它是结点邻域。因此,“长度”字段的值为 0,NODE_COUNT 字段的值为 1。
  • 您可以使用相同的逻辑解释其余信息。

示例 3 - 输出表。

根据具有和不具有重叠面的输入数据运行面邻域。

以下示例显示了在根据具有和不具有区域重叠的输入数据运行时,如何按照从高到低的等级顺序分析邻域关系的详细信息。以下所有示例都将单个字段用作按字段报告,其中包含每个面的唯一值。

示例 1 - 包含非重叠面的输入数据。

在以下两种情况下使用的输入数据包含非重叠面。

a.“包括区域重叠”复选框未选中(默认)

如下所示,四个输入面并不重叠。运行该工具时如果“包括区域重叠”复选框处于未选中状态,则该工具将只能按照此顺序查找边和结点邻域。例如,将面 1 用作源面可找到三个邻域面,并在下面的输出表中报告以下信息:

  • 面 2 有与面 1 重合的边;因此,面 2 是边邻域。将重合边的长度 100 写入“长度”字段。跳过结点邻域分析,字段 NODE_COUNT 的值为 0。并且,面 4 的情况也是如此。
  • 面 5 没有与面 1 重合的边;字段“长度”的值为 0。但是,面 5 在某一点处与面 1 接触;因此,面 5 是面 1 的结点邻域且字段 NODE_COUNT 的值为 1。

示例 1 - 输入数据和输出表。

b.“包括区域重叠”复选框已选中

在这种情况下,输出表将包含字段“面积”。由于没有面出现重叠的情况,因此所有的“面积”字段值均为 0。继续分析边和结点邻域,就会像上面的示例 1-a 那样在“长度”和 NODE_COUNT 字段中得到相同的值。

示例 2 - 包含重叠面的输入数据。

在以下两种情况下使用的输入数据包含重叠面。

a.“包括区域重叠”复选框未选中(默认)

在下列四个面中,重叠、边邻域或结点邻域在任意两个面之间仅出现一次。该工具仅查找边和结点邻域(按此顺序),且输出不包含字段“面积”。例如,将面 1 用作源面可找到三个邻域面,并在下面的输出表中报告以下信息:

  • 面 2 和面 5 均有与面 1 重合的边;将边的长度 20 写入“长度”字段。即使面 2 在某一点处与面 1 交叉,也要跳过结点邻域分析。字段 NODE_COUNT 的值为 0。
  • 面 4 有与面 1 重合的边;将重合边的长度 100 写入“长度”字段。

示例 2a - 输入数据和输出表。

b.“包括区域重叠”复选框已选中

例如,将面 1 用作源面可找到三个邻域面,并在下面的输出表中报告以下信息:

  • 面 2 与面 1 重叠;将重叠面积 1600 写入“面积”字段。即使面 2 有与面 1 重合的边并在某一点处与面 1 交叉,也要跳过边和结点邻域的分析。因此,字段“长度”和 NODE_COUNT 的值为 0。
  • 面 4 有与面 1 重合的边;将重合边的长度 100 写入“长度”字段。
  • 面 5 有与面 1 重合的边;将重合边的长度 20 写入“长度”字段。即使面 5 在某一点处与面 1 交叉,也要跳过结点邻域分析。字段 NODE_COUNT 的值为 0。

示例 2b - 输入数据和输出表。

示例 3 - 包含与另一个面多次相交的面的输出数据

在以下情况下使用的输入数据中,重叠、边或结点邻域在两个面之间出现多次。输出字段“面积”、“长度”和 NODE_COUNT 中的值是每个邻域类型的所有出现次数的求和结果。

a.“包括区域重叠”复选框未选中(默认)

下面的两个面在两个地方重叠,因此具有两条重合边。此工具不能分析两个要素之间的重叠。它找到两条重合边,并将两条重合边的长度的求和结果 40 写入“长度”字段。跳过结点邻域的分析,并将值 0 输入 NODE_COUNT 字段。这适用于将面 1 用作源面并将面 2 用作邻域的情况,以及将面 2 用作源面并将面 1 用作邻域的情况。

b.“包括区域重叠”复选框已选中

对于下面相同的两个面,此工具找到两个区域重叠并将两个区域的求和结果 800 写入“面积”字段。跳过边和结点邻域的分析。因此,在“长度”和 NODE_COUNT 字段中输入值 0。这适用于将面 1 用作源面并将面 2 用作邻域的情况,以及将面 2 用作源面并将面 1 用作邻域的情况。

示例 3a 和 3b 输入数据和输出表。

c.“包括区域重叠”复选框未选中(默认)和在两个输入面之间不存在重合边

此工具找不到重合边,并将值 0 写入“长度”字段。此工具继续分析结点邻域并找到边界交叉两次。因此,在 NODE_COUNT 字段中写入值 2。如下面的输出表所示,这适用于将面 1 用作源面并将面 2 用作邻域的情况,以及将面 2 用作源面并将面 1 用作邻域的情况。:

示例 3c 输入数据和输出表。

示例 4 - 特殊情况

在接下来的两种特殊情况下使用的输入数据可能看起来相同,但所涉及的区域与下面解释的情况不同。

a. 一个面覆盖另一个面的洞

在这种情况下,面 2 中有面 1 所覆盖的孔洞。请注意,这两个面不重叠,因此无需分析重叠邻域。如果面 1 是源面且面 2 与面 1 重合的边的长度为 200,则将此值写入“长度”字段。NODE_COUNT 字段的值为 0。同样,如果面 2 是源面且面 1 与面 2 重合的边的长度为 200,则在每条记录的“长度”字段中产生相同的值。

示例 4a - 输入数据和输出表。

b.一个面与另一个面完全重叠。

在这种情况下,面 1 和面 2 相互重叠。要在分析中找到此邻域关系,需要选中包括区域重叠复选框。对于将面 1 用作源并将面 2 用作邻域,以及将面 2 用作源并将面 1 用作邻域这两种情况,在下面的输出表中报告的重叠面积为 2500。

示例 4b - 输入数据和输出表。