耿宏 重慶交通大學 重慶 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中的工具,使用更加方便.