用Python来写arcgis的字段计算器,根据行政区划来给字段赋值,Python要注意格式的问题,
1.Python与其他语言最大的区别就是,Python的代码块不使用大括号{}来控制类,函数以及其他逻辑判断。python最具特色的就是用缩进来写模块。 缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。
2.Python中默认的编码格式是 ASCII格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。
解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*- 就行了。但是在arcgis里的脚本编辑域编码格式是不可更改的,因此这句话没效果。需要在字符串前面加上u才行。
3.Python的字符串必须用双引号扩起。
4.Python的变量必须用!!扩起。
不多说了,不上代码的技术博主都不是好大夫。
示例,根据北京市的行政区划名称来确定行政区划编码,ABCD为参数名,可以自行更换。
代码块:
def Reclass(ABCD):
if (ABCD == u"东城区"):
return 110101
elif (ABCD == u"西城区"):
return 110102
elif (ABCD == u"朝阳区"):
return 110105
elif (ABCD == u"丰台区"):
return 110106
elif (ABCD == u"石景山区"):
return 110107
elif (ABCD == u"海淀区"):
return 110108
elif (ABCD == u"门头沟区"):
return 110109
elif (ABCD == u"房山区"):
return 110111
elif (ABCD == u"通州区"):
return 110112
elif (ABCD == u"顺义区"):
return 110113
elif (ABCD == u"昌平区"):
return 110114
elif (ABCD == u"大兴区"):
return 110115
elif (ABCD == u"怀柔区"):
return 110116
elif (ABCD == u"平谷区"):
return 110117
elif (ABCD == u"密云区"):
return 110228
elif (ABCD == u"密云县"):
return 110228
elif (ABCD == u"延庆区"):
return 110229
elif (ABCD == u"延庆县"):
return 110229
elif (ABCD == u"亦庄经济开发区"):
return 110230
else :
return 110000
上面的代码格式都是严格控制了,有类似需要的可以直接复制,改一改就能用了。
这里要说明两点:1.else是必不可少的。2.别忘了加冒号。
在下面你要赋值的字段处调用上面定义的函数,然后传参就可以了,我这里做个示例:
Reclass(!NAME!)