宋艷朋 王墉成 周東旭
(1. 天津海事測繪中心, 天津 300222;2. 自然資源部第一海洋研究所, 山東 青島 266061)
海洋潮汐分析與垂直基準是海洋測繪的重要組成內容,是保證海洋測繪工作開展的基礎。潮汐經調和分析得到的調和常數,是潮汐重要的特征參量,可應用于潮汐預報、計算理論深度基準面以及描述潮汐特征的潮汐非調和常數等,調和常數有利于我們研究和掌握潮汐的變化規律[1-2]。海洋垂直基準與陸地相比具有明顯的特殊性,其深度基準面的確定是人們研究的重點[3-5]。海洋潮汐模型是指以各潮汐分潮的規則格網形式描述較大空間尺度潮汐規律,可計算任意定點海域任意時刻的潮高[6-8]。隨著衛星測高技術的發展,充分利用多源數據,豐富并發展了多種海潮模型,不同階段的海潮模型包括不同分潮數目和量值,可用于潮位預報和深度基準面計算。
設計開發潮汐數據處理與基準面計算準換應用程序將給潮汐與基準面分析帶來極大便捷,Rich Pawlowicz等人基于矩陣工廠(Matlab)開發了調和分析程序包(T_TIDE)[9];梁廣建等基于Matlab開發了南海海域潮汐數值預報軟件,包括單站與全海域的預報[10];馬麗娟等基于VC++開發了集潮汐調和分析與預報于一體的軟件系統,操作內容較為簡單[11]。但上述皆存在用戶交互性一般的特點,開發具有良好界面的應用程序將為潮汐分析帶來極大便利。相關文獻涉及深度基準面的計算軟件實現內容較少,但同樣是需要實現的部分。使用混合編程技術是其實現的便捷手段之一,所開發的應用程序可應用于海洋測量作業以及相關實驗數據處理。
潮汐調和分析與潮位預報的軟件主要功能有驗潮站實測潮位資料(數據格式為自定義格式)讀取與顯示,潮位數據調和分析實現;利用計算所得到的該站點調和常數值,可進行潮位的預報;采用海潮模型進行潮位計算,主要使用的海潮模型有NAO.99b、DTU10、CSR4.0和NAO.99Jb。
潮汐基準面計算主要功能有驗潮站潮汐調和常數文件讀取與顯示;利用讀取調和常數計算該站理論深度基準面(包括8、11和13分潮三種計算方法);批量讀取各站點潮汐調和常數文件,計算各驗潮站的理論深度基準面并顯示;讀取海潮模型中調和常數值并進行理論深度基準面的計算,見圖1。開發地圖底圖,可加載已有站點信息,對地圖中加載潮位站進行交互操作,見圖2。
圖1 潮汐調和分析與基準面計算應用軟件實現流程
圖2 潮汐調和分析與基準面計算應用軟件結構設計
編程平臺的版本以Visual Studio 2010與Matlab R2014a為例,語言為C#和Matlab,其混合編程實現的步驟如下:
(1)配置Matlab的編譯器和環境。在Matlab中輸入創建函數(mbuild-setup)命令,選擇Microsoft VC++ 2010為編譯器。
(2)創建Matlab的.NET工程,生成 DLL文件,并添加引用。Matlab中m函數生成動態鏈接庫文件流程總結如圖3所示[12]。
圖3 生成DLL引用文件流程
須注意其中類的名稱不能和Matlab的m函數名字一樣,否則無法生成。創建潮汐調和常數計算應用(THCCalculate.dll)和潮汐預報應用(TideForecast.dll)。在VS編譯器中創建C#項目,須添加編譯生成的DLL和MWArray.dll文件進行引用,混合編程需要保證C#與Matlab的.NET FrameWork的版本要相搭配,以及保證其傳輸參數個數的匹配和數據類型的正確轉換。
考慮到各種海潮模型數據量比較大,采用Fortran程序操作比較高效,特此在涉及海潮模型時使用C#和Fortran實現。C#與Fortran混編實現選調用DLL方式實現混編。首先第一部分是在IVF工程中創建.DLL鏈接庫項目,須在子程序起始之處添加擴展屬性編譯的偽指令,如下:
通常有三種寫法:①以$符號為起始的寫法,須位于首列;②以!MS$開頭的寫法,中間不能有空格;③以!DEC$開頭的寫法。三種寫法中$后的空格可忽略不寫。
!dec$ attributes dllexport::name
!dec$ attributes alias: '***':: name
!dec$ attributes value or reference
將所有參數的傳值方式以命令形式寫出來以增加程序的可讀性。本文中將輸入的參數定義為傳遞值方式,將輸出變量定義為傳遞引用地址方式。
然后第二部分是實現C#中對DLL的調用。由于Fortran生成DLL屬于非托管代碼,須在創建的類中添加管理托管與非托管代碼間相互調用的System.Runtime.InteropServices引用。還需要進行函數原型聲明,聲明方法如下例,表示調用方清理堆棧。
[DllImport("***.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void 函數名(參量);
定義好函數返回類型、函數名稱與參數傳遞類型等就可以實現在C#中調用[13]。
GMap.NET是一個強大、免費、平臺、開源的.NET控件,在窗體與Web應用程序中能夠通過Google、Bing、ArcGIS等數據源實現尋找路徑、地理編碼以及地圖展示等功能[14]。GMap.NET包括在線和離線兩種方式的地圖數據源,本文選擇離線數據源為ArcGIS_World_StreetMap。
框選后Prefetch輸出離線地圖,切片地圖模式中,設置制作的切片地圖層級為3~9級,完成切片地圖的制作。在主程序中設置地圖顯示,編寫響應事件。
開發的計算機條件是普通PC以及相對應的系統,所用系統是Win10 64位。計算機硬件為CPU:Intel酷睿i7,內存8 GB,硬盤1 TB。
編譯環境采用Microsoft公司的Visual Studio 2010,為生成在.NET Framework上運行的多種應用程序而設計的,是流行的微軟平臺應用程序開發環境。還需安裝Matlab的運行時環境(Matlab Component Runtime,MCR),版本為2014a,以及Fortran編譯環境Intel Visual Fortran Composer XE 2011。
潮汐調和分析是指以潮汐靜力學理論為主要基礎,對潮汐實測資料按最小二乘原理對實測潮位數據進行計算機處理分析,計算得到調和常數,由此可實現潮位預報。
考慮到潮位數據涉密,因此采用模擬的驗潮站潮位資料(周期為1 a,間隔為60 min)進行處理,讀取自定義格式的潮位資料,此格式包括站點名稱與坐標以及潮位起始時刻,需進行繪制潮位數據曲線,輸入潮位資料的起始時刻和站點經緯度坐標,對潮位資料進行調和分析,計算得調和常數;潮位預報的原理是上式的逆過程,根據已得到的潮汐調和常數和輸入需要預報的潮位起始與截止時刻以及間隔則可進行潮位預報,如果預報的潮位與原始的潮位數據間隔相同且時間有重疊,則繪制兩者的差值曲線,見圖4。
圖4 潮汐數據調和分析與預報
利用四種海潮模型進行潮位預報,首先輸入所計算點位的經緯度,輸入所需預報的起止時刻和時間間隔,判斷輸入項是否合理,符合條件則可進行潮位預報,同時將預報所得潮位繪制成潮位曲線,并可導出預報潮高。可加載已有的潮位站點坐標到圖上,選中潮位站圖標得到潮位站的坐標,則可對已有的潮位站點進行潮位預報,見圖5。
圖5 海潮模型潮位預報
理論深度基準面也稱為海圖深度基準面,海圖深度基準相對于平均海面的偏差定義為海圖深度基準值,通常以符號L表示,自平均海面垂直向下量算至深度基準面。一般來說,深度基準面是潮汐表的潮高起算面,也稱潮高基準面。
我國規定的海圖深度起算面,其算法依據弗拉基米爾斯基法確定,即由M2、S2、N2、K2、K1、O1、P1、Q1這8個分潮計算相對于平均海面可能出現的最低水位,并附加考慮淺海分潮M4、MS4、M6及長周期分潮Sa和Ssa的貢獻。《海道測量規范》(GB 12327—1998)[15]對淺水分潮和長周期分潮改正進行了改進,一律采用13分潮模型計算,取消了3個淺水分潮振幅之和大于20 cm進行淺水改正的條件,從而使基準面保持了其算法和意義的一致性。可依據規范對基準面具體數值的定義進行計算,數值計算公式較長在此不再表述。
考慮到某些歷史數據計算需要,仍分別開發了8、11分潮的計算方法。根據已有的驗潮站的分潮資料進行處理,讀取分潮文件后,顯示文件路徑與具體分潮名稱與數值,判斷分潮個數,如果分潮個數小于13個,則13分潮按鈕不能使用;選擇分潮計算的個數,根據海道測量規范對深度基準面定義,則可計算理論深度基準面。同樣開發了批量讀取分潮文件計算深度基準面功能,顯示文件路徑,計算基準面與導出,此項不判斷分潮個數,若分潮數不夠13個,則對缺失的分潮賦值為零。
利用海潮模型進行基準面計算,根據提供的計算坐標,雙線性插值計算得出潮汐調和常數,同理可按海道測量規范對深度基準面的要求進行基準面計算。提供了地圖底圖繪制,可加載已有的潮位站坐標到圖上,選中潮位站得到潮位站的坐標,這樣可以對已有的潮位站進行理論深度基準面計算。開發了讀取坐標文件功能,從而根據各海潮模型進行批量計算各站點深度基準面以及基準面的顯示與導出。
基于Matlab.NET混編技術,實現了對于不同時長驗潮站潮位資料的調和分析與預報,可將調和常數與預報潮高導出,若預報潮高與讀取的潮位資料時刻有重疊并且時間間隔相同,則繪制差值曲線,基于Fortran與C#混編技術實現了NAO.99b、NAO.99Jb、DTU10和CSR4.0的潮位預報。
本文在單站點深度基準面計算中可分別采用8、11和13分潮的計算方法,開發了批量計算功能,基準面的計算可采用海潮模型進行計算,同樣設計了單點與批量計算,可對批量站點的分潮進行導出。基于GMap.NET開發地圖底圖,可加載站點坐標至地圖中對之進行操作。總體實現了具有良好交互界面的潮汐分析與基準面計算應用軟件。