莫云音,吳盛洪,陳 亮,葉彩榮,李 勛
(1.海南省氣象服務(wù)中心,海南 海口 570100;2.海南省南海氣象防災(zāi)減災(zāi)重點實驗室,海南 海口 570100;3.海南省氣象臺,海南 ???570100)
依托北斗衛(wèi)星導(dǎo)航定位系統(tǒng)和北斗民用運(yùn)營中心,海南省氣象局建成了海南省氣象局海洋漁船氣象信息衛(wèi)星發(fā)送系統(tǒng),該系統(tǒng)可以向漁船或商船發(fā)送海洋氣象災(zāi)害預(yù)報預(yù)警的信息,有效地解決了海洋氣象信息服務(wù)傳遞的盲區(qū),實現(xiàn)了海洋氣象預(yù)警信息廣覆蓋的要求。但是,受限于北斗衛(wèi)星通訊傳輸數(shù)據(jù)容量小,每次最多傳輸120字節(jié),該系統(tǒng)無法直接給船只發(fā)送圖文信息,只能發(fā)送文字形式的預(yù)報預(yù)警信息。然而,文字信息存在不直觀、不清晰等缺點,船只接收到臺風(fēng)、海上雷電大風(fēng)等災(zāi)害天氣的預(yù)報預(yù)警信息時,只是知道海上有災(zāi)害性天氣及發(fā)生災(zāi)害性天氣的海區(qū),無法精準(zhǔn)地知道自己是不是在災(zāi)害天氣的影響區(qū)域內(nèi),自己離災(zāi)害天氣的影響區(qū)域有多遠(yuǎn),避險時該往哪個方向航行。因此,為了給海上作業(yè)用戶提供更優(yōu)質(zhì)及時的海洋氣象服務(wù),為安裝北斗終端的船只實時提供直觀的、圖形化的臺風(fēng)、海上雷雨大風(fēng)等氣象預(yù)報預(yù)警信息是非常有必要的。為此,海南省氣象局設(shè)計開發(fā)了北斗船載終端可視化氣象預(yù)警系統(tǒng),實現(xiàn)了在北斗船載終端圖形顯示臺風(fēng)、海上雷雨大風(fēng)、海上大風(fēng)、海上大霧等信息的功能。該系統(tǒng)通過對氣象信息進(jìn)行編碼,解決了北斗系統(tǒng)字節(jié)傳輸限制的問題,利用北斗組播技術(shù)[1-2]將氣象信息傳輸?shù)奖倍反d終端,通過在北斗船載終端中內(nèi)置氣象信息處理模塊實時接收信息進(jìn)行解碼,并將臺風(fēng)、雷雨大風(fēng)、海上大霧等災(zāi)害性天氣預(yù)警區(qū)疊加在北斗船載終端的海圖上,同時自動測量出災(zāi)害性天氣影響區(qū)域與北斗船載終端位置的距離。海上作業(yè)用戶可以實時動態(tài)了解自己的船只與臺風(fēng)、海上雷雨大風(fēng)等災(zāi)害性天氣落區(qū)之間的位置關(guān)系,及時判斷出避險的最佳路線和時機(jī)。
北斗船載終端可視化氣象預(yù)警系統(tǒng),是在現(xiàn)有北斗衛(wèi)星對北斗船載終端的通訊支持的基礎(chǔ)上,依托海南省氣象局提供的短時臨近預(yù)報預(yù)警平臺[3],向海上作業(yè)提供精細(xì)化、可視化的臺風(fēng)信息及氣象預(yù)警信息,提升海洋防災(zāi)減災(zāi)的能力,最大程度上降低海上氣象災(zāi)害造成的損失,保護(hù)人民生命財產(chǎn)安全。
北斗船載終端可視化氣象預(yù)警系統(tǒng),主要由氣象數(shù)據(jù)接入模塊、氣象數(shù)據(jù)處理模塊、氣象信息編碼模塊、北斗氣象信息通訊模塊及北斗船載終端氣象信息展示模塊五個部分構(gòu)成,系統(tǒng)總體框架如圖1所示。
圖1 系統(tǒng)框架
氣象數(shù)據(jù)接入模塊負(fù)責(zé)從短時臨近預(yù)報預(yù)警平臺獲取最新臺風(fēng)數(shù)據(jù)及氣象預(yù)警信號數(shù)據(jù),輸出到消息隊列[4]。氣象數(shù)據(jù)處理模塊負(fù)責(zé)對消息隊列中的氣象數(shù)據(jù)進(jìn)行解析、關(guān)聯(lián)、過濾及入庫,實現(xiàn)氣象數(shù)據(jù)的持久化。氣象信息編碼模塊負(fù)責(zé)制定臺風(fēng)信息及海上大風(fēng)、海上大霧、海上雷雨大風(fēng)等氣象預(yù)警信息的編碼通訊協(xié)議。北斗氣象信息通訊模塊根據(jù)氣象信息編碼模塊制定的編碼通訊協(xié)議對氣象數(shù)據(jù)處理模塊處理完成的氣象數(shù)據(jù)進(jìn)行編碼,并通過短報文方式將信息發(fā)送至北斗船載終端。北斗船載終端氣象信息展示模塊負(fù)責(zé)對接收到的氣象信息進(jìn)行解析,并疊加展示在北斗船載終端的海圖上。
系統(tǒng)信息發(fā)布流程如圖2所示。
圖2 系統(tǒng)信息發(fā)布流程
短時臨近預(yù)報預(yù)警平臺制作完成臺風(fēng)信息和氣象預(yù)警信息后,通過HTTP協(xié)議,將氣象數(shù)據(jù)以JSON[5-6]數(shù)據(jù)格式提交輸出到消息隊列。氣象數(shù)據(jù)處理模塊對消息隊列中的氣象數(shù)據(jù)進(jìn)行解析、關(guān)聯(lián)、過濾及入庫。氣象信息通訊模塊根據(jù)定義好的氣象信息編碼通訊協(xié)議,對存入數(shù)據(jù)庫的氣象信息進(jìn)行編碼,并通過衛(wèi)星中轉(zhuǎn)發(fā)送給對應(yīng)的衛(wèi)星定位終端。衛(wèi)星定位終端接收到氣象信息后,將收到的信息下發(fā)給北斗船載終端。北斗船載終端根據(jù)北斗通訊協(xié)議對接收到的信息進(jìn)行解析并疊加展示在北斗船載終端的海圖上。
受限于北斗衛(wèi)星通訊傳輸數(shù)據(jù)容量小(每次最多為120字節(jié)[7]),無法直接向北斗船載終端發(fā)送圖文信息。在傳輸臺風(fēng)信息及氣象預(yù)警信息之前,需要對信息進(jìn)行編碼。
臺風(fēng)信息編碼長度為75字節(jié),傳輸?shù)男畔ㄅ_風(fēng)編號、臺風(fēng)中文名、實時點及5個預(yù)報點。實時點由時次、中心經(jīng)度、中心緯度、中心氣壓、風(fēng)力、移動速度、移動方向、七級風(fēng)圈半徑、十級風(fēng)圈半徑、十二級風(fēng)圈半徑等字段定義。預(yù)報點由預(yù)報時次、中心經(jīng)度、中心緯度、中心氣壓、風(fēng)力等字段定義。臺風(fēng)信息編碼如圖3所示。
圖3 臺風(fēng)信息編碼
臺風(fēng)ID:用1個字節(jié)表示,取值0~256。
臺風(fēng)編號:用3個字節(jié)表示,采用BCD編碼方式,例如臺風(fēng)編號201902編碼為001000000001100100000010。
臺風(fēng)中文名:用6個字節(jié)表示,最長3個漢字。
實時點共占25字節(jié),各個字段代表的含義及其所占的字節(jié)如下:
時次:用4個字節(jié)表示,年、月、日、時各占1個字節(jié)。年的取值范圍為0~100,月的取值范圍為0~12,日的取值范圍為0~31,時的取值范圍為0~24。
中心經(jīng)度:用2個字節(jié)表示,單位為百分之一度,取值范圍為-18 000~18 000。
中心緯度:用2個字節(jié)表示,單位為百分之一度,取值范圍為-9 000~9 000。
中心氣壓:用2個字節(jié)表示,單位為百帕,取值范圍為0~2 000。
風(fēng)力:用1個字節(jié)表示,單位為級,取值范圍為0~256。
移動速度:用1個字節(jié)表示,單位為千米/小時,取值范圍為0~256。
移動方向:用1個字節(jié)表示,取值范圍為0~15,表示風(fēng)向傳感器的16方位圖的16個方位,0表示北,1表示北東北,以此類推,15表示北西北。
七級風(fēng)圈半徑:用4個字節(jié)表示,東北半徑、東南半徑、西北半徑、西南半徑各占1個字節(jié),單位為10公里,取值范圍為0~256。
十級風(fēng)圈半徑:用4個字節(jié)表示,東北半徑、東南半徑、西北半徑、西南半徑各占1個字節(jié),單位為10公里,取值范圍為0~256。
十二級風(fēng)圈半徑:用4個字節(jié)表示,東北半徑、東南半徑、西北半徑、西南半徑各占1個字節(jié),單位為10公里,取值范圍為0~256。
預(yù)報點信息共占40字節(jié),共有5個預(yù)報點,每個預(yù)報點占8字節(jié),預(yù)報點的中心經(jīng)度、中心緯度、中心氣壓、風(fēng)力等字段的編碼定義與實時點同名字段的編碼定義一致。預(yù)報時次用1個字節(jié)表示,取值范圍為0~256。
海上大風(fēng)預(yù)警信號信息編碼長度為22字節(jié),傳輸?shù)男畔A(yù)警信號的發(fā)布時間、預(yù)警信號ID、狀態(tài)、影響區(qū)域,平均風(fēng)、陣風(fēng)以及風(fēng)向。影響區(qū)域為橢圓形狀,通過中心點經(jīng)度、中心點緯度、長軸、短軸、長軸方向等字段定義。海上大風(fēng)預(yù)警信號信息編碼如圖4所示。
圖4 海上大風(fēng)預(yù)警信號信息編碼
發(fā)布時間:用6個字節(jié)表示,年、月、日、時、分、秒各占1個字節(jié),年的取值范圍為0~100,月的取值范圍為0~12,日的取值范圍為0~31,時的取值范圍為0~24,分的取值范圍為0~60,秒的取值范圍為0~60。
預(yù)警信號ID:用2個字節(jié)表示,取值范圍為0~216。
狀態(tài):預(yù)警信號狀態(tài)有發(fā)布(Alert)和解除(Cancel)兩種狀態(tài),用1個字節(jié)表示,取值0表示Alert,1表示Cancel。
中心經(jīng)度:用2個字節(jié)表示,單位為百分之一度,取值范圍為-18 000~18 000。
中心緯度:用2個字節(jié)表示,單位為百分之一度,取值范圍為-9 000~9 000。
長軸:用2個字節(jié)表示,單位為公里,取值范圍為0~2 000。
短軸:用2個字節(jié)表示,單位為公里,取值范圍為0~2 000。
長軸方向:用2個字節(jié)表示,單位為度,取值范圍為0~360。
平均風(fēng):用1個字節(jié)表示,單位為級,取值范圍為0~256。
陣風(fēng):用1個字節(jié)表示,單位為級,取值范圍為0~256。
風(fēng)向:用1個字節(jié)表示,取值范圍為0~15,表示風(fēng)向傳感器的16方位圖的16個方位,0表示北,1表示北東北,以此類推,15表示北西北。
海上大霧預(yù)警信號信息編碼長度為21字節(jié),傳輸?shù)男畔A(yù)警信號的發(fā)布時間、預(yù)警信號ID、狀態(tài)、影響區(qū)域以及能見度。影響區(qū)域為橢圓形狀,通過中心點經(jīng)度、中心點緯度、長軸、短軸、長軸方向等字段定義。海上大霧預(yù)警信號信息編碼編碼定義如圖5所示。
圖5 海上大霧預(yù)警信號信息編碼
預(yù)警信號的發(fā)布時間、預(yù)警信號ID、狀態(tài)、中心點經(jīng)度、中心點緯度、長軸、短軸、長軸方向等信息字段的編碼定義與海上大風(fēng)預(yù)警信號同名字段的編碼定義一致。
能見度:用2個字節(jié)表示,單位為米,取值范圍為0~216。
海上雷雨大風(fēng)預(yù)警信號信息編碼長度為21字節(jié),傳輸?shù)男畔A(yù)警信號的發(fā)布時間、預(yù)警信號ID、狀態(tài)、影響區(qū)域、風(fēng)力、風(fēng)向。影響區(qū)域為橢圓形狀,通過中心點經(jīng)度、中心點緯度、長軸、短軸、長軸方向等字段定義。海上雷雨大風(fēng)預(yù)警信號信息編碼定義如圖6所示。
圖6 海上雷雨大風(fēng)預(yù)警信號信息編碼
預(yù)警信號的發(fā)布時間、預(yù)警信號ID、狀態(tài)、中心點經(jīng)度、中心點緯度、長軸、短軸、長軸方向、風(fēng)向等信息字段的編碼定義與海上大風(fēng)預(yù)警信號同名字段的編碼定義一致。風(fēng)力:用1個字節(jié)表示,單位為級,取值范圍為0~256。
為了實現(xiàn)業(yè)務(wù)所需的功能,系統(tǒng)在設(shè)計和開發(fā)過程中應(yīng)用了比較成熟的軟件技術(shù),創(chuàng)新地實現(xiàn)了業(yè)務(wù)所需的功能要求。
系統(tǒng)采用Nginx實現(xiàn)軟件負(fù)載均衡,擁有配置簡單靈活,易于擴(kuò)展的優(yōu)點。Nginx是一個高性能、輕量級的Web服務(wù)器和反向代理服務(wù)器,也是一個電子郵件(IMAP/P0P3/SMTP)代理服務(wù)器在一個BSD-like協(xié)議下發(fā)行。其特點是占用內(nèi)存少,并發(fā)能力強(qiáng),并發(fā)能力在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好。
系統(tǒng)使用RocketMQ[8]建立集群消費(fèi)模式的消息隊列來管理系統(tǒng)各軟件模塊的中間消息。RocketMQ是一款分布式、隊列模型的消息中間件。提供豐富的消息拉取模式,能夠保證嚴(yán)格的消息順序,具有高效的訂閱者水平擴(kuò)展能力和億級消息堆積能力,可實現(xiàn)實時訂閱消息。
系統(tǒng)利用北斗RDSS[9]的中遠(yuǎn)海覆蓋范圍優(yōu)勢,有效利用北斗RDSS傳輸容量,針對氣象預(yù)警產(chǎn)品進(jìn)行合理壓縮編碼,最終通過北斗短報文通信[10-11],實現(xiàn)向海南安裝了北斗船載終端的船只精準(zhǔn)定向推送氣象預(yù)警信息。北斗短報文數(shù)據(jù)傳輸格式包括指令、報文頭信息、電文內(nèi)容、校驗和四個部分,如圖7所示。其中電文內(nèi)容是氣象信息編碼可用部分,長度為120字節(jié)。根據(jù)氣象信息內(nèi)容分析,對短報文中的電文內(nèi)容進(jìn)行格式定義,具體定義方法在第三節(jié)中已給出。
圖7 北斗短報文數(shù)據(jù)傳輸格式
系統(tǒng)采用Oracle Data Guard[12-13]和RAC[14]技術(shù)實現(xiàn)氣象預(yù)警數(shù)據(jù)的存儲,以保證數(shù)據(jù)的安全備份。Data Guard是Oracle推出的一種高可用性的數(shù)據(jù)庫方案。它是在主節(jié)點與備用節(jié)點間通過日志同步來保證數(shù)據(jù)的同步,可以實現(xiàn)數(shù)據(jù)庫快速切換與災(zāi)難性恢復(fù)。用戶能夠在對主數(shù)據(jù)庫影響很小的情況下,實現(xiàn)主備數(shù)據(jù)庫的同步。而主備機(jī)之間的數(shù)據(jù)差異只限于在線日志部分,因此被不少企業(yè)用作數(shù)據(jù)容災(zāi)解決方案。Oracle RAC是Oracle9i新版數(shù)據(jù)庫中采用的一項新技術(shù),也是Oracle數(shù)據(jù)庫支持網(wǎng)格計算環(huán)境的核心技術(shù)。Oracle RAC—般由兩臺或者兩臺以上同構(gòu)計算機(jī)及共享存儲設(shè)備構(gòu)成,可提供強(qiáng)大的數(shù)據(jù)庫處理能力。當(dāng)應(yīng)用規(guī)模需要擴(kuò)充時,用戶可以按需擴(kuò)展系統(tǒng),以保證系統(tǒng)的性能。
系統(tǒng)對經(jīng)常查詢的熱點數(shù)據(jù)進(jìn)行緩存,以加快查詢業(yè)務(wù)的操作,減輕數(shù)據(jù)庫的壓力,數(shù)據(jù)緩存主要選用Redis[15-16]來實現(xiàn)。Redis是一個高性能的key-value數(shù)據(jù)庫。支持存儲多種value類型,并且支持不同的排序方式。為了保證效率,Redis把數(shù)據(jù)緩存在內(nèi)存中,會周期性地把新的數(shù)據(jù)寫入磁盤。同時Redis支持主從同步,數(shù)據(jù)可以從主服務(wù)器向任意數(shù)量的從服務(wù)器同步,這對讀取操作的可擴(kuò)展性和數(shù)據(jù)冗余很有幫助。
在現(xiàn)有北斗衛(wèi)星對北斗船載終端的通訊支持的基礎(chǔ)上,北斗船載終端可視化氣象預(yù)警系統(tǒng)通過對氣象信息進(jìn)行合理壓縮編碼,采用北斗短報文通信技術(shù),實現(xiàn)向海南安裝了北斗船載終端的船只精準(zhǔn)定向推送氣象預(yù)警信息。通過在北斗船載終端中內(nèi)置氣象信息處理模塊實時接收信息進(jìn)行解碼,根據(jù)各預(yù)警信息的展示要求,利用北斗船載終端的海圖疊加繪制技術(shù),實現(xiàn)了在北斗船載終端圖形顯示臺風(fēng)、海上雷雨大風(fēng)、海上大風(fēng)、海上大霧等氣象預(yù)警信息。通過該系統(tǒng),海上作業(yè)用戶可以實時動態(tài)了解自己船只與災(zāi)害性天氣落區(qū)之間的位置關(guān)系,及時判斷出避險的最佳路線和時機(jī),可以有效降低海上氣象災(zāi)害造成的損失,保護(hù)人民生命財產(chǎn)安全。也有助于提高防災(zāi)減災(zāi)的能力,提升海上突發(fā)環(huán)境事故的應(yīng)急處理能力。