冯 阳,夏照华,苏慧敏,丁 聪,王 红(北京地拓科技发展有限公司,北京 100084)
基于ARCGIS和PYTHON的水蚀野外调查单元的质量控制方法
冯 阳,夏照华,苏慧敏,丁 聪,王 红
(北京地拓科技发展有限公司,北京 100084)
水蚀;调查单元;质量控制;ARCGIS;PYTHON
水蚀野外调查单元是全国第一次水利普查水土保持情况普查抽样调查的基本单元,调查单元提交成果的质量状况直接影响数据分析阶段的工作量与效率。本次普查覆盖范围广,抽样调查单元数量巨大,采用传统人工整理数据上报容易出错。基于 ARCGIS 与 PYTHON 语言,详细介绍了水蚀野外调查单元在资料准备阶段与数据处理阶段的质量控制方法。通过编写批处理脚本程序,实现调查单元四级存放目录的建立,矢量、栅格、文本等数据的分发,以及调查表到 GIS 数据属性表的转换等工作。在关键环节引入批处理脚本程序对质量进行控制,可解放人力,提高工作效率并可保证数据质量。
2010—2012年我国开展了全国第一次水利普查水土保持情况普查[1]。在本次普查中,采用抽样调查的方法来调查抽样单元的土壤侵蚀因子状况[2]。在全国范围内采用分层不等概系统抽样方法确定野外调查单元,共按照4%、1%、0.25%和0.062 5%四种密度抽样,最终在全国布设了32 364个水蚀野外调查单元[3]。对于大量的野外调查单元,采用传统人工整理数据工作量大,且容易造成文件夹四级目录下的文件存放混乱。
虽然在全国第一次水利普查水土保持情况普查时,相关技术支撑单位开发了相关软件来进行质量控制,但这属于事后检查,一旦发现问题,后期需投入大量的人力进行核查与修订,有时甚至会影响解译整体进度。如果能在事前预防,就能在实施前期发现问题、解决问题,从而节省宝贵的时间。因此,本研究基于 ARCGIS 平台,采用 PYTHON 脚本语言,对质量控制环节中的部分工序编写批处理脚本来实现,该脚本语言的扩充性好、要求门槛不高,省级普查员后期也可根据需要灵活扩充。
为提高水蚀野外调查单元的质量,水利部组织编写了《水力侵蚀普查数据质量审核工作手册》,规定了资料准备阶段、野外调查阶段、数据处理阶段的审核内容与工作流程。对审核内容进行分析,并结合实际工作,可在资料准备阶段与数据处理阶段引入批处理脚本程序进行控制。下面将资料准备阶段与数据处理阶段质量控制的关键内容整理如下。
在资料准备阶段,《水力侵蚀普查数据质量审核工作手册》主要是从数据存放的规范性、完整性等进行了要求,具体包括:①四级存储目录名称、位置正确;②调查单元数量与规定数量一致,避免出现遗漏;③四级目录包含的 basic、shp 文件夹,必须用小写字母,basic文件夹存放 dt1.jpg、dt1.pdf、水蚀野外调查表.xls,shp文件夹必须包含bjx、dgx、bjxp、dgxp、gl、sx、jmdd等shp文件,文件必须完整、可读写、存放位置正确。
在数据处理阶段的审核除要求数据存放的完整性、规范性外,还对部分GIS 数据的属性内容进行了要求,具体包括:①四级存储目录名称、位置正确,调查单元数量与规定的数量一致;②basic 文件夹下除包含资料准备阶段的数据外,需增加外业调查照片和录入调查信息后的水蚀野外调查表,补充清绘图扫描文件(qht.jpg)到每个调查单元对应的basic文件夹中;③在shp文件夹下,新增调查地块空间数据dkmp.shp,地块图层中须包含调查表中的全部信息,共计18个属性字段,属性字段名称与类型须与要求一致,属性字段内容须与调查表中完全一致。等高线文件(dgxp.shp)的高程信息存储字段名称必须为“高程”,字段类型为双精度浮点型。
根据调查单元各阶段质量控制的内容与审核要点,不同阶段的质量控制技术也有所不同:在资料准备阶段主要是通过编写 PYTHON批处理脚本来实现四级存储目录的自动创建、空间数据与文档数据的分发等;在数据处理阶段主要是新增GIS 空间数据质量控制的脚本程序。
(1)针对在资料准备阶段要求的四级目录完整、调查单元存放位置正确等要求,可通过四级目录自动创建程序来实现。具体实现方法:①将所有调查单元整合到一个图层,图层包含一个属性字段,用于存储调查单元的编号;②编写 PYTHON 脚本程序,导入需要的系统模块与 ARCGIS相关模块;③设置调查单元图层路径与四级目录存放位置;④使用gp.searchcursor()函数查找并打开shp 图层,获取每一条记录,遍历每一条记录,读取调查单元编号,通过编号解析出省代码、县代码与调查单元编号,自动构建每一个调查单元需要建立的文件夹目录;⑤通过append()函数将解析的目录信息依次追加到一个指定变量;⑥调用操作系统的makedirs()函数创建所需目录。水蚀野外调查单元四级存储目录创建程序见图1(电脑屏幕截图,下同)。
图1 四级目录创建程序示意
(2)为解决各类空间数据与文档数据在对应数据目录中准确存放的问题,分别针对空间数据与文档数据编写不同的程序。其中,空间数据主要是调用 ARCGIS 的相关函数来实现自动复制与分发,文档数据主要是调用操作系统的相关函数来实现文档的复制。
空间数据的分发程序实现流程:①将需要分发的文件存放在一个文件夹下,图层名称中含有调查单元编号,每个调查单元一个图层;②使用ARCGIS的ListFeatureClasses()函数,获取待分发数据文件夹下的每一个 GIS 图层,以此作为循环控制条件,依次解析每一个调查单元的编号、省代码、县代码,构造空间数据文件名称及存放路径并复制到普查四级目录相应位置;③使用exists()函数判断需要复制的文件是否存在,如存在需先调用delete()删除存在的空间数据,然后再使用 copy()复制空间数据,如不存在,则直接复制。空间数据分发程序见图2。
图2 空间数据分发程序示意
文档数据分发程序的实现流程:①设置普查成果四级存储目录、调查单元底图存放文件夹,每个调查单元一个文件,文件命名规范,须包含调查单元编号;②使用 os.walk()获取普查目录下的目录与文件,依次循环查找到 basic 文件夹;③根据 basic 文件夹所在的上级目录,获取调查单元编号,构造需要复制的底图文件的名称与路径;④使用 shutil.copy()进行文件的复制,复制时可一并修改复制后的文件名称。文档数据分发程序详细代码见图3。
图3 文档数据分发程序示意
在数据处理阶段,常规的文件分发程序可直接使用资料准备阶段的空间与文档数据分发程序,同时需要新增部分对 GIS 数据内容的控制程序。
(1)为保证地块图层文件(dkmp.shp)中属性字段的名称与类型满足要求,可对每一个调查单元一次性增加所需字段。为保证地块图层边界与调查单元边界图层外边界一致,在清绘图矢量化时直接采用“多边形切割功能”对调查单元边界图层进行切割,从而生成地块图层。
属性字段增加程序实现流程:①编写脚本程序,一次性导入所需外部模块,如 arcpy、sys、os 等;②设置需要增加字段的地块图层文件所在的文件夹,文件夹下存放全部调查单元的地块图层,每个调查单元一个图层,图层名称包含调查单元编号信息;③通过ListFeatureClasses()函数获取需要增加字段的所有调查单元,以此作为循环条件,依次对每个调查单元增加属性字段;④使用AddField_management()函数依次增加土地利用名称、代码、郁闭度、盖度等17个属性字段。属性字段增加详细程序如图4所示。
图4 属性字段增加程序示意
(2)野外调查属性值录入。在数据处理阶段,要求将水蚀野外调查表中的信息逐条、逐字段录入到地块图层失量数据对应的属性表中,采用传统人工逐数据项录入或逐表整理后关联写入比较繁琐,容易出错,存在信息漏录、错录的风险。因此,可编写批处理程序来实现,具体实现流程:①设置地块图层空间数据存放文件夹,并将其设置为ARCGIS 环境变量,设置需要导入的水蚀野外调查表存放的路径,地块图层与调查表之间可通过调查单元编号建立对应关系;②调用ListFeatureClasses()函数获取每一个地块图层,依次循环,通过地块图层文件名解析调查单元编号,再通过调查单元编号查找到对应的野外调查表格;③调用xlsapp.Workbooks.Open()打开野外调查表,调用xlsbook.Sheets(1).UsedRange.Rows.count和xlsbook.Sheets(1).UsedRange.Columns.count分别获取野外调查表格有效区域的行与列;④使用野外调查表格行数量作为子循环控制条件,逐项读取信息,使用xlssheet.Cells(行,列).Value获取单元格数据值;⑤通过调查表中“地块编号”字段与空间数据中“地块编号”字段建立一一对应关系,逐行将每个单元格的信息写入到 shp 文件;⑥使用UpdateCursor()函数更新地块图中的属性信息。外业调查表格信息导入程序部分代码见图5所示。
图5 外业调查表格信息导入程序示意
通过分析水蚀野外调查单元质量控制各环节的审核内容,结合 ARCGIS 与 PYTHON 脚本语言,从调查单元存储目录的建立、文件型数据的分发、空间数据的分发、空间数据属性信息的导入等环节引入批处理程序。批处理程序的引入,能有效保证水蚀野外调查单元在资料准备阶段与数据处理阶段的质量。基于 PYTHON 语言的批处理程序的扩展无须专业的程序员,省级普查员可根据当地业务开展的实际需求,引入新的控制环节来提高工作效率与成果质量。本次介绍的质量控制技术全面应用于北京市第一次水务普查水土保持专项普查[4],使用该控制技术,有力地保证了在资料准备阶段和数据处理阶段的成果质量100%满足《水力侵蚀普查数据质量审核工作手册》中规定的要求。
[1] 国务院第一次全国水利普查领导小组办公室.第一次全国水利普查总体方案[M].北京:中国水利水电出版社,2010:1-3.
[2] 李智广,符素华,刘宝元.我国水力侵蚀抽样调查方法[J].中国水土保持科学,2012,10(1):77-81.
[3] 刘宝元,郭索彦,李智广,等.中国水利侵蚀抽样调查[J].中国水土保持,2013(10):26-34.
[4] 北京市第一次水务普查工作领导小组办公室.北京市第一次水务普查实施方案[R].北京:北京市水务局,2011:9-10.
TP79;S157
A
1000-0941(2018)01-0055-03
冯阳(1986—),男,安徽六安市人,工程师,硕士,研究方向为水土保持遥感监测、信息化。
2017-06-27
(责任编辑 李杨杨)