耿宏 重庆交通大学 重庆 400074
第三次全国国土调查是摸清我国自然资源基础家底的第三次国土调查.此次调查的数据处理主要分5个步骤:数据预处理;影像矢量化;合并数据库;数据接边处理;属性检查.其中,数据合并非常重要.在ArcGIS中用合并工具完成.该方法适用于单个数据集的处理,但对大量空间数据进行处理时,效率就会降低.为了减少重复劳动,提高工作效率,需要创建能够自动化、批量化处理数据的工具【1】.利用Arcpy编写的Python脚本可以和ArcToolbox中的工具相结合,降低了程序的编写难度,提高了工作效率【2】.
1ArcPy简介
Python是一种解释型、面向对象的、动态数据类型的高级程序设计语言,具有简单易学、功能强大、可跨平台、不受局限等优点【3】.Arcpy是ArcGIS中Python的一个站点包,是以arcgisscripting模块为基础并继承了arcgisscripting功能构建而成的,目的是以实用高效的方式通过Python执行地理数据分析、数据转换、数据管理和地图自动化创建等功能.通常情况下,ArcPy的组织流程为工具、函数、类和模块为先后顺序进行工作.通过ArcPy对ArcGIS应用程序以及脚本编写的优势表现在,其可以可以访问并使用来自多个领域的GIS专业人员和程序员开发的大量Python模块【4】.
调查基础数据是国家下发的重庆市某区县空间地理数据,坐标系采用CGCS2000大地坐标系.根据重庆的特殊情况,数据等级由高到低依次为县、镇、村和社.
数据合并是将小块数据合并成大块数据.在本次调查中,按照要求,首先将属于同一个镇的数据合并到一个地理数据库中,并对数据进行检查、接边等;然后再将各个镇的数据汇总到一个地理数据库中,并对数据进行检查、接边等.合并后的图层中最小单元为图斑,相邻图斑的属性可能相同,但权属单位可能不同,因此数据检查时应多注意.
此次数据涉及的村大约有300个,每个村的数据都保存在独立的地理数据库中.合并这些数据可以使用ArcToolbox中的"合并"工具,但由于数据量较大,该方法费时费力,因此,采用Arcpy编写的脚本实现地理数据库的批量合并.
以下是地理数据库数据合并的脚本.
# -*- coding:gbk
import sys
import arcpy
import string
try:
workspace = r'D:wx' #数据库路径
outdb=r'D:wxshuju\wxx.shp' #保存的shp数据路径
arcpy.env.workspace=outdb
fs = arcpy.ListFeatureClasses()
shpList=[]
arcpy.env.workspace=workspace
#遍历文件中的数据库
for File in arcpy.ListFiles("*.*db"):
arcpy.env.workspace=workspace+"\"+File
fs=arcpy.ListFeatureClasses()
for f in fs:
print File,f
shpList.append(workspace+"\"+File+"\"+f)
#合并数据
arcpy.Merge_management(shpList,outdb)
except arcpy.ExecuteError:
print arcpy.GetMessages()
经过实验,利用ArcPy脚本合并地理数据库用时大约15分钟,而用ArcToolbox中的"合并"工具花费的时间约为40分钟.实验结果表明,使用ArcPy处理数据缩短了时间,提高了效率,且人工干预少,数据的质量高.
本文以第三次全国国土调查项目中区县的数据为例,探讨了ArcGIS中ArcPy在地理数据库数据合并中的应用,实现了地理数据库的批量合并.ArcPy简单易学,功能强大,在批量数据处理方面具有很大的优势,还可转成ArcGIS中的工具,使用更加方便.