1、简述
实验课上,老师让我们依据出台的《国土空间调查、规划、用途管制用地用海分类说明》更改原有三调数据分类名中的属性字段值,
如上图所示,原始的三调数据中的分类名:冰川及永久积累,依据新出台的文件《国土空间调查、规划、用途管制用地用海分类说明》,要求把其改成:冰川及常年积累
由于更改的数量较多,因而选择使用Python批量替换三调数据分类名。
更改结果如下图所示:
2、详细步骤
2.1新建字段
在ArcMap中,插入shapfile文件,然后打开该文件的属性表,添加字段名为DLMC_New,类型为文本,字段属性默认。
2.2 打开字段计算器添加代码
右键新建的字段DLMC_New,打开字段计算器
选中Python,勾选代码块,添加代码,代码在最后,并在DLMC_New= 中插入已经写好的函数func(name),其中的name要换成!DLMC!,即func(!DLMC!)
2.3代码
def func(name):
##附表00湿地
if name==('沼泽地'.decode('utf-8')):
a='其他沼泽地'
return a.decode('utf-8')
##附表01耕地、02种植园用地、03林地、04草地 这里由于内容相同,因此用return name 下文内容相同部分直接省略描述
##05H1商业服务业用地
elif name==('商业服务业用地'.decode('utf-8')):
a='需手动修改'
return a.decode('utf-8')
##0508物流仓储用地
elif name==('物流仓储用地'.decode('utf-8')):
a='需手动修改'
return a.decode('utf-8')
##0601工业用地
elif name==('物流仓储用地'.decode('utf-8')):
a='需手动修改'
return a.decode('utf-8')
##0701城镇住宅用地
elif name==('城镇住宅用地'.decode('utf-8')):
a='需手动修改'
return a.decode('utf-8')
##0702农村宅基地
elif name==('农村宅基地'.decode('utf-8')):
a='需手动修改'
return a.decode('utf-8')
##08H1机关团体新闻出版用地
elif name==('机关团体新闻出版用地'.decode('utf-8')):
a='机关团体用地'
return a.decode('utf-8')
##08H2科教文卫用地
elif name==('科教文卫用地'.decode('utf-8')):
a='需手动修改'
return a.decode('utf-8')
##0809公用设施用地
elif name==('公用设施用地'.decode('utf-8')):
a='需手动修改'
return a.decode('utf-8')
##0810公园与绿地
elif name==('公园与绿地'.decode('utf-8')):
a='需手动修改'
return a.decode('utf-8')
##1001铁路用地
elif name==('铁路用地'.decode('utf-8')):
a='需手动修改'
return a.decode('utf-8')
##1002轨道交通用地
elif name==('轨道交通用地'.decode('utf-8')):
a='城市轨道交通用地'
return a.decode('utf-8')
##1004城镇村道路用地
elif name==('城镇村道路用地'.decode('utf-8')):
a='需手动修改'
return a.decode('utf-8')
##1005交通服务场站用地
elif name==('交通服务场站用地'.decode('utf-8')):
a='需手动修改'
return a.decode('utf-8')
##1006农村道路
elif name==('农村道路'.decode('utf-8')):
a='需手动修改'
return a.decode('utf-8')
##1008港口码头用地
elif name==('港口码头用地'.decode('utf-8')):
a='需手动修改'
return a.decode('utf-8')
##1104沟渠
elif name==('沟渠'.decode('utf-8')):
a='需手动修改'
return a.decode('utf-8')
##1109水工建筑用地
elif name==('水工建筑用地'.decode('utf-8')):
a='水工设施用地'
return a.decode('utf-8')
##1110冰川及永久积雪
elif name==('冰川及永久积雪'.decode('utf-8')):
a='冰川及常年积雪'
return a.decode('utf-8')
##1202设施农用地
elif name==('设施农用地'.decode('utf-8')):
a='需手动修改'
return a.decode('utf-8')
##无此用地用海分类
elif name==('无此用地用海分类'.decode('utf-8')):
a='需手动修改'
return a.decode('utf-8')
else:
return name
须注意的是,由于自己还是个Arcgis菜鸡,刚开始写的时候,代码总是不能运行成功,后发现原来是在Arcgis中,如果没有将文字转为utf-8 就会一直报错,因此需使用转换代码,即:if name==('沼泽地'.decode('utf-8')):