徐邦歲 魏春玲
(1.響水縣土地勘測(cè)有限公司,江蘇 鹽城 224600;2.響水縣自然資源和規(guī)劃局,江蘇 鹽城 224600)
近年來(lái),隨著經(jīng)濟(jì)社會(huì)的高速發(fā)展,我國(guó)陸續(xù)推進(jìn)了“數(shù)字城市”“智慧城市”建設(shè),以及國(guó)土調(diào)查、地理國(guó)情普查、房地一體不動(dòng)產(chǎn)確權(quán)登記等一系列國(guó)家級(jí)項(xiàng)目,隨著這些重大項(xiàng)目的開(kāi)展,測(cè)繪事業(yè)得到了快速發(fā)展,基層測(cè)繪單位開(kāi)展了大量測(cè)繪活動(dòng),形成了海量的多源多維地理信息數(shù)據(jù),由此,怎樣科學(xué)精準(zhǔn)地管理這些數(shù)據(jù)成為當(dāng)前亟待解決的問(wèn)題。
日常地理信息數(shù)據(jù)管理工作通常使用ArcGIS 軟件處理各種相關(guān)任務(wù),其中有大量重復(fù)性工作,比如數(shù)據(jù)格式轉(zhuǎn)換、數(shù)據(jù)拼接與裁切、數(shù)據(jù)輸出與保存等[1]。人工操作這些重復(fù)性工作容易出錯(cuò),效率低下,難以保證數(shù)據(jù)成果質(zhì)量,由此,尋求一種高效快捷的批量處理方法極為重要。Python 作為ArcGIS 支持的一種腳本語(yǔ)言,功能強(qiáng)大、簡(jiǎn)單易學(xué),在數(shù)據(jù)批處理方面具有明顯優(yōu)勢(shì)[2]。自ArcGIS 9.0 版本引入Python 后,逐漸得到廣大地理信息數(shù)據(jù)處理用戶(hù)的關(guān)注,并取得快速發(fā)展,之后ArcGIS 的每個(gè)版本都進(jìn)一步增強(qiáng)了Python 體驗(yàn),為用戶(hù)提供了更加豐富、友好、更多功能性的體驗(yàn),用它編寫(xiě)腳本程序是解決地理信息數(shù)據(jù)自動(dòng)化批量處理的有效方法。本文結(jié)合工作實(shí)踐,利用Python 語(yǔ)言編寫(xiě)代碼,通過(guò)調(diào)用第三方數(shù)據(jù)處理包以及自帶的標(biāo)準(zhǔn)庫(kù),實(shí)現(xiàn)了三個(gè)地理信息數(shù)據(jù)批處理方面的應(yīng)用,提高了數(shù)據(jù)處理的準(zhǔn)確度和工作效率。
Python 是由荷蘭的計(jì)算機(jī)和數(shù)學(xué)家吉多·范羅蘇姆設(shè)計(jì)出的一種跨平臺(tái)的計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,最早出現(xiàn)于1990 年代,開(kāi)始只被當(dāng)作取代ABC(一種分布式操作系統(tǒng))的腳本語(yǔ)言[3],但不久后這種新型編程語(yǔ)言就被引入其他平臺(tái),尤其成為了學(xué)習(xí)數(shù)據(jù)科學(xué)、虛擬現(xiàn)實(shí)和人工智能方面首選的一門(mén)編程語(yǔ)言。
Python 具有以下優(yōu)勢(shì):易于學(xué)習(xí),適合初學(xué)者;可伸縮程度高,適用于大型項(xiàng)目或小型的一次性程序(稱(chēng)為腳本);可移植,跨平臺(tái);可嵌入ArcGIS;穩(wěn)定成熟;用戶(hù)社區(qū)規(guī)模大[4]。美國(guó)ESRI 公司已將Python 完全納入ArcGIS,從ArcGIS 10 開(kāi)始,ESRI采用ArcPy(通常稱(chēng)為ArcPy 站點(diǎn)包),為用戶(hù)提供了使用Python 語(yǔ)言操作所有地理信息數(shù)據(jù)處理工具(包括擴(kuò)展模塊)的機(jī)會(huì),并提供多種有用的函數(shù)和類(lèi),用于處理和詢(xún)問(wèn)GIS 數(shù)據(jù)。使用Python 和ArcPy,可以開(kāi)發(fā)出數(shù)量無(wú)限的可處理地理數(shù)據(jù)的實(shí)用程序。
地理信息數(shù)據(jù)管理工作常常涉及空間數(shù)據(jù)格式轉(zhuǎn)換、數(shù)據(jù)拼接與裁切、數(shù)據(jù)輸出與保存等步驟,下面具體說(shuō)明使用Python 實(shí)現(xiàn)這三個(gè)功能的過(guò)程。
筆者曾遇到一套采用國(guó)標(biāo)NSDTF 格式的DEM 數(shù)據(jù)(如圖1 所示),其能使用文本格式保存,也可使用記事本打開(kāi)查看,但ArcGIS 軟件卻不支持該格式的文件,需將其轉(zhuǎn)換為ESRI ASCII 格式才能正常使用。常規(guī)思路是將NSDTF 格式的DEM 數(shù)據(jù)通過(guò)人工修改來(lái)轉(zhuǎn)換,工作量大且容易出錯(cuò)。若利用Python 強(qiáng)大的文本處理能力來(lái)編寫(xiě)腳本程序,可實(shí)現(xiàn)全自動(dòng)化數(shù)據(jù)格式轉(zhuǎn)換,工作效率將大大提高,并能保證數(shù)據(jù)轉(zhuǎn)換質(zhì)量。

圖1 NSDTF_DEM數(shù)據(jù)
在編寫(xiě)空間數(shù)據(jù)格式轉(zhuǎn)換程序前,查閱了相關(guān)資料了解NSDTF 文件頭的定義,其文件格式的定義如下:
DataMark:格網(wǎng)數(shù)據(jù)交換格式-中國(guó)地球空間數(shù)據(jù)交換格式(CNSDTF-RAS 或CNS-DTF-DEM)的標(biāo)志。
Version:空間數(shù)據(jù)交換格式的版本號(hào),如1.0。
Unit:坐標(biāo)單位,K 是公里,M 是米,D 是以度為單位的經(jīng)緯度,S 是以度分秒表示的經(jīng)緯度(坐標(biāo)格式為DDDMMSS.SSSS,DDD 為度,MM 為分,SS.SSSS 為秒)。
Alpha:方向角。Compress:壓縮方法,0 表示不壓縮,1 表示游程編碼。Xo:左上角原點(diǎn)X 坐標(biāo)。Yo:左上角原點(diǎn)Y 坐標(biāo)。DX:X 方向的間距。DY:Y 方向的間距。Row:行數(shù)。Col:列數(shù)。
HZoom:高程放大倍率,設(shè)置高程的放大倍率,使高程數(shù)據(jù)以整數(shù)形式來(lái)存儲(chǔ),例如,高程精度精確到厘米,則高程的放大倍率為100。
ESRI ASCII 柵格格式可與其他基于像元或柵格的系統(tǒng)進(jìn)行信息傳輸,其文件頭的格式說(shuō)明如表1 所示。

表1 ESRI ASCII文件頭說(shuō)明
Python 有強(qiáng)大的文本處理能力,其附帶的os 模塊可加載多種功能完善的文件操作函數(shù),因此對(duì)于Python 來(lái)說(shuō),將DEM 轉(zhuǎn)換為ESRI ASCII 格式非常簡(jiǎn)單,短短幾十行腳本代碼就能輕松實(shí)現(xiàn),具體源代碼如下:



圖2 腳本運(yùn)行過(guò)程
數(shù)據(jù)拼接與裁切的實(shí)現(xiàn)步驟為:首先將要拼接的數(shù)據(jù)轉(zhuǎn)換成統(tǒng)一格式(例如mdb 格式),再將數(shù)據(jù)進(jìn)行坐標(biāo)變換,統(tǒng)一到同一個(gè)投影坐標(biāo)系,以便后續(xù)處理。根據(jù)不同項(xiàng)目的需求,規(guī)范數(shù)據(jù)的各要素集和屬性字段的名稱(chēng)、類(lèi)型等;其次創(chuàng)建一個(gè)空數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)的要素集只含項(xiàng)目需要的要素集,不必是分幅數(shù)據(jù)中所有要素集,要素集的各屬性字段須和分幅數(shù)據(jù)完全相同 ;最后,進(jìn)行數(shù)據(jù)拼接并輸出報(bào)告。部分代碼如下:
成果數(shù)據(jù)庫(kù)中需要的要素集列表
fileList = os.listdir(datadir)#分幅數(shù)據(jù)目錄中的所有文件
幅數(shù)據(jù)中的要素集列表
數(shù)據(jù)拼接后,還需使用作業(yè)區(qū)域界線(xiàn)(一般為縣界)進(jìn)行裁切,同樣,通過(guò)整合后的標(biāo)準(zhǔn)分幅數(shù)據(jù),如交通、水利普查等數(shù)據(jù),由于范圍較廣、數(shù)據(jù)層較多、數(shù)據(jù)量大等,也要使用作業(yè)區(qū)域進(jìn)行裁切。若用人工裁切,需耗費(fèi)大量時(shí)間,因此,可使用Python 編程實(shí)現(xiàn)自動(dòng)處理。需注意,數(shù)據(jù)工作空間中的每層要素都要遍歷,然后使用裁切范圍線(xiàn)進(jìn)行自動(dòng)裁切,主要代碼如下:
遍歷要素層

范圍裁切要素層位接圖表數(shù)據(jù)庫(kù),提取每一個(gè)圖廊要素,作為裁切范圍。
日常工作中地理信息從業(yè)者常常需要把mxd 格式的地圖文檔輸出為pdf 格式文件,ArcGIS 10 以后的版本都提供了Arcpy.mapping 這樣一個(gè)Python 腳本模塊,該模塊可隨著ArcGIS for Desktop 一同安裝,利用Arcpy.mapping 模塊編程可將地圖文檔輸出為pdf格式,也可實(shí)現(xiàn)地圖文檔圖層數(shù)據(jù)源的更新、修復(fù)或替換、圖層符號(hào)系統(tǒng)更新、文本字符串修改等功能。
如果是單個(gè)mxd 文件輸出,在Arc-Map 的Python窗口中輸入兩行代碼就可實(shí)現(xiàn),代碼如下:

同時(shí),也可在上述代碼中加入output-PDF.appendPages(str(PDFPath)),實(shí)現(xiàn)把一個(gè)pdf 文件追加到另一個(gè)多頁(yè)pdf 文件中。
隨著大數(shù)據(jù)時(shí)代的到來(lái),更加多源、海量、復(fù)雜的地理信息數(shù)據(jù)也會(huì)隨之而來(lái)[5],如何快速、高效地處理和利用這些數(shù)據(jù),是地理信息工作者面臨的問(wèn)題。Python 簡(jiǎn)單易學(xué),在數(shù)據(jù)自動(dòng)化處理方面非常強(qiáng)大,熟練掌握并利用好Python 語(yǔ)言,對(duì)減輕工作人員的勞動(dòng)強(qiáng)度、提高數(shù)據(jù)處理的效率和準(zhǔn)確率有重大意義。