王斌,孟素婧,王豹
(国家海洋环境预报中心,北京100081)
近年来,伴随着智能移动终端的广泛普及和移动互联网产业的快速发展,以智能手机应用程序(Mobile Apps)为代表的移动应用系统很大程度上改变了人们获取和传播信息的方式。在民用/消费级气象预报领域,国内外有多款天气预报公众移动应用系统产品,国外如Dark Sky、Windy和Marine Weather等,国内也有中国天气通、墨迹天气和彩云天气等。上述系统在应用场景各有侧重,具体功能也不尽相同,但在系统建设的理念和思路方面是一致的,都是借助硬件载体的定位模块,获取用户位置,基于数值预报结果,根据位置提取并加工制作气象预报,为用户提供气象预报信息服务。
但在面向公众用户的海洋预报信息服务领域,却缺少一款海洋预报移动应用系统,原因如下:一是相较于天气预报,海洋预报中用户请求位置与海洋数值预报产品在地理空间上是偏离的(在气象预报中,用户请求位置与数值预报产品或释用后的预报产品在地理空间上存在包含关系),原因是绝大多数使用场景中,用户请求位置通常情况下位于沿岸、岛屿或者内陆区域,而海洋数值预报产品仅在海域部分才有预报结果,两者不能直接找到地理空间上的对应关系;二是海洋预报公众用户数量较天气预报少,针对细分海洋预报领域的信息服务技术研究发展较慢,面向公众的海洋预报信息服务移动应用系统建设滞后。
海洋预报公众服务移动应用系统正是在该背景下研发建设的。该系统基于海洋数值预报模式输出结果与用户定位信息,综合运用数据分析处理、数据压缩及可视化技术,提供基于位置的海洋预报信息服务,用户可快速获取定位或者查询地点的海浪、潮汐(沿岸)、海温、海流和海面风等预报结果,基于地图方式可视化展示海洋动力环境要素变化过程。
本文第2部分将概述海洋预报公众服务移动应用系统的需求分析、系统架构和技术路线;第3部分将详细描述系统建设中两个关键点,即基于位置的海洋预报服务和海洋预报场数据压缩的技术实现;第4部分将介绍系统的主要功能和业务应用情况。
通过海洋预报门户网站和海洋预报满意度的调查收集,获取了公众用户的主要需求,总结如下:
(1)在以手机为载体的智能终端上随时随地获取海洋预警报信息,操作简便且直观易懂。
(2)提供基于位置的定制化信息服务,默认给出用户定位或关注位置的海洋预报信息。
(3)提供较大空间范围内海洋动力环境要素随时间的发展变化情况。
(4)提供海洋预报信息的社交共享,方便用户将信息分享到微信或朋友圈等。
海洋预报公众服务移动应用系统可划分为数据源、服务端和移动终端3部分,系统架构如图1所示。
图1 系统架构图
2.2.1数据源
数据源来自海洋灾害预警报数据库、智能网格预报产品(或者数值预报产品)数据以及系统基于上述数据加工用于地图可视化的发布数据集、配套元数据及记录用户访问和操作行为的用户数据库。
2.2.2 服务端
服务端是海洋预报公众服务移动应用系统的核心,负责数据的加工处理和存储,提供基于Web的系统后台管理和数据接口服务与管理,从逻辑层面可划分为3部分。
(1)数据加工处理。对海洋灾害预警报数据库和智能网格预报产品(或者数值预报产品)的数据经过抽取、转换和加载等操作及组合,组织存储到预定义的结构化数据库中。
(2)系统后台管理。通过Web方式实现对数据处理过程及运行状态的监控,实现对用于发布的智能网格预报和警报信息的查询和发布管理,实现对用户注册及访问情况统计、移动终端版本管理及更新和系统元数据配置及管理等。
(3)数据接口服务和管理。数据接口服务分为系统研制和外部调用两类,系统研制的接口提供一系列基于位置的海洋预报信息服务,通过接收用户定位信息或地理名称,返回海洋预报和警报数据。外部调用接口是第三方机构或者公司提供的通用性数据接口,如天地图的逆地理编码以及POI接口等。
2.2.3 移动终端
移动终端是在硬件载体上的应用程序,具体实现与用户的人机交互过程。具体到软件功能上,包括用户定位、地名查询、兴趣点收藏与管理、海洋预警报信息呈现和信息分享等。
服务端基于阿里云建设和部署,以用户应用场景为驱动设计了海洋预报信息的组织和存储方式,分别使用了MySQL和PostgreSQL等不同类型的数据库实现对数据的高效管理。数据处理过程基于Java的Kettle数据ETL框架实现,通过任务作业方式自动化运行。后台管理基于Vue框架开发,可以为管理员提供基于Web页面的数据处理过程监控、预警报数据及发布信息管理和用户管理。数据接口基于Spring框架开发,是一系列用于服务端和移动终端信息交换的RESTful风格的应用程序接口(API)。
移动终端以手机应用程序形式展现,基于uniapp前端应用框架,采用HTML5方式开发,支持Android和iOS两种主流的操作系统。移动终端通过响应式布局对不同尺寸屏幕进行适配处理,支持系统能较好地在主流智能手机上流畅运行。地图可视化可通过独立研制的基于Leaflet和Canvas的海洋预报要素渲染模块实现。
为解决大多数应用场景下,公众用户请求位置与海洋数值预报模式产品在地理空间上存在偏差的问题,我们设计了基于位置的海洋预报信息服务方法。该方法的应用前提是用户通过定位或者地名检索方式需要获取的不是陆地位置,而是位置邻近的或者地名标识的附近海域。
基于位置的海洋预报信息服务方法设计如下:
(1)创建完整覆盖中国海域范围的海洋信息服务网格(以下简称“信息网格”),用于划分海岸带、海岸带缓冲区、海岛、海域和陆地等不同类型,为开展请求位置判断和信息网格权重分配奠定基础。
(2)根据请求点空间位置坐标索引到对应信息网格,根据信息网格类型及搜索半径获得搜索半径内的信息网格集合。
(3)基于上一步的信息网格集合和数值预报模式输出的预报格点,通过格点与信息网格的空间关系判别,获得被信息网格覆盖的数值预报模式输出格点集合,将格点空间位置和对应的信息网格类型权重参数,获得带空间权重的预报格点数据集。
(4)以加权几何中位数作为请求点对应的海域位置,通过上一步获取的数值格点数据集,计算求解加权几何中位数的空间坐标。
(5)通过空间插值算法(克里金或反距离权重等)计算获得映射海域位置的海洋预报结果,并将其返回给用户。
该方法的优势在于可将海岸带及海岸带向陆一侧缓冲区内的空间位置,通过加权几何中位数映射到有海洋数值预报模式输出的格点位置,并通过空间插值计算获取该位置的海洋预报信息,进而解决请求位置与数值预报模式输出位置在空间上存在偏差的问题,以确保在海洋预报公众服务应用系统中用户的请求位置(通过定位或者地名检索)能够获取到海洋预报信息。
基于该方法的具体实现步骤如下:
步骤1:信息网格制作。
信息网格为等经纬度网格,在境界、政区和地名等基础地理数据支持下,提取海岸线和海岛信息,与信息网格进行空间关系判别分析,将信息网格划分为陆地、海岸带缓冲区、海岸带、海岛和海域等不同类型,予以区分与标识。
信息网格处理步骤如下:
(1)设置起止经度、纬度和空间分辨率等参数,初始化海洋信息网格,在本文中经度范围是90°~155°E,纬度范围是0°~55°N,空间分辨率为0.1°。
(2)提取大陆、海岛岸线(海岛判别依据是以海岛在地理空间上完全覆盖任一信息网格为标准),获取岸线矢量数据。
(3)基于岸线矢量数据与信息网格,进行空间关系分析,将与岸线在空间上存在相交关系的信息网格定义为海岸带。
(4)基于岸线矢量数据向陆地一侧制作缓冲区,将与缓冲区在空间上存在相交关系的信息网格定义为海岸带缓冲区。
(5)岸线向陆一侧的信息网格定义类型为陆地。
(6)岸线向海一侧且完全覆盖海岛且不与海岸线相交的信息网格,定义为海岛。
(7)其余信息网格均为海洋完全覆盖,定义为海域。
步骤2:请求空间位置与信息网格计算分析。
请求空间位置(以下简称“请求位置”),以点(latx,lonx)表示。获得所在的信息网格索引,计算公式如下:
式中,lat是请求位置的纬度坐标;lon是请求点的经度坐标;resolution是信息网格的空间分辨率,由于信息网格是等经纬度网格间距,故两者在数值上相同。indexlat是按式(1)计算求得的纬度索引值;indexlon是按照式(2)求得的经度索引值。请求位置所在的信息网格用indexlat和indexlon来表示。
具体处理如下:
(1)判断[indexlat,indexlon]所在信息网格类型,若为陆地或者超出数值预报模式输出空间范围的,将不进行后续处理,直接返回对应提示信息。
(2)判断[indexlat,indexlon]所在信息网格类型,若为海岸带、海岸带缓冲区、海岛和海域时,以请求点位置为起点,按所在信息网格类型设置搜索半径,获得信息网格空间关系为包含及相交的信息网格集合,排除类型为陆地或者海岸带缓冲区的网格,得到用于下一步计算的信息网格集合。搜索半径的权重设置按网格类型海岸带、海岸带缓冲区和海岛分别为网格分辨率的1.5、2.0和0.9倍。
(3)基于信息网格集合和海洋数值预报模式输出的预报格点,计算两者的空间包含关系,通过射线法判断点是否位于信息网格多边形中,遍历后,获得信息网格覆盖的预报格点集合。根据格点所属信息网格类型,生成带类型的预报格点数据集,用{(point0,type),(point1,type),…,(pointn,type)}表 示,其中,pointn为预报格点,type为点所属信息网格类型。
以山东长岛附近的一个用户请求位置为例(见图3中的红色三角),通过计算请求点的indexlat和indexlon,判断其处于类型为海岛的信息网格,按照空间关系的计算方法,橘红色圆形区域为搜索半径,计算该区域与环流数值预报模式输出预报格点的两者空间包含关系,获得满足条件的环流数值预报模式输出的预报格点集合(图3中高亮显示处于缓冲区范围内的点)。
图3 请求点及缓冲区和信息网格空间关系分析图(按空间分辨率0.1°制作的信息网格)
步骤3:用户请求位置映射海域位置(加权几何中位数)计算。
用加权几何中位空间位置来表达用户请求点对应的海域位置。基于上一步获得的带类型的预报网格点集合,求解欧式空间中的加权几何中位位置(集合中所有点加权欧式距离和最小的点),计算方法如下:
式中,pointi即为预报网格点集合中的点;pointgm为几何中位数位置;wi为权重由预报网格类型的type属性确定,权重wi可以写为wi,type,确定方法如下:
落在不同信息网格类型(海岸带、海岛和海域)中的预报点权重参数不同,海岸带、海岛和海域权重比例为1:1.5:2。上述权重参数设置后,几何中位数位置将会偏向海域一侧,与数值预报模式的输出区域接近。
由于该方程无法直接求得公式解,因此采用迭代逼近的方法来求解(Weiszfeld算法[1])。首先,初始化一个候选位置且保证候选位置不与点集中的任意点相同;然后,通过迭代逼近求解最优解,最终确定加权几何中位数空间位置。图4为基于图2中的加权几何中位数空间位置示意图。
图2 预报信息网格实例图(局部,按空间分辨率0.1°制作的信息服务网格)
图4 预报网格点计算加权几何中位数空间位置的示意图
步骤4:映射海域位置海洋预报信息插值处理。
通过空间插值方法求解映射海域位置的海洋预报信息,空间插值方法可选用反距离权重或者克里金法进行插值处理。对标量要素直接进行插值处理,对矢量要素如风和海流,由于其要素按U和V分量方式给出,在插值处理后再进行矢量合成。
海洋预报公众服务移动应用系统的核心功能除基于位置查询海洋预报信息外,还包括地图方式对海洋动力环境要素的可视化渲染。目前,主流场数据可视化是基于浏览器,并借助开源或者第三方的JavaScript可视化库来实现的,如Echarts.js和D3.js等。在基于Echarts.js(网址:https://echarts.apache.org/zh/index.html)的风场可视化样例中,场数据被存储为JSON格式的文件,其优点在于文件易于阅读和编写,易于程序处理解析,但缺点是需较大的存储空间。
海洋数值预报模式数据一般输出的格点较多,以国家海洋环境预报中心的智能网格预报产品为例[2],该产品空间范围是105°~145°E,0°~45°N,空间分辨率为10 km,输出格点为180 851个。若将数据保存为JSON格式,单预报要素单时刻的文件约1.4 M。如果动态展示预报要素的时间空间变化,就需要多预报时刻叠加,数据量将会大幅度增加,影响数据文件的网络传输。
海洋预报公众服务移动应用系统的设计与实现中需考虑在网络环境不佳的情况下,尽量减少或缩短用户下载数据的时间,使系统获得较好的用户体验。因此,有必要对预报场数据开展设计,通过压缩处理,减小数据文件占用空间,缩短网络传输时间,减少浏览器因为数据下载引起的可视化渲染延迟,提升用户使用体验。
针对预报场数据,本文提出的压缩方法是,首先将预报场数据由浮点型存储转换为短整型存储,然后在上一步基础上通过DEFLATE算法再进行压缩处理,得到数据文件。
从公众用户对海洋预报信息使用的角度出发,海洋预报结果一般保留小数点后一位即可。从前面的描述可知,数值预报模式输出结果一般是符合气候界限阈值范围的,数值预报模式输出的预报结果一般会符合要素气候学界限值范围,部分气象和海洋要素气候学界限值范围如表1和表2所示[3-4]。
表1 气象要素气候界限值范围
表2 海洋要素气候界限值范围
预报场数据的浮点值可通过计算缩放系数和偏移系数转换处理为短整型。以海温要素为例,一般在-2~44℃之间,按照0.1℃的最小间隔,最多需要461个整数即可,远低于短整型可表示的整数范围。因此,这种方法在实际应用中可行。
偏移系数和缩放系数的计算公式如下。
式中,Scale_factor是缩放系数;Offset是偏移系数;Max是待转换的预报场中要素的最大值,Min是待转换的预报场中要素的最小值;n为存储字节位数,short int类型一般为2字节,故n取值16。
转换后数据计算公式如下。
式中,Compress_data是转换后预报场数据;Origin_data是原始的预报场数据;Floor为向下取整函数。
在此基础上,将转换后数据再基于DEFLATE算法进行压缩处理。DEFLATE是一种字无损数据压缩编码算法,该算法具有良好的压缩性能和速度,在图像等领域得到了广泛的应用。DEFLATE算法同时使用了LZ77和Huffman编码算法[5-6],其处理过程主要包括2个步骤。首先,由LZ77算法通过数据重复结构信息来进行数据压缩,通过前向缓冲区和滑动窗口(搜索区)实现在前向缓冲区中不断寻找能够与字典中已存在的短语匹配的最长短语,并通过标记符标记;然后,对LZ77算法处理后的数据通过Huffman编码进一步进行压缩。
以环流数值预报模式输出的单预报时刻海温预报场数据为例(数值预报场行数为451,列数为401),数据文件存储的内容和结构相同,依次保存行数、列数、左上角经度、左上角纬度、分辨率、无效值和场数据数组。
分别采用4种方案对单要素单预报时刻的预报场数据进行压缩试验。方案1不做任何压缩处理,仅从数值预报模式输出结果中读取数据并存储为JSON格式;方案2为只做浮点转短整型处理;方案3为浮点型存储并做DEFLATE压缩处理;方案4为浮点型转短整型存储并做DEFLATE压缩处理。处理后文件大小如表3所示。从表3可以看出,按方案4压缩处理后,相较不做处理的JSON格式文件,可达到10%左右的压缩率,很大程度的节约了存储空间并节省网络传输时间。
表3 单要素单预报时刻数据压缩对比表
海洋预报公众服务移动应用系统面向公众用户设计了海洋预报信息服务的应用场景,支持用户通过定位或者地名检索方式查询我国所辖海域任意位置的海洋预报信息。系统支持iOS和Android两个主流平台,主要功能如下:
(1)基于位置的海洋预报功能。在国家海洋环境预报中心智能网格预报产品支持下,提供我国海域任意位置的海浪、表层海温、表层海流以及我国大陆沿岸潮汐预报信息服务,包括最长时间为5 d的逐3 h预报。图5分别是在系统中查询营口鲅鱼圈和嵊泗列岛风景区的海洋预报信息的结果显示。
图5 预报结果显示
(2)海洋警报功能。提供基于位置的海浪和风暴潮警报查询、预警等级和信息提示,提供海啸消息/警报的即时推送和警报详情展示等。
(3)海洋预报要素地图展示功能。提供大地理空间范围的海浪、表层海温、表层海流和海面风等海洋动力环境要素的可视化渲染及动态播放,为公众用户提供直观可见的海洋预报信息。针对不同的海洋预报要素采用了不同的可视化渲染方式,如图6a的海表风要素采用风速色斑图叠加风羽方式呈现,图6b的表层海流要素采用流速色斑图叠加流线轨迹动图呈现。
图6 可视化渲染结果展示
(4)用户定制预报服务功能。用户可通过地名检索或地图拾取方式确定兴趣点,并支持为该位置自定义设置触发海洋预报信息提示的阈值条件(要素预报值范围及持续时间),系统将为用户自动计算满足条件的预报时间区间,为用户提供更贴近需求的海洋预报信息服务。
海洋预报公众服务移动应用系统于2020年12月29日正式发布,截至2021年2月用户量超过3 500人,平均每天提供服务约1 000次,高峰值时达到5 000次,为公众用户提供了一种可随时随地获取海洋预报信息的渠道。
海洋预报公众服务移动应用系统面向社会公众用户,通过智能终端的应用程序将专业的海洋预报数据转换为用户可直接使用且可直观感知的形式,核心是为用户提供了基于位置和所见即所得的海洋预报信息。
在系统研发过程中,除了合理设计系统架构,选择成熟稳定的开发框架和技术路线外,相较于其他海洋气象手机应用程序,主要在两个方面有所创新。一是提出了基于位置的海洋预报信息服务方法,通过将位于陆地的用户请求位置映射到加权几何中位数位置,并通过空间插值给出请求位置海洋预报信息,解决了海洋数值预报模式输出与用户请求存在海陆空间分离的情况;二是针对海洋预报要素场数据,提出了一种压缩方法,通过并给出了技术实现,即通过将预报要素值由浮点型存储转换为短整型存储,再根据DEFLATE算法进行再压缩处理,较大程度减少了数据文件的占用空间,提高了网络传输效率,可让用户在浏览大空间尺度的海洋预报要素动态展示中获得较好的用户体验。