李小根,潘向麗,周 進(jìn),孫大鵬
(華北水利水電學(xué)院,河南鄭州 450011)
AO組件技術(shù)在水利信息管理中的應(yīng)用
李小根,潘向麗,周 進(jìn),孫大鵬
(華北水利水電學(xué)院,河南鄭州 450011)
應(yīng)用組件庫ArcObjects中的組件研制了某水庫的庫容和淹沒面積的計算功能模塊,分析了功能模塊的基本原理,建立了基于AO的計算方法,并和傳統(tǒng)方法進(jìn)行了比較.結(jié)果表明,基于AO的計算方法得出的結(jié)論精度更高,在防洪、調(diào)度、洪水綜合利用方面能夠提供精確的、科學(xué)的決策依據(jù).
控件;模塊;引擎;ArcObjects
在水庫的日常管理中,水庫的管理部門經(jīng)常要計算水庫的庫容和淹沒面積,按照傳統(tǒng)方法,水庫的管理部門將水庫按照規(guī)則立方體進(jìn)行計算,這種計算方法勢必帶來一定的誤差.而應(yīng)用ESRI公司的組件庫ArcObjects的控件能夠很好地解決這一問題,該方法按照水庫的實際地形來計算水庫的庫容和淹沒面積,能夠得出精確的計算結(jié)果.
該計算方法使用ESRI ArcGIS Objects的 ToolbarControl和 MapControl 2個控件.ToolbarControl控件用于容納各種內(nèi)置和自定義工具,MapControl讀取用來進(jìn)行計算所需的地理數(shù)據(jù).MapControl控件是該數(shù)據(jù)計算方法的核心控件,用來裝載地圖數(shù)據(jù)對象.這些裝入MapControl的地圖數(shù)據(jù)對象在程序設(shè)計中指定,并且可以指定為鏈接模式或包含模式.在鏈接模式下,無論何時創(chuàng)建MapControl控件,控件會自動從地圖文檔中讀取最新的數(shù)據(jù).在包含模式下,MapControl控件將地圖文檔中的數(shù)據(jù)的一個副本復(fù)制到控件中,不再顯示復(fù)制以后更新的地圖文檔的內(nèi)容.把地圖文檔裝入MapControl控件,可以使用 MapControl控件的 LoadMxFile方法[1].
該數(shù)據(jù)計算方法界面的設(shè)計視圖如圖1所示.
此獨立 CalForm窗體從 System.Windows.Forms.Form繼承而來,包括2個主要對象和4個主要方法、事件[2-3].
2個主要對象分別為:MapControl控件的實例axMapControl1,ToolbarControl控件的實例axToolbar-Control1.4個主要方法和事件為:GetProarea(),GetVolume(),axMapControl1_OnMouseMove(),ax-ToolbarControl1_OnMouseMove().
GetProarea()方法用來計算當(dāng)前水位下庫區(qū)淹沒面積.使用了ArcGIS Engine的 Geodatabase對象庫中的ITin,ITinAdvanced,ISurface 3個接口.其中,ITin接口用于新建對象,ITinAdvanced接口的Init()方法用于初始化TIN數(shù)據(jù),ISurface接口的GetProjectedArea()方法用于計算當(dāng)前水位下的庫區(qū)淹沒面積.GetProarea()方法的核心代碼為:
圖1 數(shù)據(jù)計算的設(shè)計視圖
用GetVolume()方法計算當(dāng)前水位下的庫容.使用了ArcGIS Objects的 Geodatabase對象庫中的ITin,ITinAdvanced,ISurface 3 個接口.其中,ITin 接口用于新建對象,ITinAdvanced接口的Init()方法用于初始化TIN數(shù)據(jù),ISurface接口的GetVolume()方法用于計算當(dāng)前水位下的庫容.GetVolume()方法的核心代碼為:
數(shù)據(jù)計算界面中的水深點擊式查詢功能是自定義工具.此工具對象繼承自 ESRI.ArcGIS.SystemUI.ITool和 ESRI.ArcGIS.SystemUI.ICommand,通過ToolbarControl的AddItem()方法添加到工具條中.在實現(xiàn) ESRI.ArcGIS.SystemUI.ITool 和 ESRI.Arc-GIS.SystemUI.ICommand接口時最主要的部分是重寫了 ESRI.ArcGIS.SystemUI.ICommand 接口的 On-MouseDown()事件.用它來處理鼠標(biāo)在地圖上的點擊,搜索鼠標(biāo)點擊點附近的TIN數(shù)據(jù),根據(jù)TIN數(shù)據(jù)進(jìn)行線性內(nèi)插,計算出點擊點的高程值并返回給用戶.重寫OnMouseDown()事件的部分代碼為:
某水庫水位是從128 m到106 m的整數(shù)水位,使用該系統(tǒng)對庫容和淹沒面積進(jìn)行計算并與常規(guī)計算方法、積分法的計算結(jié)果相比較,統(tǒng)計結(jié)果如圖2和圖3所示.
圖2 庫容計算結(jié)果比較
從圖2和圖3可以看出,3條線基本重合,說明該方法切實可行.引入“比例”的概念,用“比例”表示該系統(tǒng)的計算結(jié)果與常規(guī)法和積分法計算結(jié)果的平均值所差的百分比.可以得出如下結(jié)論:①當(dāng)水位在107 m以上時該系統(tǒng)的庫容和淹沒面積計算結(jié)果和其它2種方法的計算結(jié)果相差無幾,最多差3.07%,大多數(shù)在1%之內(nèi),這個誤差正是由傳統(tǒng)方法計算造成的,而該計算方法是應(yīng)用積分方法得出來的結(jié)果,精度比較高;②當(dāng)水位在106 m到107 m,也就是接近死水位1 m范圍內(nèi)出現(xiàn)了較大誤差,事實上水位降到這個范圍的可能性很小,因此這部分誤差對該系統(tǒng)的運行不會造成太大影響.另外還可用曲線擬合法修正這部分計算結(jié)果.
圖3 淹沒面積計算結(jié)果比較
[1]Hand D,Mannila H,Smyth P.數(shù)據(jù)挖掘原理[M].張銀奎,廖麗,宋俊,譯.北京:機械工業(yè)出版社,2003.
[2]呂鳳軍.數(shù)字圖像處理編程基礎(chǔ)[M].北京:機械工業(yè)出版社,1998.
[3]黃敏,何國輝.Visual C++程序開發(fā)指南[M].北京:科學(xué)出版社,1995.
Application of the AO Component to Water Conservancy Information Management
LI Xiao-gen,PAN Xiang-li,ZHOU Jin,SUN Da-peng
(North China Institute of Water Conservancy and Hydroelectric Power,Zhengzhou 450011,China)
The ArcObjects components were applied to developing the functional module for calculating the storage capacity and flooded area of the reservoir,and the basic principle of it was analyzed.The calculation method based on ArcObjects was established,and the calculation results were compared with the ones obtained by the traditional method.It indicated that the results obtained by the calculation method based on ArcObjects were more accurate and could provide a precise and scientific decision-making basis for flood control,scheduling,comprehensive utilization of flood.
component;module;engine;ArcObjects
1002-5634(2011)05-0024-03
2011-06-28
李小根(1973—),男,河南焦作人,副教授,博士,主要從事水利信息技術(shù)、地理信息系統(tǒng)方面的研究.
(責(zé)任編輯:蔡洪濤)