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