APP下载

基于ArcGIS 的ArcPy 开发处理地理信息数据应用研究实践

2020-02-06秦荣波QINRongbo

价值工程 2020年35期
关键词:批量脚本数据处理

秦荣波QIN Rong-bo

(贵州省第一测绘院,贵阳550000)

0 引言

在数据建库过程中,常常会面临着收集到来自多个部门的数据,这些数据格式种类繁多,需要按照入库要求制作成具有统一字段,或者统一删除某个不符要求值情况,而野外采集用于内业处理的数据需要制作为统一规格,满足规定格式的数据。在这些实际数据生产过程,无论是地理信息系统开发人员,还是测绘数据生产人员都免不了数据批处理。过去凭借大量人力的数据生产模式逐渐被计算机批量处理所代替。借助于ArcGIS Desktop 桌面软件提供的ArcPy 脚本开发,可满足日常地理信息数据批量数据处理。

1 ArcPy 开发简介

1.1 ArcPy 功能

ArcPy 是用pyhon 语言封装的处理地理数据站点包,分有类和函数[1]。ArcPy 提供了访问与处理空间数据,地图制图模块,具有处理矢量与栅格数据,执行处理任务接口,有制图、网络分析、空间分析等功能。ArcPy 遵循python 语言语法,开发人员可使用ArcGIS Desktop 自带开发环境,或者将站点包导入到第三方python 程序编辑器对ArcPy进行开发。

1.2 ArcPy 开发现状

Esri 公司开发的ArcGIS Desktop 软件提供一系列开发接口,可供使用人员依据实际项目需要定制数据处理功能,有多种计算机语言开发接口支持,主要为C#、python。在日常开发中基于C#开发主要表现在ArcEngine 二次开发,基于Addin 插件开发,而python 则表现在ArcPy 开发。虽然利用C#语言开发,可提供了丰富的二次开发接口,但需要使用者事先掌握C#语言。相比较而言,python 语言易于学习,使用python 的ArcPy 开发容易入门。ArcPy 提供一系列和ArcToolBox 类似功能的地理信息数据处理接口,能快速满足功能实现。凭借ArcPy 自身特点,ArcPy 已经用于全国国土三调与地理国情项目[2,3],也可以实现TPK地图数据包批量制作[4]。

2 ArcPy 开发应用

2.1 需求分析

在测绘地理信息各种项目实施过程中,数据往往会遇到这样的特点。一是数据量大,重复工作。在国土三调项目中,以县为单位进行数据处理,会有遇到将全县各个区域分幅影像合并或者按照全县各个行政村裁剪影像的应用场景。人工的对数据量庞大影像合并或者裁剪可借助ArcGIS Desktop 提供的影像融合或者裁剪工具一一按照要求,重复点击工具,最后处理成达到目标要求的数据,但这面临着机械重复同一工作的问题。二是批量数据处理功能需求往往不太复杂,工作简单。从批量的影像裁剪或者融合情景可以看得出,只是调用ArcPy 提供的裁剪或者融合函数即可。再如在其他场景有这样的应用,从读取csv格式经纬度坐标数据,利用ArcPy 创建带有空间参考的shapefile 矢量点数据文件。同时也会出现结合excel 提取报表数据,利用ArcPy 将属性值添加到shapefile 中。总体来说,功能需求不太复杂,结合ArcPy 提供的接口能满足需求。

2.2 ArcPy 编写方式

依据日常测绘地理信息数据批处理的特点,可以选择python 作为编程语言开发相应的功能。Esri 公司提供多种基于python 开发模式。①使用模型构建器的功能实现。由ArcGIS Desktop 软件界面的地理工具栏选择模型构建器,选择提供的for,while,要素选择、行选择、表、工作空间等迭代器,设置输入参数变量、数据类型等。同时,可以将ArcToolbox 工具箱中的工具直接拖拽至模型编辑面板作为需要开发功能的一部分或者全部,经过一系列组装以及模型验证后,基于模型构建器开发模式就完成功能编写。该种开发模式可直接拖拽模型,相对而言比较简单,但对于要求比较灵活的功能而言,不易于实现。②基于ArcGIS自带的Python Shell 编辑ArcPy 脚本。在Shell 开发编辑器可以直接调用开发接口,开发人员根据列出开发接口直接选择ArcPy 函数。但在开发界面不易于脚本编写,初学者往往容易在编写脚本过程中出现错误。③使用添加脚本方式。编写代码使用Shell 界面或者其他编辑工具来编写。代码编写完成之后,当脚本功能中有参数时可从ArcGIS Desktop 添加脚本,同时设置相应参数类型等信息即可。④通过pycharm 或者vscode 等工具编写脚本。该种方式利用第三方开发编辑器,便于代码编写。如使用pycharm 来编写ArcPy 脚本可在ArcGIS Desktop 右侧目录中选择脚本开发所在的目录,新建python 工具箱,软件自动创建pyt后缀文件。如图1 所示,最后利用pycharm 导入pyt 后缀文件,编写输入参数以及执行函数,就完成了整个ArcPy 脚本开发。该开发方式较为直观,符合一般计算机软件开发习惯。用户可以根据自己的开发特点选择合适开发方式。

图1 pycharm 的ArcPy 开发环境

2.3 实际功能实现

根据项目需要,利用pycharm 搭建ArcPy 开发环境,直接接入ArcPy 接口。本次实现的功能是遍历shapefile 每一条面记录,逐条读出每个面数据,通过面数据与影像数据利用裁剪函数进行裁剪,最后得到经过shapefile 记录中与面相交裁剪后的多个裁切影像。编码之前,首先需要配置好pycharm 下ArcPy 站点包开发环境,在ArcGIS Desktop 目录连接脚本目录所在位置,创建好python 工具箱,之后就可编写脚本代码。脚本主体需要利用到属性遍历函数,裁切函数。主要功能代码如下所示:

依据功能需求,在构造裁剪函数时,需要特别注意裁剪区域。裁剪的面不规则,故需要按照几何图形进行裁剪。pycharm 完成主体代码编写后,封装为一个完整功能函数。在pyt 文件中编写好参数的显示名称、参数数据类型等,在执行函数中可调用封装好的功能函数。在ArcGIS Desktop 引用代码文件,工具界面如图2 所示。为了便于工具功能说明清晰明了,可以在ArcGIS Desktop 中编辑工具的子项描述,依据需要对工具名称、参数描述、参考代码进行编写具体说明。最后该工具可以用于将shapefile 矢量面数据逐条读取,将每条数据与tif 格式影像相交并裁剪出相交区域,用该条记录设置的某一个字段的对应字段值作为影像数据的文件名称实现成果输出。

图2 批量裁剪影像工具

2.4 应用分析

使用ArcPy 开发出的工具与ArcGIS Desktop 桌面软件紧密结合,即便不了解开发的数据生产者只需要将开发代码文件拷贝到特定目录即可运行使用。项目应用了某县行政区域矢量数据与影像实现一键成果正确输出,省去测绘室内重复工作,减少人工干预,提高工作效率。

3 总结

本文介绍了ArcPy 基本概念与目前在测绘地理信息数据生产过程中批量开发应用,指出基于ArcPy 开发特点,说明了ArcPy 编写方式,用户根据实际需要选择开发模式。同时使用一个例子说明Arcpy 开发应用,从中可以发现基于ArcPy 在地理信息数据处理中的开发的是重新整合开发接口与实际项目逻辑。虽然ArcPy 在地理信息数据批量处理过程中有着不可替代作用,但也存在着不利于界面交互,接口细粒度远不如基于C#的ArcGIS 开发的不足。在地理信息数据处理中目前主流的ArcPy 开发是基于ArcGIS10.X Desktop 系列,封装的站点包使用了python2,而ArcGIS Pro 提供的ArcPy 开发接口使用python3 封装,相比ArcGIS10.X 的ArcPy 而言,ArcGIS Pro 提供了更加丰富的开发接口,因此这需要使用者去深入学习与了解,并加以应用。

猜你喜欢

批量脚本数据处理
酒驾
认知诊断缺失数据处理方法的比较:零替换、多重插补与极大似然估计法*
ILWT-EEMD数据处理的ELM滚动轴承故障诊断
批量提交在配置分发中的应用
安奇奇与小cool 龙(第二回)
数据库系统shell脚本应用
快乐假期
基于希尔伯特- 黄变换的去噪法在外测数据处理中的应用
浅议高校网银批量代发
基于AUTOIT3和VBA的POWERPOINT操作题自动批量批改