空间连接 (分析)

摘要

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

用法

语法

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

目标要素的属性和被连接要素的属性被传递到输出要素类。但是,可以在字段映射参数中定义属性的子集。目标要素可以是 ArcGIS 支持的任意空间数据源。

Feature Layer
join_features

连接要素的属性将被连接到目标要素的属性中。有关连接操作的类型对被连接属性聚合的影响的详细信息,请参阅对连接操作参数的说明。连接要素可以是 ArcGIS 所支持的任意空间数据源。

Feature Layer
out_feature_class

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

Feature Class
join_operation
(可选)

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

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

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

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

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

Field Mappings
match_option
(可选)

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

  • INTERSECT:如果连接要素与目标要素相交,将匹配连接要素中相交的要素。这是默认设置。
  • CONTAINS:如果目标要素中包含连接要素中的要素,将匹配连接要素中被包含的要素。对于此选项,目标要素不能为点,且仅当目标要素为面时连接要素才能为面。
  • WITHIN:如果目标要素位于连接要素内,将匹配连接要素中包含目标要素的要素。对于此选项,连接要素不能为点,且仅当连接要素为面时目标要素才能为面。
  • CLOSEST:匹配连接要素中与目标要素最近的要素。可能会出现两个或多个连接要素与目标要素距离相等的情况。如果发生这种情况,将随机选择其中一个连接要素作为匹配要素。
String
search_radius
(可选)

如果连接要素与目标要素的距离在此范围内,则有可能进行空间连接。仅当“匹配选项”指定为 INTERSECT 或 CLOSEST 时,搜索半径才有效。在“匹配选项”为 INTERSECT 时使用 100 米作为搜索半径表示:如果连接要素位于目标要素周围的 100 米范围内,则将连接要素的属性传递到目标要素。在“匹配选项”为 CLOSEST 时使用 100 米作为搜索半径表示:如果连接要素位于目标要素周围的 100 米范围内,并且是距该目标要素最近的连接要素,则将连接要素的属性传递到该目标要素。

Linear unit
distance_field_name
(可选)

添加到输出要素类中的字段的名称,其中包含目标要素和最近连接要素之间的距离。只有将“匹配选项”指定为 CLOSEST 时此选项才有效。如果不希望显示任何输出字段,可以将此参数留空。

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)

环境

相关主题

许可信息

ArcView: 是
ArcEditor: 是
ArcInfo: 是

7/10/2012