湛江空管站天气雷达体扫描三维显示系统的设计与实现
2018-04-02黎江峰
黎江峰
摘要:湛江空管站天气雷达体扫描三维显示系统通过采集湛江多普勒天气雷达的多层CAPPI产品,经过平滑算法、取样和三角剖分等处理拼接成立体的三维图形,并使用WEB形式展示给预报员。预报员在网页上通过简单的操作即可观察回波的顶高以及垂直运动情况,在强对流天气中能更有把握的作出预报。
关键词:三维显示系统;three.js;平滑算法;三角剖分;AJAX
1引言
自建成以来,湛江空管站的新多普勒天气雷达为预报员带来了丰富多样的产品,但是在这些繁杂的产品中却缺少了雷达体扫描三维显示。预报员在查看VOL数据时只能通过CAPPI方式;既不直观,也不方便,往往不能准确及时的掌握回波整体的动态。因此,有必要开发一套基于雷达体扫描数据的回波三维显示系统。
雷达体扫描三维显示能直观的展示雷达回波的立体图像,让预报员更方便的掌握回波顶高、回波顶高的变化以及回波垂直运动的趋势,在强对流天气中能更有把握的作出预报。经过对预报员的意见进行征集,认为开发一套湛江空管站天气雷达体扫描三维显示系统(以下简称三维系统)是必需的。
2系统概要设计
2.1系统需求
本系统为方便预报员的使用同时野考虑到日后的升级维护,使用B/S架构。后台端系统自动获取雷达服务器中的多层CAPPI产品,合并成一个整体的三维回波。前台端系统使用插件显示后台传送来的三维回波。预报员可使用鼠标或键盘对回波进行拖动缩放等操作,实现全方位的查看。
2.2系统流程
三维系统使用MATLAB软件作为后台处理平台,定时采集雷达服务器中的多层CAPPI产品,将其各自还原成强度数据后通过平滑算法拼接为一个整体的三维模型。由于网页显示时终端的运算能力不强,只提取模型的表面,并将其三角剖分后制作成点阵模型。
三维系统的网页服务器采用nodejs,定时采集存放在指定目录的模型文件,通过socket技术异步发往前台浏览器。
三维系统的在浏览器接收到服务器异步发来的模型文件后,将其调整大小、染色、赋予材质,最终显示给客户。
流程如图1
2.3系统环境
考虑到还原CAPPI产品、拼接时的平滑算法以及三角剖分操作等都需要专业的数字处理软件,系统处理平台决定采用MATLAB软件。
由于系统需要后台定时获取模型,决定利用nodejs作为网页服务器。
前台则采用THREE.JS脚本负责显示三维模型。THREE.JS脚本具有扩展性好、使用方便和性能强大等特点,可在IE/CHROME/FIREFOX等浏览器上展示绚丽的三维效果,非常适合本软件的需求。
3系统详细设计
3.1处理平台
1)由于湛江多普勒天气雷达每6分钟生成一份VOL数据,处理平台每隔6分钟在雷达服务器中读取多层CAPPI产品图片。读取CAPPI图片后MATLAB将其加载到内存中,通过对比色标将图片转换为对应的强度矩阵。然后15层二维强度矩阵叠加合成一个三位强度矩阵。为了减轻系统处理压力,使用interp3函数对矩阵取样,分别在长、宽、高三个维度上缩减规模。为了减少每层间资料缺失造成的不连续,还应用了smooth函数进行平滑化插值。
2)三维矩阵生成后,然后按回波强度等级划分为12个新矩阵。使用isosuface函数对这些矩阵进行等值面取样。由于强度已经划分,每个矩阵中回波强度都是一致的,因此等值面就是矩阵表面。同时该函数还能对所取的表面数据离散化并进行三角剖分。此步骤完成后,将得到12个三维模型的面数据和法线向量数据。
3)将这些三维模型的面数据和法线向量数据按照obi文件的规范进行排序和编写。同时,为了配合下一步在B/S架构中使用这些0bi文件,编写时使用JSON格式。由于MATLAB在写入文件时偏向于整体写入,若指定每行每列的格式则效率大大降低,于是需要预先使用矩阵转置整体除法等对矩阵进行处理。
3.2服务器
1)服务器同样每隔6分钟读取一次处理平台生成的obi文件。读取后放到网页资源文件夹中,等待前台获取。而且根据文件夹中当前所含的obi文件生成文件清单。
2)当前台浏览器请求网页时,生成浏览页面送到前端。此页面包括了显示模型文件的iavascript插件。
3.3前端
1)用户打开页面时,浏览器从服务器获取网页,然后加载其中的iavascript插件。其中包含了THREE.is插件,用于最终显示模型。
2)前台每隔10秒钟向服务器请求一次文件清单。如果文件清单变更,则通过AJAX技术异步获取新增的obj文件并写入前台的内存。使用AJAX技术可在浏览器等待obi文件数据时CPU仍然为其余语句分配资源,避免了单线程的iavascript下载模型文件时无法正常渲染正在显示的模型。当模型文件全部获取完毕后处理模型的语句才会执行。
3)获取0bi文件后使用THREE.is的loader函数按文件描述的面和法向量在内存中生成相应的多边形模型geometry。此geometry缓存到一个模型数组中等待render函数将其调取、渲染。由于浏览器内存开辟限制,经过反复试验,将浏览器缓存模型数设为三个。因此,在生成新模型的同时要使用dispose函数删除旧的模型,将内存释放,以防内存耗尽。
4)在调整模型的大小、位置后为其赋予材质。在这里,为了方便显示不同强度的回波且减少浏览器负担,使用了meshbasemeterial材质的线条显示方式。然后THREE.is使用rander函数对其进行渲染并显示给用户。为了用户更直观的查看不同高度的回波,还将15层不同高度的cappi也各自覆盖在对应的高度层上。最后,还要构建一个显示环境,其中包括光源、画布、相机等用于容纳和显示回波模型。
3.4用户操作界面
用户在前台页面中可通过鼠标滚轮将回波拉近或拉远,亦可通过右侧的卷动条放大缩小。在最上方的选择栏中可选择过滤不同的回波强度。中间的选择栏可以选择浏览器缓存的最近三个时次的回波模型。最下方的卷动条则可以将回波模型按不同高度层进行切面,此时显示的切面边缘是表面模型的切线,内侧则是15层CAPPI平面模型中的其中一张。由于采用异步方式传输模型文件,用户在操作和查看回波时不会被打断。
用户操作界面如图2:
4結论
湛江空管站天气雷达体扫描三维显示系统基于B/S架构。数据处理上,使用MATLAB平台对湛江多普勒雷达的产品进行拼接和模型生成;对于网络服务器,使用nodejs作为网页和模型传输服务器;最后在前端显示方面采用Web甜技术的强大插件Three.js进行回波模型的显示。
本系统能简单高效的生成回波三维模型,并进行流畅的展示,让湛江空管站气象台的预报员有了一个更为直观、方便查看雷达回波的手段,预报员更能掌握当前强对流天气动态。
目前本系统还有模型生成速度偏慢、前端缓存模型数量偏少等缺点。后续将对MATLBA增加并行运算功能,提高模型生成的速度;进一步优化前台的模型大小,使前端能缓存更多的模型。