錢發(fā)斌,延紅衛(wèi)
(云南省林業(yè)調(diào)查規(guī)劃院,云南 昆明 650051)
在林業(yè)調(diào)查規(guī)劃工作中經(jīng)常需要對工作形成的矢量圖層進(jìn)行邏輯錯(cuò)誤修改,由于矢量圖層的小班因子一般較多,修改起來比較緩慢,往往是修改好了某一個(gè)因子,因修改另一個(gè)因子又導(dǎo)致該因子派生出新的錯(cuò)誤。通過研究矢量圖層邏輯錯(cuò)誤的常規(guī)修改方法,結(jié)合ArcEngine(全稱ArcGIS Engine)二次開發(fā)方法和數(shù)據(jù)庫技術(shù),探索出新的矢量數(shù)據(jù)邏輯錯(cuò)誤修改方法,并應(yīng)用于林業(yè)生產(chǎn)領(lǐng)域的各項(xiàng)工作中,以期提高工作效率。
ArcEngine是用于構(gòu)建定制應(yīng)用的一個(gè)完整的嵌入式的GIS組件庫。利用ArcEngine,開發(fā)者能將ArcGIS功能集成到一些應(yīng)用軟件。在ArcGIS9系列產(chǎn)品中,ArcGIS Desktop、ArcEngine和ArcGIS Server都是基于核心組件庫ArcObjects搭建的。ArcObjects組件庫有3000多個(gè)對象可供開發(fā)人員調(diào)用,為開發(fā)人員集成了大量的GIS功能,可快速地幫助開發(fā)人員進(jìn)行GIS項(xiàng)目的二次開發(fā)。2004年美國ESRI發(fā)布了ArcEngine,ArcEngine開發(fā)包提供了一系列可以在ArcGISDesktop框架之外使用的GIS組件,ArcEngine包含一個(gè)構(gòu)建定制應(yīng)用的開發(fā)包,其具有簡潔、靈活、易用、可移植性強(qiáng)等特點(diǎn),程序設(shè)計(jì)者可在自己的計(jì)算機(jī)上安裝ArcEngine開發(fā)工具包,工作于自己熟悉的編程語言和開發(fā)環(huán)境中。ArcEngine通過在開發(fā)環(huán)境中添加控件、工具、菜單條和對象庫,在應(yīng)用中嵌入GIS功能[1]。
數(shù)據(jù)庫技術(shù)是信息系統(tǒng)的一個(gè)核心技術(shù),是一種計(jì)算機(jī)輔助管理數(shù)據(jù)的方法,可研究如何組織和存儲數(shù)據(jù),如何高效地獲取和處理數(shù)據(jù)。數(shù)據(jù)庫技術(shù)是現(xiàn)代信息科學(xué)與技術(shù)的重要組成部分,是計(jì)算機(jī)數(shù)據(jù)處理與信息管理系統(tǒng)的核心。數(shù)據(jù)庫技術(shù)研究解決了計(jì)算機(jī)信息處理過程中大量數(shù)據(jù)有效地組織和存儲問題,在數(shù)據(jù)庫系統(tǒng)中減少數(shù)據(jù)存儲冗余,實(shí)現(xiàn)數(shù)據(jù)共享,保障數(shù)據(jù)安全以及高效地檢索數(shù)據(jù)和處理數(shù)據(jù)[2]。
在實(shí)際工作中,大多數(shù)人一般使用ArcGIS軟件來進(jìn)行邏輯錯(cuò)誤修改,通常的修改過程是在軟件中打開要進(jìn)行邏輯修改的圖層,然后調(diào)出查詢對話框,輸入查詢語句,查出錯(cuò)誤,再通過屬性表的計(jì)算字段功能完成修改(圖1)。
圖1 傳統(tǒng)的修改方法
ArcGIS提供了模型構(gòu)建功能,矢量圖層邏輯修改的另一種方法是在熟悉模型構(gòu)建的情況下調(diào)用相應(yīng)的GIS功能,通過整理完備的事務(wù)邏輯和處理流,在ArcGIS模型構(gòu)建器中自定義創(chuàng)建模型,把凡是符合條件的錯(cuò)誤讓模型完成自動修改。
基于ArcEngine二次開發(fā)技術(shù),利用Sql Server數(shù)據(jù)庫技術(shù),通過ArcEngine控件獲取圖層信息,再將圖層屬性信息轉(zhuǎn)換為數(shù)據(jù)表,轉(zhuǎn)換后的數(shù)據(jù)表放在一個(gè)DataTable數(shù)據(jù)容器中,通過數(shù)據(jù)傳輸語句導(dǎo)入數(shù)據(jù)庫,而后通過編寫邏輯檢查語句來進(jìn)行批量檢查錯(cuò)誤和改錯(cuò)。這樣做的好處在于,設(shè)計(jì)的初衷和過程可能繁瑣,但最終的處理均是交給計(jì)算機(jī)來完成,對于人工來說是無感的、十分快捷的,對于操作人員來說不需要掌握其中的內(nèi)容,只需了解怎樣修改數(shù)據(jù)邏輯即可。
系統(tǒng)的基本工作邏輯是:在軟件中打開要進(jìn)行邏輯錯(cuò)誤修改的圖層,迅速地獲取到圖層信息,將圖層信息轉(zhuǎn)換為數(shù)據(jù)表并放入DataTable組件中,并將此DataTable中的內(nèi)容導(dǎo)入數(shù)據(jù)庫,數(shù)據(jù)庫根據(jù)事先通過電子表格導(dǎo)入的業(yè)務(wù)邏輯檢查語句進(jìn)行批量檢查,然后用戶根據(jù)錯(cuò)誤情況進(jìn)行修改,修改完成后再進(jìn)行刷新,檢查是否還存在未修改完的錯(cuò)誤以及是否有新的錯(cuò)誤產(chǎn)生,如是,重復(fù)以上步驟直至錯(cuò)誤修改完成(圖2)。
圖2 系統(tǒng)的工作原理
修改方法有2種,一種是在軟件中開發(fā)出編輯、修改、批量計(jì)算等功能來進(jìn)行修改,另外一種是根據(jù)個(gè)人習(xí)慣在ArcGIS中進(jìn)行修改,因?yàn)椴捎眠@種在某種意義上打破了ArcGIS自動架構(gòu)鎖的限制(實(shí)際鎖依然存在,但可以在軟件中打開圖層進(jìn)行邏輯檢查的同時(shí),又在ArcGIS中對同一圖層進(jìn)行編輯和修改,感覺像不存在鎖的限制一樣),邏輯檢查語句可以根據(jù)實(shí)際情況編寫,如在工作中需要小斑面積要大于0.067 hm2(1畝),樹種平均胸徑要大于5 cm才能有蓄積等這樣的業(yè)務(wù)邏輯要求,可以統(tǒng)一編寫所有語句存放在一個(gè)電子表格中導(dǎo)入軟件即可,根據(jù)需要可隨時(shí)更改,極其方便和靈活(圖3)。
經(jīng)過實(shí)例驗(yàn)證,從理論層面上說,基于ArcEngine二次開發(fā)方法結(jié)合數(shù)據(jù)庫技術(shù)的修改方法對矢量圖層的邏輯錯(cuò)誤進(jìn)行修改,不僅避免了傳統(tǒng)修改方法改一處需要先查詢再改錯(cuò)再查詢再改錯(cuò)的反復(fù)修改的繁瑣,同時(shí),針對批量查詢出的錯(cuò)誤,有時(shí)可以根據(jù)錯(cuò)誤情況結(jié)合人工判斷把幾種錯(cuò)誤統(tǒng)一修改,在很大程度上減少了改此及彼派生出新的錯(cuò)誤,如果采用傳統(tǒng)的修改方法,有可能對一個(gè)字段已修改正確了,而因改了另一個(gè)字段又出現(xiàn)了新的錯(cuò)誤,這種情況的出現(xiàn)無法避免,其取決于矢量圖層字段之間的邏輯關(guān)系是否嚴(yán)謹(jǐn)。因此,采用批量查詢修改的方式從理論上無疑是快捷高效的,而模型修改方法在解決這一問題上是無能為力的,除非在開始編寫模型時(shí)就把所有的邏輯錯(cuò)誤類型考慮在內(nèi)。
從執(zhí)行效率層面來看,模型修改方法的執(zhí)行效率是最高的,因?yàn)槠渌械墓ぷ骶捎?jì)算機(jī)來完成;傳統(tǒng)的修改方法通過編寫語句完成一個(gè)查詢平均約需1.5 min時(shí)間,而修改一次錯(cuò)誤約30 s時(shí)間,則100個(gè)邏輯查詢語句(假設(shè)派生的錯(cuò)誤有20個(gè)),則總耗時(shí)為:(100個(gè)+20個(gè))×1.5 min/個(gè)+(100個(gè)+20個(gè))×0.5 min/個(gè)=240 min=4 h。當(dāng)然,這是理論上的絕對值,實(shí)際修改過程中可能耗時(shí)要更久;基于ArcEngine結(jié)合數(shù)據(jù)庫技術(shù)的修改方法省去了逐一輸入語句查詢過程,也省去了對派生錯(cuò)誤的逐一查詢過程,較傳統(tǒng)的修改方法,100個(gè)邏輯查詢語句(同樣假設(shè)派生的錯(cuò)誤有20個(gè))從理論上看修改這些錯(cuò)誤的總耗時(shí)為:(100個(gè)+20個(gè))×0.5 min/個(gè)=60 min=1 h。由此看來,效率提高了4倍(表1)。
圖3 修改方法
通過實(shí)際驗(yàn)證,后2種方法的效率之比不止于4倍。因傳統(tǒng)的修改方法如果修改的錯(cuò)誤數(shù)較多,需反復(fù)進(jìn)行同樣類似的操作,會使人變得疲憊不堪,中間需要反復(fù)休息,而基于ArcEngine結(jié)合數(shù)據(jù)庫技術(shù)的修改方法本身耗時(shí)不多,可一氣呵成,這樣極大地提高了工作效率。
實(shí)踐證明,基于ArcEngine二次開發(fā)方法結(jié)合數(shù)據(jù)庫技術(shù)的矢量圖層邏輯錯(cuò)誤修改方法是可靠和高效的,最重要的是可以重復(fù)使用,不限圖層、字段類型,任何坐標(biāo)的任何矢量圖層均可放入軟件中,只需根據(jù)不同業(yè)務(wù)邏輯導(dǎo)入相應(yīng)的邏輯檢查語句集(語句集還可根據(jù)實(shí)際隨時(shí)更改),即可快速檢查和修改,一次編程,永久使用,使用簡單,靈活方便,可充分提高林業(yè)生產(chǎn)和工作效率。