武汉智图科技有限责任公司,湖北武汉 430074
摘要:Python是一种广泛应用于数据分析、数据转换、数据管理的程序设计语言,极大的提高了数据管理的工作效率。本文通过地图输出与保存和空间数据格式转换两个案例,对python在日常地理信息数据管理工作中的具体应用进行了详细的介绍,阐述了其具有简单、快捷、实用的特点。
关键词:python;地理信息数据; 脚本空间数据
1.引言
在日常的地理信息数据管理工作中,我们经常会使用ArcGIS 软件来处理各种与地理信息数据有关的任务,而其中会有大量重复性工作,比如数据格式的转换、地图pdf批量输出、数据裁剪拼接等。机械的、手工的重复性工作方式容易出错,而且工作效率不高,为确保数据处理成果质量,提高工作效率,寻求高效快捷的处理方法极为重要。
ArcGIS软件自9.0起引入Python程序设计语言,在这之后,Python就被看作为可供不同用户选择的用于地理信息处理的脚本语言,并不断得到升级和发展,此后的每一版本中都增加了对Python更加友好丰富的切身体验。如今,Python已在ArcGIS中得到成熟应用,并逐渐成为一种用于地图自动化和地理信息数据分析、数据转换、数据管理的语言,大大提高了地理信息数据管理工作的效率。
2.Python简介
Python 最初设计为一种可以取代Amoeba分布式操作系统ABC的脚本语言,但不久后这种新式编程语言就迅速发展成为能够解决多方面问题的优良工具,发展至今,其已融入到了多种应用平台。在实际应用开发工作中,Python常常用“胶水语言”来形容,因为它能够轻松自如地将各种模块联结在一起,尤其是利用C/C++语言制作的模块。
ESRI已将Python完全纳入ArcGIS中,Python具有以下优势:第一,易于学习,比较适合于初学的人员,而且专业级人物也非常喜欢它;第二,其可伸缩的程度较高,其不仅适用于大型的项目,也适用于小型的一次性脚本程序;第三,其可跨平台使用,不仅可以移植还可以嵌入使用,能使ArcGIS脚本化;第四,用户规模逐渐发展壮大,目前已非常成熟稳定。从ArcGIS 10开始,ESRI采用了ArcPy(通常称作为ArcPy站点包)已为广大用户提供了多种地理信息处理的实用工具,包括使用Python语言扩展各种模块,同时提供了多个实用的用于处理和询问GIS数据的类和函数,因此,利用ArcPy和Python语言能够开发出用于处理地理信息数据的多种实用程序。
3.地理信息数据管理中的应用
3.1地图输出与保存
日常工作中我们可能会做这样一件事情,就是把mxd地图文档输出为pdf,利用arcpy,就可以考虑使用python脚本来实现。Arcgis10以后给我们提供Arcpy.mapping这样一个python脚本模块,它随ArcGIS for Desktop一同安装,
利用Arcpy.mapping我们可以更新、修复或替换地图文档图层数据源、更新图层符号系统、修改文本字符串等,当然也包括将地图文档输出为pdf格式。如果是单个mxd文件要输出,那么在Arc-Map的python窗口中输入两行代码就可以实现。当有大量mxd地图文档需要输出为pdf时,则可以将mxd地图文档存到同一个目录下(比如F:\mxdToPDF),然后利用os.listdir遍历目录,获得mxd文件名和路径,最后再调用arcpy.mapping.ExportToPDF()就可实现批量导出为pdf文件,同时我们也可在上述代码中加入output-PDF.appendPages(str(PDFPath)),实现把一个pdf文件追加到一个多页pdf文件中。
3.2空间数据格式转换
采用国标NSDTF格网数据交换格式保存的DEM数据为文本文件,可以使用记事本打开查看,但是无法使用ArcGIS软件打开或转换为栅格图像,需要将文件转换为ESRI ASCII格式才能使用。数据格式转换如果使用手工修改,工作量很大而且容易出错,利用python 强大的文本处理能力,编写转换脚本则工作量小,且能保证数据质量。
在进行数据转换前,我们需要了解NSDTF文件头的定义,查阅相关资料后得到NSDTF文件格式定义如下:DataMark—中国地球空间数据交换格式-格网数据交换格式(CNSDTF-RAS 或CNSDTF-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。如果不是DEM则HZoom为1。ESRI ASCII栅格格式能够应用于与其他基于栅格或像元的系统之间的信息传输,其文件头具体格式说明如下表1:
表1.ESRI ASCII文件头说明
文本文件的数据格式转换对于python来说不是大问题,因为Python有很强大的文本处理能力,os模块也提供了功能完善的文件操作函数,脚本运行过程如图1所示。以DEM数据转换为ESRI ASCII为例,数据转换脚本代码短短的三四十行就能实现。
图1 脚本运行过程
4.结束语
在实际工作中,脚本程序规模往往不会太大,运行时间也不会太长,大多数脚本通常能在数分钟或0.5-1个小时内完成。综上所述,熟练掌握并利用Python编写的ArcGIS 数据处理脚本,解决了实际工作中存在的问题,大大提高了工作效率,而且python 脚本简单、快捷、实用,对我们日常数据处理工作有很大的帮助。
参考文献: [1]覃永基 ,杨秀丽 ,王剑.基于Python的不动产数据库整合技术探讨与实现[J].地理空间信息,2020,18(7):106-108,119.
邱世平,潘立仁,韦建飞.基于ArcGIS数据驱动页面与Python脚本语言的专题图批量出图技术研究[J].林业调查规划,2020, 45(2):15-20. [3]焦洋,邓鑫,李胜才.基于Python的ArcGIS空间数据格式批处理转换工具开发[J].现代测绘,2012,(3).54-55.