本节将介绍在ArcGIS中如何将三调中的土地利用分类转换为土地管理中的三大类。
问题
问题
:现有一个区域的三调数据,如何从中提取出对应的建设用地数据
细路
:本质上也是一个分类问题,根据两个分类对应关系,建立分类规则,是上一节ArcGIS | 01小技巧-矢量按某个字段重分类的延申
三调地类与三大类对应关系
关键:建立两个用地类型的对应关系
关于三调中的土地利用现状分类与土地管理中的三大类分类(农用地、建设用地、未利用地)的对应关系,主要依据为国标文件,然后后面又对部分地类代码进行调整细化,具体如下:
- 首先是国标文件-土地利用现状分类
- 其次,后又发布相关工作方案调整文件等,如下图所示,对05地类进行细化调整
按照最新调整后的用地分类标准,可知建设用地主要包括以下地类代码:
建设用地 = ['05','06','07','08','09','10'(除去1006村路),'1109','1201']
步骤
字段计算器-Python
- 新建三大类字段,然后运行以下代码,即可提取三调中的建设用地地类,具体如下:
# 提取建设用地
def converse(dlbm):
jsyd=['05H1','0508','0601','0602','0603','0701','0702','08H1','08H2','0809','0810','0901','0902','0903','0904','0905','0906','1001','1002','1003','1004','1005','1007','1008','1009','1109','1201']
if dlbm in jsyd:
return "建设用地"
else:
return "非建用地"
2. 结果如下图:
4. 基于提取建设用地步骤,添加农用地和未利用地对应关系即可实现三调地类转换为三大类:
# 转为三大类
def converse(dlbm):
jsyd = ['05H1','0508','0601','...']
nyd = ['0101','0102','0103','...']
wlyd = ['1101','1102','1105','...']
if dlbm in jsyd:
return "建设用地"
elif dlbm in "nyd":
return "农用地"
elif dlbm in wlyd:
reutrn "未利用地"
else:
return dlbm
将.py代码生成工具箱
代码包装成工具:新建工具箱-添加脚本
# 制作工具箱 注意编码问题
# -- coding:cp936 -*-
from imp import reload
import sys
reload(sys)
sys.setdefaultencoding("UTF-8")
import arcpy
inTable = arcpy.GetParameterAsText(0) # 输入
fieldvalue = arcpy.GetParameterAsText(1) # dlbm
fieldName = arcpy.GetParameterAsText(2) # 三大类
expression_1 = "converse(!"+fieldvalue+"!)"
codeblock_1 = """
def converse(dlbm):
jsyd = ['05H1','0508','0601','0602','0603','0701','0702','08H1','08H2','0809','0810','0901','0902','0903','0904','0905','0906','1001','1002','1003','1004','1005','1007','1008','1009','1109','1201']
if dlbm in jsyd:
return u"建设用地"
else:
return u"非建设用地"
"""
arcpy.CalculateField_management(inTable, fieldName, expression_1, "PYTHON_9.3", codeblock_1)
结果如下,依次输入数据和对应的字段即可:
参考资料
# 部分参考资料
https://openstd.samr.gov.cn/bzgk/gb/index
https://zrzyt.ah.gov.cn/xwdt/bzyw/114063281.html
https://www.edrawmax.cn/templates/file/1027920
https://www.docin.com/p-2147263041.html
下一节预告
本节通过ArcGIS-Python实现三调地类向三大类的转换。下一节,可能是多个数据库的合并或标记某个字段下重复的行。