汇总基于两个要素类中要素之间的空间关系将属性从一个要素类传递到另一个要素类用法· 此工具用于在要素类之间传递属性字段只要找到指定的空间关系(或匹配选项),就会将连接要素的属性添加到目标要素中例如,如果将某个点要素类指定为目标要素,将某个面要素类指定为连接要素,并选择 WITHIN 作为匹配选项,则每个输出点要素除包含其自身原始属性外,还将包含其所在面的属性· 默认情况下,即使未发现连接要素和目标要素之间存在任何空间关系,所有输入目标要素也都将保留在输出要素类中此操作被视为外部连接如果输出要素类中的目标要素只能与一个或多个连接要素存在空间关系(内部连接),请将保留所有目标要素参数设置为 KEEP_COMMON(未选中)· 连接要素的字段映射参数中的合并规则仅适用于连接要素中的字段,且仅在使用 JOIN_ONE_TO_ONE 类型的连接操作时可用对目标要素中的字段应用合并规则或连接操作为 JOIN_ONE_TO_MANY 时,将忽略合并规则· 始终会向输出要素类中添加名为 Join_Count 的新字段此字段表示连接到各个输入目标要素的连接要素的数量语法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 Layerjoin_features只要找到指定的空间关系(或匹配选项),就会将“连接要素”的属性传递到“目标要素”连接要素”可以是 ArcGIS 支持的任意空间数据源Feature Layerout_feature_class该新要素类包含连接到“目标要素”的“连接要素”的属性Feature Classjoin_operation(可选)用于在找到多个与同一“目标要素”存在相同空间关系的“连接要素”时确定输出要素类中“目标要素”和“连接要素”的连接方式例如,如果在两个独立的面“连接要素”中找到了同一个点“目标要素”,则可以选择使用“字段映射”合并规则 (JOIN_ONE_TO_ONE) 对两个面的属性进行聚合,也可以选择在输出中存在两个“目标要素”实例,分别包含两个面的属性 (JOIN_ONE_TO_MANY)· JOIN_ONE_TO_ONE —如果找到多个与同一“目标要素”存在相同空间关系的“连接要素”,将使用“字段映射”合并规则对多个“连接要素”中的属性进行聚合例如,如果在两个独立的面“连接要素”中找到了同一个点“目标要素”,将对这两个面的属性进行聚合,然后将其传递到输出要素类。
如果一个面的属性值为 3,另一个面的属性值为 7,且指定了“总和”合并规则,则输出要素类中的聚合值将为 10JOIN_ONE_TO_ONE 为默认选项· JOIN_ONE_TO_MANY —如果找到多个与同一“目标要素”存在相同空间关系的“连接要素”,输出要素类将包含多个“目标要素”实例例如,如果在两个独立的面“连接要素”中找到了同一个点“目标要素”,则输出要素类将存在两个“目标要素”实例,分别包含两个面的属性Stringjoin_type(可选)确定是在输出要素类中保留所有“目标要素”(外部连接),还是仅保留那些与“连接要素”有指定空间关系的“目标要素”(内部连接)· KEEP_ALL —将在输出中保留所有“目标要素”(外部连接)这是默认设置· KEEP_COMMON — 仅在输出要素类中保留那些与“连接要素”有指定空间关系的“目标要素”(内部连接)例如,如果将某个点要素类指定为“目标要素”,将某个面要素类指定为“连接要素”,并选择“WITHIN”作为匹配选项,则输出要素类将仅包含那些位于面“连接要素”中的“目标要素”,非“连接要素”内部的“目标要素”将被排除Booleanfield_mapping(可选)控制输出要素类中要包含的属性字段。
可以添加、删除、重命名字段或更改字段的属性初始列表既包含“目标要素”中的字段,也包含“连接要素”中的字段Field Mappingsmatch_option(可选)定义用于匹配行的条件只要找到该空间关系(或匹配选项),就会将“连接要素”的属性传递到“目标要素”匹配选项包括:· INTERSECT:如果“目标要素”与“连接要素”相交,则将“连接要素”的属性传递到“目标要素”· CONTAINS:如果“目标要素”包含“连接要素”,则将“连接要素”的属性传递到“目标要素”对于此选项,“目标要素”不能为点,且仅当“目标要素”为面时“连接要素”才能为面· WITHIN:如果“目标要素”位于“连接要素”内部,则将“连接要素”的属性传递到“目标要素”对于此选项,“连接要素”不能为点,且仅当“连接要素”为面时“目标要素”才能能为面· CLOSEST:将最近“连接要素”的属性传递到“目标要素”Stringsearch_radius(可选)如果“连接要素”与“目标要素”的距离在此范围内,则将进行空间连接仅当将空间关系(或匹配选项)指定为 INTERSECT 或 CLOSEST 时,搜索半径才有效空间关系为 INTERSECT 时使用 100 米作为搜索半径表示:如果“连接要素”位于“目标要素”周围的 100 米范围内,则将“连接要素”的属性传递到“目标要素”。
空间关系为 CLOSEST 时使用 100 米作为搜索半径表示:如果“连接要素”位于“目标要素”周围的 100 米范围内,并且是距该“目标要素”最近的“连接要素”,则将“连接要素”的属性传递到“目标要素” Linear unitdistance_field_name(可选)向输出要素类中添加的字段的名称,用于包含“目标要素”和最近“连接要素”之间的距离仅当将空间关系(或匹配选项)指定为 CLOSEST 时,此选项才有效如果未指定字段名称,将不会向输出要素类中添加该字段String代码示例SpatialJoin 示例 1(Python 窗口) 以下脚本演示了如何在 Python 窗口中使用 SpatialJoin 函数import arcpy from arcpy import env arcpy.SpatialJoin_analysis("C:/data/usa.gdb/states', "C:/data/usa.gdb/cities", "C:/data/usa.gdb/states_cities") SpatialJoin 示例 2(独立脚本) 以下独立脚本演示了如何使用 SpatialJoin 将城市的属性连接到州。
Name: SpatialJoin_Example2.py # Description: Join attributes of cities to states based on spatial relationships. # Requirements: os module # Author: ESRI # 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("CIT。