曹斌
摘 要:文章以地形測量成果的數(shù)據(jù)處理為例,探討了利用ArcPy進行矢量數(shù)據(jù)批處理的方法,完成了數(shù)據(jù)分層、屬性信息修改、數(shù)據(jù)合并、數(shù)據(jù)檢查等多個操作,并實現(xiàn)了上述操作的批量自動化處理,為今后進行矢量數(shù)據(jù)批處理提供了一套行之有效的解決方案。
關(guān)鍵詞:Python;ArcPy;地理處理;空間數(shù)據(jù)
中圖分類號:P413 文獻標志碼:A 文章編號:2095-2945(2017)21-0090-02
1 概述
地理處理是GIS的一個重要組成部分,從本質(zhì)上來說地理處理就是對空間數(shù)據(jù)的處理,也就是空間分析。ArcGIS提供了眾多地理處理工具,但這些工具一般都是對某一數(shù)據(jù)集執(zhí)行單一操作。但在實際項目中,常常需要對空間數(shù)據(jù)進行如投影變換、字段編輯、數(shù)據(jù)轉(zhuǎn)換等多種操作的批量處理,這需要數(shù)據(jù)處理人員進行大量重復性手動操作,既增加了工作量,又容易出錯,非常不利于提高數(shù)據(jù)處理效率。
ArcGIS 9.0社區(qū)中引入了Python,使用Python和ArcPy站點包,可以開發(fā)出大量用于處理地理數(shù)據(jù)的實用程序,能夠?qū)崿F(xiàn)空間數(shù)據(jù)的批量自動化處理。本文以地形測量成果的數(shù)據(jù)處理為例,探討了ArcPy在矢量數(shù)據(jù)批處理中的應用。
2 ArcPy簡介
Python是由Guido van Rossum在1991年推出的一種不受局限、跨平臺的開源編程語言,由于Python處理速度快、功能強大且具有廣泛的認可度,ESRI選擇它作為腳本語言嵌入ArcGIS中。Python最早集成于ArcGIS 9.0,并作為地理處理腳本語言得以不斷發(fā)展,到ArcGIS 10采用了ArcPy。ArcPy是一個原生的Python站點包,它涵蓋并進一步加強了ArcGIS 9.2/9.3中所采用的arcgisscripting模塊的功能,為用戶提供了使用Python語言操作所有地理處理工具的入口,并提供了多種有用的函數(shù)和類,以用于處理和詢問GIS數(shù)據(jù)。
ArcPy的使用方法可歸納為以下三種:
(1)在命令行窗口中使用ArcPy
安裝ArcGIS之后將自動安裝相應的Python安裝包,運行Python IDLE,即打開一個命令窗口,輸入“import arcpy”,就可以使用ArcPy提供的類與函數(shù)。另一種命令窗口內(nèi)嵌于ArcMap,點擊ArcMap工具欄中的 圖標,將在ArcMap中打開命令行窗口,利用該窗口不僅可使用ArcPy,還提供關(guān)于ArcPy的幫助文檔,對初學者來說非常有幫助。
(2)在Python腳本文件中使用ArcPy
使用ArcPy最方便的方式是腳本文件,我們可以利用記事本或是Python IDLE創(chuàng)建或編輯腳本文件,腳本文件以.py結(jié)尾。在Python IDLE中打開腳本文件后,點擊Run->Run Module將運行腳本文件,并輸出相應的提示信息。
(3)利用ArcPy創(chuàng)建地理處理工具
使用ArcPy的第三種方法是利用ArcPy創(chuàng)建地理處理工具,該工具將作為ArcCatalog中的自定義工具使用,其使用方法與ArcToolbox中工具的使用方法類似,它能夠以對話框的形式接受用戶的各種輸入?yún)?shù),并依據(jù)用戶設(shè)置的輸出參數(shù)展示結(jié)果。
3 ArcPy數(shù)據(jù)批處理實例
下面以地形測量成果的數(shù)據(jù)處理為例,給出基于ArcPy的數(shù)據(jù)批處理流程圖及其具體實現(xiàn)。
3.1 數(shù)據(jù)處理流程
首先按照1:1000比例尺地形圖的測繪要求對整個測區(qū)進行數(shù)字化地形修、實測,獲得高精度的地形數(shù)據(jù),選用EPS2008為工作軟件導出MDB格式的地形測量成果,依據(jù)編制定的地理要素分類及編碼規(guī)則對MDB數(shù)據(jù)進行批處理,最終獲得符合客戶要求的成果數(shù)據(jù)。
3.2 主要應用函數(shù)
3.2.1 使用列表函數(shù)
在地形測量成果數(shù)據(jù)處理中,主要有兩個地方需要應用到列表函數(shù):
(1)獲取所有待處理的地形成果文件
待處理的地形測量成果是以村為單位分批提交,所有文件均以各村的數(shù)字編碼命名。要對上述數(shù)據(jù)進行處理,首先要遍歷獲取當前工作空間中的所有待處理的personal geodatabase文件,這里需要使用列表函數(shù)ListWorkspaces。函數(shù)ListWorkspaces中參數(shù)Access表示返回工作目錄下的所有personal geodatabase,若要返回工作目錄下的所有file geodatabase則需要將參數(shù)設(shè)置為FileGDB。
(2)遍歷數(shù)據(jù)庫文件中的特征類
上述personal geodatabase文件中包含若干特征類,這里我們同樣需要使用列表函數(shù)獲取數(shù)據(jù)庫文件中所有的特征類,并依據(jù)地理要素分類及編碼規(guī)則,對每個特征類執(zhí)行相應的轉(zhuǎn)換操作。
3.2.2 創(chuàng)建模板文件
依據(jù)技術(shù)設(shè)計中要素分類及編碼規(guī)則創(chuàng)建模板文件,共涉及房屋、圍墻、道路、水系等15項地物大類,每個地物大類又分為若干小類,如房屋就包括建成房屋、簡易房屋、棚房、廊房4個小類,共計60項地物小類。
3.2.3 使用游標訪問數(shù)據(jù)
在進行上述數(shù)據(jù)處理過程中最重要的一個步驟就是依據(jù)地理要素分類及編碼規(guī)則進行批量數(shù)據(jù)讀寫,這里就需要使用游標訪問數(shù)據(jù)。
游標是一種數(shù)據(jù)訪問對象,可用以在表中迭代一組行,或向表中插入新行。游標有三種形式:搜索、插入、更新,對應的函數(shù)分別為SearchCursor、InsertCursor、UpdateCursor。關(guān)于游標需要注意一點,插入和更新游標遵循由ArcGIS應用程序設(shè)置的表鎖,訪問表或數(shù)據(jù)將應用共享鎖,對表或數(shù)據(jù)集進行更改則采用排它鎖。當數(shù)據(jù)集上存在排它鎖時,將無法創(chuàng)建更新和插入游標。因此,在插入和更新操作完成后必須及時釋放鎖。
這里我們主要用到的是搜索游標和插入游標。使用搜索游標遍歷原始數(shù)據(jù)中的所有記錄,依據(jù)一定的規(guī)則,向模板文件中插入新記錄。這里還是以對道路對象的處理為例,說明如何使用游標訪問數(shù)據(jù)。道路對象的原始數(shù)據(jù)存儲于MDB文件的Road_Polygon_A特征類中,模板文件為Road_A.shp。
3.2.4 使用疊加分析工具集
疊加分析是用于解決“什么在什么上?”這一基本GIS問題的分析方法,依據(jù)處理的數(shù)據(jù)類型,疊加分析可分為矢量疊加和柵格疊加。其中,矢量疊加工具包括擦除、標識、相交、交集取反、聯(lián)合、更新。
在本案例中,按要求必須采集地理要素的邊界線并構(gòu)面,且面狀地物之間不能存在疊加覆蓋的情況,這就要求我們對所有面狀特征類進行空間關(guān)系檢查。利用疊加分析工具集中的相交工具可以快速實現(xiàn)。
對建成房屋(Building_A.shp)和其他用地(LandEx_A.shp)使用相交工具,將運算結(jié)果另存為Building_LandEx.shp文件,輸入數(shù)據(jù)和輸出結(jié)果如圖1所示。
從上述輸出結(jié)果不難發(fā)現(xiàn),建成房屋和其他用地存在明顯的相互覆蓋的情況,這說明在進行面狀要素構(gòu)面時存在問題,應及時更正。
3.3 批處理成果
地形測量數(shù)據(jù)批處理的成果包括矢量數(shù)據(jù)文件和成果報告。
4 結(jié)束語
本文以地形測量成果的數(shù)據(jù)處理為例,探討了ArcPy在矢量數(shù)據(jù)批處理中的應用,完成了數(shù)據(jù)合并、批量數(shù)據(jù)轉(zhuǎn)換、矢量數(shù)據(jù)疊加分析等操作,并實現(xiàn)了上述操作的自動化處理。以往用編程方式完成上述數(shù)據(jù)處理任務時,主要采用ArcGIS Engine或是其他數(shù)據(jù)處理開發(fā)包實現(xiàn),其編程門檻相對較高,主要面向的是專業(yè)開發(fā)人員。實踐證明ArcPy顯著降低了編程的門檻,在開發(fā)地理處理工具和空間數(shù)據(jù)批量自動化處理應用程序方面具有顯著優(yōu)勢,為今后開展相關(guān)工作提供了一種新的解決方案。
參考文獻:
[1]Eric Pimpler. Programming ArcGIS 10.1 with Python Cookbook [M].Birmingham: Packt, 2013.
[2]孫咸磊,許捍衛(wèi),李文博.ArcPy在長江河道水下空間數(shù)據(jù)批量處理中的應用[J].測繪與空間地理信息,2015,38(2):97-99.
[3]余詠勝,彭艷麗,尹言軍,等.基于Arcpy的影像地圖自動處理技術(shù)研究[J].測繪通報,2015(3):82-85.