謝祎 楊建欽 岳翔 呼和


摘要:針對海洋石油GIS平臺的文字標準功能,本文研究了通過服務器實現復雜算法服務的技術與方法。著重闡述了純WEB前臺調用后臺算法服務的步驟,以及算法的COM封裝、C#服務程序和COM算法模塊通訊等關鍵技術,并提出了WEB前端結合后臺算法服務復用原有資產以及高效的優勢。最后通過項目實踐驗證了這種復雜算法后臺服務化方案在中海油GIS平臺中的應用效果及意義。
關鍵詞:海洋石油;GIS平臺;標注算法;COM技術;后臺服務化應用
中圖分類號:TP391? 文獻標識碼:A
文章編號:1009-3044(2019)21-0024-02
開放科學(資源服務)標識碼(OSID):
“數字海洋”已成為海洋石油行業信息化建設的發展方向和趨勢。在對海洋石油資源的開發中,GIS平臺作為一種界面友好直觀的可視化手段,在海洋石油多系統、多層次并錯綜復雜的信息資源管理、分析和應用中發揮著重要作用。企業原有的GIS服務平臺前端是基于C++編寫的ActiveX控件,只能應用于Windows系統,不能應用于移動設備,且安裝過程麻煩,限制了平臺的應用。最近幾年基于純Web語言開發的GIS前端平臺以其免安裝,可運行于各版本瀏覽器,跨操作系統跨平臺、移動設備友好等特點得到了廣泛的應用。GIS平臺也基于純WEB前端技術進行了平臺升級,相應也產了一些問題。首先,原有的算法大多用C++編寫,算法移植需要大量的人力工時;其次,前端基于Javascript的代碼在運行復雜算法時效率低、運算速度慢,達不到使用要求。怎樣復用已有的算法資產且兼顧平臺性能是GIS升級中必須要考慮的問題。
本文介紹了將原有的C++文字標注算法封裝成COM,并用后臺服務調用的方式,在升級后的GIS平臺快速實現文字標注算功能的實用方案,并詳細介紹了具體實現的步驟和其中的技術要點。
1 升級后GIS平臺文字標注功能的實現研究
1.1 建設目標及思路
目標是將原有GIS平臺的多邊形文字標注功能移植到升級后基于純Web語言的GIS平臺。思路是將原有C++文字標注算法封裝成后臺服務模塊,通過服務調用方式給各前臺客戶端提供算法服務。
1.2 關鍵技術及方法
1.2.1 升級后的基于服務GIS平臺技術架構
升級后的基于服務的GIS平臺架構如上圖所示,移動設備、PC等客戶端通過瀏覽器加載GIS前臺核心框架代碼,GIS核心框架再根據具體需求加載空間數據插件(負責后臺數據庫數據讀取)、空間分析算法插件(坐標計算等算法)以及用戶定制的其他功能插件,GIS核心框架負責用戶交互、地圖繪制、空間對象管理等核心功能。調用后臺算法則由算法插件發起,C#網站服務程序負責接收調用參數,并調用本地COM算法,最終將結果返回前端GIS平臺。
1.2.2 文字路徑標注算法的封裝
文字路徑算法是根據多邊形坐標,計算標注文字位置的算法。在GIS系統中經常應用于各種面類型空間對象(如盆地、油田、礦區、保護區)的名稱標注。為了方便C#服務端程序調用,首先要將原有的C++代碼算法封裝成COM組件,以下是封裝成COM過程中要注意的幾個技術要點:
1)建立COM工程時,項目的通用框架和引用要使用和C#服務程序相同的.Net Framework版本,否則會導致C#服務程序加載COM時失敗。
2)定義接口參數時,傳入的內存指針地址用LONG類型,傳出的內存指針地址用LONG *類型,目的是方便使用全局堆地址進行數據交互。
3)在接收數據和返回結果時,要在全局堆分配內存,保證數 據在托管和非托管代碼間? ? 傳遞時不會出錯,代碼示例如下:
1.2.3 服務器端C#程序和COM程序的通訊
在調用COM算法時,C#程序和C++ COM組件的通訊是其中難點,因為要涉及托管代碼和非托管代碼間的參數傳遞,以下是調用步驟和要注意的技術要點。
步驟 :
1)將生成的COM控件在服務器端進行注冊。
2)在C#服務程序工程的引用中添加注冊好的COM控件,添加引用后,會自動生成和C++ COM的非托管代碼和C#托管代碼進行交互的Interop類,通過這個類C#就可以調用COM的接口。
3)調用時首先new 一個第2步生成的Interop類,然后直接調用定義好的接口,如下所示:
技術要點:
1) 托管和非托管代碼的通訊最容易出錯的地方是內存指針的傳遞。在C#托管代碼向C++ COM非托管代碼傳遞內存指針時,注意要在全局堆分配內存。示例如下:
2)傳參前,要將托管代碼本地數據拷貝到分配好的全局堆內存中,示例如下:
3)對于返回結果,則要執行相反的步驟,要將全局堆的數據,考入托管代碼本地內存。示例如下:
4)在調用結束后,不要忘記釋放全局堆內存,示例如下:
1.2.4 前端GIS調用后臺算法服務
瀏覽器端通過http請求,將要計算文字標注路徑的多邊形坐標和其它參數以JSON格式發給服務器端,計算結束后,前端的GIS平臺代碼使用AJAX異步通訊技術接收服務器傳回的JSON格式的計算結果,并負責解析成文字路徑坐標,然后根據經緯度坐標將文字標準在地圖上。
2 應用效果
圖2顯示的是升級后的GIS平臺界面,底圖是海洋石油GIS遙感底圖,圖中藍色的面對象是加載的渤海海域的盆地,盆地的名稱則是調用后臺文字路徑標注算法服務實現的文字標注,在實際使用中速度快、無延遲,完全滿足了升級后GIS平臺需求。
3 應用意義
通過以上描述的方法步驟,我們在很短的時間內為升級后的GIS平臺實現了文字路徑標注功能。其重要意義在于以下兩點:
1)為企業傳統軟件升級改造提供了一種重復利用原有算法,節約成本,減少開發周期的切實可行的方案。
2)將WEB技術前端跨平臺、跨瀏覽器、移動端友好等優點和后臺C++程序計算速度快、效率高的優點很好地結合在一起。為將來給升級后GIS平臺添加其他所需的復雜算法,如投影算法、空間分析算法等功能提供了一套成熟的解決方案。
參考文獻:
[1] 張云飛,張欽,楊建欽,歐陽侃夫. 基于空間對象的公共GIS模型及其在海洋石油信息化中的應用[J].中國海上油氣,2009 21(3): 211-214.
[2] 黃際洲,崔曉源. 精通.NET互操作:P/Invoke、C++ Interop和 COM Interop[M].北京:人民郵電出版社,ISBN:978-7-20434-9 .
【通聯編輯:梁書】