基于Python的ArcGIS(Arcpy)数据检查技术应用

2021-07-15 08:23:02赵军鹏
河北林业科技 2021年2期
关键词:林带字段进程

赵军鹏,刘 军

(河北省林业和草原调查规划设计院,河北 石家庄050051)

地理空间数据质量的检查一般包括两种:数据拓扑关系检查和数据逻辑一致性检查。数据拓扑关系检查既包括单个图层的拓扑检查也包括多个图层之间的拓扑检查;数据逻辑一致性检查主要是根据属性表中各字段本身或相互之间的各种逻辑关系,检查各项数据是否正确。检查的方法有很多,对于大批量的数据,通常使用两种方法:单进程和多进程批量处理。这里以河北省森林资源调查数据为例,介绍使用Arcpy对数据进行检查的方法。

1 Python及Arcpy简介

Python程序设计语言的设计哲学是“简单”、“明确”、“优雅”,它既有简单脚本语言和解释型程序语言的易用性,也拥有传统编译型程序语言所有强大通用的功能,另外它还是一种解释型的、面向对象的、带有动态语义的高级程序设计语言。Python语法严格、可读性强、易于学习,提供了非常完善的基础代码库,同时又拥有大量的第三方库用来实现各种功能,具有很强的移植性,使它成为很多软件平台上开速编写脚本的理想语言。

作为ArcGIS自带的Python站点包,ArcPy降低了ArcGIS开发的门槛,面向的是广泛的应用GIS的专业人员,在ArcToolbox、Model Builder和Desktop定制插件中涌现了众多的脚本,ArcPy成为ArcGIS应用人员扩展自定义功能的首选工具。

ArcPy是一个以arcgisscripting模块为基础并继承了arcgisscripting功能进而构建而成的站点包。目的是为以实用高效的方式通过Python执行地理数据分析、数据转换、数据管理和地图自动化创建基础。Arcpy分为大模块,数据访问模块,制图模块,Network Analyst模块,Spatial Analyst模块,时间模块。用ArcPy编写的ArcGIS应用程序可以使用多个不同领域的GIS专业人员和程序员组成的众多Python小群体开发的附加模块。

2 任务分析

河北省森林资源调查数据的基础数据包括两个矢量图层:小班层和林带层。由于具有拓扑信息的矢量数据对GIS中的网络分析以及空间关系分析非常重要,所以必须对矢量图层进行拓扑关系检查。拓扑关系检查需要对小班层和林带层分别建立拓扑关系,小班层需要检查各个小班是否有重叠,是否存在空隙;林带层只检查是否有重叠。数据逻辑一致性检查要根据《河北省森林规划调查技术细则》,检查属性表中二十几个字段的值是否正确及字段间逻辑关系是否一致;小班层和林带层还要检查在森林面积统计中是否存在重复部分。

3 任务实现

3.1 数据拓扑关系检查

空间数据检查的流程如下:

新建一个文件地理数据库(GDB)→新建一个要素数据集(需要选择投影坐标系)→导入要检查的矢量数据→新建拓扑(在选择拓扑目标时选择上一步导入的数据)→添加拓扑规则→验证拓扑→在ArcGIS软件中显示所有错误并修改→小班和林带相交检查→导出矢量数据。完整的技术路线如图1所示。

图1 空间数据检查技术路线

3.2 数据逻辑一致性检查

游标(Cursor)是包括表格或要素类中的一行或多行数据的内存对象,每一行都包含数据源中每个字段的属性和每个要素的几何特征。

数据逻辑一致性检查的方法是使用游标对属性表逐行检查,根据表中各列之间的逻辑关系判断是否存在错误,并把错误原因写到“错误”字段中。

新建“错误”字段→更新面积(对面积小于667m2的小班归并到临近小班)→查看字段是否存在→判断地类的值是否正确→清洗数据,清除某些地类中一些字段的多余值→根据逻辑关系逐行查错→统计错误数量并报告→修改错误,并再次检查,直到错误统计为0。完整的技术路线图如图2所示。

图2 数据逻辑一致性检查技术路线

3.3 大量数据逻辑一致性检查的实现方法

3.3.1 使用单进程批量处理 在ArcMap中将所有需要进行逻辑一致性检查的数据放到mxd文档中,在工具箱中创建脚本,数据类型选择“ArcMap文档”,运行脚本时选择mxd文档,即可实现对文档内所有图层的批量处理。

编写脚本时,首先导入ArcPy、os模块及相关附属工具,并对工作环境进行初始化设置,核心代码如下:

#-*-coding:utf-8-*-

import sys,os,arcpy

reload(sys)

sys.setdefaultencoding(′utf-8′)

arcpy.env.overwriteOutput=True

然后定义一个函数AttributeChecking(fc),作为数据检查的主函数,在主函数下建立若干个子函数分别实现创建字段,计算面积,补全字段,数据清洗,逻辑检查等功能,在main函数下引用此函数。批处理的核心代码如下:

mxd0=arcpy.mapping.MapDocument(′CURRENT′)

df=arcpy.mapping.ListDataFrames(mxd0,"")[0]

inlayer=arcpy.mapping.ListLayers(mxd0,"",df)

for fc in inlayer:

AttributeChecking(fc)

3.3.2 使用多进程处理 首先把所有的shapefile文件放到一个文件夹中。然后在python中新建一个列表,把所有文件的路径全部放到列表中shape-FileList,核心代码如下:

Import os,arcpy,multiprocessing

arcpy.env.workspace="D:\H"

shapeFileList=[]

featureclasses=arcpy.ListFeatureClasses()

for file in featureclasses:

fullpath=os.path.join("D:\H\",file)

再建立进程池,使用异步非阻塞的方式处理数据。

MyGPool=multiprocessing.Poo(l)

# 多进程并行处理

for sf in shapeFileList:

MyGPool.apply_async(AttributeChecking,(sf,))

MyGPool.close()

MyGPool.join()

4 运行环境

以上计算基于如下运行环境:

1) 中央处理器 CPU Intel(R)Xeon E5507(2.26GHz/4M)

2)内存:32G

3)操作系统:Win7 64bit操作系统

4)应用软件:ArcGIS 10.2,Python2.7.3,Pycharm 2019

5 结束语

Python语言作为一种面向对象的、开放的解释型脚本语言,功能强大而又易于学习,基于其开发的Arcpy站点包与ArcGIS系统实现的高度集成。利用ArcPy对数据整理检查能提高工作效率,减轻工作量,且能保证计算准确。对于大量数据的计算或检查,使用多进程能充分发挥电脑的机器性能,节省时间,但如果少量数据的话,单进程批量处理速度更快。

猜你喜欢
林带字段进程
图书馆中文图书编目外包数据质量控制分析
债券市场对外开放的进程与展望
中国外汇(2019年20期)2019-11-25 09:54:58
打造珍贵彩色林带 建设浙中生态廊道
浙江林业(2017年8期)2017-11-13 03:31:46
公路绿化带降噪效果初步研究
天津科技(2015年8期)2015-06-27 06:33:38
CNMARC304字段和314字段责任附注方式解析
无正题名文献著录方法评述
建设防护林体系的作用与意义
社会进程中的新闻学探寻
民主与科学(2014年3期)2014-02-28 11:23:03
关于CNMARC的3--字段改革的必要性与可行性研究
图书馆建设(2014年3期)2014-02-12 15:41:35
我国高等教育改革进程与反思
教育与职业(2014年7期)2014-01-21 02:35:04