王文興++李為沖++岳翔++楊建欽
摘要:近年來,海洋石油建成了服務(wù)石油專業(yè)的公共GIS平臺,并且在多個石油專業(yè)系統(tǒng)中獲得推廣使用。本文主要介紹了海洋石油第二代XGIS的主要架構(gòu)、組件式開發(fā)技術(shù)及系統(tǒng)中使用到的接口技術(shù)。設(shè)計并實現(xiàn)了GIS交互和繪制功能接口的開發(fā)工作。
關(guān)鍵詞:GIS地理信息系統(tǒng);組件式開發(fā);接口;ActiveX;DLL技術(shù)
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2016)06-0246-02
近幾年來,組件式GIS發(fā)展為GIS的前沿技術(shù),并逐漸成為主流趨勢。目前,已經(jīng)商業(yè)化的組件式GIS平臺有MapObjects、ArcObjects、GeoMedia等[1]。GIS組件之間以及GIS組件與其他組件之間可以通過標準的通信接口實現(xiàn)交互,這種交互甚至可以跨計算機實現(xiàn)。總院的GIS平臺就是基于此架構(gòu)自主研發(fā)了組件式XGIS系統(tǒng)。
1 GIS系統(tǒng)的基本框架結(jié)構(gòu)
XGIS采用的是MVC(Model View Controller)系統(tǒng)設(shè)計模式在XGIS中體現(xiàn)為三個具體的層次組成:可視化組件組、功能組件組和數(shù)據(jù)訪問組件組。對用戶來說,功能組件組是可以定制的[2]。
1.1 XGIS系統(tǒng)組成
圖1是XGIS的系統(tǒng)架構(gòu),包括客戶端和服務(wù)器端兩部分。客戶端能過瀏覽器對XGIS進行訪問。在服務(wù)器端,底層通過數(shù)據(jù)庫做數(shù)據(jù)支持,之上通過WebSvrLock和WebSvrBin(提供WebService服務(wù))來驗證用戶相關(guān)信息和提供相應(yīng)的下載服務(wù)。
圖1 XGIS整體架構(gòu)圖
核心程序是XGIS.OCX主程序,負責(zé)整個GIS程序DLL組件的加載工作等。
1.2主要技術(shù)
為了減少網(wǎng)絡(luò)中的傳輸負載,采用了動態(tài)加載技術(shù),軟件核心模塊采用ActiveX形式,使得在互聯(lián)網(wǎng)環(huán)境下實現(xiàn)單機和C/S應(yīng)用的功能成為可能。在ActiveX模塊內(nèi)部,充分利用各種網(wǎng)絡(luò)通訊協(xié)議(如FTP、HTTP等),與服務(wù)器端的Web Service服務(wù)程序一起,實現(xiàn)地震等數(shù)據(jù)的高速傳輸,利用c++語言的高效性實現(xiàn)圖形的繪制[3]。
功能模塊采用了靜態(tài)連接庫(LIB)和動態(tài)鏈接(DLL)相結(jié)合的方式,主要的功能使用LIB的方式,擴展功能采用動態(tài)鏈接(DLL)的方式,前臺模塊與后臺數(shù)據(jù)的交換采用大數(shù)據(jù)二進制文件格式進行傳輸,并且兼容了jason、xml等形式的數(shù)據(jù)的交換格式,便于與其他系統(tǒng)擴展結(jié)合。
2系統(tǒng)接口研究
在XGIS系統(tǒng)中主要使用了四種接口方式。
(1)SOAP服務(wù)掛接方式
將SOAP服務(wù)引入到GIS中,以GIS為平臺,以空間圖元為對象,幾乎可以遍歷整個的勘探、開發(fā)等數(shù)據(jù)庫系統(tǒng)。在GIS上的某個圖元下按下鼠標右鍵,則系統(tǒng)在“彈出菜單”的頂部列出所有注冊的SOAP服務(wù)。
(2)script腳本語言接口
腳本語言是一種宿主語言,本GIS系統(tǒng)也內(nèi)嵌了一種自行開發(fā)的腳本語言,主要是讀取一些不規(guī)則的、駐留于數(shù)據(jù)庫之外的數(shù)據(jù)到GIS圖件上。
(3)VC++的MIDL 接口
基于MIDL語言對XGIS 二次開發(fā)接口進行定義。通過此接口,可以在其他系統(tǒng)如網(wǎng)頁、C#的窗口程序中對GIS進行調(diào)用和傳參。
(4)DLL接口
Dll接口方式是系統(tǒng)最常采用的方式,動態(tài)調(diào)用方式的特點是完全由編程者用API函數(shù)加載和卸載DLL,程序員可以決定DLL文件何時加載或不加載,在運行時決定加載哪個DLL文件。需要函數(shù)指針和WIN32 API函數(shù)LoadLibrary、GetProcAddress裝載。此種接口具有最大的靈活性和可擴展性,同時對編程能力的要求也較高。
3接口應(yīng)用案例
本文編寫了交互輸入定位點和交互輸入選擇區(qū)域兩種功能組件,采用動態(tài)調(diào)試的方式進行靈活的加載與釋放,也就是第四種DLL接口的方式來進行編程。下面的例子為交互輸入定位點的DLL對外接口函數(shù)為
RETCODE __declspec(dllexport) InterLLXY(void *model, TFunPtr pInterface );
此函數(shù)聲明負責(zé)告訴主程序調(diào)入此交互輸入點位點功能組件的函數(shù)入口,在函數(shù)中作相應(yīng)的聲明就可以調(diào)用此組件功能。
以下為InterLLXY函數(shù)主要代碼展示:
RETCODE __declspec(dllexport) InterLLXY(void *model, TFunPtr pInterface )
{ AFX_MANAGE_STATE(AfxGetStaticModuleState());
//通過CXGISCtrl指針來獲得程序的相關(guān)對象
ctrl = (CXGISCtrl *)model;
/*中間省略一些運算函數(shù)*/
ctrl->pdrawview->isTrackPopupMenu=0;
return 1;
}//函數(shù)結(jié)束
下面函數(shù)為銷毀函數(shù)的聲明:
RETCODE __declspec(dllexport) DestroyInterLLXY(void *model );
函數(shù)的實現(xiàn)如下所示:
RETCODE __declspec(dllexport) DestroyInterLLXY(void *model )
{AFX_MANAGE_STATE(AfxGetStaticModuleState());
if (interllxy )
{/*此處省略運算代碼*/}
return 1;
}
XGIS的運行界面如圖2所示
圖2 交互輸入定位點
從圖2中可以看到,本文編寫并加載DLL組件(交互輸入定位點)、通過點擊鼠標右鍵把這兩個功能掛載到交互菜單下。在輸入相應(yīng)的點的坐標后,會出現(xiàn)圖3顯示的界面,系統(tǒng)通過計算點的坐標自動定位點,并通過相應(yīng)的五角形將其標記出來。
圖3 定位后顯示
4結(jié)束語
XGIS的組件式開發(fā),使得運行與維護效率大大提高,多功能的接口調(diào)用方式使GIS在專業(yè)應(yīng)用方面更為方便,功能擴展更強大。
參考文獻:
[1] 朱大明,徐景中.基于組件式GIS的旅游景點查詢系統(tǒng)開發(fā)研究[J].昆明理工大學(xué)學(xué)報:理工版, 2007, 32(5):1-4.
[2] 張云飛,張欽,楊建欽,等.基于空間對象的公共GIS模型及其在海洋石油信息化中的應(yīng)用[J].中國海上油氣,2009,21(3):211-214.
[3] 張愛華.基于SuperMap Objects組件式開發(fā)的GIS空間網(wǎng)絡(luò)分析功能實現(xiàn)方法[J]. 科技信息, 2013(36).