用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.别忘了加冒号。
在下面你要赋值的字段处调用上面定义的函数,然后传参就可以了。