Arcgis如何使用三调数据统计土地三大类
背景
三调数据具有多种用途,国土空间规划需要以三调数据为基础来编制。按照我国《土地管理法》,土地按用途被分为三大类,即农用地、建设用地、未利用地。如何实现三调数据向三大类转换,是分析土地利用变化时不可或缺的一部分。
本文阐述如何用ARCGIS实现三调数据向三大类转换。
基础数据
基础数据为三调数据中的【DLTB】图层,
名称 | 格式 | 坐标系 | 说明 |
---|---|---|---|
DLTB | Shapefile | 未知 | 用于提取三大类数据 |
解决方法
- 使用【添加字段】工具,创建新字段用于存储三大类。
- 使用【字段计算器】工具,设置计算条件,对字段赋值。
工具名称 | 工具位置 |
---|---|
添加字段 | 【属性表】→【表选项】→【添加字段】 |
字段计算器 | 【右键菜单】→【字段计算器】 |
操作步骤
1.新建分类字段
如图所示,打开DLTB图层属性表,添加文本型字段“三大类”。
2. 对字段进行赋值
右击三大类字段,打开【字段计算器】对话框,【解析程序】选择“Python",勾选【显示代码块】;本例按照《第三次全国土地调查工作分类与三大类对照表》中的三调分类与三大类对应规则进行分类,判断代码如下所示:
// 创建函数getClassify
def getClassify(dlbm):
nyd=['0101','0102','0103','0201','0202','0203','0204','0301','0302','0303','0304','0305','0306','0307','0401','0402','0403','1006','1103','1104','1107','1202','1203','1104A']
wlyd=['0404','1101','1102','1105','1106','1108','1110','1204','1205','1206','1207']
if dlbm in nyd:
return "农用地"
elif dlbm in wlyd:
return "未利用地"
else:
return "建设用地"
复制全部代码粘贴至【预逻辑脚本代码窗口中】,然后引用该函数,引用方法为:设置【三大类=】“getClassify(!DLBM!)”,!DLBM!为原属性表的DLBM字段。
点击【确定】,得到赋值完成的“三大类”,赋值结果如下所示:
注:
Python有着严格的代码缩进规则,请严格进行代码的复制粘贴,否则会发生错误,无法生成赋值结果。
请检查对应规则是否更新,如果更新,请参照新规则进行代码修改后再赋值。
以下为建设用地的代码,需要自取:
jsyd=['05H1','0501','0502','0503','0504','0505','0506','0507','0508','0601','0602','0603','0701','0702','08H1','08H2','08H2A','0809','0810','0901','0902','0903','0904','0905','0906','1001','1002','1003','1004','1005','1007','1008','1009','1109','1201','09','0810A','06H1']
2020/12/11
我对代码做了改进,可以直接将未归类的代码输出为“请查询:DLBM",避免了这部分代码直接返回到建设用地中,以下为改进后的代码:
def getClassify(dlbm):
nyd=['0101','0102','0103','0201','0202','0203','0204','0301','0302','0303','0304','0305','0306','0307','0401','0402','0403','1006','1103','1104','1107','1202','1203','1104A']
wlyd=['0404','1101','1102','1105','1106','1108','1110','1204','1205','1206','1207']
jsyd=['05H1','0501','0502','0503','0504','0505','0506','0507','0508','0601','0602','0603','0701','0702','08H1','08H2','08H2A','0809','0810','0901','0902','0903','0904','0905','0906','1001','1002','1003','1004','1005','1007','1008','1009','1109','1201','09','0810A','06H1']
if dlbm in nyd:
return "农用地"
elif dlbm in wlyd:
return "未利用地"
elif dlbm in jsyd:
return "建设用地"
else:
return "请查询:{0}".format(dlbm)