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