馮 陽(yáng),夏照華,蘇慧敏,丁 聰,王 紅(北京地拓科技發(fā)展有限公司,北京 100084)
基于ARCGIS和PYTHON的水蝕野外調(diào)查單元的質(zhì)量控制方法
馮 陽(yáng),夏照華,蘇慧敏,丁 聰,王 紅
(北京地拓科技發(fā)展有限公司,北京 100084)
水蝕;調(diào)查單元;質(zhì)量控制;ARCGIS;PYTHON
水蝕野外調(diào)查單元是全國(guó)第一次水利普查水土保持情況普查抽樣調(diào)查的基本單元,調(diào)查單元提交成果的質(zhì)量狀況直接影響數(shù)據(jù)分析階段的工作量與效率。本次普查覆蓋范圍廣,抽樣調(diào)查單元數(shù)量巨大,采用傳統(tǒng)人工整理數(shù)據(jù)上報(bào)容易出錯(cuò)?;?ARCGIS 與 PYTHON 語(yǔ)言,詳細(xì)介紹了水蝕野外調(diào)查單元在資料準(zhǔn)備階段與數(shù)據(jù)處理階段的質(zhì)量控制方法。通過(guò)編寫(xiě)批處理腳本程序,實(shí)現(xiàn)調(diào)查單元四級(jí)存放目錄的建立,矢量、柵格、文本等數(shù)據(jù)的分發(fā),以及調(diào)查表到 GIS 數(shù)據(jù)屬性表的轉(zhuǎn)換等工作。在關(guān)鍵環(huán)節(jié)引入批處理腳本程序?qū)|(zhì)量進(jìn)行控制,可解放人力,提高工作效率并可保證數(shù)據(jù)質(zhì)量。
2010—2012年我國(guó)開(kāi)展了全國(guó)第一次水利普查水土保持情況普查[1]。在本次普查中,采用抽樣調(diào)查的方法來(lái)調(diào)查抽樣單元的土壤侵蝕因子狀況[2]。在全國(guó)范圍內(nèi)采用分層不等概系統(tǒng)抽樣方法確定野外調(diào)查單元,共按照4%、1%、0.25%和0.062 5%四種密度抽樣,最終在全國(guó)布設(shè)了32 364個(gè)水蝕野外調(diào)查單元[3]。對(duì)于大量的野外調(diào)查單元,采用傳統(tǒng)人工整理數(shù)據(jù)工作量大,且容易造成文件夾四級(jí)目錄下的文件存放混亂。
雖然在全國(guó)第一次水利普查水土保持情況普查時(shí),相關(guān)技術(shù)支撐單位開(kāi)發(fā)了相關(guān)軟件來(lái)進(jìn)行質(zhì)量控制,但這屬于事后檢查,一旦發(fā)現(xiàn)問(wèn)題,后期需投入大量的人力進(jìn)行核查與修訂,有時(shí)甚至?xí)绊懡庾g整體進(jìn)度。如果能在事前預(yù)防,就能在實(shí)施前期發(fā)現(xiàn)問(wèn)題、解決問(wèn)題,從而節(jié)省寶貴的時(shí)間。因此,本研究基于 ARCGIS 平臺(tái),采用 PYTHON 腳本語(yǔ)言,對(duì)質(zhì)量控制環(huán)節(jié)中的部分工序編寫(xiě)批處理腳本來(lái)實(shí)現(xiàn),該腳本語(yǔ)言的擴(kuò)充性好、要求門(mén)檻不高,省級(jí)普查員后期也可根據(jù)需要靈活擴(kuò)充。
為提高水蝕野外調(diào)查單元的質(zhì)量,水利部組織編寫(xiě)了《水力侵蝕普查數(shù)據(jù)質(zhì)量審核工作手冊(cè)》,規(guī)定了資料準(zhǔn)備階段、野外調(diào)查階段、數(shù)據(jù)處理階段的審核內(nèi)容與工作流程。對(duì)審核內(nèi)容進(jìn)行分析,并結(jié)合實(shí)際工作,可在資料準(zhǔn)備階段與數(shù)據(jù)處理階段引入批處理腳本程序進(jìn)行控制。下面將資料準(zhǔn)備階段與數(shù)據(jù)處理階段質(zhì)量控制的關(guān)鍵內(nèi)容整理如下。
在資料準(zhǔn)備階段,《水力侵蝕普查數(shù)據(jù)質(zhì)量審核工作手冊(cè)》主要是從數(shù)據(jù)存放的規(guī)范性、完整性等進(jìn)行了要求,具體包括:①四級(jí)存儲(chǔ)目錄名稱(chēng)、位置正確;②調(diào)查單元數(shù)量與規(guī)定數(shù)量一致,避免出現(xiàn)遺漏;③四級(jí)目錄包含的 basic、shp 文件夾,必須用小寫(xiě)字母,basic文件夾存放 dt1.jpg、dt1.pdf、水蝕野外調(diào)查表.xls,shp文件夾必須包含bjx、dgx、bjxp、dgxp、gl、sx、jmdd等shp文件,文件必須完整、可讀寫(xiě)、存放位置正確。
在數(shù)據(jù)處理階段的審核除要求數(shù)據(jù)存放的完整性、規(guī)范性外,還對(duì)部分GIS 數(shù)據(jù)的屬性?xún)?nèi)容進(jìn)行了要求,具體包括:①四級(jí)存儲(chǔ)目錄名稱(chēng)、位置正確,調(diào)查單元數(shù)量與規(guī)定的數(shù)量一致;②basic 文件夾下除包含資料準(zhǔn)備階段的數(shù)據(jù)外,需增加外業(yè)調(diào)查照片和錄入調(diào)查信息后的水蝕野外調(diào)查表,補(bǔ)充清繪圖掃描文件(qht.jpg)到每個(gè)調(diào)查單元對(duì)應(yīng)的basic文件夾中;③在shp文件夾下,新增調(diào)查地塊空間數(shù)據(jù)dkmp.shp,地塊圖層中須包含調(diào)查表中的全部信息,共計(jì)18個(gè)屬性字段,屬性字段名稱(chēng)與類(lèi)型須與要求一致,屬性字段內(nèi)容須與調(diào)查表中完全一致。等高線(xiàn)文件(dgxp.shp)的高程信息存儲(chǔ)字段名稱(chēng)必須為“高程”,字段類(lèi)型為雙精度浮點(diǎn)型。
根據(jù)調(diào)查單元各階段質(zhì)量控制的內(nèi)容與審核要點(diǎn),不同階段的質(zhì)量控制技術(shù)也有所不同:在資料準(zhǔn)備階段主要是通過(guò)編寫(xiě) PYTHON批處理腳本來(lái)實(shí)現(xiàn)四級(jí)存儲(chǔ)目錄的自動(dòng)創(chuàng)建、空間數(shù)據(jù)與文檔數(shù)據(jù)的分發(fā)等;在數(shù)據(jù)處理階段主要是新增GIS 空間數(shù)據(jù)質(zhì)量控制的腳本程序。
(1)針對(duì)在資料準(zhǔn)備階段要求的四級(jí)目錄完整、調(diào)查單元存放位置正確等要求,可通過(guò)四級(jí)目錄自動(dòng)創(chuàng)建程序來(lái)實(shí)現(xiàn)。具體實(shí)現(xiàn)方法:①將所有調(diào)查單元整合到一個(gè)圖層,圖層包含一個(gè)屬性字段,用于存儲(chǔ)調(diào)查單元的編號(hào);②編寫(xiě) PYTHON 腳本程序,導(dǎo)入需要的系統(tǒng)模塊與 ARCGIS相關(guān)模塊;③設(shè)置調(diào)查單元圖層路徑與四級(jí)目錄存放位置;④使用gp.searchcursor()函數(shù)查找并打開(kāi)shp 圖層,獲取每一條記錄,遍歷每一條記錄,讀取調(diào)查單元編號(hào),通過(guò)編號(hào)解析出省代碼、縣代碼與調(diào)查單元編號(hào),自動(dòng)構(gòu)建每一個(gè)調(diào)查單元需要建立的文件夾目錄;⑤通過(guò)append()函數(shù)將解析的目錄信息依次追加到一個(gè)指定變量;⑥調(diào)用操作系統(tǒng)的makedirs()函數(shù)創(chuàng)建所需目錄。水蝕野外調(diào)查單元四級(jí)存儲(chǔ)目錄創(chuàng)建程序見(jiàn)圖1(電腦屏幕截圖,下同)。
圖1 四級(jí)目錄創(chuàng)建程序示意
(2)為解決各類(lèi)空間數(shù)據(jù)與文檔數(shù)據(jù)在對(duì)應(yīng)數(shù)據(jù)目錄中準(zhǔn)確存放的問(wèn)題,分別針對(duì)空間數(shù)據(jù)與文檔數(shù)據(jù)編寫(xiě)不同的程序。其中,空間數(shù)據(jù)主要是調(diào)用 ARCGIS 的相關(guān)函數(shù)來(lái)實(shí)現(xiàn)自動(dòng)復(fù)制與分發(fā),文檔數(shù)據(jù)主要是調(diào)用操作系統(tǒng)的相關(guān)函數(shù)來(lái)實(shí)現(xiàn)文檔的復(fù)制。
空間數(shù)據(jù)的分發(fā)程序?qū)崿F(xiàn)流程:①將需要分發(fā)的文件存放在一個(gè)文件夾下,圖層名稱(chēng)中含有調(diào)查單元編號(hào),每個(gè)調(diào)查單元一個(gè)圖層;②使用ARCGIS的ListFeatureClasses()函數(shù),獲取待分發(fā)數(shù)據(jù)文件夾下的每一個(gè) GIS 圖層,以此作為循環(huán)控制條件,依次解析每一個(gè)調(diào)查單元的編號(hào)、省代碼、縣代碼,構(gòu)造空間數(shù)據(jù)文件名稱(chēng)及存放路徑并復(fù)制到普查四級(jí)目錄相應(yīng)位置;③使用exists()函數(shù)判斷需要復(fù)制的文件是否存在,如存在需先調(diào)用delete()刪除存在的空間數(shù)據(jù),然后再使用 copy()復(fù)制空間數(shù)據(jù),如不存在,則直接復(fù)制??臻g數(shù)據(jù)分發(fā)程序見(jiàn)圖2。
圖2 空間數(shù)據(jù)分發(fā)程序示意
文檔數(shù)據(jù)分發(fā)程序的實(shí)現(xiàn)流程:①設(shè)置普查成果四級(jí)存儲(chǔ)目錄、調(diào)查單元底圖存放文件夾,每個(gè)調(diào)查單元一個(gè)文件,文件命名規(guī)范,須包含調(diào)查單元編號(hào);②使用 os.walk()獲取普查目錄下的目錄與文件,依次循環(huán)查找到 basic 文件夾;③根據(jù) basic 文件夾所在的上級(jí)目錄,獲取調(diào)查單元編號(hào),構(gòu)造需要復(fù)制的底圖文件的名稱(chēng)與路徑;④使用 shutil.copy()進(jìn)行文件的復(fù)制,復(fù)制時(shí)可一并修改復(fù)制后的文件名稱(chēng)。文檔數(shù)據(jù)分發(fā)程序詳細(xì)代碼見(jiàn)圖3。
圖3 文檔數(shù)據(jù)分發(fā)程序示意
在數(shù)據(jù)處理階段,常規(guī)的文件分發(fā)程序可直接使用資料準(zhǔn)備階段的空間與文檔數(shù)據(jù)分發(fā)程序,同時(shí)需要新增部分對(duì) GIS 數(shù)據(jù)內(nèi)容的控制程序。
(1)為保證地塊圖層文件(dkmp.shp)中屬性字段的名稱(chēng)與類(lèi)型滿(mǎn)足要求,可對(duì)每一個(gè)調(diào)查單元一次性增加所需字段。為保證地塊圖層邊界與調(diào)查單元邊界圖層外邊界一致,在清繪圖矢量化時(shí)直接采用“多邊形切割功能”對(duì)調(diào)查單元邊界圖層進(jìn)行切割,從而生成地塊圖層。
屬性字段增加程序?qū)崿F(xiàn)流程:①編寫(xiě)腳本程序,一次性導(dǎo)入所需外部模塊,如 arcpy、sys、os 等;②設(shè)置需要增加字段的地塊圖層文件所在的文件夾,文件夾下存放全部調(diào)查單元的地塊圖層,每個(gè)調(diào)查單元一個(gè)圖層,圖層名稱(chēng)包含調(diào)查單元編號(hào)信息;③通過(guò)ListFeatureClasses()函數(shù)獲取需要增加字段的所有調(diào)查單元,以此作為循環(huán)條件,依次對(duì)每個(gè)調(diào)查單元增加屬性字段;④使用AddField_management()函數(shù)依次增加土地利用名稱(chēng)、代碼、郁閉度、蓋度等17個(gè)屬性字段。屬性字段增加詳細(xì)程序如圖4所示。
圖4 屬性字段增加程序示意
(2)野外調(diào)查屬性值錄入。在數(shù)據(jù)處理階段,要求將水蝕野外調(diào)查表中的信息逐條、逐字段錄入到地塊圖層失量數(shù)據(jù)對(duì)應(yīng)的屬性表中,采用傳統(tǒng)人工逐數(shù)據(jù)項(xiàng)錄入或逐表整理后關(guān)聯(lián)寫(xiě)入比較繁瑣,容易出錯(cuò),存在信息漏錄、錯(cuò)錄的風(fēng)險(xiǎn)。因此,可編寫(xiě)批處理程序來(lái)實(shí)現(xiàn),具體實(shí)現(xiàn)流程:①設(shè)置地塊圖層空間數(shù)據(jù)存放文件夾,并將其設(shè)置為ARCGIS 環(huán)境變量,設(shè)置需要導(dǎo)入的水蝕野外調(diào)查表存放的路徑,地塊圖層與調(diào)查表之間可通過(guò)調(diào)查單元編號(hào)建立對(duì)應(yīng)關(guān)系;②調(diào)用ListFeatureClasses()函數(shù)獲取每一個(gè)地塊圖層,依次循環(huán),通過(guò)地塊圖層文件名解析調(diào)查單元編號(hào),再通過(guò)調(diào)查單元編號(hào)查找到對(duì)應(yīng)的野外調(diào)查表格;③調(diào)用xlsapp.Workbooks.Open()打開(kāi)野外調(diào)查表,調(diào)用xlsbook.Sheets(1).UsedRange.Rows.count和xlsbook.Sheets(1).UsedRange.Columns.count分別獲取野外調(diào)查表格有效區(qū)域的行與列;④使用野外調(diào)查表格行數(shù)量作為子循環(huán)控制條件,逐項(xiàng)讀取信息,使用xlssheet.Cells(行,列).Value獲取單元格數(shù)據(jù)值;⑤通過(guò)調(diào)查表中“地塊編號(hào)”字段與空間數(shù)據(jù)中“地塊編號(hào)”字段建立一一對(duì)應(yīng)關(guān)系,逐行將每個(gè)單元格的信息寫(xiě)入到 shp 文件;⑥使用UpdateCursor()函數(shù)更新地塊圖中的屬性信息。外業(yè)調(diào)查表格信息導(dǎo)入程序部分代碼見(jiàn)圖5所示。
圖5 外業(yè)調(diào)查表格信息導(dǎo)入程序示意
通過(guò)分析水蝕野外調(diào)查單元質(zhì)量控制各環(huán)節(jié)的審核內(nèi)容,結(jié)合 ARCGIS 與 PYTHON 腳本語(yǔ)言,從調(diào)查單元存儲(chǔ)目錄的建立、文件型數(shù)據(jù)的分發(fā)、空間數(shù)據(jù)的分發(fā)、空間數(shù)據(jù)屬性信息的導(dǎo)入等環(huán)節(jié)引入批處理程序。批處理程序的引入,能有效保證水蝕野外調(diào)查單元在資料準(zhǔn)備階段與數(shù)據(jù)處理階段的質(zhì)量?;?PYTHON 語(yǔ)言的批處理程序的擴(kuò)展無(wú)須專(zhuān)業(yè)的程序員,省級(jí)普查員可根據(jù)當(dāng)?shù)貥I(yè)務(wù)開(kāi)展的實(shí)際需求,引入新的控制環(huán)節(jié)來(lái)提高工作效率與成果質(zhì)量。本次介紹的質(zhì)量控制技術(shù)全面應(yīng)用于北京市第一次水務(wù)普查水土保持專(zhuān)項(xiàng)普查[4],使用該控制技術(shù),有力地保證了在資料準(zhǔn)備階段和數(shù)據(jù)處理階段的成果質(zhì)量100%滿(mǎn)足《水力侵蝕普查數(shù)據(jù)質(zhì)量審核工作手冊(cè)》中規(guī)定的要求。
[1] 國(guó)務(wù)院第一次全國(guó)水利普查領(lǐng)導(dǎo)小組辦公室.第一次全國(guó)水利普查總體方案[M].北京:中國(guó)水利水電出版社,2010:1-3.
[2] 李智廣,符素華,劉寶元.我國(guó)水力侵蝕抽樣調(diào)查方法[J].中國(guó)水土保持科學(xué),2012,10(1):77-81.
[3] 劉寶元,郭索彥,李智廣,等.中國(guó)水利侵蝕抽樣調(diào)查[J].中國(guó)水土保持,2013(10):26-34.
[4] 北京市第一次水務(wù)普查工作領(lǐng)導(dǎo)小組辦公室.北京市第一次水務(wù)普查實(shí)施方案[R].北京:北京市水務(wù)局,2011:9-10.
TP79;S157
A
1000-0941(2018)01-0055-03
馮陽(yáng)(1986—),男,安徽六安市人,工程師,碩士,研究方向?yàn)樗帘3诌b感監(jiān)測(cè)、信息化。
2017-06-27
(責(zé)任編輯 李楊楊)