劉桂英
【摘要】在ArcGIS地理信息系統(tǒng)開發(fā)過程中,經(jīng)常需要將地圖按照一定的屬性和比例要求導(dǎo)出為相應(yīng)圖片。一般情況下我們會選擇直接使用ArcGIS工具箱直接導(dǎo)出圖片,但當(dāng)我們需要導(dǎo)出多張圖片時(shí),就顯得非常麻煩,本文介紹了一種解決反復(fù)勞動的簡單方法,使用Python制作批量地圖輸出小工具。
【關(guān)鍵詞】Python;arcgis;arcpy;地圖輸出
引言
在基于ArcGIS的地理信息系統(tǒng)的開發(fā)中,經(jīng)常需要將地圖按照一定的屬性和比例要求導(dǎo)出為相應(yīng)圖片。一般情況下我們會選擇直接使用ArcGIS工具箱直接導(dǎo)出圖片,但當(dāng)我們需要導(dǎo)出多張圖片時(shí),就顯得非常麻煩。然而ArcGIS提供了多種編程接口和類庫,可以讓我們方便地自己定制各種2次開發(fā)地理信息系統(tǒng)和工具。ArcGIS有提供C#,JAVA等傳統(tǒng)語言的AO接口,還有提供VB和Python這類解析性語言的接口。AO接口過于復(fù)雜,適用于用來二次開發(fā)GIS系統(tǒng),而用來制作小型輔助工具有點(diǎn)大材小用;VB將近淘汰邊緣,而且新版本ArcGIS默認(rèn)不支持,需要安裝;所以我們選擇了Python作為小工具制作的輔助語言。
Python是一種不受局限的、跨平臺的開源編程,屬于解析性腳本語言。Python具有腳本語言中最豐富和最強(qiáng)大的類庫,而且能把其他語言制作的各種模塊輕松地聯(lián)結(jié)在一起。Python非常簡單易學(xué),開發(fā)效率極高。
1.arcpy簡介
arcpy是ArcGIS的一個(gè)Python包,包含對地圖操作和地圖代數(shù)的支持,支持編輯處理和幾何操作。Python已經(jīng)與ArcGIS高度集成,方便實(shí)現(xiàn)GIS的各種處理流程。
2.實(shí)現(xiàn)方法
實(shí)現(xiàn)將mxd文件批量地圖輸出需要做兩次遍歷才能把所有地圖輸出。如圖1所示,首先遍歷mxd文件目錄中的mxd文件,然后將每個(gè)文件中所包含的圖層遍歷出來。獲取每個(gè)圖層后,需要先將圖層開啟顯示,然后調(diào)用arcpy庫的方法將圖層輸出成JPG文件,完成后關(guān)閉該圖層,最后遍歷完畢地圖也輸出完畢。
2.1導(dǎo)入arcpy庫
在Python中操作使用ArcGIS的功能,必須先導(dǎo)入ArcGIS提供的Python類庫arcpy。arcpy庫是ArcGIS產(chǎn)品自帶的,不需要額外安裝。導(dǎo)入方法是:
import arcpy
2.2遍歷子目錄
在Python中,內(nèi)置了一個(gè)非常簡單目錄遍歷方法os.walk()。該函數(shù)會返回一個(gè)三元tupple(dirpath, dirnames, filenames) ,其中第一個(gè)為起始路徑,第二個(gè)為起始路徑下的文件夾,第三個(gè)是起始路徑下的文件。然后利用for循環(huán)進(jìn)行遍歷。
2.3圖層遍歷
在地圖文檔(.mxd)中一般包含很多圖層,我們需要將每個(gè)圖層都輸出成JPG圖片,這樣就需要對圖層的遍歷。arcpy庫提供了一套完整的制圖模塊庫arcpy.mapping,該模塊庫主要是用于操作現(xiàn)有地圖文檔(.mxd)和圖層文件(.lyr)的內(nèi)容。遍歷圖層需要用到arcpy提供的一個(gè)方法arcpy.mapping.ListLayers(arcpy.mapping),該方法返回一個(gè)包含所有圖層對象的Python list,然后我們就可以用Python遍歷list的方法遍歷圖層。
2.4輸出JPG格式的地圖
arcpy庫還提供自動執(zhí)行導(dǎo)出和打印的函數(shù)。這里就是使用了一個(gè)導(dǎo)出JPG格式的函數(shù)ExportToJPEG。
3.結(jié)束語
本文介紹了一種利用Python對ArcGIS批量地圖輸出的方法,通過程序可以看到Python程序非常整合和簡潔,合理利用Python和arcpy庫會對GIS開發(fā)效率提高極大的幫助。
參考文獻(xiàn)
[1]ArcGIS10.1 help.
[2]朱道強(qiáng),關(guān)海濤.Python在ArcGIS中的應(yīng)用 [J]. 測繪與空間地理信息, 2013, 36(7): 152-154.
[3]邵保華,田學(xué)志.基于Python的Arcgis地理處理應(yīng)用研究 [J]. 林業(yè)勘查設(shè)計(jì), 2012, (2).
基金項(xiàng)目
湛江市科技攻關(guān)計(jì)劃項(xiàng)目
基金編號:2013B01145