李瑞芳,黃 剛,楊冬黎
(東北石油大學計算機與信息技術學院,大慶163318)
在井下作業過程中,由于地質等復雜因素的影響,井噴、井漏、井涌等事故時有發生,不僅給油田的有效開發帶來嚴重后果,而且給國家財產造成重大損失[1]。因此,建立油田的高危區分布系統,對高危井位區進行實時管理是非常必要的。
SVG(Scalable Vector Graphics,可伸縮的矢量圖形)是W3C組織制定的面向網絡應用的二維矢量圖像標準,使用SVG不但可以在網頁中顯示各種各樣的矢量圖形,還可以很好地實現跨平臺網絡傳輸。目前SVG已廣泛應用于實時監控、WebGIS、電力調度、數字化博物館等多個領域[2]。筆者應用 SVG、dhtmlxTree、AjaxPro等技術,將井位、事故信息集成于電子地圖中,開發了集井位瀏覽、故障井定位、高危井區自定義等功能于一體的油田高危區分布系統,實現了故障井的有效管理和高危區的預測,有效地規避了修井風險。
針對井位信息數據量大、故障種類多的特點,系統將井位信息按廠礦和井別兩種形式分類,通過圖1左側的樹形目錄控制井位信息的隱藏和顯示,圖1右上方的縮放按鈕控制當前顯示的位置和區域。其中,左側的樹形目錄采用的是dhtmlxTree(DHTML extensions Tree)控件。dhtmlxTree是一款功能強大的JavaScript樹形目錄,使用它可以輕松地創建各種漂亮的、可以快速加載的分級樹,而且它還具有跨瀏覽器,支持 Ajax 等優點[3]。使用dhtmlxTree開發樹形目錄分為以下幾步:
(1)將從dhtmlxTree官網下載的dhtmlxTree文件解壓后拷貝到包含目錄樹的網頁所在的文件夾。
(2)在網頁中引入創建目錄樹所需的js和css文件。

(3)創建包含目錄樹各節點的tree.xml文件,存放于網頁所在的文件夾中。tree.xml中的內容如下所示:


(4)新建dhtmlxTree樹。

通過以上四步即可創建同圖1.1左側類似的樹型目錄,但是如果希望使用用戶自定義的而不是系統缺省的圖標,則需在tree.xml中指定各節點的圖標。例如修改“廠別”節點前的圖標,方法為:
<item text="廠別"id="1"open="1"lev="1"type=""call="1"select="1"im0="fac.gif"im1="fac.gif"im2="fac.gif">
依照上述方法創建的樹型目錄與網頁中的其他元素沒有任何關聯。如果希望單擊左側的樹型目錄,網頁右側的圖形發生相應的變化,則需要在dhtmlxTree.js文件中的 dhtmlXTreeObject.prototype._setSubChecked事件中添加相應的js代碼。

圖1 油田井位瀏覽
在系統中,當用戶單擊圖1上方的“目標查詢”按鈕時,系統會彈出如圖2(a)所示的提示框,當用戶輸入井號后,單擊“搜索定位”按鈕,如果該井存在,則會定位到該井,并給出提示信息,如圖2(b)所示。

圖2 故障井定位
彈出的提示框是嵌入主網頁index.aspx中的獨立網頁search.aspx,而井位信息位于主網頁右側框架中嵌入的main.svg文件中,要實現二者間的信息傳遞,必須借助于主網頁,執行流程如下所示:
(1)search.aspx獲得用戶所要查找的井位id,并調用index.aspx中定義的findElement函數查找相應的井。調用方法為:
parent.findElement(id);
(2)獲取main.svg文件的document對象。
var doc=document.getElementById(“right”).
firstChild.getSVGDocument();
(3)動態顯示所要定位的井。
通過getElementById查找所要定位的井,如果找到,則通過設置SVG文件的viewBox屬性將當前地圖放大到一定的范圍,讓查找的井居中閃爍顯示,并給出相應的提示信息。
針對事故井有區域性多發的特點,系統提供了高危井區自定義功能。用戶通過在井位圖上單擊鼠標左鍵,即可進行區域定制。圖1右下方的圓形區域、多邊形區域即為自定義的高危井區域示例。
SVG圖像具有良好的交互性,可以動態增加圖像內容,但這些改變在SVG圖像關閉后隨即消失,無法保存,給用戶帶來許多不便。筆者利用AjaxPro(Ajax.net Professional)實現了自定義區域的動態存儲。
AjaxPro是最先把Ajax技術引入微軟.net環境下實現的Ajax框架之一,它能在客戶端腳本之上創建代理類來調用服務器端的方法。AjaxPro將客戶端處理XML、事件調用方法都封裝在AjaxPro.prototype.js和AjaxPro.core.js中,且將它們編譯于Ajaxpro.dll中[4-5]。基于AjaxPro的動態存儲方法主要包括以下幾個步驟:
(1)下載AjaxPro組件,并將AjaxPro.dll引用到網站(或項目)。
(2)修改 Web.config,在 <system.web> 元素中添加以下代碼。

(3)對AjaxPro進行注冊。
找到實現SVG文件存儲網頁的Page_Load事件,并添加以下代碼
AjaxPro.Utility.RegisterTypeForAjax(typeof(所在類的類名));
(4)創建服務器端方法,實現SVG圖像存儲。
給一個方法加上[AjaxPro.AjaxMethod]標記,該方法就變成一個AjaxPro可影射調用的方法。例如


rw.WriteLine(gElement);rw.WriteLine("</svg>");rw.Flush();
rw.Close();}
(5)客戶端調用。
<script language="javascript">
function comit(txt){
命名空間.類名.createSVG(txt);}
</script>
使用AjaxPro組件,客戶端腳本可以直接調用服務器端的方法,不必像使用XMLHttpRequest對象那樣通過url傳遞參數,從而避免了長度限制和特殊字符處理的問題。
在對SVG、dhtmlxTree、AjaxPro等先進技術研究的基礎上,設計并實現了油田高危區分布系統。該系統集井位瀏覽、定位、井區自定義于一體,具有速度快,功能全,個性化等特點,實現了對高危井區的有效控制,降低了修井事故發生率。
[1] 楊立慶.大慶油田地質高危區的識別劃分[J].油氣田地面工程,2010,29(8):20-21.
[2] 袁家政.可伸縮矢量圖形(SVG)的數據表示研究[D].北京:北京交通大學,2007.
[3] 劉浪.DhtmlXTree應用(基礎篇)[EB/OL].北京:百度文庫,(2010-11-19)[2011-3-26].http://wenku.baidu.com/view/185d65c69ec3d5bbfd0a745c.html.
[4] 郝曉君.基于AjaxPro框架下的動態Web開發技術的研究[D].長春:長春理工大學,2009:17-32.
[5] 毛凌志.AjaxPro使用說明[EB/OL].江蘇:博客源,(2007-11-29)[2011-10-25].http://www.cnblogs.com/lexus/archive/2007/11/29/977281.htm.