import arcpy # 输入参数 input_features = arcpy.GetParameterAsText(0) # 连接要素 join_field = arcpy.GetParameterAsText(1) # 连接字段 target_feature = arcpy.GetParameterAsText(2) # 目标要素 target_field = arcpy.GetParameterAsText(3) # 目标字段 area_threshold = arcpy.GetParameterAsText(4) # 面积阈值 # 创建空间连接 arcpy.SpatialJoin_analysis(input_features, target_feature, "in_memory/spatial_join", "JOIN_ONE_TO_ONE", "KEEP_ALL", "", "INTERSECT") # 选择面积大于阈值的连接要素 arcpy.Select_analysis("in_memory/spatial_join", "in_memory/selected_features", "Shape_Area > " + area_threshold) # 统计相同连接字段值的面积总和 arcpy.Statistics_analysis("in_memory/selected_features", "in_memory/summarized_features", "Shape_Area SUM", join_field) # 创建字典,存储连接字段值和对应的面积总和 sum_dict = {} with arcpy.da.SearchCursor("in_memory/summarized_features", [join_field, "SUM_Shape_Area"]) as cursor: for row in cursor: sum_dict[row[0]] = row[1] # 更新目标要素中的字段值 with arcpy.da.UpdateCursor(target_feature, [target_field, join_field]) as cursor: for row in cursor: join_value = row[1] if join_value in sum_dict: area_sum = sum_dict[join_value] row[0] = str(area_sum) cursor.updateRow(row) # 导出结果 arcpy.CopyFeatures_management(target_feature, arcpy.GetParameterAsText(5))运行出现错误Traceback (most recent call last): File "D:\实验2\空间连接.py", line 13, in <module> File "c:\program files (x86)\arcgis\desktop10.2\arcpy\arcpy\analysis.py", line 84, in Select raise e ExecuteError: ERROR 000358: 无效的表达式 Shape_Area > 600 执行(Select)失败。 执行(fzzz)失败。,请改正代码
时间: 2023-12-03 18:45:14 浏览: 99
这个错误是因为在使用 `arcpy.Select_analysis` 时,选择条件 `"Shape_Area > " + area_threshold` 不正确。可以尝试将其改为 `"\"Shape_Area\" > " + str(area_threshold)"`,即:
```
arcpy.Select_analysis("in_memory/spatial_join", "in_memory/selected_features", "\"Shape_Area\" > " + str(area_threshold))
```
其中,`\"Shape_Area\"` 用于表示字段名为 Shape_Area,`str(area_threshold)` 用于将输入的面积阈值转换为字符串类型。
相关问题
import arcpy # 设置工具箱参数 input_features = arcpy.GetParameterAsText(0) # 输入要素图层 join_features = arcpy.GetParameterAsText(1) # 连接要素图层 output_features = arcpy.GetParameterAsText(2) # 输出要素图层 join_fields = arcpy.GetParameterAsText(3).split(';') # 连接要素图层中需要赋值的字段,用“;”隔开 area_threshold = arcpy.GetParameterAsText(4) # 面积阈值,只有面积大于该值的要素才会被连接 # 创建空间连接对象 spatial_join = arcpy.SpatialJoin_analysis(target_features=input_features, join_features=join_features, out_feature_class=output_features, join_operation="JOIN_ONE_TO_MANY", join_type="KEEP_ALL", match_option="INTERSECT") # 根据面积阈值进行筛选 if len(area_threshold) > 0: arcpy.SelectLayerByAttribute_management(in_layer_or_view=spatial_join, where_clause="Shape_Area >= {}".format(area_threshold)) # 设置字段映射 field_mapping = arcpy.FieldMappings() for field in join_fields: field_map = arcpy.FieldMap() field_map.addInputField(spatial_join, field) output_field = field_map.outputField output_field.name = "{}_{}".format(join_features, field) field_map.outputField = output_field field_mapping.addFieldMap(field_map) # 对要素进行赋值 arcpy.FeatureClassToFeatureClass_conversion(spatial_join, output_features, "", field_mapping)运行错误:IndentationError: unexpected indent (空间连接.py, line 17) 执行(空间连接多对一)失败。请改正代码
这个错误通常是由于代码缩进不正确导致的。在你的代码中,第17行有一个额外的缩进,需要将其删除。请使用以下代码:
```python
import arcpy
# 设置工具箱参数
input_features = arcpy.GetParameterAsText(0) # 输入要素图层
join_features = arcpy.GetParameterAsText(1) # 连接要素图层
output_features = arcpy.GetParameterAsText(2) # 输出要素图层
join_fields = arcpy.GetParameterAsText(3).split(';') # 连接要素图层中需要赋值的字段,用“;”隔开
area_threshold = arcpy.GetParameterAsText(4) # 面积阈值,只有面积大于该值的要素才会被连接
# 创建空间连接对象
spatial_join = arcpy.SpatialJoin_analysis(target_features=input_features, join_features=join_features, out_feature_class=output_features, join_operation="JOIN_ONE_TO_MANY", join_type="KEEP_ALL", match_option="INTERSECT")
# 根据面积阈值进行筛选
if len(area_threshold) > 0:
arcpy.SelectLayerByAttribute_management(in_layer_or_view=spatial_join, where_clause="Shape_Area >= {}".format(area_threshold))
# 设置字段映射
field_mapping = arcpy.FieldMappings()
for field in join_fields:
field_map = arcpy.FieldMap()
field_map.addInputField(spatial_join, field)
output_field = field_map.outputField
output_field.name = "{}_{}".format(join_features, field)
field_map.outputField = output_field
field_mapping.addFieldMap(field_map)
# 对要素进行赋值
arcpy.FeatureClassToFeatureClass_conversion(spatial_join, output_features, "", field_mapping)
```
import arcpy# 输入参数 input_features = arcpy.GetParameterAsText(0) # 连接要素 join_field = arcpy.GetParameterAsText(1) # 连接字段 target_feature = arcpy.GetParameterAsText(2) # 目标要素 target_field = arcpy.GetParameterAsText(3) # 目标字段 area_threshold = arcpy.GetParameterAsText(4) # 面积阈值 # 创建空间连接 arcpy.SpatialJoin_analysis(input_features, target_feature, "in_memory/spatial_join", "JOIN_ONE_TO_ONE", "KEEP_ALL", "", "INTERSECT") # 选择面积大于阈值的连接要素 arcpy.Select_analysis("in_memory/spatial_join", "in_memory/selected_features", ""Shape_Area" > " + str(area_threshold)) # 统计相同连接字段值的面积总和 arcpy.Statistics_analysis("in_memory/selected_features", "in_memory/summarized_features", "Shape_Area SUM", join_field) # 创建字典,存储连接字段值和对应的面积总和 sum_dict = {} with arcpy.da.SearchCursor("in_memory/summarized_features", [join_field, "SUM_Shape_Area"]) as cursor: for row in cursor: sum_dict[row[0]] = row # 更新目标要素中的字段值 with arcpy.da.UpdateCursor(target_feature, [target_field, join_field]) as cursor: for row in cursor: join_value = row[1] if join_value in sum_dict: area_sum = sum_dict[join_value] row[0] = str(area_sum) cursor.updateRow(row) # 导出结果 arcpy.CopyFeatures_management(target_feature, arcpy.GetParameterAsText(5))运行上面代码出现错误:SyntaxError: invalid syntax (空间连接.py, line 11) 执行(fzzz)失败。请改正出完整的代码
import arcpy
# 输入参数
input_features = arcpy.GetParameterAsText(0)
# 连接要素
join_field = arcpy.GetParameterAsText(1)
# 连接字段
target_feature = arcpy.GetParameterAsText(2)
# 目标要素
target_field = arcpy.GetParameterAsText(3)
# 目标字段
area_threshold = arcpy.GetParameterAsText(4)
# 面积阈值
# 创建空间连接
arcpy.SpatialJoin_analysis(input_features, target_feature, "in_memory/spatial_join", "JOIN_ONE_TO_ONE", "KEEP_ALL", "", "INTERSECT")
# 选择面积大于阈值的连接要素
arcpy.Select_analysis("in_memory/spatial_join", "in_memory/selected_features", "\"Shape_Area\" > " + str(area_threshold))
# 统计相同连接字段值的面积总和
arcpy.Statistics_analysis("in_memory/selected_features", "in_memory/summarized_features", "Shape_Area SUM", join_field)
# 创建字典,存储连接字段值和对应的面积总和
sum_dict = {}
with arcpy.da.SearchCursor("in_memory/summarized_features", [join_field, "SUM_Shape_Area"]) as cursor:
for row in cursor:
sum_dict[row[0]] = row[1]
# 更新目标要素中的字段值
with arcpy.da.UpdateCursor(target_feature, [target_field, join_field]) as cursor:
for row in cursor:
join_value = row[1]
if join_value in sum_dict:
area_sum = sum_dict[join_value]
row[0] = str(area_sum)
cursor.updateRow(row)
# 导出结果
arcpy.CopyFeatures_management(target_feature, arcpy.GetParameterAsText(5))
阅读全文