劉桂英
摘 要:在基于ARCGIS的地理信息系統(tǒng)的開發(fā)中,有時需要把MDB空間數(shù)據(jù)庫文件轉(zhuǎn)換為shp格式文件,傳統(tǒng)調(diào)用工具箱進(jìn)行轉(zhuǎn)換的方法在轉(zhuǎn)換量較多的時候顯得十分麻煩。該文設(shè)計(jì)了一種使用Python腳本和arcpy庫,實(shí)現(xiàn)對MDB空間數(shù)據(jù)庫文件的批量轉(zhuǎn)換方法,有效減輕人工轉(zhuǎn)換的工作量,又省去學(xué)習(xí)AO接口的麻煩。
關(guān)鍵詞:arcpy Python 批量轉(zhuǎn)換
中圖分類號:TP3 文獻(xiàn)標(biāo)識碼:A 文章編號:1672-3791(2015)11(a)-0001-02
在基于ARCGIS的地理信息系統(tǒng)的開發(fā)中,人們在很多地方下載或是地圖數(shù)據(jù)交換的時候,通常是以單一文件MDB的格式操作,因?yàn)閱我晃募_實(shí)更方便發(fā)布和傳播,但是在基于ArcGIS的GIS系統(tǒng)開發(fā)中,往往喜歡使用矢量地圖文件shp格式,這樣方便在系統(tǒng)中查找和修改相應(yīng)的圖層。這種情況下,大家就需要把單一的MDB地圖數(shù)據(jù)轉(zhuǎn)化為shp格式的矢量地圖數(shù)據(jù)。雖然ArcGIS提供很方便的轉(zhuǎn)換方法,但是如果量大的情況下,人工轉(zhuǎn)換會變得好麻煩。
為了解決上述問題,很多人可能會選擇運(yùn)用AO接口,編寫一個工具實(shí)現(xiàn)批量轉(zhuǎn)換。雖然這不失為一個好方法,但是需要對龐大的AO接口非常熟悉的工程師才能以較快時間的開發(fā)出來,對于一般人來說,學(xué)習(xí)AO接口的成本實(shí)在太高了。該文介紹了一種非常簡單高效的解決方法。
1 環(huán)境介紹
Python 是一種面向?qū)ο蟮目缙脚_的解析性的腳本語言。Python具有腳本語言中最豐富和最強(qiáng)大的類庫,而且能把其他語言制作的各種模塊輕松地聯(lián)結(jié)在一起。Python非常簡單易學(xué),開發(fā)效率極高。
arcpy是ArcGIS的一個Python包,包含對地圖操作和地圖代數(shù)的支持,支持編輯處理和幾何操作。Python已經(jīng)與ArcGIS高度集成,方便實(shí)現(xiàn)GIS的各種處理流程。
2 實(shí)現(xiàn)方法
使用Python與arcpy庫可以方便地實(shí)現(xiàn)圖形文件的批量轉(zhuǎn)換。如圖1所示,實(shí)現(xiàn)步驟大概可以分為5步,首先收集整理MDB,然后判斷是否全部已經(jīng)轉(zhuǎn)換完畢,如果沒轉(zhuǎn)換完畢,則逐個調(diào)用自定義函數(shù)MDB2SHP進(jìn)行轉(zhuǎn)換,最后將轉(zhuǎn)換結(jié)果放到一個輸出目錄里。
2.1 收集整理MDB數(shù)據(jù)
將所有需要轉(zhuǎn)換的MDB文件都放進(jìn)一個文件夾里,作為轉(zhuǎn)換前準(zhǔn)備。
2.2 導(dǎo)入arcpy庫
在Python中操作使用ArcGIS的功能,必須先導(dǎo)入ArcGIS提供的Python類庫arcpy。arcpy庫是ArcGIS產(chǎn)品自帶的,不需要額外安裝。導(dǎo)入方法是:
import arcpy
2.3 文件轉(zhuǎn)換
文件轉(zhuǎn)換實(shí)現(xiàn)自定義了一個轉(zhuǎn)換函數(shù)MDB2SHP,從MDB文件轉(zhuǎn)換到矢量文件shp,需要使用arcpy庫提供的FeatureClassToShapefile_conversion方法。該自定義函數(shù)的具體實(shí)現(xiàn)如下:
import arcpy
def MDB2SHP(MdbFile, dct):
arcpy.env.workspace = MdbFile
outDir = dct
fcs = arcpy.ListFeatureClasses()
fcCount = len(fcs)
for fc in fcs:
arcpy.FeatureClassToShapefile_conversion(fc, outLocation)
2.4 批量執(zhí)行
批量執(zhí)行就是運(yùn)用目錄遍歷的方法,逐個執(zhí)行。在Python中,內(nèi)置了一個非常簡單目錄遍歷方法os.walk()。該函數(shù)會返回一個三元tupple(dirpath, dirnames, filenames) ,其中第一個為起始路徑,第二個為起始路徑下的文件夾,第三個是起始路徑下的文件。然后利用for循環(huán)進(jìn)行遍歷。
3 測試與驗(yàn)證
該次測試在ArcGIS10.2.2環(huán)境下進(jìn)行的。以湛江市地圖為例,
有4個mdb文件,分別為市鎮(zhèn)鄉(xiāng)線界.MDB,地理環(huán)境.MDB,地標(biāo).MDB, 漁業(yè).MDB
運(yùn)行腳本后,得到很多shape文件,加載這些shape文件后,得到一個綜合多種信息的地圖,如圖2所示。
4 結(jié)語
該文介紹了一種利用Python和arcpy庫快速開發(fā)批量圖形文件轉(zhuǎn)換的方法,通過這個方法可以了解到Python的強(qiáng)大和靈活易用,結(jié)合arcpy可以實(shí)現(xiàn)很多ArcGIS的功能和特性,合理利用會對GIS開發(fā)效率提高極大的幫助。
參考文獻(xiàn)
[1] 吳戰(zhàn)克.基于ArcGIS10_1的區(qū)圖層批處理合并[J].地理信息空間,2015,13(4):93-94.
[2] 秦思嫻.基于Python實(shí)現(xiàn)地理國情房屋建筑專題信息提取 [J].測繪與空間地理信息,2015,38(8):1-3.
[3] 朱道強(qiáng),關(guān)海濤. Python在ArcGIS中的應(yīng)用[J].測繪與空間地理信息,2013,36(7):152-154.
[4] 田學(xué)志.基于Python的Arcgis地理處理應(yīng)用研究[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2013(7):46,50.