基于Python的空间数据批处理在编制土地利用现状图中的应用
2014-12-12管莉莉
张 静 管莉莉 周 赟
(江苏省工程勘测研究院有限责任公司,江苏扬州 225002)
0 引言
土地利用现状图是土地利用调查的重要成果之一,是土地利用现状的直观表现,是应用最广泛、最频繁的成果。其中,乡镇土地利用现状图件应当反映乡镇土地利用的空间分布特征,给水利和国土等相应部门提供辅助决策和实施管理功能的依据。土地利用现状图的编制及数据库的建设主要在ARCGIS 中实现,应用ARCGIS 的数据编辑、空间处理和制图模块可以有效地进行土地利用现状图的编制,而采用Python 脚本的地理处理工具在ARCGIS 中能更加方便地集成各种数据处理操作,自动完成乡镇土地利用现状图的数据库建立,最后采用标准符号化模板进一步完成图件的符号化工作。
1 ARCGIS 中Python 脚本的运用
Python 是ESRI 支持的脚本语言之一,是一种开源的、编译性的、动态类型的、面向对象的脚本语言之一。Python 包含在ArcGIS 9 中,典型安装时与其他组件一起安装。这种脚本语言特别强调开发速度和代码的清晰程度。它可以用来开发各种程序,从简单的脚本任务到复杂的、面向对象的应用程序都有很好的应用。Python还被当作一种入门程序员最适合掌握的优秀语言,因为它免费、面向对象广、扩展性强,同时执行严格的编码标准。Python 作为目前ArcGIS 主要支持的脚本语言,功能强大,简单易学,用它来编写脚本程序是解决批量处理行之有效的方法[1]。Python 创建脚本工具可方便地集成操作使用ArcGIS 里众多的地理处理工具。
用Python 编写脚本程序不需要掌握太多的组件、函数,它主要是通过Geoprocessor 对象的方法、属性来实现数据处理的。生成Geoprocessor 对象变量有两种方式:一种是导入COM 接口。该方式仅能在WINDOWS 平台下调用,例如:import win32com.client#导入win32com.client 模块gp=win32com.client.Dispatch(“esriGeoprocessing.GpDis-patch.1”);生成一个Geoprocessor变量。另一种方式是导入ArcGISScripting模块。该模块从9.2 版本开始提供,可跨平台调用,是目前最常用的方式[2]。
2 土地利用现状数据库批量处理方法
ArcGIS 平台中的ArcToolbox 工具箱本身具备批量处理功能。在ArcToolbox 工具箱中的各个工具上单击右键,选择“BATCH”,即可调出批量处理对话框。该模式为ArcGIS平台批量处理的通用模式,要求所有需要处理的数据都必须存放在同一目录下,而且数据处理成果的命名也自动设置相同,日常的数据处理工作大都不满足这样的条件。因此,二次开发是解决批量处理更有效的方法。
2.1 Python 脚本批量处理的优点
在大批量生产过程中,利用ArcGIS 的ArcToolbox 工具箱来实现分镇裁切和数据入库,需要分别打开多个ArcToolbox 工具,对工具中的各个参数分别赋值,并且需要建立多个Personal GeoDatabase 数据库将裁切出来的数据图层分别导入,操作十分繁琐,而且会产生大量的shapefile 中间文件,分割不同图层产生的数据文件名称相同,也需要重命名。为了提高工作效率,笔者设计了基于Python语言的脚本工具,是可以集成多个GIS 空间数据处理功能的工具,只需要操作一次,方便快捷。与VB、VC 等高级编程语言进行二次开发不同,用Python 编写脚本程序不需要掌握太多的组件、函数,它主要是通过Geoprocessor 对象的方法、属性来实现数据处理[3]。
2.2 处理的流程
处理方法的思路是利用行政区图层的镇界对年度变更后的土地利用数据库进行裁切处理,并将同一个镇区的数据图层导入到相应的镇区数据库中。批处理工具是将这一系列的地理处理功能集成到一个工具中,实现一体化处理,如图1 所示。
2.3 创建Python 脚本工具
图1 处理流程
在ARCGIS 里创建一个ArcToolbox工具,载入Python 语言编制的批处理脚本文件,形成一个可视化、可选参数的地理处理工具,方便用户操作不同的GIS 数据库,选择成果放置的目录。首先需要设计工具的参数设置,在ArcToolbox 里选添加->scripts,在属性里设置相应的输入、输出参数,如图2 所示。
图2 工具的参数设置
批处理算法的主要代码如下:
程序的运行有2 种方式:一是可以启动IDLE,也就是Python 的GUI。在Python Shell 中可以通过打开后缀为py(py 是Python 脚本的标准文件扩展名)的程序文件来执行。二是通过Python(Command Line)命令窗口来执行[4]。
我们需要将脚本加进工具(Making a script into a tool),ArcToolbox 或ModelBuilder 或Command line 中使用。在ArcCatalog 里,定位到Python脚本保存的文件夹,最好和数据在一个盘里,右键->新建toolbox,在toolbox里,右键toolbox,选添加->scripts,依次导入脚本文件,如图3 所示。
图3 工具里加载Python 文件
完成后保存,双击工具,分别导入原始土地利用现状数据库和行政区图层,选择裁切字段为行政区代码(XZQDM),运行后的成果即各个镇区的土地利用现状数据库,运行效果如图4 所示。
图4 工具运行界面
3 乡镇土地利用现状图的编制及符号化
乡镇土地利用现状图主要包含数学基础、图廓内地理要素和整饰要素三大内容。数学基础主要是公里网及注记;图廓内地理要素包括地类图斑、线状地物、权属界线、行政区界线、行政区、宗地等;整饰要素有图框、图名、指北针、比例尺、图例、坐标系及制图单位名称和日期等文字注释。
乡镇土地利用现状图需采用规范的符号和图面整饰,为了方便快速完成多幅分镇图件的符号化,笔者采用已有的标准规范的土地利用现状图中的图层符号化样式,制作成现状图模板,即将已符号化的现状图的图层分别导出另存为模板图层,此时模板图层已带有符号化系统,只要目标图层的属性字段和模板图层的符号化字段相匹配,即可根据该字段自动进行符号渲染。新建一个mxd,加载土地利用现状图数据,然后分别通过在图层属性symbolgy 里导入已有模板图层的符号系统,如图5 所示,即可自动完成现状图数据符号化。
图5 现状图图层符号库导入
4 结语
利用Python 语言编写程序可以简化手工操作的步骤,对于大批量流程作业将大幅提高工作效率。通过使用Python 语言可轻松实现ArcGIS 的各项功能,实现批量地理空间数据的自动化处理,对我们的日常数据处理工作有很大的帮助。
通过Python 工具化生产乡镇土地利用现状数据库及结合现状图符号化模板的一次性导入,可使得乡镇土地利用现状图的编制过程更加便捷,大大提高批量生产土地利用现状图的效率。
[1]彭海波,向洪普.基于Python 的空间数据批量处理方法[J].测绘与空间地理信息,2011,34(4):81-87.
[2]汤安国,杨昕.ArcGIS 地理信息系统空间分析实验教程[M].北京:科学出版社,2006:466-467.
[3]叶宝莹,杨农.利用ArcGIS 构建地形图分幅空间数据库[J].测绘科学,2008,33(3):207-209.
[4]戴立乾,高鹏.浅析Python 语言在县级坡度分级图制作中的应用[J].安徽农业科学,2009,37(23):11324-11325,11327.