添加空间连接 (数据管理)

摘要

根据空间关系将一个要素类的属性连接到另一个要素类的属性。 将连接目标要素和来自连接要素的连接属性。 此连接是临时连接。

有关详细信息,请参阅按位置选择:图形示例

使用情况

  • 空间连接根据行的相对空间位置对连接要素值行与目标要素值行进行匹配。

  • 此工具将在临时连接上创建以下字段:

    • Join_Count- 与每个目标要素匹配的连接要素数
    • TARGET_FID- 目标要素的对象 ID

  • 此工具不支持一对多连接。 要实现一对多连接,请使用空间连接工具。

  • 默认情况下,连接要素的所有属性都连接到目标要素的属性。 您可以使用字段映射参数定义哪些属性将出现在连接输出中。

  • 要管理输出数据集中的字段和这些字段的内容,请使用字段映射参数。

    • 要更改字段顺序,请选择一个字段名称并将其拖动到新位置。
    • 输出字段的默认数据类型与其所遇到的第一个名称相同的输入字段的数据类型相同。 您可以随时将该数据类型手动更改为其他任何有效的数据类型。
    • 可以使用以下合并规则:first、last、join、sum、mean、median、mode、minimum、maximum、standard deviation 和 count。
    • 如果使用连接合并规则,则可指定分隔符,例如,空格、逗号、句点和短划线等。 要使用空格,请确保指针位于输入框的起始位置处,然后按一次空格键
    • 您可以使用格式选项来指定文本字段的起始和终止位置。
    • 请勿对单个输入执行标准差计算,因为数字不能被零除,因此标准差不适用于单个输入。

    了解有关在脚本中映射字段的详细信息

  • 连接要素的字段映射参数中指定的合并规则仅适用于连接要素中的属性,且仅适用于多个要素与目标要素匹配 (Join_Count > 1) 的情况。 例如,如果连接 DEPTH 属性值分别为 15.5、2.5 和 3.3 的三个要素,并应用“平均值”合并规则,则输出字段的值为 6.1。 进行统计计算时,将忽略连接字段中的空值。 例如,15.5、<空> 和 2.5 将得出的结果为:“平均值”为 9.0,“计数”为 2。

  • 匹配选项参数设置为最近最近测地线时,可能会出现两个或多个连接要素与目标要素距离相等的情况。 如果发生这种情况,系统会随机选择其中一个连接要素作为匹配要素(连接要素的对象 ID 不会影响此随机选择)。 如果要查找排在第 2 位、第 3 位或第 n 位的最近要素,使用生成近邻表工具。

    了解有关如何计算邻近值的详细信息

  • 如果连接要素与多个目标要素具有空间关系,则在根据目标要素对其进行匹配时进行多次计数。 例如,如果点位于三个面内,则该点将计数三次,即每个面计数一次。

  • 有关使用 3D 相交在某一 3D 距离范围内空间关系的详细信息,请参阅按位置选择:3D 关系。.

参数

标注说明数据类型
目标要素

目标要素的属性和连接要素的属性将连接到目标要素图层。 但是,可以使用字段映射参数中定义属性的子集。

Feature Layer
连接要素

连接要素的属性将被连接到目标要素的属性中。 有关连接操作的类型对所连接属性聚合的影响的详细信息,请参阅连接操作参数的说明。

Feature Layer
连接操作
(可选)

该参数处于隐藏状态,其不受支持。 所有连接都将作为一对一连接执行。

要在输出要素类中创建输出时实现一对多连接,请使用空间连接工具。

String
保留所有目标要素
(可选)

指定是仅保留与连接要素(称为内部连接)具有空间关系的目标要素,还是保留所有目标要素,即使与连接要素没有空间关系(称为外部连接)。

  • 选中 - 将保留目标要素图层中的所有要素。 这是默认设置。
  • 未选中 - 仅保留目标要素图层中与连接要素具有空间关系的要素。
Boolean
字段映射
(可选)

输出中将包括的具有相应字段属性和源字段的属性字段。 默认情况下,将包括输入的所有字段。

可以添加、删除、重命名和重新排序字段,且可以更改其属性。

合并规则用于指定如何将两个或更多个输入字段的值合并或组合为一个输出值。 以下合并规则可用于确定如何用值填充输出字段。

  • First - 使用输入字段的第一个值。
  • Last - 使用输入字段的最后一个值。
  • Join - 串连(连接)输入字段的值。
  • Sum - 计算输入字段值的总和。
  • Mean - 计算输入字段值的平均值。
  • Median - 计算输入字段值的中值。
  • Mode - 使用具有最高频率的值。
  • Min - 使用所有输入字段值中的最小值。
  • Max - 使用所有输入字段值中的最大值。
  • Standard deviation - 对所有输入字段值使用标准差分类方法。
  • Count - 查找计算中所包含的记录数。

Field Mappings
匹配选项
(可选)

指定用于匹配行的条件。

  • 相交如果连接要素与目标要素相交,将匹配连接要素中相交的要素。这是默认设置。在搜索半径参数中指定距离。
  • 3D 相交 如果连接要素中的要素与三维空间(x、y 和 z)中的某一目标要素相交,则将匹配这些要素。在搜索半径参数中指定距离。
  • 在某一距离范围内如果连接要素在目标要素的指定距离之内,将匹配处于该距离内的要素。在搜索半径参数中指定距离。
  • 在某一测地线距离范围内在某一距离范围内相同,不同之处在于采用测地线距离而非平面距离。如果您的数据涵盖较大地理范围或输入的坐标系不适合进行距离计算,请选择此项。
  • 在某一 3D 距离范围内在三维空间内,如果连接要素中的要素与目标要素间的距离在指定范围内,则匹配这些要素。在搜索半径参数中指定距离。
  • 包含如果目标要素中包含连接要素中的要素,将匹配连接要素中被包含的要素。目标要素必须是面或折线。对于此选项,目标要素不能为点,且仅当目标要素为面时连接要素才能为面。
  • 完全包含如果目标要素完全包含连接要素中的要素,将匹配连接要素中被包含的要素。面可以完全包含任意要素。点不能完全包含任何要素,甚至不能包含点。折线只能完全包含折线和点。
  • 包含 (Clementini)该空间关系产生的结果与完全包含相同,但有一种情况例外:如果连接要素完全位于目标要素的边界上(没有任何一部分完全位于内部或外部),则不会匹配要素。Clementini 将边界面定义为用来分隔内部和外部的线,将线的边界定义为其端点,点的边界始终为空。
  • 位于如果目标要素位于连接要素内,将匹配连接要素中包含目标要素的要素。它与包含相反。对于此选项,只有当连接要素也为面时目标要素才可为面。只有当点为目标要素时连接要素才能为点。
  • 完全在其他要素范围内如果目标要素完全在连接要素范围内,则匹配连接要素中完全包含目标要素的要素。这与完全包含相反。
  • 包含于 (Clementini)结果与范围内相同,但下述情况例外:如果连接要素中的全部要素均位于目标要素的边界上,则不会匹配要素。Clementini 将边界面定义为用来分隔内部和外部的线,将线的边界定义为其端点,点的边界始终为空。
  • 与其他要素相同如果连接要素与目标要素相同,将匹配连接要素中相同的要素。连接要素和目标要素必须具有相同的形状类型 - 点到点、线到线和面到面。
  • 边界接触如果连接要素中具有边界与目标要素相接的要素,将匹配这些要素。如果目标和连接要素为线或面,则连接要素的边界只可接触目标要素的边界,且连接要素的任何部分均不可跨越目标要素的边界。
  • 与其他要素共线如果连接要素中具有与目标要素共线的要素,将匹配这些要素。连接要素和目标要素必须是线或面。
  • 与轮廓交叉如果连接要素中具有轮廓与目标要素交叉的要素,则将匹配这些要素。连接要素和目标要素必须是线或面。如果将面用于连接或目标要素,则会使用面的边界(线)。将匹配在某一点交叉的线,而不是共线的线。
  • 中心在要素范围内如果目标要素的中心位于连接要素内,将匹配这些要素。要素中心的计算方式如下:对于面和多点,将使用几何的质心;对于线输入,则会使用几何的中点。在搜索半径参数中指定距离。
  • 最近匹配连接要素中与目标要素最近的要素。有关详细信息,请参阅使用提示。在搜索半径参数中指定距离。
  • 最近测地线最近相同,不同之处在于采用测地线距离而非平面距离。如果您的数据涵盖较大地理范围或输入的坐标系不适合进行距离计算,请选择此项
  • 最大重叠连接要素中的特征将与重叠最大的目标要素匹配。
String
搜索半径
(可选)

如果连接要素与目标要素的距离在此范围内,则有可能进行空间连接。 仅当指定空间关系时,搜索半径才有效(匹配选项参数设置为相交在某一距离范围内在某一测地线距离范围内质心在以下图层中的要素内最近最近测地线)。 例如,当搜索半径设置为 100 米且使用在某一距离范围内空间关系时,将会连接距离目标要素 100 米以内的要素。 对于三种在某一距离范围内关系,如果未指定搜索半径的值,则距离将为 0。

Linear Unit
距离字段名称
(可选)

添加到连接中的字段的名称,其中包含目标要素和最近连接要素之间的距离。 仅当已指定空间关系时(匹配选项设置为最近最近测地线),此选项才有效。 如果在搜索半径内没有任何匹配的要素,则此字段的值为 -1。 如果未指定字段名称,则不会将该字段添加到连接中。

String

派生输出

标注说明数据类型
更新后的目标要素

已更新的输入数据集。

Feature Layer

arcpy.management.AddSpatialJoin(target_features, join_features, {join_operation}, {join_type}, {field_mapping}, {match_option}, {search_radius}, {distance_field_name})
名称说明数据类型
target_features

目标要素的属性和连接要素的属性将连接到目标要素图层。 但是,可以使用 field_mapping 参数中定义属性的子集。

Feature Layer
join_features

连接要素的属性将被连接到目标要素的属性中。 有关连接操作的类型对所连接属性聚合的影响的详细信息,请参阅 join_operation 参数的说明。

Feature Layer
join_operation
(可选)

不支持此参数。 所有连接都将作为一对一连接执行。 如果您在 Python 中使用位置参数,请使用 None 类型、空字符串(""'')或 JOIN_ONE_TO_ONE 关键字。

要在输出要素类中创建输出时实现一对多连接,请使用空间连接工具。

String
join_type
(可选)

指定是仅保留与连接要素(称为内部连接)具有空间关系的目标要素,还是保留所有目标要素,即使与连接要素没有空间关系(称为外部连接)。

  • KEEP_ALL将保留目标要素图层中的所有要素。 这称为外部连接。 这是默认设置。
  • KEEP_COMMON仅保留目标要素图层中与连接要素具有空间关系的要素。 这称为内部连接。
Boolean
field_mapping
(可选)

输出中将包括的具有相应字段属性和源字段的属性字段。 默认情况下,将包括输入的所有字段。

可以添加、删除、重命名和重新排序字段,且可以更改其属性。

合并规则用于指定如何将两个或更多个输入字段的值合并或组合为一个输出值。 以下合并规则可用于确定如何用值填充输出字段。

  • First - 使用输入字段的第一个值。
  • Last - 使用输入字段的最后一个值。
  • Join - 串连(连接)输入字段的值。
  • Sum - 计算输入字段值的总和。
  • Mean - 计算输入字段值的平均值。
  • Median - 计算输入字段值的中值。
  • Mode - 使用具有最高频率的值。
  • Min - 使用所有输入字段值中的最小值。
  • Max - 使用所有输入字段值中的最大值。
  • Standard deviation - 对所有输入字段值使用标准差分类方法。
  • Count - 查找计算中所包含的记录数。

Python 中,您可使用 FieldMappings 类来定义此参数。

Field Mappings
match_option
(可选)

指定用于匹配行的条件。

  • INTERSECT如果连接要素与目标要素相交,将匹配连接要素中相交的要素。这是默认设置。在 search_radius 参数中指定距离。
  • INTERSECT_3D 如果连接要素中的要素与三维空间(x、y 和 z)中的某一目标要素相交,则将匹配这些要素。在 search_radius 参数中指定距离。
  • WITHIN_A_DISTANCE如果连接要素在目标要素的指定距离之内,将匹配处于该距离内的要素。在 search_radius 参数中指定距离。
  • WITHIN_A_DISTANCE_GEODESICWITHIN_A_DISTANCE 相同,不同之处在于采用测地线距离而非平面距离。如果您的数据涵盖较大地理范围或输入的坐标系不适合进行距离计算,请选择此项。
  • WITHIN_A_DISTANCE_3D在三维空间内,如果连接要素中的要素与目标要素间的距离在指定范围内,则匹配这些要素。在 search_radius 参数中指定距离。
  • CONTAINS如果目标要素中包含连接要素中的要素,将匹配连接要素中被包含的要素。目标要素必须是面或折线。对于此选项,目标要素不能为点,且仅当目标要素为面时连接要素才能为面。
  • COMPLETELY_CONTAINS如果目标要素完全包含连接要素中的要素,将匹配连接要素中被包含的要素。面可以完全包含任意要素。点不能完全包含任何要素,甚至不能包含点。折线只能完全包含折线和点。
  • CONTAINS_CLEMENTINI该空间关系产生的结果与 COMPLETELY_CONTAINS 相同,但有一种情况例外:如果连接要素完全位于目标要素的边界上(没有任何一部分完全位于内部或外部),则不会匹配要素。Clementini 将边界面定义为用来分隔内部和外部的线,将线的边界定义为其端点,点的边界始终为空。
  • WITHIN如果目标要素位于连接要素内,将匹配连接要素中包含目标要素的要素。它与 CONTAINS 相反。对于此选项,只有当连接要素也为面时目标要素才可为面。只有当点为目标要素时连接要素才能为点。
  • COMPLETELY_WITHIN如果目标要素完全在连接要素范围内,则匹配连接要素中完全包含目标要素的要素。这与 COMPLETELY_CONTAINS 相反。
  • WITHIN_CLEMENTINI结果与 WITHIN 相同,但下述情况例外:如果连接要素中的全部要素均位于目标要素的边界上,则不会匹配要素。Clementini 将边界面定义为用来分隔内部和外部的线,将线的边界定义为其端点,点的边界始终为空。
  • ARE_IDENTICAL_TO如果连接要素与目标要素相同,将匹配连接要素中相同的要素。连接要素和目标要素必须具有相同的形状类型 - 点到点、线到线和面到面。
  • BOUNDARY_TOUCHES如果连接要素中具有边界与目标要素相接的要素,将匹配这些要素。如果目标和连接要素为线或面,则连接要素的边界只可接触目标要素的边界,且连接要素的任何部分均不可跨越目标要素的边界。
  • SHARE_A_LINE_SEGMENT_WITH如果连接要素中具有与目标要素共线的要素,将匹配这些要素。连接要素和目标要素必须是线或面。
  • CROSSED_BY_THE_OUTLINE_OF如果连接要素中具有轮廓与目标要素交叉的要素,则将匹配这些要素。连接要素和目标要素必须是线或面。如果将面用于连接或目标要素,则会使用面的边界(线)。将匹配在某一点交叉的线,而不是共线的线。
  • HAVE_THEIR_CENTER_IN如果目标要素的中心位于连接要素内,将匹配这些要素。要素中心的计算方式如下:对于面和多点,将使用几何的质心;对于线输入,则会使用几何的中点。在 search_radius 参数中指定距离。
  • CLOSEST匹配连接要素中与目标要素最近的要素。有关详细信息,请参阅使用提示。在 search_radius 参数中指定距离。
  • CLOSEST_GEODESICCLOSEST 相同,不同之处在于采用测地线距离而非平面距离。如果您的数据涵盖较大地理范围或输入的坐标系不适合进行距离计算,请选择此项
  • LARGEST_OVERLAP连接要素中的特征将与重叠最大的目标要素匹配。
String
search_radius
(可选)

如果连接要素与目标要素的距离在此范围内,则有可能进行空间连接。 仅当指定空间关系时,搜索半径才有效(match_option 参数设置为 INTERSECTWITHIN_A_DISTANCEWITHIN_A_DISTANCE_GEODESICHAVE_THEIR_CENTER_INCLOSESTCLOSEST_GEODESIC)。 例如,当搜索半径设置为 100 米且空间关系为 WITHIN_A_DISTANCE 时,将会连接距离目标要素 100 米以内的要素。 对于三种 WITHIN_A_DISTANCE 关系,如果未指定 search_radius 的值,则距离将为 0。

Linear Unit
distance_field_name
(可选)

添加到连接中的字段的名称,其中包含目标要素和最近连接要素之间的距离。 仅当已指定空间关系时(match_option 设置为 CLOSESTCLOSEST_GEODESIC),此参数才有效。 如果在搜索半径内没有任何匹配的要素,则此字段的值为 -1。 如果未指定字段名称,则不会将该字段添加到连接中。

String

派生输出

名称说明数据类型
out_feature_class

已更新的输入数据集。

Feature Layer

代码示例

AddSpatialJoin 示例 1(独立脚本)

以下 Python 脚本演示了如何在独立脚本中使用 AddSpatialJoin 函数。

import os
import arcpy
arcpy.env.overwriteOutput = True

# Create hexagons
out_gdb = arcpy.env.scratchGDB
hex_fc = os.path.join(out_gdb, 'out_fc_hex_2')

arcpy.management.GenerateTessellation(
    hex_fc, '-10823285.769168 4836611.80759869 -10781728.9441187 4856999.87422328', 
    'HEXAGON', '17269676,2624 Unknown', arcpy.SpatialReference(3857))

# Create 2 random points in each hexagon
count_pts = 2
pts_fc = arcpy.management.CreateRandomPoints(
    out_gdb, 'out_fc_crp_2', constraining_feature_class=hex_fc, 
    number_of_points_or_field=count_pts)[0]

# Join the point attributes based on points within the hexagons
result = arcpy.management.AddSpatialJoin(
    hex_fc, pts_fc, None, None, 'CID', 'COMPLETELY_CONTAINS')
)

许可信息

  • Basic: 是
  • Standard: 是
  • Advanced: 是

相关主题