import arcpy # 定义空间连接函数 def spatial_join(input_features, target_features, overlap_threshold, output_features): # 创建空间连接对象 join_operation = "JOIN_ONE_TO_ONE" join_type = "KEEP_ALL" field_mapping = "" match_option = "INTERSECT" search_radius = "" distance_field_name = "" spatial_join = arcpy.SpatialJoin_analysis(input_features, target_features, output_features, join_operation, join_type, field_mapping, match_option, search_radius, distance_field_name) # 过滤结果 overlap_field = "SHAPE@AREA" with arcpy.da.UpdateCursor(spatial_join, overlap_field) as cursor: for row in cursor: if row[0] < overlap_threshold: cursor.deleteRow() del cursor # 设置工具箱参数 input_features = arcpy.GetParameterAsText(0) target_features = arcpy.GetParameterAsText(1) overlap_threshold = arcpy.GetParameterAsText(2) output_features = arcpy.GetParameterAsText(3) # 运行空间连接函数 spatial_join(input_features, target_features, overlap_threshold, output_features) # 完成工具箱输出 arcpy.SetParameterAsText(3, output_features)运行错误:Traceback (most recent call last): File "D:\实验2\空间连接.py", line 30, in <module> NameError: name 'input_features' is not defined 执行(kj)失败。请改正代码
时间: 2023-12-06 11:41:41 浏览: 228
import arcpy
def spatial_join(input_features, target_features, overlap_threshold, output_features):
join_operation = "JOIN_ONE_TO_ONE"
join_type = "KEEP_ALL"
field_mapping = ""
match_option = "INTERSECT"
search_radius = ""
distance_field_name = ""
spatial_join = arcpy.SpatialJoin_analysis(input_features, target_features, output_features, join_operation, join_type, field_mapping, match_option, search_radius, distance_field_name)
overlap_field = "SHAPE@AREA"
with arcpy.da.UpdateCursor(spatial_join, overlap_field) as cursor:
for row in cursor:
if row[0] < overlap_threshold:
cursor.deleteRow()
del cursor
input_features = arcpy.GetParameterAsText(0)
target_features = arcpy.GetParameterAsText(1)
overlap_threshold = float(arcpy.GetParameterAsText(2)) # 将输入转化为浮点数
output_features = arcpy.GetParameterAsText(3)
spatial_join(input_features, target_features, overlap_threshold, output_features)
arcpy.SetParameterAsText(3, output_features)
代码存在两个问题,第一个是函数中的变量无法被调用,在函数外重新定义变量作为参数传入即可解决;第二个是浮点数的输入需要进行类型转化。
阅读全文