ArcGIS for Desktop

  • 文档
  • 合约
  • 支持

  • My Profile
  • 帮助
  • Sign Out
ArcGIS for Desktop

ArcGIS Online

专为贵组织打造的制图平台

ArcGIS for Desktop

全面的专业性 GIS

ArcGIS for Server

面向企业的 GIS

ArcGIS for Developers

用于构建位置感知应用程序的工具

ArcGIS Solutions

适用于行业的免费模板地图和应用程序

ArcGIS Marketplace

获取适用于组织的应用程序和数据

  • 文档
  • 合约
  • 支持
Esri
  • 登录
user
  • 我的个人资料
  • 登出

帮助

  • 主页
  • 入门
  • 制图
  • 分析
  • 管理数据
  • 工具
  • 更多...

空间连接

  • 摘要
  • 用法
  • 语法
  • 代码实例
  • 环境
  • 许可信息

摘要

根据空间关系将一个要素类的属性连接到另一个要素类的属性。目标要素和来自连接要素的被连接属性写入到输出要素类。

查看描述空间关系的图形示例

用法

  • 空间连接是指根据要素的相对空间位置将连接要素中的行匹配到目标要素中的行。

  • 默认情况下,连接要素的所有属性会被追加到目标要素的属性中并复制到输出要素类。通过在连接要素的字段映射参数中控制写入到输出中的属性,可以对其进行定义。

  • 始终会向输出要素类添加两个新字段 Join_Count 和 TARGET_FID。其中,Join_Count 指示与各个目标要素 (TARGET_FID) 相匹配的连接要素数量。

    在连接操作参数中指定 JOIN_ONE_TO_MANY 时,将另一个新的字段 JOIN_FID 添加到输出。

  • 当连接操作参数为 JOIN_ONE_TO_MANY 时,输出要素类中的每个目标要素都可以包含一个或多个行。使用 JOIN_FID 字段更易于确定所连接的要素与目标要素 (TARGET_FID) 的具体对应关系。JOIN_FID 字段的值为 -1,表示没有任何要素符合与目标要素存在的指定空间关系。

  • 将所有输入目标要素写入到输出要素类的前提是:

    • 将连接操作设置为 JOIN_ONE_TO_ONE,
    • 并且选中保留所有目标要素(Python 中为 join_type = "KEEP_ALL")。

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

  • 将匹配选项设置为 CLOSEST 或 CLOSEST_GEODESIC 时,可能会出现两个或多个连接要素与目标要素距离相等的情况。如果发生这种情况,将随机选择其中一个连接要素作为匹配要素(连接要素的 FID 对随机选择过程没有影响)。如果要查找排在第 2 位、第 3 位或第 N 位的最近要素,请使用生成近邻表工具。

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

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

  • 有关使用三维空间关系 INTERSECT_3D 和 WITHIN_A_DISTANCE_3D 的详细信息,请参阅按 3D 位置关系选择。

语法

SpatialJoin_analysis (target_features, join_features, out_feature_class, {join_operation}, {join_type}, {field_mapping}, {match_option}, {search_radius}, {distance_field_name})
参数说明数据类型
target_features

目标要素的属性和被连接要素的属性被传递到输出要素类。但是,可以在字段映射参数中定义属性的子集。

Feature Layer
join_features

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

Feature Layer
out_feature_class

包含目标要素和连接要素的属性的新要素类。默认情况下,目标要素的所有属性和被连接要素的属性都被写入到输出。但是,可通过字段映射参数来控制要传递的属性集。

Feature Class
join_operation
(可选)

在具有相同空间关系的目标要素和连接要素之间存在一对多关系时,确定输出要素类中目标要素和连接要素之间的连接方式。

  • JOIN_ONE_TO_ONE —如果找到与同一目标要素存在相同空间关系的多个连接要素,将使用字段映射合并规则对多个连接要素中的属性进行聚合。例如,如果在两个独立的面连接要素中找到了同一个点目标要素,将对这两个面的属性进行聚合,然后将其传递到输出点要素类。如果一个面要素的属性值为 3,另一个面要素的属性值为 7,且指定了“总和”合并规则,则输出要素类中的聚合值将为 10。这是默认设置。
  • JOIN_ONE_TO_MANY —如果找到多个与同一目标要素存在相同空间关系的连接要素,输出要素类将包含目标要素的多个副本(记录)。例如,如果在两个独立的面连接要素中找到了同一个点目标要素,则输出要素类将包含目标要素的两个副本:分别包含两个面的属性。
String
join_type
(可选)

确定是在输出要素类中保留所有目标要素(称为外部连接),还是仅保留那些与连接要素有指定空间关系的目标要素(称为内部连接)。

  • KEEP_ALL —在输出中保留所有目标要素(外部连接)。这是默认设置。
  • KEEP_COMMON — 在输出要素类中仅保留那些与连接要素有指定空间关系的目标要素(内部连接)。例如,如果将某个点要素类指定为目标要素,将某个面要素类指定为连接要素,并选择 match_option = "WITHIN",则输出要素类将仅包含那些位于面连接要素内部的目标要素,非连接要素内部的目标要素将被从输出中排除。
Boolean
field_mapping
(可选)

控制输出要素类中要包含的属性字段。初始列表包含目标要素和连接要素中的所有字段。可以添加、删除、重命名字段或更改字段的属性。目标要素中的所选字段按原样传递,但连接要素中的所选字段可能会根据合并规则进行聚合。有关字段映射的详细信息,请参阅使用字段映射控件和将输入字段映射到输出字段。可以指定多个字段和统计数据组合。

Field Mappings
match_option
(可选)

定义用于匹配行的条件。匹配选项包括:

  • INTERSECT —如果连接要素与目标要素相交,将匹配连接要素中相交的要素。这是默认设置。在 search_radius 参数中指定距离。
  • INTERSECT_3D — 如果连接要素中的要素与三维空间(x、y 和 z)中的某一目标要素相交,则将匹配这些要素。在 search_radius 参数中指定距离。
  • WITHIN_A_DISTANCE —如果连接要素在目标要素的指定距离之内,将匹配处于该距离内的要素。在 search_radius 参数中指定距离。
  • WITHIN_A_DISTANCE_GEODESIC —与 WITHIN_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_GEODESIC —与 CLOSEST 相同,不同之处在于采用测地线距离而非平面距离。如果您的数据涵盖较大地理范围或输入的坐标系不适合进行距离计算,请选择此项
String
search_radius
(可选)

如果连接要素与目标要素的距离在此范围内,则有可能进行空间连接。仅当将空间关系(匹配选项)指定为 INTERSECT、WITHIN_A_DISTANCE、WITHIN_A_DISTANCE_GEODESIC、HAVE_THEIR_CENTER_IN、CLOSEST 或 CLOSEST_GEODESIC 时,搜索半径才有效。当搜索半径设为 100 米时,使用空间关系 WITHIN_A_DISTANCE 将会连接距离目标要素 100 米以内的要素。对于这三种 WITHIN_A_DISTANCE 关系而言,如果未指定搜索半径的值,则距离将为 0。

Linear unit
distance_field_name
(可选)

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

String

代码实例

空间连接 (SpatialJoin) 示例 1(Python 窗口)

以下脚本演示了如何在 Python 窗口中使用空间连接 (SpatialJoin) 函数。

import arcpy

target_features = "C:/data/usa.gdb/states"
join_features = "C:/data/usa.gdb/cities"
out_feature_class = "C:/data/usa.gdb/states_cities"

arcpy.SpatialJoin_analysis(target_features, join_features, out_feature_class)
空间连接 (SpatialJoin) 示例 2(独立脚本)

以下独立脚本演示了如何使用空间连接 (SpatialJoin) 将城市的属性连接到州。

# Name: SpatialJoin_Example2.py
# Description: Join attributes of cities to states based on spatial relationships.
# Requirements: os module

# Import system modules
import arcpy
import os

# Set local variables
workspace = r"C:\gpqa\mytools\spatialjoin\usa.gdb"
outWorkspace = r"C:\gpqa\mytools\spatialjoin\output.gdb"
 
# Want to join USA cities to states and calculate the mean city population
# for each state
targetFeatures = os.path.join(workspace, "states")
joinFeatures = os.path.join(workspace, "cities")
 
# Output will be the target features, states, with a mean city population field (mcp)
outfc = os.path.join(outWorkspace, "states_mcp2")
 
# Create a new fieldmappings and add the two input feature classes.
fieldmappings = arcpy.FieldMappings()
fieldmappings.addTable(targetFeatures)
fieldmappings.addTable(joinFeatures)
 
# First get the POP1990 fieldmap. POP1990 is a field in the cities feature class.
# The output will have the states with the attributes of the cities. Setting the
# field's merge rule to mean will aggregate the values for all of the cities for
# each state into an average value. The field is also renamed to be more appropriate
# for the output.
pop1990FieldIndex = fieldmappings.findFieldMapIndex("POP1990")
fieldmap = fieldmappings.getFieldMap(pop1990FieldIndex)
 
# Get the output field's properties as a field object
field = fieldmap.outputField
 
# Rename the field and pass the updated field object back into the field map
field.name = "mean_city_pop"
field.aliasName = "mean_city_pop"
fieldmap.outputField = field
 
# Set the merge rule to mean and then replace the old fieldmap in the mappings object
# with the updated one
fieldmap.mergeRule = "mean"
fieldmappings.replaceFieldMap(pop1990FieldIndex, fieldmap)
 
# Delete fields that are no longer applicable, such as city CITY_NAME and CITY_FIPS
# as only the first value will be used by default
x = fieldmappings.findFieldMapIndex("CITY_NAME")
fieldmappings.removeFieldMap(x)
y = fieldmappings.findFieldMapIndex("CITY_FIPS")
fieldmappings.removeFieldMap(y)
 
#Run the Spatial Join tool, using the defaults for the join operation and join type
arcpy.SpatialJoin_analysis(targetFeatures, joinFeatures, outfc, "#", "#", fieldmappings)

环境

  • 当前工作空间
  • 临时工作空间
  • 输出坐标系
  • 地理变换
  • 范围
  • M 分辨率
  • M 容差
  • 输出 M 属性域
  • 输出 XY 属性域
  • 输出 Z 属性域
  • 输出包含 M 值
  • 默认输出 Z 值
  • 输出包含 Z 值
  • XY 分辨率
  • XY 容差
  • Z 分辨率
  • Z 容差

许可信息

  • ArcGIS for Desktop Basic: 是
  • ArcGIS for Desktop Standard: 是
  • ArcGIS for Desktop Advanced: 是

相关主题

  • 叠加分析工具集概述
  • 按要素类型划分的空间关系
  • 按位置选择:图形示例
有关此主题的反馈?

ArcGIS for Desktop

  • 主页
  • 文档
  • 合约
  • 支持

ArcGIS 平台

  • ArcGIS Online
  • ArcGIS for Desktop
  • ArcGIS for Server
  • ArcGIS for Developers
  • ArcGIS Solutions
  • ArcGIS Marketplace

关于 Esri

  • 关于我们
  • 招贤纳士
  • 内部人员博客
  • 用户大会
  • 开发者峰会
Esri
© Copyright 2016 Environmental Systems Research Institute, Inc. | 隐私政策 | 法律声明