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