ArcGIS中的Python - 使用文本字段计算字段
我正在尝试在一个属性表中创建并计算一个叫做“得分”的字段。这个得分会根据另外两个字段来决定,分别是“宽度”和“类别”。“宽度”是整数值,而“类别”是文本。得分字段应该根据这两个字段的值来分配一定的分数。
我已经写了一个Python脚本,可以根据“宽度”的值来给得分赋值。但是,当我尝试把“类别”作为一个参数添加进去时,总是出现错误信息,提示参数无效。
下面的代码只使用了“宽度”,运行是成功的:
expression = "getClass(float(!Width!))"
codeblock = """def getClass(wd):
if wd<=450:
return 1
elif wd>450 and wd<900:
return 2
else:
return 3"""
arcpy.AddField_management("featurelayer", "Score", "SHORT")
而这段代码加入了“类别”作为参数,但却无法正常工作:
expression = "getClass(!Width!,!Category!)"
codeblock = """def getClass(wd,cat):
if wd<=35:
return 1
elif wd<90 and cat=='RED':
return 2
else:
return 3"""
arcpy.AddField_management("featurelayer", "Score", "SHORT")
谢谢!
***我确实尝试过将第二段代码中的两个参数进行转换 - 我对两个参数都用了float(),对“类别”用了str(),因为它是文本字段。但都没有成功,错误信息也不是很具体:“执行getClass()失败”
***“类别”字段已经完全填充(要么是'红色',要么是'蓝色')
1 个回答
0
在ArcMap的字段计算器中,使用表达式和代码块的方法是必须的,但在写Python脚本时就不需要这样做了。
可以试试UpdateCursor。 这样写起来更容易理解,也更容易找出问题。
arcpy.AddField_management("featurelayer", "Score", "SHORT")
updateFields = ["Width", "Category", "Score"]
with arcpy.da.UpdateCursor("featurelayer", updateFields) as cursor:
for row in cursor:
if row[0] <= 35:
row[2] = 1
elif row[0] < 90 and row[1] == 'RED':
row[2] = 2
else:
row[2] = 3
cursor.updateRow(row)