摘 要: 針對(duì)海上溢油事故的頻繁發(fā)生以及給海洋環(huán)境帶來(lái)的巨大損失,搭建了基于ASP.NET海上溢油應(yīng)急系統(tǒng)。該系統(tǒng)采用瀏覽器/服務(wù)器(B/S)模式,通過(guò)Ajax技術(shù),實(shí)現(xiàn)服務(wù)器端與瀏覽器端的異步傳輸,提高網(wǎng)頁(yè)響應(yīng)速度。其WebGIS地圖服務(wù)由柵格地圖技術(shù)與矢量可標(biāo)記語(yǔ)言(VML)結(jié)合實(shí)現(xiàn),彌補(bǔ)了單純柵格地圖表達(dá)力不足的情況。當(dāng)出現(xiàn)溢油事故時(shí),系統(tǒng)可迅速對(duì)溢油事件進(jìn)行預(yù)測(cè)模擬,并將溢油的漂移擴(kuò)散情況可視化,直觀方便,為發(fā)現(xiàn)溢油后做出緊急決策提供支持。該系統(tǒng)的應(yīng)用解決了海上溢油搜索發(fā)現(xiàn)困難的情況,可以更好地控制溢油給海洋環(huán)境帶來(lái)的危害。
關(guān)鍵詞: 溢油預(yù)測(cè); ASP.NET; B/S; 地圖服務(wù)
中圖分類(lèi)號(hào): TN919?34; TP319 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2015)04?0050?03
通過(guò)發(fā)生的大大小小溢油事件來(lái)看,溢油對(duì)于海洋環(huán)境的破壞以及對(duì)財(cái)產(chǎn)損失都非常巨大?,F(xiàn)在不僅要對(duì)溢油采取提前的預(yù)防措施,更要在事件后采取強(qiáng)有力的補(bǔ)救措施。所以,對(duì)于海上溢油系統(tǒng)的開(kāi)發(fā)就成為了一個(gè)研究的課題。本文主要研究了利用ASP.NET技術(shù)構(gòu)海上溢油應(yīng)急系統(tǒng),采用了瀏覽器/服務(wù)器(B/S)模式,遠(yuǎn)程用戶(hù)可以通過(guò)瀏覽器訪(fǎng)問(wèn)網(wǎng)站,來(lái)預(yù)測(cè)或查詢(xún)溢油信息,相對(duì)于大多數(shù)采用的客戶(hù)端/服務(wù)器(C/S)模式來(lái)說(shuō),具有便于維護(hù)、易于管理、使用范圍廣等優(yōu)點(diǎn)。
1 系統(tǒng)設(shè)計(jì)
海上溢油應(yīng)急系統(tǒng)主要目標(biāo):
(1) 對(duì)于溢油信息實(shí)行存儲(chǔ)與管理。
(2) 直觀的對(duì)溢油預(yù)測(cè)圖像信息進(jìn)行展示與演示。
(3) 具有較強(qiáng)的操作性,適用于大多數(shù)人。
1.1 系統(tǒng)總體設(shè)計(jì)
海上溢油系統(tǒng)在Microsoft Visual Studio 2008進(jìn)行集成開(kāi)發(fā),基于ASP.NET技術(shù)[1],采用B/S三層架構(gòu),包含客戶(hù)端瀏覽器、服務(wù)器以及數(shù)據(jù)庫(kù)3部分[2]。客戶(hù)端由JavaScript實(shí)現(xiàn)部分事物邏輯;服務(wù)器端由C#實(shí)現(xiàn)主要事物邏輯。數(shù)據(jù)庫(kù)則采用SQL Server 2008存儲(chǔ)數(shù)據(jù)信息。
1.2 數(shù)據(jù)庫(kù)設(shè)計(jì)
數(shù)據(jù)庫(kù)的搭建對(duì)于海上溢油應(yīng)急系統(tǒng)具有十分重要的作用。該系統(tǒng)使用的是SQL Server 2008數(shù)據(jù)庫(kù),它具有可信任、高效、智能等特點(diǎn)。通過(guò)使用ADO.NET技術(shù)訪(fǎng)問(wèn)數(shù)據(jù)[3?4],數(shù)據(jù)庫(kù)無(wú)需一直鏈接,可以在緩存中查看、修改、刪除數(shù)據(jù),程序可使用更少的資源,節(jié)省時(shí)間,且提高了性能與協(xié)調(diào)力。圖1主要展示ADO. NET的5個(gè)對(duì)象以及之間的聯(lián)系。Connection對(duì)象負(fù)責(zé)鏈接數(shù)據(jù)庫(kù),Command對(duì)象負(fù)責(zé)對(duì)數(shù)據(jù)庫(kù)執(zhí)行命令,DataReader對(duì)象用于從數(shù)據(jù)源中檢索只讀數(shù)據(jù)集,DataAdapter對(duì)象負(fù)責(zé)數(shù)據(jù)集和數(shù)據(jù)庫(kù)的聯(lián)系,DataSet對(duì)象用于存儲(chǔ)臨時(shí)數(shù)據(jù)表。
1.3 地圖設(shè)計(jì)
該系統(tǒng)采用柵格地圖技術(shù)與矢量可標(biāo)記語(yǔ)言(VML)[5]的融合來(lái)實(shí)現(xiàn)網(wǎng)站地圖服務(wù)。柵格地圖是將地圖按照縮放級(jí)別進(jìn)行切割并將同一比例的組織在一起,以gif形式存放在服務(wù)器中。在瀏覽器端查看地圖時(shí),客戶(hù)端需先計(jì)算切片數(shù)量與序號(hào),服務(wù)器僅將需要的圖片傳遞過(guò)去,再拼接成一體顯示。客戶(hù)端運(yùn)用JavaScript和Ajax與服務(wù)器交互,使得用戶(hù)在拖動(dòng)時(shí)感覺(jué)不出拼接,且極大降低服務(wù)器的負(fù)擔(dān),響應(yīng)速度較快。
與VML的結(jié)合使得地圖的功能得到增強(qiáng),且VML無(wú)需與服務(wù)器進(jìn)行交互,提高了效率。測(cè)距和測(cè)面積的實(shí)現(xiàn)依賴(lài)于VML與JavaScript交互。使用VML時(shí),需將VML容器加入到HTML對(duì)象中,以下為具體實(shí)現(xiàn):
2 系統(tǒng)主要功能
海上溢油系統(tǒng)主要功能為:
(1) 記錄查詢(xún)
選擇起始時(shí)間與結(jié)束時(shí)間,以時(shí)間為條件檢索記錄,默認(rèn)顯示30天內(nèi)的溢油記錄。
(2) 溢油預(yù)測(cè)
溢油預(yù)測(cè)包括預(yù)測(cè)模型、預(yù)測(cè)條件、預(yù)測(cè)結(jié)果三方面。預(yù)測(cè)模型分為單點(diǎn)模型、單點(diǎn)持續(xù)模型、管道模型與管道持續(xù)以及大面積模型。 預(yù)測(cè)條件包括溢油時(shí)間、溢油地點(diǎn)、持續(xù)時(shí)間、油的種類(lèi)、溢油數(shù)量以及油粒子數(shù),持續(xù)模式還包含連續(xù)溢油時(shí)間以及單位時(shí)間溢油量,如圖2所示。預(yù)測(cè)結(jié)果分為溢油軌跡、擴(kuò)散范圍、油膜濃度,能夠以動(dòng)畫(huà)形式連續(xù)播放油粒子運(yùn)動(dòng)軌跡,更加直觀地展示溢油隨時(shí)間的變化情況。油膜面積、掃海面積及剩余油量以時(shí)間過(guò)程曲線(xiàn)圖展現(xiàn)。
(3) 地圖功能
其功能包括放大、縮小地圖,地圖漫游,距離測(cè)量與面積測(cè)量,其中縮放有12個(gè)級(jí)別。
3 系統(tǒng)關(guān)鍵技術(shù)
3.1 Ajax技術(shù)
Ajax即異步JavaScript及XML,在瀏覽器向服務(wù)器請(qǐng)求數(shù)據(jù)時(shí),不再需要傳遞整個(gè)頁(yè)面,而是將少量的請(qǐng)求數(shù)據(jù)傳遞給瀏覽器,使網(wǎng)絡(luò)更流暢[6?7]。AjaxPro是.NET平臺(tái)下的一個(gè)回調(diào)式Ajax框架,系統(tǒng)調(diào)用此框架來(lái)實(shí)現(xiàn)異步傳輸?shù)墓δ?。配置web.config文件代碼為:
使用時(shí)需先注冊(cè),在C#調(diào)用方法前需加上[AjaxPro.AjaxMethod],方能實(shí)現(xiàn)異步傳輸。
3.2 C#和Fortran混合編程
C#與Fortran的混合編程[8],利用C#實(shí)現(xiàn)可視化效果,用FORTRAN編寫(xiě)的過(guò)程進(jìn)行所有的計(jì)算工作。在程序中,必須以C#為主程序來(lái)調(diào)用FORTRAN程序。實(shí)現(xiàn)混合編程的關(guān)鍵就是將FORTRAN計(jì)算程序編譯為動(dòng)態(tài)鏈接(dll),而后在C#中調(diào)用此動(dòng)態(tài)鏈接庫(kù)。
通過(guò)C#中的委托來(lái)調(diào)用封裝好的dll,步驟為:
(1) 聲明委托:
public delegate void DllFunction();
(2) 加載dll:
DllInvoke dll = new DllInvoke(dllPath, dllName);
(3) 獲取相應(yīng)的委托實(shí)例:
DllFunction function = (DllFunction)dll.Invoke(\"OILSPILL\", typeof(DllFunction));
(4) 調(diào)用函數(shù):
function();
(5) 釋放dll:
FreeLibrary(_hLib);
Fortran編寫(xiě)的程序中要注意必須有以下兩句:
! FUNCTIONS/SUBROUTINES exported from OILSPILL.dll:
!OILSPILL ? subroutine
4 系統(tǒng)實(shí)現(xiàn)
用戶(hù)通過(guò)瀏覽器登錄海上溢油應(yīng)急系統(tǒng),選擇溢油時(shí)間、地點(diǎn)等相關(guān)參數(shù),點(diǎn)擊“開(kāi)始預(yù)測(cè)”按鈕,系統(tǒng)前端將以json形式通過(guò)Ajax技術(shù)將溢油參數(shù)傳給服務(wù)器端,服務(wù)器端通過(guò)調(diào)用由fortran編寫(xiě)的動(dòng)態(tài)鏈接庫(kù)(dll)對(duì)數(shù)據(jù)進(jìn)行運(yùn)算,預(yù)測(cè)結(jié)果以文本形式和nc文件形式保存在相應(yīng)文件夾中,溢油參數(shù)通過(guò)ado.net技術(shù)寫(xiě)入sql數(shù)據(jù)庫(kù)中,服務(wù)器端將溢油結(jié)果畫(huà)圖并生成圖片傳到前端瀏覽器,流程圖如圖3所示。
系統(tǒng)所需的風(fēng)場(chǎng)和流場(chǎng)數(shù)據(jù)于每天8點(diǎn)會(huì)自動(dòng)上傳到服務(wù)器中,其數(shù)據(jù)位包括當(dāng)天在內(nèi)的未來(lái)3天的預(yù)測(cè)值,一旦溢油發(fā)生,可隨時(shí)投入計(jì)算。
下面是模擬2014年9月20日4點(diǎn)30分發(fā)生的溢油事件,其模式為管道持續(xù),溢油起始坐標(biāo)為119.056 4°E,23.819 91°N,結(jié)束坐標(biāo)為119.070 7°E, 23.818 07°N;粒子數(shù)為1 000,持續(xù)溢油時(shí)間5 h,單位溢油量是4 t/h,追蹤時(shí)間為20 h,間隔為1 h,圖4為第7個(gè)小時(shí)的溢油結(jié)果。
5 結(jié) 語(yǔ)
海上溢油應(yīng)急系統(tǒng)實(shí)現(xiàn)對(duì)發(fā)現(xiàn)溢油事件的油膜漂移及軌跡的及時(shí)準(zhǔn)確的預(yù)報(bào),為發(fā)現(xiàn)溢油后做緊急決策提供強(qiáng)有力的支持。將柵格地圖和VML結(jié)合的地圖服務(wù)與溢油模型進(jìn)行結(jié)合,使地圖相響效率得到提高,且地圖功能得到增強(qiáng)。
參考文獻(xiàn)
[1] 洪惠群,朱耿青,吳楠楠,等.基于ASP.NET的災(zāi)情信息系統(tǒng)的設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2013,36(14):73?76.
[2] 李旭榮.基于B/S的高校協(xié)同辦公平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2012,35(6):36?38.
[3] 吳楊,孫蔚.B/S 模式下ADO.NET 數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)技術(shù)的設(shè)計(jì)及應(yīng)用[J].電子測(cè)試,2014(2):45?46.
[4] 江凌,楊平利,楊梅,等.基于ADO.NET技術(shù)訪(fǎng)問(wèn)SQL Server數(shù)據(jù)庫(kù)的編程實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2014,37(8):95?98.
[5] 蔡錦輝,陸明典.用VML構(gòu)建基于WebGIS的交通氣象服務(wù)系統(tǒng)[J].氣象研究與應(yīng)用,2014,35(2):60?62.
[6] 熊文,熊淑華,孫旭.Ajax技術(shù)在Web 2.0網(wǎng)站設(shè)計(jì)中的應(yīng)用研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2012,22(3):145?148.
[7] 張?zhí)鞂m,徐婧,宋昊.Ajax技術(shù)在WebGIS系統(tǒng)中的性能優(yōu)化研究[J].現(xiàn)代電子技術(shù),2013,36(11):162?164.
[8] 張凱華,郭金運(yùn),胡志博. Fortran與C#混合編程在衛(wèi)星測(cè)高中的應(yīng)用[J].計(jì)算機(jī)技術(shù)與發(fā)展,2014,24(5):48?52.
[9] 任鋼,王國(guó)棟.云計(jì)算架構(gòu)下的安全生產(chǎn)應(yīng)急預(yù)測(cè)預(yù)警系統(tǒng)的設(shè)計(jì)和應(yīng)用[J].軟件工程,2012,33(7):1?4.
[10] 李全,韓增.溢油應(yīng)急響應(yīng)系統(tǒng)的設(shè)計(jì)和研究[J].油田環(huán)境保護(hù),2013,23(6):76?79.