描述
可根据空间、时态、属性关系或这些关系的某种组合将一个图层的属性连接到另一个图层。
插图
使用方法
空间连接会根据要素的空间位置将输入要素(目标图层与连接图层参数)中的要素(行)相匹配。时态连接会根据要素的时态关系将输入要素中的要素(行)相匹配。属性连接将根据字段值将要素进行匹配。
您可以根据空间关系、时态关系、属性关系或上述三者的组合来连接要素。
选项 说明 空间关系
将确定要素是否彼此相连的空间关系。可用的关系将取决于正在连接的图层的几何类型(点、线或面)。可用的空间关系如下:
- 相交
- 等于
- 平面邻近 - 使用平面距离。
- 测地线邻近 - 使用测地线距离。此关系仅适用于 ArcGIS Enterprise 10.7.1 及更高版本。
- 包含
- 位于
- 接触
- 交叉
- 重叠
时态关系
将确定要素是否彼此相连的时态关系。可用的关系取决于正在连接的图层的时间类型(时刻或间隔)。可用的时间关系如下:
- 满足
- 被满足
- 重叠
- 被重叠
- 期间
- 包含
- 等于
- 结束
- 之后结束
- 开始
- 之后开始
- 相交
- 邻近
- 近前
- 近后
属性关系
将确定要素是否彼此相连的属性关系。如果连接图层中的字段值等于目标图层中的字段值,则会对要素进行匹配。
如果目标要素与连接要素处于不同的坐标系,则将使用目标要素的坐标系。如果已指定输出坐标系,则两个要素都将投影至输出坐标系,然后进行连接。
如果多个要素与同一目标要素相匹配,则您可以决定是否连接所有匹配要素(一对多连接)或是否将所有匹配要素汇总到一起(一对一连接),具体如下:
- 一对多连接 - 可将连接图层中的所有匹配要素连接到目标图层。此结果图层将包含目标要素的多个记录。
- 一对一连接 - 可将所有匹配的连接要素与目标图层中的每个要素进行汇总。只有具备匹配项的要素才会包括在汇总和输出中。系统将添加已连接要素计数,此外也将添加其他统计数据,如总和、最小值、最大值、范围、平均值、方差和标准差。默认情况下,仅在输出要素类中保留具有指定关系的目标要素(内部连接)。如果选中保留所有目标要素,则所有输入目标要素将写入输出要素类(这种情况称为左外连接)。
您可以选择使用连接条件参数来构建表达式以连接要素。如果指定了表达式,则只会使用符合条件的要素。例如,使用 $target["Magnitude"] > $join["Explosion"] 表达式时,如果目标要素大于字段名称为 Explosion 的连接要素,则只能通过 Magnitude 字段连接目标要素。有关详细信息,请参阅连接要素表达式。
在运行一对多连接时,输出要素中包括以下字段:
- 目标图层中的所有字段
- 连接图层中的所有字段
如果目标和连接数据集中存在相同的字段名称,则所连接字段将以单词 join 开头(例如 join_fieldname)。
字段名称 说明 start_datetime
该字段表示开始时间,且将在输入的时间设置为时刻或间隔时创建。
end_datetime
该字段表示结束时间,且将在输入的时间设置为间隔时创建。
除了目标图层中的所有字段之外,在运行一对一连接时,输出要素中还将包含以下字段:
字段名称 说明 count
已连接的要素计数。
statistic_fieldname
指定的统计信息将各自创建一个属性字段,并按照以下格式命名:statistic_fieldname。例如,id 字段的最大值和标准差为 MAX_id 和 SD_id。
start_datetime
该字段表示开始时间,且将在输入的时间设置为时刻或间隔时创建。
end_datetime
该字段表示结束时间,且将在输入的时间设置为间隔时创建。
您可以执行以下一项或多项操作来提高重新构建轨迹工具的性能。
- 设置范围环境,以便仅分析感兴趣的数据。
- 使用平面方法而不是测地线方法。
- 请勿应用缓冲区。
- 可以使用时间分割、时间界限分割、距离分割或分割表达式参数来分割轨迹。时间界限分割参数对性能的提高最大。
- 将本地数据用于分析运行的位置。
类似的分析也可使用分析工具箱中的空间连接工具来完成。
此地理处理工具由 ArcGIS GeoAnalytics Server 作为支持。分析将在 GeoAnalytics Server 上完成,且结果将存储在 ArcGIS Enterprise 的内容中。
当 GeoAnalytics Server 工具运行时,GeoAnalytics Server 上的分析已完成。要获得最佳性能,通过 ArcGIS Enterprise 门户上托管的要素图层或通过大数据文件共享,可以将数据用于 GeoAnalytics Server。在分析开始之前,非 GeoAnalytics Server 本地数据将被转移到您的 GeoAnalytics Server。这意味着运行工具需要更长时间,并且在某些情况下,从 ArcGIS Pro 到 GeoAnalytics Server 移动数据可能会失败。失败的阈值取决于网络速度,以及数据的大小和复杂性。因此,建议您始终共享数据或创建大数据文件共享。
语法
arcpy.geoanalytics.JoinFeatures(target_layer, join_layer, output_name, join_operation, {spatial_relationship}, {spatial_near_distance}, {temporal_relationship}, {temporal_near_distance}, {attribute_relationship}, {summary_fields}, {join_condition}, {data_store}, {keep_all_target_features})
参数 | 说明 | 数据类型 |
target_layer | 包含目标要素。目标要素的属性和已连接要素的属性将传递到输出。 | Record Set |
join_layer | 包含连接要素。连接要素的属性将被连接到目标要素的属性中。有关连接操作的类型对所连接属性聚合的影响的详细信息,请参阅连接操作(Python 中的 join_operation)参数的说明。 | Record Set |
output_name | String | |
join_operation | 指定当多个连接要素与单个目标要素之间存在同一空间关系时,如何在输出中处理 target_layer 值和 join_layer 值之间的连接。
| String |
spatial_relationship (可选) | 指定将用于空间连接要素的条件。
| String |
spatial_near_distance (可选) |
与目标要素的距离,在此距离内将有可能使用连接要素进行空间连接。仅当 spatial_relationship 参数值为 NEAR 或 NEAR_GEODESIC 时,搜索半径才有效。 | Linear Unit |
temporal_relationship (可选) | 指定将用于匹配要素的时间条件。
指定将用于匹配要素的时间条件。
| String |
temporal_near_distance (可选) |
与目标要素的时间距离,其中将考虑使用连接要素来进行空间连接。时间仅在 temporal_relationship 参数值为 NEAR、NEAR_BEFORE 或 NEAR_AFTER 且两个要素均已启用时间时才有效。 | Time Unit |
attribute_relationship [attribute_relationship,...] (可选) | 基于属性字段内值的连接要素。指定目标图层中与连接图层中的属性字段匹配的属性字段。
| Value Table |
summary_fields [summary_fields,...] (可选) | 将根据指定字段进行计算的统计数据。
| Value Table |
join_condition (可选) | 将条件应用到指定字段。将仅连接带有符合这些条件的字段的要素。 例如,如果连接图层中的 HealthSpending 属性比目标图层中的 Income 属性大 20%,则可将连接条件应用到要素。在 10.5 和 10.5.1 版本中,用于应用此表达式的连接条件为 join["HealthSpending"] > target["Income"] * .2。在 10.6 及更高版本中,请使用 Arcade 表达式,例如 $join["HealthSpending"] > $target["Income"] * .2。 | String |
data_store (可选) | 指定将用于保存输出的 ArcGIS Data Store。默认为 SPATIOTEMPORAL_DATA_STORE。在时空大数据存储中存储的所有结果都将存储在 WGS84 中。在关系数据存储中存储的结果都将保持各自的坐标系。
| String |
keep_all_target_features (可选) | 指定是在输出要素类中保留所有目标要素(称为左外连接),还是仅保留与连接要素具有指定关系的目标要素(内部连接)。
| Boolean |
派生输出
名称 | 说明 | 数据类型 |
output | 连接的输出。 | 记录集 |
代码示例
以下独立脚本演示了如何使用 JoinFeatures 工具。
# Name: JoinFeatures.py
# Description: Join crime events that are close together in time and space, and
# return the count of nearby crimes. This example is a self join
# (joining the same layer to itself).
# Requirements: ArcGIS GeoAnalytics Server
# Import system modules
import arcpy
# Set local variables
inFeatures = "https://MyGeoAnalyticsMachine.domain.com/geoanalytics/rest/services/DataStoreCatalogs/bigDataFileShares_Crimes/BigDataCatalogServer/Chicago"
spatialOperation = "NEAR"
nearDistance = "1 Kilometers"
temporalOperation = "NEAR"
nearTime = "3 Hours"
outFS = "CloseCrimes"
dataStore = "SPATIOTEMPORAL_DATA_STORE"
# Execute Join Features
arcpy.geoanalytics.JoinFeatures(inFeatures, inFeatures, outFS, "JOIN_ONE_TO_ONE",
spatialOperation, nearDistance, temporalOperation,
nearTime, None, None, None, dataStore)
环境
- 输出坐标系
将用于分析的坐标系。除非由该参数进行指定,否则将基于输入坐标系完成分析。对于 GeoAnalytics 工具,最终结果将存储于 WGS84 中的时空数据存储之内。
许可信息
- Basic: 需要 ArcGIS GeoAnalytics Server
- Standard: 需要 ArcGIS GeoAnalytics Server
- Advanced: 需要 ArcGIS GeoAnalytics Server