APP下载

基于Python的地理信息数据批处理方法研究

2023-03-21徐邦岁魏春玲

资源导刊(信息化测绘) 2023年1期
关键词:数据格式数据处理代码

徐邦岁 魏春玲

(1.响水县土地勘测有限公司,江苏 盐城 224600;2.响水县自然资源和规划局,江苏 盐城 224600)

1 引言

近年来,随着经济社会的高速发展,我国陆续推进了“数字城市”“智慧城市”建设,以及国土调查、地理国情普查、房地一体不动产确权登记等一系列国家级项目,随着这些重大项目的开展,测绘事业得到了快速发展,基层测绘单位开展了大量测绘活动,形成了海量的多源多维地理信息数据,由此,怎样科学精准地管理这些数据成为当前亟待解决的问题。

日常地理信息数据管理工作通常使用ArcGIS 软件处理各种相关任务,其中有大量重复性工作,比如数据格式转换、数据拼接与裁切、数据输出与保存等[1]。人工操作这些重复性工作容易出错,效率低下,难以保证数据成果质量,由此,寻求一种高效快捷的批量处理方法极为重要。Python 作为ArcGIS 支持的一种脚本语言,功能强大、简单易学,在数据批处理方面具有明显优势[2]。自ArcGIS 9.0 版本引入Python 后,逐渐得到广大地理信息数据处理用户的关注,并取得快速发展,之后ArcGIS 的每个版本都进一步增强了Python 体验,为用户提供了更加丰富、友好、更多功能性的体验,用它编写脚本程序是解决地理信息数据自动化批量处理的有效方法。本文结合工作实践,利用Python 语言编写代码,通过调用第三方数据处理包以及自带的标准库,实现了三个地理信息数据批处理方面的应用,提高了数据处理的准确度和工作效率。

2 Python 及其特点

Python 是由荷兰的计算机和数学家吉多·范罗苏姆设计出的一种跨平台的计算机程序设计语言,最早出现于1990 年代,开始只被当作取代ABC(一种分布式操作系统)的脚本语言[3],但不久后这种新型编程语言就被引入其他平台,尤其成为了学习数据科学、虚拟现实和人工智能方面首选的一门编程语言。

Python 具有以下优势:易于学习,适合初学者;可伸缩程度高,适用于大型项目或小型的一次性程序(称为脚本);可移植,跨平台;可嵌入ArcGIS;稳定成熟;用户社区规模大[4]。美国ESRI 公司已将Python 完全纳入ArcGIS,从ArcGIS 10 开始,ESRI采用ArcPy(通常称为ArcPy 站点包),为用户提供了使用Python 语言操作所有地理信息数据处理工具(包括扩展模块)的机会,并提供多种有用的函数和类,用于处理和询问GIS 数据。使用Python 和ArcPy,可以开发出数量无限的可处理地理数据的实用程序。

3 应用实例

地理信息数据管理工作常常涉及空间数据格式转换、数据拼接与裁切、数据输出与保存等步骤,下面具体说明使用Python 实现这三个功能的过程。

3.1 空间数据格式转换

笔者曾遇到一套采用国标NSDTF 格式的DEM 数据(如图1 所示),其能使用文本格式保存,也可使用记事本打开查看,但ArcGIS 软件却不支持该格式的文件,需将其转换为ESRI ASCII 格式才能正常使用。常规思路是将NSDTF 格式的DEM 数据通过人工修改来转换,工作量大且容易出错。若利用Python 强大的文本处理能力来编写脚本程序,可实现全自动化数据格式转换,工作效率将大大提高,并能保证数据转换质量。

图1 NSDTF_DEM数据

在编写空间数据格式转换程序前,查阅了相关资料了解NSDTF 文件头的定义,其文件格式的定义如下:

DataMark:格网数据交换格式-中国地球空间数据交换格式(CNSDTF-RAS 或CNS-DTF-DEM)的标志。

Version:空间数据交换格式的版本号,如1.0。

Unit:坐标单位,K 是公里,M 是米,D 是以度为单位的经纬度,S 是以度分秒表示的经纬度(坐标格式为DDDMMSS.SSSS,DDD 为度,MM 为分,SS.SSSS 为秒)。

Alpha:方向角。Compress:压缩方法,0 表示不压缩,1 表示游程编码。Xo:左上角原点X 坐标。Yo:左上角原点Y 坐标。DX:X 方向的间距。DY:Y 方向的间距。Row:行数。Col:列数。

HZoom:高程放大倍率,设置高程的放大倍率,使高程数据以整数形式来存储,例如,高程精度精确到厘米,则高程的放大倍率为100。

ESRI ASCII 栅格格式可与其他基于像元或栅格的系统进行信息传输,其文件头的格式说明如表1 所示。

表1 ESRI ASCII文件头说明

Python 有强大的文本处理能力,其附带的os 模块可加载多种功能完善的文件操作函数,因此对于Python 来说,将DEM 转换为ESRI ASCII 格式非常简单,短短几十行脚本代码就能轻松实现,具体源代码如下:

图2 脚本运行过程

3.2 数据拼接与裁切

数据拼接与裁切的实现步骤为:首先将要拼接的数据转换成统一格式(例如mdb 格式),再将数据进行坐标变换,统一到同一个投影坐标系,以便后续处理。根据不同项目的需求,规范数据的各要素集和属性字段的名称、类型等;其次创建一个空数据库,该数据库的要素集只含项目需要的要素集,不必是分幅数据中所有要素集,要素集的各属性字段须和分幅数据完全相同 ;最后,进行数据拼接并输出报告。部分代码如下:

成果数据库中需要的要素集列表

fileList = os.listdir(datadir)#分幅数据目录中的所有文件

幅数据中的要素集列表

数据拼接后,还需使用作业区域界线(一般为县界)进行裁切,同样,通过整合后的标准分幅数据,如交通、水利普查等数据,由于范围较广、数据层较多、数据量大等,也要使用作业区域进行裁切。若用人工裁切,需耗费大量时间,因此,可使用Python 编程实现自动处理。需注意,数据工作空间中的每层要素都要遍历,然后使用裁切范围线进行自动裁切,主要代码如下:

遍历要素层

范围裁切要素层位接图表数据库,提取每一个图廊要素,作为裁切范围。

3.3 数据输出与保存

日常工作中地理信息从业者常常需要把mxd 格式的地图文档输出为pdf 格式文件,ArcGIS 10 以后的版本都提供了Arcpy.mapping 这样一个Python 脚本模块,该模块可随着ArcGIS for Desktop 一同安装,利用Arcpy.mapping 模块编程可将地图文档输出为pdf格式,也可实现地图文档图层数据源的更新、修复或替换、图层符号系统更新、文本字符串修改等功能。

如果是单个mxd 文件输出,在Arc-Map 的Python窗口中输入两行代码就可实现,代码如下:

同时,也可在上述代码中加入output-PDF.appendPages(str(PDFPath)),实现把一个pdf 文件追加到另一个多页pdf 文件中。

4 结束语

随着大数据时代的到来,更加多源、海量、复杂的地理信息数据也会随之而来[5],如何快速、高效地处理和利用这些数据,是地理信息工作者面临的问题。Python 简单易学,在数据自动化处理方面非常强大,熟练掌握并利用好Python 语言,对减轻工作人员的劳动强度、提高数据处理的效率和准确率有重大意义。

猜你喜欢

数据格式数据处理代码
认知诊断缺失数据处理方法的比较:零替换、多重插补与极大似然估计法*
ILWT-EEMD数据处理的ELM滚动轴承故障诊断
创世代码
创世代码
创世代码
创世代码
世界首个可记录物体内部结构等复杂信息的3D打印数据格式问世
基于希尔伯特- 黄变换的去噪法在外测数据处理中的应用
论子函数在C语言数据格式输出中的应用
基于ArcGIS的规划数据格式转换研究