IDL分布式GIS應用思考
時間:2022-10-25 07:35:00
導語:IDL分布式GIS應用思考一文來源于網(wǎng)友上傳,不代表本站觀點,若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。
摘要:以新型的面向圖形對象、基于矩陣的交互式數(shù)據(jù)處理語言(idl),與空間數(shù)據(jù)引擎(SDE)結(jié)合來構(gòu)建分布式gis應用,既發(fā)揮了IDL在空間數(shù)據(jù)處理、三維顯示方面的長處,又利用了SDE在空間數(shù)據(jù)管理方面良好的性能及安全性,同時避免了在購買專業(yè)GIS開發(fā)組件許可證上的巨額投入,在性能和開發(fā)成本之間做到了合適的平衡,是一種經(jīng)濟可行的應用方案。
關(guān)鍵詞:地理信息系統(tǒng);交互式數(shù)據(jù)處理語言;空間數(shù)據(jù)引擎;C#;分布式應用
0引言
進行GIS應用開發(fā),若直接從底層做起則開發(fā)周期長、成本高。目前應用最為廣泛的模式是集成二次開發(fā)[1],就是以當前成熟的商業(yè)GIS平臺為基礎(chǔ),以高級開發(fā)語言為支持來進行應用開發(fā)。然而目前的商業(yè)GIS平臺價格昂貴,并且由于提供廠商在知識產(chǎn)權(quán)保護方面的考慮和限制,有些還不能用來開發(fā)完全獨立(Standalone)的應用系統(tǒng)。
業(yè)界應用最廣的ESRI[2]公司產(chǎn)品系列中提供了功能強大的基于COM技術(shù)的ArcObjects組件作為GIS二次開發(fā)工具,開發(fā)者可以借助其成熟的空間分析技術(shù)以及其與ArcSDE空間數(shù)據(jù)庫之間良好的協(xié)作特性,快速地實現(xiàn)GIS應用系統(tǒng)的開發(fā)。然而在ArcGIS9.0之前的版本中,ArcObjects不是獨立的軟件開發(fā)工具包(SoftwareDevelopmentKit,SDK),無法脫離ArcGIS環(huán)境開發(fā)獨立的應用系統(tǒng)[2];即便在新的ArcGIS9.0開始支持獨立開發(fā)的情形下,昂貴的許可費用仍然使得目標系統(tǒng)的應用成本非常高。這對科研應用目的而言,不但開發(fā)成本太高,而且靈活性很差。因而嘗試在系統(tǒng)的設(shè)計開發(fā)中,選擇基于矩陣運算的交互式數(shù)據(jù)處理語言(InteractiveDataLanguage,IDL),以及商業(yè)化的空間數(shù)據(jù)管理引擎ArcSDE的集成開發(fā)模式,以期在性能和開發(fā)成本之間達成一個合理的平衡。
1開發(fā)環(huán)境
IDL是一種新型的面向圖形對象、基于矩陣的數(shù)據(jù)處理語言,自帶強大的數(shù)學庫支持,在數(shù)據(jù)運算、分析和空間表現(xiàn)方面有出色的性能[3]。ArcSDE是非常成熟的空間數(shù)據(jù)庫引擎。通過結(jié)合MSSQLServer或Oracle大型關(guān)系數(shù)據(jù)庫系統(tǒng),可以建立具有良好性能的空間數(shù)據(jù)庫[2];并且通過利用ArcSDE提供的ClientAPIs(ApplicationProgrammingInterfaces,應用編程接口)接口進行開發(fā),系統(tǒng)的自主性較強。
經(jīng)過對多種開發(fā)環(huán)境和編程語言的比較,系統(tǒng)決定采用.NET作為實現(xiàn)平臺。C#是一種新的編程語言,它是專為生成運行在.NET框架上的企業(yè)級應用程序而設(shè)計的,同時具備C/C++的強大功能及VisualBasic的快速開發(fā)能力,是面向下一代操作系統(tǒng)的開發(fā)語言[4]。
2系統(tǒng)開發(fā)方案
2.1系統(tǒng)體系結(jié)構(gòu)
系統(tǒng)采用多層邏輯結(jié)構(gòu)的胖客戶端/瘦服務(wù)器端模式。服務(wù)器端由ArcSDE來實現(xiàn)空間數(shù)據(jù)的管理,結(jié)合服務(wù)器上的SQLServer構(gòu)成空間數(shù)據(jù)庫??蛻舳擞蒀#構(gòu)建,利用其在應用程序開發(fā)方面的性能、快捷性及交互界面開發(fā)方面的出色能力,以彌補IDL在此方面的不足。IDL在系統(tǒng)中主要負責實現(xiàn)空間數(shù)據(jù)(含二維和三維)的本地訪問管理和表現(xiàn),如空間數(shù)據(jù)的加載、本地管理、地圖渲染、三維顯示等;系統(tǒng)還可借助IDL強大的數(shù)據(jù)處理能力實現(xiàn)基于矩陣運算的各種分析功能。IDL部分經(jīng)過良好的封裝被嵌入在客戶端的C#Shell中。
2.2客戶端程序框架
客戶端交互界面由C#和經(jīng)過.NET封裝的IDLDrawWidget開發(fā)控件構(gòu)建。由于IDL并沒有像其他專業(yè)GIS開發(fā)組件(如ESRI的MapObjects或ArcObjects)一樣直接提供對GIS應用開發(fā)的支持,因而基本的GIS功能需要利用IDL自行實現(xiàn)。圖層控件用標準的Windows基本控件組合開發(fā);鷹眼控件和地圖控件由經(jīng)過.NET封裝的IDLDrawWidget開發(fā)控件來實現(xiàn);比例尺控件由Windows繪圖函數(shù)與IDL函數(shù)共同實現(xiàn)。
2.3空間數(shù)據(jù)管理
系統(tǒng)中所有的空間數(shù)據(jù)由ArcSDE空間數(shù)據(jù)庫統(tǒng)一管理,系統(tǒng)與ArcSDE的交互由C#Shell負責管理,具體的交互功能在體系結(jié)構(gòu)圖的DataAcess組件中實現(xiàn)。其中主要使用了經(jīng)過.NET封裝的ArcSDECAPIs空間數(shù)據(jù)庫訪問函數(shù)庫。
2.4空間數(shù)據(jù)處理與顯示
系統(tǒng)中使用IDL語言來進行對空間數(shù)據(jù)的處理與運算。IDL是目前對科學計算可視化支持較好的語言之一,是一種集成了所有科學計算環(huán)境中所需函數(shù)的面向矩陣運算、用于數(shù)據(jù)可視化研究與應用開發(fā)的第四代計算機語言,也是易于使用、面向矩陣的語言。它具有高級圖像處理能力、交互式二維和三維圖形技術(shù)、面向?qū)ο蟮木幊谭绞?、OpenGL圖形加速、量化可視化表現(xiàn)、集成的數(shù)學與統(tǒng)計學算法、靈活的數(shù)據(jù)輸入/輸出方式、跨平臺圖形用戶界面工具包、連接ODBC兼容數(shù)據(jù)庫存取及多種程序連接工具等功能,并且能夠運行于多種操作系統(tǒng)和硬件平臺之上。本質(zhì)上,IDL是一個巨大的C程序庫,包括了編譯器、解釋器、圖像、算術(shù)處理器、用戶界面和大量依賴操作系統(tǒng)的代碼[5]。利用C#和IDL語言混合開發(fā)的系統(tǒng),既包含了IDL語言強大的科學計算能力,又具備了C#語言對系統(tǒng)開發(fā)的靈活性以及系統(tǒng)運行的穩(wěn)定性,使得兩種語言在系統(tǒng)中達到優(yōu)勢互補,是實現(xiàn)科學計算及可視化的一種有效途徑。
3SDE訪問接口
系統(tǒng)采用了目前較為成熟的空間數(shù)據(jù)庫引擎ArcSDE與大型關(guān)系數(shù)據(jù)庫管理系統(tǒng)SQLServer來實現(xiàn)對空間數(shù)據(jù)的分布式存儲和管理。需要解決的首要問題是如何建立與ArcSDE的遠程連接,并與之實現(xiàn)交互操作。
ArcSDE提供的訪問通道有三條[6,7]。三條通道中:使用ArcObjects成本太高;而直接數(shù)據(jù)庫連接通過SQL語言直接從關(guān)系型數(shù)據(jù)庫中獲取以表、行、列為基礎(chǔ)的數(shù)據(jù),這種方法繞過了ArcSDE,適合于對非空間信息的訪問,但處理空間信息的難度很大;ArcSDE的ClientAPIs是較為基礎(chǔ)的一種功能形式,具有較長的歷史和非常廣泛的應用,它面向開放式系統(tǒng)開發(fā),可以用于客戶端與ArcSDE的交互過程。系統(tǒng)中最終采用ArcSDE提供的C語言客戶端API方式,以便在保證系統(tǒng)性能的前提下,降低系統(tǒng)的開發(fā)和運行成本。
ArcSDE的CAPIs具有較高的數(shù)據(jù)訪問性能、較完整的矢量和柵格數(shù)據(jù)訪問和管理能力。但是它是一個復雜的體系,包括30個結(jié)構(gòu)、21個枚舉以及757個函數(shù),并且不支持面向?qū)ο?,也沒有提供對.NET環(huán)境的支持(只提供了C和Java兩個版本),因而難以直接在.NET環(huán)境中以不安全代碼(Unsafe)的方式訪問。
為解決這一問題,系統(tǒng)開發(fā)中利用托管(Managed)C++語言,將ArcSDE的CAPIs封裝為.NET環(huán)境支持的模塊,然后在.NET環(huán)境中使用。
4IDL與C#通信機制
4.1IDL對混合編程的支持
IDL為了更好地實現(xiàn)軟件開發(fā)的靈活性和面向?qū)ο蟮墓δ?,不斷地對功能進行擴充,并且增加了許多與其他語言之間的通信接口,并提供了許多與其他語言進行混合編程的內(nèi)部API函數(shù)。IDL6.0可以與標準C、UNIXC、VisualC++、Java、Delphi等高級語言進行混合編程。
IDL提供了以下幾種混合編程方法[8]:
(1)管道;
(2)在IDL中調(diào)用COM對象或ActiveX控件;
(3)IDLDrawWidgetActiveX控件;
(4)在IDL中使用Java對象;
(5)通過RPC調(diào)用IDL(UNIX);
(6)通過CALL_EXTERNAL函數(shù)調(diào)用外部函數(shù)。
4.2目標系統(tǒng)適用的方式
由于目標系統(tǒng)是在C#編程環(huán)境中使用IDL,IDL的MicrosoftWindows版本的ActiveX控件,即IDLDrawWidget最適合本文目標系統(tǒng)開發(fā)的要求。IDLDrawWidget控件提供了在Windows程序中以ActiveX組件形式集成IDL功能的機制,為這些程序提供數(shù)據(jù)的分析和可視化能力。
IDL提供的IDLDrawWidget控件的主要特征如下[8]:
(1)IDLActiveX控件能顯示IDL直接圖形和對象圖形,通過設(shè)置“圖形顯示方式”屬性,控制圖形的顯示類型。
(2)IDLActiveX控件能夠響應鼠標事件。這些事件可以由外部程序觸發(fā),也可以由IDL自己產(chǎn)生。
(3)IDLActiveX控件提供了IDL與外部應用環(huán)境之間的數(shù)據(jù)傳輸機制,使得IDL與外部程序之間的數(shù)據(jù)傳輸變得十分簡單。
(4)IDLActiveX控件可以應用于任何支持ActiveX控件的開發(fā)環(huán)境中。因此,可以將IDL強大的圖形顯示功能集成到外部應用程序中,脫離IDL環(huán)境,具有很強的可塑性。
4.3通信及數(shù)據(jù)支持
IDL提供了以下Method用于傳遞數(shù)據(jù)和命令[8]:
(1)SetNamedData——向IDL傳遞數(shù)據(jù),支持所有的Variant數(shù)據(jù)格式;
(2)GetNamedData——支持VT_UI1、VT_I2、VT_I4、VT_R4、VT_R8和VT_BSTR;
(3)CopyNamedArray——返回IDL數(shù)組的復本;
(4)SetNamedArray——在.NET、Delphi等環(huán)境下不能實現(xiàn)數(shù)據(jù)共享,只能傳入數(shù)據(jù);
(5)ExecuteStr——執(zhí)行標準IDL語句,也可以作為一種數(shù)據(jù)的傳遞方式;
(6)VariableExists——用于判斷IDL環(huán)境中是否已經(jīng)存在給定變量名稱的變量;
事件傳遞:
(1)鼠標事件由.NET環(huán)境處理;
(2)保留通過文本結(jié)果輸出來實現(xiàn)由IDL到.NET環(huán)境的主動事件激發(fā)的方式。
IDL對空間數(shù)據(jù)存儲格式的支持:
(1)矢量——支持直接讀寫Shapefile(通過IDLffShape類)、DXF(IDLffDXF);
(2)柵格——不支持GRID空間數(shù)據(jù),只支持讀寫圖像格式數(shù)據(jù)。
4.4C#與IDL間的數(shù)據(jù)傳遞機制
由于IDL支持的空間數(shù)據(jù)格式有限,并且不支持ArcSDE,系統(tǒng)中不直接使用IDL讀取空間數(shù)據(jù),而是由.NET主環(huán)境中的C#Shell負責從空間數(shù)據(jù)庫讀取數(shù)據(jù),然后再傳入IDL環(huán)境。
IDL與主環(huán)境之間的數(shù)據(jù)傳遞只處理單值或者數(shù)組數(shù)據(jù);而點、線、多邊形等較為復雜的矢量結(jié)構(gòu)數(shù)據(jù),需要首先分解為單值或數(shù)組后傳遞給IDL,再由IDL根據(jù)所給數(shù)據(jù)生成合適的對象圖形,實現(xiàn)空間數(shù)據(jù)的表現(xiàn)和管理。
5IDL對象與GIS對象
IDL不直接支持GIS中空間數(shù)據(jù)的管理和表現(xiàn),需要自己定義和實現(xiàn)該部分功能。系統(tǒng)實現(xiàn)中采用從IDL對象圖形類繼承的方式,擴展已有的IDL圖形功能,定義新的空間數(shù)據(jù)類??臻g數(shù)據(jù)類完成從.NET環(huán)境接收單值和表格數(shù)據(jù),并進行管理和渲染表現(xiàn)等任務(wù)。
6結(jié)束語
利用IDL、ArcSDE和C#來集成開發(fā)分布式GIS應用系統(tǒng),三者相輔相成,優(yōu)勢互補。其不但在很短的開發(fā)周期內(nèi)以極低的開發(fā)成本建立非常專業(yè)的GIS應用系統(tǒng),而且系統(tǒng)在保證數(shù)據(jù)安全性及性能的前提下,運行成本也很低廉,為GIS的應用提供了一種新的途徑。
參考文獻:
[1]劉光.地理信息系統(tǒng)二次開發(fā)教程——組件篇[M].北京:清華大學出版社,2003:1-2.
[2]ESRIInc.ESRI:theGISsoftwareleader[EB/OL].[2005]..
[3]RSIInc.RSI:dataanalysisandvisualizationsoftware[EB/OL].[2005]./pr/detail.asp?PRID=46.
[4]MicrosoftInc.MSDNhomepage[EB/OL].[2005]..
[5]閆殿武.IDL可視化工具入門與提高[M].北京:機械工業(yè)出版社,2003:1-360.
[6]ESRIInc.UnderstandingArcSDE[M/CD].[S.l.]:[s.n.],2002.
[7]ESRIInc.ArcSDE8.3developerhelpguide[M/CD].[S.l.]:[s.n.],2003.
[8]RSIInc.Externaldevelopmentguide[M/CD].[S.l.]:[s.n.],2003.
- 上一篇:基于J2EE數(shù)據(jù)管理思考
- 下一篇:熵方法垃圾郵件過濾插件思考