嚴 俊,陸建新,丁 駿,車助鎂
(浙江省海洋監測預報中心 杭州市 310012)
中國是世界上海洋災害損失最嚴重的國家之一。據統計,僅1989—2007年的19年間,累計直接經濟損失就達2 326 億元,其中近一半的年份經濟損失超過了100 億元,1997年和2005年甚至高達308 億元和332 億元,風暴潮和海浪災害造成的死亡、失蹤人數總計6 274 人[1]。災害影響的規模空前,對沿海地區人民生命財產安全和經濟社會可持續發展構成了嚴重威脅。但從海洋災害經濟損失系數(災害經濟損失/GDP)來看,中國減輕海洋災害的工作成效極為顯著,接近于世界減輕自然災害較先進的經濟發達國家,這其中除了得益于沿海省、區、市重金投入修復和重建高標準防潮防浪的海塘、海擋等工程性措施外,各級海洋預報機構對歷次嚴重海洋災害的及時準確預警報(如成功預報了9216、9417 和9711 等特大風暴潮災)也起到了非常重要的作用,極大地減少了災害中的人員和財產損失[2]。
隨著海洋經濟的發展,山東、浙江、廣東、福建等省先后成為國家海洋經濟發展試點省份,國家對沿海區域的投入越來越大,沿海地區的人口和經濟體呈現出越來越密集的態勢。在全球氣候變化和海平面上升的背景下,沿海地區遭受風暴潮、災害性海浪、赤潮、重大海上溢油、危險化學品泄漏、核泄漏或輻射、海嘯等災害威脅的潛在風險加劇,對海洋經濟發展、海洋生態環境和沿海人民群眾生命財產安全構成嚴重威脅。由此,越來越重的防災減災形勢對各級海洋預報機構的預報能力也提出了更高的要求。
國家海洋環境預報中心通過VSAT 系統每日下發大量海洋氣象實況觀測數據和預報產品,對于各級海洋預報機構和預報員而言,除了深入研究分析國家海洋環境預報中心提供的各類信息資料外,借鑒國內外其他技術先進的海洋氣象預報部門、研究機構的預報產品、研究成果也不失為一個提高預報能力的有效途徑。隨著互聯網的發展,越來越多的海洋氣象部門、研究機構將對海洋、氣象分析結果和預報產品等信息資源共享發布到互聯網上,供全球的互聯網用戶查看、下載。這些資源有不少預報準確率較高,預報時效較長,借鑒參考價值較高,如歐洲中期氣象預報中心、日本氣象廳等機構發布的預報產品。因此開發一套軟件系統,整理收集互聯網公開發布的數值天氣預報產品、實況天氣圖、衛星云圖等信息資源,一方面可以作為VSAT 下發預報信息資料的有益補充,豐富預報員的參考信息量,另一方面作為預報備份系統,在VSAT 數據傳輸故障無法正常接收數據時,確保預報工作的正常開展,同時可以安裝在個人計算機上實現異地或移動辦公,開展應急狀態下的預報工作。
系統使用對象為省級及省級以下海洋、氣象預報臺站的普通預報員,考慮到省級以下海洋、氣象預報臺站軟硬件條件有限,同時有異地或移動狀態時開展預報工作的實際需要,因此系統必須是輕量級的,對軟硬件環境要求較低,且最好為綠色軟件,拷貝到普通臺式機和筆記本不用設置或簡單設置后就能使用,系統使用必須簡單、容易上手。
根據預報員的實際經驗,當前具有較高參考價值的海洋和氣象預報資源發布網站主要有中央氣象臺(www.nmc.gov.cn),日本HBC(www.hbc.co.jp,該網站發布的資源比日本氣象廳公開發布的更為豐富),韓國氣象廳(www.jma.go.jp),歐洲中期氣象預報中心(www.ecmwf.int),美國海洋陸地大氣研究中心(wxmaps.org)等。對于省級及省級以下海洋、氣象預報機構和預報員而言,只需要覆蓋東亞、亞洲、北半球等區域的地面、高空、海浪等的各類實況分析圖、數值預報圖和衛星云圖就能滿足工作和研究需要,因此不需要全盤下載所有資源。
1.3.1 資源管理
目標資源來自不同國家的不同機構,且種類繁多,拿預報信息來說,預報內容有地面、高空(850 hpa、700 hpa、500 hpa、300 hpa 等)、海浪等,預報區域有東亞、亞洲、北半球等,預報時段有3 h、6 h、12 h、24 h、48 h、72 h……240 h等,因此下載后必須按照一定的邏輯關系將這些資源有序組織管理起來,便于存儲和預報員的調用查看。
1.3.2 自適應下載
目標資源中,一部分資源文件的鏈接地址相對固定,其不同時間發布的文件鏈接地址在較長時期內保持固定不變,如美國海洋陸地大氣研究中心和HBC 發布的資源,以HBC 發布的東亞地面實況分析圖為例,鏈接地址為“http://www.hbc.co.jp/tecweather/ASAS.jpg”,在不出現網站改版等情況下,這個地址不會變更;另一部分為非固定的,每次更新發布后的文件鏈接地址都有變化,如中央氣象臺、韓國氣象廳和歐洲中期氣象預報中心發布的資源,以韓國氣象廳發布的東亞地面實況分析圖為例,世界時間2013年3月30日03 時之后發布的文件鏈接地址為“http://web.kma.go.kr/repositary/image/cht/img/sfc3_201303 3003.png”,2013年3月30日06 時之后發布的為“http://web.kma.go.kr/repositary/image/cht/img/sfc3_2013033006.png”,可以看出,其在文件名稱上有變化,導致不同日期不同時次發布的文件鏈接地址都不同。同時,絕大多數資源文件都沒有固定的更新時間。因此,系統必須具備自動判斷文件是否已更新,并及時下載的功能,以確保資源的時效性;同時要根據人工找出的鏈接地址變化規律,自動匹配生成正確鏈接地址,避免下載失敗。
1.3.3 多格式顯示
資源文件有png、jpg、gif、pdf 等不同的圖像或文檔格式,因此系統必須具備正確顯示不同格式文件的功能。
1.3.4 資源文件信息修正
為滿足不同預報機構不同預報員的需求,需最大化下載資源,文件下載數量可能多達上千個,由于網站改版等原因,即使是鏈接地址相對固定的資源文件也會變更地址。因此,系統應建立資源文件信息數據庫,使數據和程序分離,便于大量資源文件信息的管理維護,并具備自動和人工兩種方式的鏈接地址修正功能,確保資源文件的正確下載。
1.3.5 并行下載
除中央氣象臺外,其他資源的網站服務器都架設在國外,雖然單個資源文件的數據量很小,多數在幾百KB,但由于網絡狀況差,存在服務器無響應、連接延時等現象,下載速率低,因此大量資源文件全部下載要消耗大量時間。在杭州市區10 M 電信寬帶接入的網絡條件下,以串行方式下載完1 000 個資源文件需費時3~4 h。為確保預報員在預報關鍵時間能查看到最新的參考信息,應采取并行下載等技術手段縮短下載時間。
1.3.6 存儲備份
資源文件中除了小部分是實況分析圖外,大部分是各類數值模式給出的預報圖。實況分析圖可用作客觀分析、預報結果檢驗和研究工作等,需要長期甚至永久保存;預報圖則主要用于預報參考,沒有長期保存的價值。考慮到磁盤存儲壓力,應根據實際工作需要設定存儲規則,對不同價值的資源文件設定不同時間長度的存儲期,并自動進行定時備份和清理。
海洋氣象預報輔助信息系統由1 個后臺資源文件下載管理程序、1 個前端信息集成顯示程序、1 個配置文件、1 個基于Access 的mdb 數據庫文件和1 個資源文件存儲文件夾組成。
后臺資源文件下載管理程序常駐系統,讀取數據庫中的資源信息,自動判斷互聯網上目標資源文件的更新狀態,實時下載已更新資源文件,并存放至指定的位置。該程序有人機交互界面,可以人工新增或修改數據庫中資源文件信息,并承擔資源文件管理任務,定時備份和清理已下載的資源文件。
前端信息集成顯示程序根據配置文件和數據庫中資源信息加載顯示各類實況和預報圖,預報員可以以不同方式同時加載顯示多張預報圖,如單頁多圖、單頁單圖、多頁多圖等。
配置文件用于存儲系統配置信息,如數據庫的路徑、資源文件存儲文件夾的路徑、后臺資源文件下載管理程序是否隨操作系統啟動、備份周期等。
Access 數據庫建有多個資源文件信息表,分別對應鏈接地址相對固定的資源文件和不同變化規律的非固定鏈接地址資源文件,表內建有多個字段,包括所屬國家、發布機構、文件類型、文件內容、地址鏈接、相對存儲路徑、文件名、更新時間、文件描述等。
資源文件存儲文件夾用于存儲下載的資源文件,在該文件夾內按照國家、機構、文件類型、文件內容來分層組織存放資源文件,比如韓國氣象廳發布的3 h 更新一次的地面實況分析圖存放在“資源文件存儲文件夾路徑韓國韓國氣象廳Analysis ChartSurface03”下。
系統開發選用C#,C#是微軟公司發布的一種面向對象的、運行于.NET Framework 之上的高級程序設計語言。它是一種安全的、穩定的、簡單的、優雅的,由C 和C++衍生出來的編程語言,它在繼承C 和C++強大功能的同時去掉了其復雜特性,并綜合了VB 簡單的可視化操作和C++的高運行效率,以其強大的操作能力、優雅的語法風格、創新的語言特性和便捷的面向組件編程的支持成為.NET 開發的首選語言[3]。
由于海洋氣象預報輔助信息系統的定位是能拷貝到普通臺式機、筆記本上經簡單設置后就能運行使用的輕量級系統,因此選擇了同樣輕量化的桌面級數據庫Access,用于資源文件信息的存儲、管理和維護。數據庫中主要存儲維護兩類表,一類是鏈接地址相對固定的資源文件信息表,另一類是非固定鏈接地址的資源文件信息表。
鏈接地址相對固定的資源文件信息表的表結構見表1。

表1 資源文件信息表表結構(鏈接地址相對固定)
非固定鏈接地址的資源文件信息表根據鏈接地址變化規則的不同有多張,其表結構與表1 基本相同,所不同的是Url 字段被拆分成Url1、Url2、Url3……等多個字段,用來存儲鏈接地址中固定不變的部分字符串。如韓國氣象廳發布的東亞地面實況分析圖鏈接地址“http://web.kma.go.kr/repositary/image/cht/img/sfc3_2013033006.png”,存儲該資源文件的庫表中沒有Url 字段,但有Url1 和Url2 字段,分別保存“http://web.kma.go.kr/repositary/image/cht/img/sfc3_”和“.png”兩段字符串,原地址中如“2013033006”的變化的字符串由后臺資源文件下載管理程序在下載時根據設定的規則自動補完。以此類推,中央氣象臺發布東亞500 hpa高度場數值預報圖的鏈接地址為“http://image.weather.gov.cn/product/2013/201303/20130331/NWPR/medium/SEVP_NMC_NWPR_ST639_EGH_AEA_L50_P9_20130331000000000.JPG”,地址中有兩處變化,因此存儲該資源文件的庫表中要有Url1、Url2 和Url3 字段。
這些互聯網資源的更新時間在一天24 h 內呈離散分布,凌晨、上午、中午、下午、晚上、深夜等各個時間段都有大量發布。為及時獲取資源,應該盡量縮短從目標資源更新到本地下載的時間,以確保日常預報工作尤其是災害預報工作中資源信息的時效性。系統開發過程中嘗試過多種方法,2002年開發的系統早期版本曾經使用過跟蹤排查方法,即按照一定時間間隔(如10 min、20 min、30 min 等)連續下載同一個資源文件,連續下載一個月或更長時期后,整理分析確定該資源文件在該時期內每次更新的最后時間,然后按照這個最后時間定時下載。但這個方法存在明顯缺陷:(1)資源文件數量大時,整理分析工作量很大,需投入大量人工成本;(2)有新的資源文件加入時,需要再次整理分析;(3)多數資源文件的更新時間不穩定,按照某個時期內最后更新時間來定時下載很可能產生遺漏,或是下載的資源文件失去時效性;(4)目標資源文件未及時更新時會產生重復下載。
經過多次試驗,最終采用預查后下載的方法來實現文件的準實時下載。技術方法簡述如下:設定重復下載周期(如間隔20 min 發起一輪下載),每次下載前利用HttpWebRequest 和Http-WebResponse 兩個類查詢目標資源文件在網站上的最后修改時間LastModified 值,將其和存儲在本地數據庫中的UploadTime 字段值比對,如果LastModified>UploadTime,則判斷資源文件已更新,之后利用WebClient 類的異步下載方法DownloadFileAsync(Uri,String)來下載,同時將LastModified 值更新入庫;反之則放棄下載,轉入下個資源文件的查詢。
這種方法避免了上述跟蹤排查法的缺陷,雖然增加了查詢時間的消耗,但由于資源文件更新時間離散分布的原因,除了首輪要全部下載文件導致費時更長外,之后每輪實際下載的文件量較少,費時也相應少很多。在和文中1.3.5 部分的相同網絡條件下進行下載測試,采用該技術串行下載1 000 個資源文件,首輪之后的每輪下載耗時在30~70 min 之間。
對于鏈接地址變化的資源文件,每次下載前要根據變化規律預判資源文件下個時次更新后的正確地址。經分析,不同網站的資源文件其變化規律不同,但都只是在日期時間上有變化。韓國氣象廳和歐洲中期氣象預報中心發布的各類資源,其鏈接地址通常為“string1+‘yyyymmddhh’+string2”的形式;我國中央氣象臺發布資源文件的鏈接地址則較為復雜,其形式通常為“string1+‘yyyy/yyyymm/yyyymmdd’+ string2 +‘yyyymmddhh00’+string3”。其中“yyyy”為年份,“mm”為月份,“dd”為日期,“hh”為發布時次,組成的“yyyymmddhh”代表了該資源文件的世界時發布時次,“hh”通常為“00”、“12”,部分產品如韓國實況分析圖加密發布,其時次為“03”、“06”等3 的倍數,衛星云圖則每個時次都有發布;string1、string2、string3 為鏈接地址中相對固定的字符串,存儲在數據庫中。
由于資源文件的實際更新時間通常晚于其標示的發布時次,因此可以根據這個特性來推測資源文件可能的鏈接地址。步驟如下:先將本地計算機時間轉換成世界時間,取其中年份、月份、日期和小時部分作為“yyyy”、“mm”、“dd”和“hh”,按照上述不同形式和string1、string2、string3 等組成目標文件鏈接地址,查詢該鏈接地址是否有效——即判斷目標文件在互聯網上是否存在,如果文件存在,則按照文中3.1 部分的方法判斷是否需要下載;如果地址無效即目標文件不存在,則將“yyyymmddhh”時次值減去1 h,再次組成地址查詢,如此輪詢24 次,即從當前世界時間向后輪詢24 個時次,如果24 個地址全都無效,則判斷該網絡或網站服務故障導致目標資源文件暫時無法獲取,該文件此輪下載中止,等待下一輪。
由于資源文件數量及網絡狀況等因素的影響,以串行方式逐個下載資源文件會消耗大量時間,無法滿足日常預報特別是災害預報的時效性要求。本文采用多線程技術并行下載多個資源文件,C#中使用Thread 類來生成和處理線程,關于多線程技術的詳情見參考文獻4。
在文中和1.3.5 部分的相同網絡條件下進行下載測試,結合采用預查后下載和多線程技術并行下載1 000 個資源文件,啟動下載線程15 個,首輪下載耗時約40 min,之后每輪下載耗時基本在5~15 min 之間,可以滿足預報的時效性要求。
預報過程中,預報員時常需要打開顯示多個不同類型的資源文件進行對比分析。由于下載的資源文件量很大,因此需要采用技術手段實現目標資源文件的快速定位和多個文件內容的同時顯示。
本文以節點樹形式來組織資源文件,并實現快速定位,其主要思路是將資源文件信息表中Country、Organization、Type、Content 的4 個 字段值依次逐層來建立節點樹,并將LocalPath 字段值賦給葉節點(Content)的Name 屬性,預報員在選擇某個葉節點時,獲取Name 屬性,加上配置文件中資源文件存儲文件夾路徑,得到該葉節點所代表資源文件的絕對路徑,調用相應方法打開該文件。這種國家、機構、類型、內容的樹狀結構實現了資源文件的有效組織,其結構層次清晰易懂,方便預報員的查找,使用過程中最多只需點擊5 次就可以打開所需文件,見圖1。當然也可以根據不同預報員的習慣,通過預設配置等方式一鍵顯示所有常用的資源文件。以上功能主要使用了DataSet、TreeNode、TreeView 等類和控件。

圖1 資源文件樹形組織及多圖顯示
當前的顯示器多為大屏幕寬屏顯示器,可以完整地并排顯示2 個文件的圖像信息,也可以“田”字型方式壓縮顯示4 個文件。為便于預報員對比分析,以單頁多圖、單頁單圖、多頁多圖等方式顯示不同格式文件的功能是必須的,由于實現原理并不復雜,將Visual Studio 2003 及后續版本中的現成控件如Panel、SplitContainer、PictureBox、TabControl、WebBrowser 等加以組合就可以實現,因此不再贅述。
針對互聯網上共享發布的各類海洋氣象參考信息資源,各級海洋氣象預報機構,特別是參考信息資源相對較少的省級以下預報臺站,如何有效挖掘利用這些資源,提高專業技術水平和預報質量,是一個值得深入研究的課題。本文作者在2002年利用VB 開發了系統的第一個版本,應用到浙江省海洋預報實際工作中,幾年來根據一線預報員的使用反饋不斷更新完善,當前利用C#開發的是第4 個版本,已成為預報員日常工作的重要輔助工具,對于提高預報員的工作效率和預報信息資源的存儲備份有積極的作用和意義,值得進一步完善和推廣。
[1] 左書華,李蓓.近20年中國海洋災害特征、危害及防治對策[J].氣象與減災研究,2008,31(4):28-33.
[2] 楊華庭.近十年來的海洋災害與減災[J].海洋預報,2002,19(1):2-7.
[3] Simon Robinson,Christian Nagel.C#高級編程(第3 版)[M].北京:清華大學出版社,2005.
[4] Tobin Titus,Fabio Claudio Ferracchiati.C# 線程參考手冊[M].北京:清華大學出版社,2003.