基于全球航行的海洋气象演示系统设计∗
2019-02-27赵甲文陶冠时蒋晓龙
郭 鹍 赵甲文 陶冠时 蒋晓龙
(1.中船航海科技有限责任公司 北京 100070)(2.天津航海仪器研究所 天津 300131)
1 引言
利用传统气象环境系统进行辅助决策需要非常专业知识,随着航运业的发展,岸海一体及智能航行技术呈现跨越性的进步,基于大数据气象信息辅助决策已经由一种趋势转变为现实。通过卫星通信方式,传输基于grib2格式的气象要素[1],实时掌握世界范围内的天气动态,对航海人员的日程规划、航海路线制定、货物装卸、室外活动起着非常大的辅助作用[2]。为了保证航海工作人员能以形象化的手段获取所制定航线范围内的天气状态,本文采用质点运动动画算法以及标量渲染线性插值算法,形象地展示了全球范围内海洋气象环境各种气象要素的质点运动或渲染[3],最后形成海洋气象演示系统,船舶驾驶人员可以通过该演示系统观察周边海域以及所关心海域的气象信息,帮助其及时作出决策。
2 海洋气象演示系统架构设计
海洋气象演示系统采用B/S结构进行设计[2],客户端采用使用SWT浏览器组件进行设计。SWT浏览器组件提供了在Java应用程序中内嵌浏览器应用,并可通过Java API与浏览器自身进行交互,通过在客户端程序内嵌一个内置浏览器完成软件渲染和演示[7,15]。
海洋气象演示系统所解析的气象数据源来自于美国国家环境预测中心全球预报系统,其数据格式为国际气象组织规定的标准文件格式grib2,对grib2编码进行分析、解析其中的相关气象数据,然后分类处理并转换为Json数据格式。Json数据比较方便数据库应用,B/S客户端将Json数据渲染到浏览器页面。
全球海洋气象演示系统在启动之后首先会到指定网址上下载grib2数据,存放到指定的目录下,也可以直接读取从外部磁盘导入的grib2文件。当解析文件时,则调用Grib2json系统进行解析,解析完成之后,全球海洋气象演示系统会把json文件存放到自己的publicdata路径下,系统按照类别(大气或海洋、时间、分辨率)去读取合适的json文件来进行渲染,最终在高清屏幕上以可视化的方式进行展示,包括风速、涡旋、垂直速率、温度、相对湿度、云混合率、可降水量、云水量、洋流等,其中,风速矢量、洋流矢量需要以动画形式展示出来。并通过按钮对气象要素按照海拔、分辨率、时间来进行自由切换,完成各类气象数据的浏览、漫游、查询、显示功能,并根据不同类型的气象数据提供不同渲染模式。
海洋气象演示系统中通信和信息传输主要依靠移动通信网络和移动卫星网络进行保障,移动卫星网络系统采用VSAT通信或者Inmarsat通信系统[9~10]。Inmarsat通信系统是由国际海事卫星组织(Inmarsat)自1970年代开始发展的卫星移动通信系统,可覆盖全球除两极区之外的全部地区。最高速率可达 492 kbit/s[13~14],其成本相对较高。考虑成本问题,在离岸较近的情况下,气象数据下载会选用陆地的3G/4G网络,在远洋时优先使用VSAT通信以及Inmarsat通信系统提供的卫星网络[12]。
全球海洋气象演示系统的工作流程如图1所示。
图1 全球海洋气象演示系统工作流程
3 数据下载及格点数据解析
海洋气象演示系统通过FTP方式连接到美国国家环境预测中心获取全球预报系统数据,该数据提供了4个分辨率:2.5度分辨率、1度分辨率、0.5度分辨率、0.25度分辨率,海洋气象演示系统可根据网络状态以及实际网络下行速率选用不同数据分辨率,因数据较大需要采用断点续传,在条件允许的情况下一般选用0.25度分辨率的数据,数据大约197MB,在远洋航行时,由于通信成本可采用2.5度分辨率数据,数据约3.7MB。
本文中的海洋气象演示系统的数据为grib2格式,grib2是国际气象组织的最新标准格式[1],grib2具备更好的自描述性、可扩展性和灵活性,与以往的气象标准数据格式相比如GRID或者GARF相比是一种更为方便的传输大容量数据格式,我国气象预报分析工作也采用该格式数据作为参考,欧洲格点报、地面绘图报、正点实况报均采用该格式。研究掌握grib2的文件数据分析使用可进一步拓展全球海洋环境信息演示系统应用范围。
grib2的文件内容是由十六进制字符(alphanumeric character)组成的。比如:FF表示十六进制的FF,数值为255,并且是按照字节依次存放的。每2个字节之间会有空格作为分割符号。grib2文件是有若干的区段组成的文件,每个区段表示一定的含义,存放一定的数据。
grib2的区段描述如表2所示:
表2 grib2区段描述
grib2具有多种优势,尤其在多维数据描述方面,因此美国NOAA的数据包中存储了多个格点数据、多个产品,具备相当的模块特性,而且为扩展和增加提供方便的途径[11]。
4 页面渲染设计
海洋气象演示系统页面渲染分别为气象要素标量渲染和矢量渲染,根据不同要素渲染选取色彩,通过不同颜色色条的深浅来表达值域大小,非常直观。
4.1 标量渲染
海洋气象演示系统的温度、湿度均为标量数据,在渲染图上的每个网格都对应着一个渲染点,根据数据值的范围渲染出对应的颜色。由于数据采样点是离散的,因此温度和湿度等信息需要采用算法进行插值。
标量渲染采用了单线性线性插值[4~5],基本思想是根据点(x,y)的2个邻点灰度值,经过线性插值计算求出(xc,yc),用数学方法来描述输入、输出图像点之间的空间关系时,其几何运算的一般定义为
这种算法是逐象素、逐行地产出输出图像。每个象素的灰度级由2个象素参与的插值所唯一确定。这种方法对于气象标量要素渲染逻辑执行更为有效。
如图2所示,A区域渲染点可以根据从json中提取的数据进行颜色渲染,渲染为天蓝色,B区域渲染点无值,C区域渲染点同样进行了颜色渲染,渲染为绿色,那么,此时B区域处的每个渲染点就要利用上述双线性插值的方法进行颜色的过渡渲染,使得A区域渲染点和B区域渲染点之间的交汇时的颜色柔和自然。
图2 气象标量要素渲染示意图
4.2 矢量渲染方式
矢量渲染用于风速和洋流的渲染,而矢量渲染则会有两个值,由这两个值确定一条方形的对角线。
矢量的渲染与其他气象要素的渲染有所不同,其他分量用标量渲染时,每个点都有一个对应的渲染值,而矢量渲染则会有U(U-Component)V(V-Component)两个值,由这两个值确定一条方形对角线。实际情况中,如果存在的每个矢量都被描绘出来,则会有非常多的细微的线条,从效果上来看,就会混沌不清,不易辨识。此时需要从平行的对角线中抽象出一条,沿着此条对角线的方向继续抽象渲染,用来清晰准确地表达矢量走向。并在此线上进行粒子描绘,形成加速动画。
矢量的渲染采用了双线性插值[4~5]进行线段抽象,基本思想是根据点(x,y)的4个邻点灰度值,经过线性插值计算求出(x0,y0),用数学方法来描述输入、输出图像点之间的空间关系时,其几何运算的一般定义为
双线性插值是逐象素、逐行地产出输出图像。每个象素的灰度级由四个象素参与的插值所唯一确定。这种方法对于气象标量要素渲染逻辑执行更为有效。如图3所示。
图3 双线性插值示意图
具体f(x,y)在点P(x,y)的插值算法如下:假设已知函数 f在 P11=(x1,y1)、P12=(x1,y2),P21=(x2,y1)以及 P22=(x2,y2)四个点的值。首先在 x 方向进行线性插值,得到
然后在y方向进行线性插值,得到
最后综合起来就是双线性插值最后的结果:
通过线性插值得到抽象线段F。
以图4下抽象线段F为例。
图4 矢量动画运行图示意
此线段抽象出了几个主要的点,并在此线段上进行粒子描绘,亮度通过不同灰度值的白色定义,数值越大则越接近白色,步骤如下:
第一步:P1(x1,y1)点高亮显示,假设灰度值为10。
第二步:P2(x2,y2)点亮度值变为 10,P1(x1,y1)点变为稍暗的灰度值显示(灰度值值为5)。
第三步:P3(x3,y3)点灰度值值为 10,P2(x2,y2)点灰度值值为5,P1(x1,y1)点灰度值值为3。
第四步:P4(x4,y4)点灰度值值为 10,P3(x3,y3)点灰度值值为 5,P2(x2,y2)点灰度值值为 3,P1(x1,y1)点灰度值为1。
由上几步,可以显示一个高亮的粒子拖曳着尾巴(显示划过的痕迹)从抽象线段上划过,通过亮度的变化并无限循环,就形成了风速的质点动画。实际处理时可采用整数进行运算,本文采用了整数计算代替浮点数运算,比如左移11位变11位小数为整数,页面渲染实例如图5所示。
图5 页面渲染示意图
5 软件整体运行
海洋气象演示系统其他要素的处理方法也都与风、温度等要素处理办法类似,这里不再描述,在本系统完成数据下载、解析后,通过渲染后的工作界面如图6所示。
6 结语
本文首先对基于全球航行的海洋气象演示系统设计架构进行了说明,根据海洋气象演示系统分析了grib2数据。在完成grib2数据解析的基础上,针对温度、湿度数据采用线性插值渲染,针对风速、风向矢量运动的特点,设计质点动画算法。该演示系统综合运用了计算机通讯技术、图像处理技术,显示全球海域的气象状态清晰、简明并易于学习,一方面可为船舶系统电子配套设计人员作为开展智能船舶设计参考,另一方面可辅助航海部门人员知悉航行过程中海洋环境各个气象要素的变化情况,帮助船舶进行航路规划,规避航路上危险天气。