張 靜 管莉莉 周 赟
(江蘇省工程勘測(cè)研究院有限責(zé)任公司,江蘇揚(yáng)州 225002)
土地利用現(xiàn)狀圖是土地利用調(diào)查的重要成果之一,是土地利用現(xiàn)狀的直觀表現(xiàn),是應(yīng)用最廣泛、最頻繁的成果。其中,鄉(xiāng)鎮(zhèn)土地利用現(xiàn)狀圖件應(yīng)當(dāng)反映鄉(xiāng)鎮(zhèn)土地利用的空間分布特征,給水利和國(guó)土等相應(yīng)部門提供輔助決策和實(shí)施管理功能的依據(jù)。土地利用現(xiàn)狀圖的編制及數(shù)據(jù)庫(kù)的建設(shè)主要在ARCGIS 中實(shí)現(xiàn),應(yīng)用ARCGIS 的數(shù)據(jù)編輯、空間處理和制圖模塊可以有效地進(jìn)行土地利用現(xiàn)狀圖的編制,而采用Python 腳本的地理處理工具在ARCGIS 中能更加方便地集成各種數(shù)據(jù)處理操作,自動(dòng)完成鄉(xiāng)鎮(zhèn)土地利用現(xiàn)狀圖的數(shù)據(jù)庫(kù)建立,最后采用標(biāo)準(zhǔn)符號(hào)化模板進(jìn)一步完成圖件的符號(hào)化工作。
Python 是ESRI 支持的腳本語(yǔ)言之一,是一種開源的、編譯性的、動(dòng)態(tài)類型的、面向?qū)ο蟮哪_本語(yǔ)言之一。Python 包含在ArcGIS 9 中,典型安裝時(shí)與其他組件一起安裝。這種腳本語(yǔ)言特別強(qiáng)調(diào)開發(fā)速度和代碼的清晰程度。它可以用來開發(fā)各種程序,從簡(jiǎn)單的腳本任務(wù)到復(fù)雜的、面向?qū)ο蟮膽?yīng)用程序都有很好的應(yīng)用。Python還被當(dāng)作一種入門程序員最適合掌握的優(yōu)秀語(yǔ)言,因?yàn)樗赓M(fèi)、面向?qū)ο髲V、擴(kuò)展性強(qiáng),同時(shí)執(zhí)行嚴(yán)格的編碼標(biāo)準(zhǔn)。Python 作為目前ArcGIS 主要支持的腳本語(yǔ)言,功能強(qiáng)大,簡(jiǎn)單易學(xué),用它來編寫腳本程序是解決批量處理行之有效的方法[1]。Python 創(chuàng)建腳本工具可方便地集成操作使用ArcGIS 里眾多的地理處理工具。
用Python 編寫腳本程序不需要掌握太多的組件、函數(shù),它主要是通過Geoprocessor 對(duì)象的方法、屬性來實(shí)現(xiàn)數(shù)據(jù)處理的。生成Geoprocessor 對(duì)象變量有兩種方式:一種是導(dǎo)入COM 接口。該方式僅能在WINDOWS 平臺(tái)下調(diào)用,例如:import win32com.client#導(dǎo)入win32com.client 模塊gp=win32com.client.Dispatch(“esriGeoprocessing.GpDis-patch.1”);生成一個(gè)Geoprocessor變量。另一種方式是導(dǎo)入ArcGISScripting模塊。該模塊從9.2 版本開始提供,可跨平臺(tái)調(diào)用,是目前最常用的方式[2]。
ArcGIS 平臺(tái)中的ArcToolbox 工具箱本身具備批量處理功能。在ArcToolbox 工具箱中的各個(gè)工具上單擊右鍵,選擇“BATCH”,即可調(diào)出批量處理對(duì)話框。該模式為ArcGIS平臺(tái)批量處理的通用模式,要求所有需要處理的數(shù)據(jù)都必須存放在同一目錄下,而且數(shù)據(jù)處理成果的命名也自動(dòng)設(shè)置相同,日常的數(shù)據(jù)處理工作大都不滿足這樣的條件。因此,二次開發(fā)是解決批量處理更有效的方法。
在大批量生產(chǎn)過程中,利用ArcGIS 的ArcToolbox 工具箱來實(shí)現(xiàn)分鎮(zhèn)裁切和數(shù)據(jù)入庫(kù),需要分別打開多個(gè)ArcToolbox 工具,對(duì)工具中的各個(gè)參數(shù)分別賦值,并且需要建立多個(gè)Personal GeoDatabase 數(shù)據(jù)庫(kù)將裁切出來的數(shù)據(jù)圖層分別導(dǎo)入,操作十分繁瑣,而且會(huì)產(chǎn)生大量的shapefile 中間文件,分割不同圖層產(chǎn)生的數(shù)據(jù)文件名稱相同,也需要重命名。為了提高工作效率,筆者設(shè)計(jì)了基于Python語(yǔ)言的腳本工具,是可以集成多個(gè)GIS 空間數(shù)據(jù)處理功能的工具,只需要操作一次,方便快捷。與VB、VC 等高級(jí)編程語(yǔ)言進(jìn)行二次開發(fā)不同,用Python 編寫腳本程序不需要掌握太多的組件、函數(shù),它主要是通過Geoprocessor 對(duì)象的方法、屬性來實(shí)現(xiàn)數(shù)據(jù)處理[3]。
處理方法的思路是利用行政區(qū)圖層的鎮(zhèn)界對(duì)年度變更后的土地利用數(shù)據(jù)庫(kù)進(jìn)行裁切處理,并將同一個(gè)鎮(zhèn)區(qū)的數(shù)據(jù)圖層導(dǎo)入到相應(yīng)的鎮(zhèn)區(qū)數(shù)據(jù)庫(kù)中。批處理工具是將這一系列的地理處理功能集成到一個(gè)工具中,實(shí)現(xiàn)一體化處理,如圖1 所示。
圖1 處理流程
在ARCGIS 里創(chuàng)建一個(gè)ArcToolbox工具,載入Python 語(yǔ)言編制的批處理腳本文件,形成一個(gè)可視化、可選參數(shù)的地理處理工具,方便用戶操作不同的GIS 數(shù)據(jù)庫(kù),選擇成果放置的目錄。首先需要設(shè)計(jì)工具的參數(shù)設(shè)置,在ArcToolbox 里選添加->scripts,在屬性里設(shè)置相應(yīng)的輸入、輸出參數(shù),如圖2 所示。
圖2 工具的參數(shù)設(shè)置
批處理算法的主要代碼如下:
程序的運(yùn)行有2 種方式:一是可以啟動(dòng)IDLE,也就是Python 的GUI。在Python Shell 中可以通過打開后綴為py(py 是Python 腳本的標(biāo)準(zhǔn)文件擴(kuò)展名)的程序文件來執(zhí)行。二是通過Python(Command Line)命令窗口來執(zhí)行[4]。
我們需要將腳本加進(jìn)工具(Making a script into a tool),ArcToolbox 或ModelBuilder 或Command line 中使用。在ArcCatalog 里,定位到Python腳本保存的文件夾,最好和數(shù)據(jù)在一個(gè)盤里,右鍵->新建toolbox,在toolbox里,右鍵toolbox,選添加->scripts,依次導(dǎo)入腳本文件,如圖3 所示。
圖3 工具里加載Python 文件
完成后保存,雙擊工具,分別導(dǎo)入原始土地利用現(xiàn)狀數(shù)據(jù)庫(kù)和行政區(qū)圖層,選擇裁切字段為行政區(qū)代碼(XZQDM),運(yùn)行后的成果即各個(gè)鎮(zhèn)區(qū)的土地利用現(xiàn)狀數(shù)據(jù)庫(kù),運(yùn)行效果如圖4 所示。
圖4 工具運(yùn)行界面
鄉(xiāng)鎮(zhèn)土地利用現(xiàn)狀圖主要包含數(shù)學(xué)基礎(chǔ)、圖廓內(nèi)地理要素和整飾要素三大內(nèi)容。數(shù)學(xué)基礎(chǔ)主要是公里網(wǎng)及注記;圖廓內(nèi)地理要素包括地類圖斑、線狀地物、權(quán)屬界線、行政區(qū)界線、行政區(qū)、宗地等;整飾要素有圖框、圖名、指北針、比例尺、圖例、坐標(biāo)系及制圖單位名稱和日期等文字注釋。
鄉(xiāng)鎮(zhèn)土地利用現(xiàn)狀圖需采用規(guī)范的符號(hào)和圖面整飾,為了方便快速完成多幅分鎮(zhèn)圖件的符號(hào)化,筆者采用已有的標(biāo)準(zhǔn)規(guī)范的土地利用現(xiàn)狀圖中的圖層符號(hào)化樣式,制作成現(xiàn)狀圖模板,即將已符號(hào)化的現(xiàn)狀圖的圖層分別導(dǎo)出另存為模板圖層,此時(shí)模板圖層已帶有符號(hào)化系統(tǒng),只要目標(biāo)圖層的屬性字段和模板圖層的符號(hào)化字段相匹配,即可根據(jù)該字段自動(dòng)進(jìn)行符號(hào)渲染。新建一個(gè)mxd,加載土地利用現(xiàn)狀圖數(shù)據(jù),然后分別通過在圖層屬性symbolgy 里導(dǎo)入已有模板圖層的符號(hào)系統(tǒng),如圖5 所示,即可自動(dòng)完成現(xiàn)狀圖數(shù)據(jù)符號(hào)化。
圖5 現(xiàn)狀圖圖層符號(hào)庫(kù)導(dǎo)入
利用Python 語(yǔ)言編寫程序可以簡(jiǎn)化手工操作的步驟,對(duì)于大批量流程作業(yè)將大幅提高工作效率。通過使用Python 語(yǔ)言可輕松實(shí)現(xiàn)ArcGIS 的各項(xiàng)功能,實(shí)現(xiàn)批量地理空間數(shù)據(jù)的自動(dòng)化處理,對(duì)我們的日常數(shù)據(jù)處理工作有很大的幫助。
通過Python 工具化生產(chǎn)鄉(xiāng)鎮(zhèn)土地利用現(xiàn)狀數(shù)據(jù)庫(kù)及結(jié)合現(xiàn)狀圖符號(hào)化模板的一次性導(dǎo)入,可使得鄉(xiāng)鎮(zhèn)土地利用現(xiàn)狀圖的編制過程更加便捷,大大提高批量生產(chǎn)土地利用現(xiàn)狀圖的效率。
[1]彭海波,向洪普.基于Python 的空間數(shù)據(jù)批量處理方法[J].測(cè)繪與空間地理信息,2011,34(4):81-87.
[2]湯安國(guó),楊昕.ArcGIS 地理信息系統(tǒng)空間分析實(shí)驗(yàn)教程[M].北京:科學(xué)出版社,2006:466-467.
[3]葉寶瑩,楊農(nóng).利用ArcGIS 構(gòu)建地形圖分幅空間數(shù)據(jù)庫(kù)[J].測(cè)繪科學(xué),2008,33(3):207-209.
[4]戴立乾,高鵬.淺析Python 語(yǔ)言在縣級(jí)坡度分級(jí)圖制作中的應(yīng)用[J].安徽農(nóng)業(yè)科學(xué),2009,37(23):11324-11325,11327.