多组件融合的WRF模式气象数据可视化平台

2015-12-20 06:54杜景林朱兴宇
计算机工程与设计 2015年9期
关键词:经纬度绘图鼠标

杜景林,朱兴宇

(南京信息工程大学 电子与信息工程学院,江苏 南京210044)

0 引 言

关于WRF模式[1]计算出来的NetCDF数据[2]分析处理技术,目前已经有NCAR Graphic[3]、Vis5D[4]和GRADS[5]等软件,但是这些分析处理软件主要用于科学研究,甚至需要用户自行编写代码,同时这些软件与用户的交互不友好,且无法记录用户操作数据记录。另外有一些软件系统可以读取WRF模式数据,例如NETCDF.xlsm[6]可以读取NetCDF数据文件,但主要是以表格形式呈现,不利于呈现数据动态特点,用户无法获取对数据的直观认识。为了提高用户和平台的交互性,方便用户查询数据以及对可视化结果进行控制,本文着重分析NetCDF数据格式以及NetCDF数据文件读取方法,分析OpenGL[7]等绘图方法的具体应用,分别对平台功能、平台流程以及平台框架进行设计,最后用C++语言进行平台开发,实现平台整体功能,并在Windows操作系统下进行平台运行与测试。

1 相关技术

1.1 OpenGL绘图

OpenGL (graphics library)图形系统是图形硬件的一种软件接口,主要用于科学数据可视化,实体仿真,三维动画以及虚拟现实等方面[8],OpenGL 旨在独立于操作系统和硬件环境,因此OpenGL 不包含用于执行窗口任务和与用户交互等函数,只包含对应的三维图形绘制函数,必须通过具体的窗口系统集成OpenGL函数才可以使用OpenGL绘图功能。OpenGL 是一个状态机,可以设置各种状态,然后让这些状态一直生效,直到再次修改它们[9]。OpenGL工作流程如图1所示[9]。

图1 OpenGL工作流程

1.2 Qt框架

Qt是一个多平台的C++图形用户界面应用程序框架,为不同平台下的图形界面编程提供统一接口,具有一次编写,随处编译的特点。一次开发的Qt应用程序可以移植到不同的平台上,只需重新编译即可运行[10]。Qt提供了OpenGL模块,方便OpenGL 在多个操作系统中的应用。其中OpenGL模块定义了OpenGL 函数在Qt中的接口规范,用户可以直接调用该模块而不需要直接调用本地API进行三维绘图。QGLWidget[11]类是用来渲染OpenGL 三维场景的窗口空间,其提供了3 个函数用于开发,分别是paintGL,resizeGL 和initializeGL 函数,分别用于渲染场景,改变窗口大小以及初始化OpenGL环境[7]。

1.3 NetCDF文件

NetCDF (network common data format)网络通用数据格式最早是由美国国家科学委员会资助的计划Unidata所发展而来,旨在提供一种可以通用的数据存取方式[12],一种面向数组型数据、适于网络共享且跨平台的数据格式描述和编码标准[13]。NetCDF 文件结构包括文件头说明信息和数据块区域,文件头信息包括整个文件属性和单个变量属性等,数据块区域按照变量进行存储,一般用于存储多维数据,支持与机器无关的科学数据,满足数据共享,每一个NetCDF文件包括单点的观测值,时间序列,规则排列的网格,以及其它文件等。NetCDF文件适合存储气象数据,提供了C,Fortran和Java[14]等数据存取接口。NetCDF文件具有说明文档,确保数据准确读取,存取方式为直接存取所需数据,极大减少不必要的读取时间,同时支持跨平台操作,这样便于软件系统跨平台运行。

2 平台设计

2.1 平台功能

该平台将WRF模式数据首次可视化结果呈现在地球模型上,则需要建立一个3D 地球模型以及显示地球经纬度和相关的地理高程信息。用户能够自主选择读取数据文件,选择物理变量以及查询数据等。物理量数据需要进行可视化展示,由于数据的属性不同,故需要设计数据传输函数进行数据与可视要素之间的转换,同时用户可以控制数据传输函数,首次可视化结果类似于热度图形式。用户能够与原始数据交互,平台能够提供用户鼠标和键盘与数据交互的可视化结果,二次可视化结果需要以多种形式展示。平台能够展示数据随时间和高度变化而变化的效果,也即时间动画和高度动画。平台需要具有很好的移植性和可扩展性,平台可以运行在不同的操作系统上。

整体功能设计如图2所示。

图2 平台功能设计

2.2 数据流程

数据流程主要介绍文件中数据,内存中数据,缓存区中数据以及显存中数据之间的关系。以下分别介绍各个流程模块:

(1)NetCDF数据文件到内存:由于NetCDF数据文件中的数据不可能直接进行可视化,因此需要先读取到内存中,然后程序调用内存中的数据并对其进行可视化。

(2)内存到缓存:内存中的数据不可以直接进行绘制,需要发送到帧缓冲区中。利用OpenGL 的双缓冲、顶点数据缓冲区以及颜色缓冲区、显示列表等技术对数据进行组织和操作,以便于数据的重复显示和快速显示。

(3)缓存到显存:由于显卡的计算速度远大于CPU 以及OpenGL使用客户端到服务器机制,将数据发送到显存中可大大加速屏幕的显示速度以及减少屏幕刷新的延迟时间。

(4)缓存到内存:从可视化结果中获取的数据包括点数据和区域数据,从缓存中获取坐标信息,然后根据坐标信息从内存中查找数据。

(5)内存到数据库:平台使用Oracle[15]数据库记录用户的操作指令和用户与数据交互的数据值,一般记录少量数据点即可,根据少量数据点便可以从NetCDF 数据文件读取所有的数据。

平台整体流程设计如图3所示。

图3 数据流程设计

2.3 平台架构

平台采用经典的三层架构构建整个软件平台,分别是数据层,业务层和表现层。采用三层架构可以将数据存取,数据处理和数据可视化3个功能模块分离,使程序模块清晰,有利于组织平台结构,同时有助于平台的功能扩展和提高代码的可读性和理解性。三层架构介绍如下:

(1)数据层:数据层主要处理数据文件和物理变量的读取以及记录用户操作记录和用户交互数据,主要利用NetCDF的C 语言接口,但是该接口主要是面向过程的,因此使用面向对象的思想封装这些接口函数,写符合要求的读取数据类。同时,需要利用数据库接口函数与数据库进行交互,包括读取数据库数据和数据写入数据库。

(2)业务层:业务层主要响应用户的动作和行为,也即处理用户的操作指令,起到数据层和表现层之间的沟通桥梁作用。数据层将数据读取完,业务层处理这些数据,处理完之后发送到表现层,表现层将这些数据可视化。另用户根据表现层可视化结果,与其进行交互,业务层处理用户行为后,数据层按照业务层的要求读取数据之后,将数据传递到业务层,业务层通知表现层进行可视化结果绘制。该层主要是模块化操作,用户选择不同的物理量,不同的物理量具有不同的数据信息,需要根据不同的物理量设置不同的数据模板和配置模板,每次处理数据时,根据数据对应的物理量不同,选择不同的数据模板和配置模板。同时,用户的绘图指令不同,因此该层需要解析用户操作行为。

(3)表现层:表现层主要负责将业务层传递过来的数据进行可视化,根据用户的可视化需求选择不同的可视化方案对数据进行可视化,将可视化结果直观地呈现在屏幕中。

图4为平台架构,图中标示了各个层需要实现的功能。

图4 三层架构

3 平台实现

3.1 Qt与OpenGL混合编程

Qt中已经包含OpenGL模块,方便在多个操作系统中进行OpenGL 程序开发。QGLWidget与OpenGL 混合编程,有效降低了在Qt中进行OpenGL开发的难度。在绝大多数情况下,QGLWidget可以像QWidget一样使用,只是使用OpenGL的函数替代Qpainter进行绘制。QGLWidget提供了3个虚函数用以重载实现OpenGL 的绘制,使得程序源代码简洁且易读。图5 给出了QT 程序调用OpenGL函数绘图机制。

图5 Qt程序调用OpenGL函数绘图机制

3.2 数据读取

数据层处理的数据主要是存取NetCDF 数据文件和存取Oracle数据库中的数据。其中NetCDF 数据文件为平台主要处理的数据对象,而Oracle数据库中的数据主要记录用户的行为操作和交互数据。处理NetCDF 数据主要利用NetCDF提供的C 语言接口,将这些接口函数封装成自定义的读取数据的类,方便平台开发和扩展。存储Oracle数据库中的数据主要是编译Oracle提供的OCI接口,然后程序利用OCI接口进行数据记录的存取。

封装读取NetCDF 数据文件的C 语言接口的类主要有NcFile类,NcDim 类,NcVar类和NcAtt类。NcFile类用于读取NetCDF文件,其中包括维度信息,变量信息以及文件属性信息等,NcDim 类用于读取获取维度名称,大小以及判断是否是无限维等,NcVar类可以返回变量名称,变量类型,变量对应的维度,变量属性以及如何定点定区域读取变量数据,NcAtt主要用于读取属性信息,返回属性名称,属性类型以及属性值个数等。

OCI驱动集成一组应用程序开发接口,在Oracle中提供了一组库函数,可以使用库函数连接数据库,调用SQL和事务控制等。由于Qt自带Sqlite和ODBC 驱动,但是没有Oracle OCI驱动,则需要预先自行编译OCI驱动。

3.3 数据处理

数据处理主要用于处理数据层传递过来的数据和响应用户的操作行为。

不同的物理量有不同的数据信息,首先对传递过来的物理量进行识别,然后按照对应的物理量配置方法对数据进行操作,然后将数据传递给传输函数,传输函数对数据进行转换得到数据值对应的颜色值信息,主要通过类Var-Setter实现,类中包括识别物理量函数,物理量参数配置以及传输函数等。图6为主要实现过程。

图6 数据到颜色映射转换实现

用户在与可视化结果进行交互的过程中,有鼠标和键盘等事件,数据处理对不同的用户行为进行不同的解析,将解析后的不同操作通知表现层,表现层根据相应的绘图函数,绘制出不同的折线图以及等值线图等。

用户鼠标交互时,主要围绕鼠标相对于窗口的位置坐标展开。由于数据存取是按照地球经纬度信息以及高度和时间进行存取,而鼠标窗口位置坐标和地球经纬度坐标不是同一个坐标系,则需要进行坐标转换。首先,程序获取到鼠标窗口坐标,然后鼠标窗口坐标经过一次逆转换,得到该点在三维空间中的位置坐标,进而根据得到的三维空间中的位置坐标,再进行一次逆转换,便可获得该点相对于地球模型的经纬度位置坐标,数据层便可根据经纬度位置信息和用户设置的时间高度信息在数据文件中或者内存中查询,就可以得到需要的原始数据。

OpenGL处理的数据的坐标信息都是三维空间中的三维坐标,因此在将数据传递到OpenGL 绘图函数类之前的第一步就是将数据的经纬度信息转换成三维坐标。式 (1)给出经纬度和三维坐标的转换关系,图7给出了经纬度到三维坐标的转换,图中三维坐标系为OpenGL 中采用的三维坐标系,向上为Y 轴正方向,向右为X 轴正方向,屏幕向外为Z轴正方向,a为经度偏移

图7 经纬度到三维坐标

用户交互过程中产生的数据操作记录和操作的数据会被记录到数据库中,由于Oracle数据库存储的数据一般为关系型数据,因此多维数据存储到数据库之前需要经过一个转换。将多维数据按照时间高度经纬度信息转换为一个唯一的ID 值,见式 (2),按照此ID 值将对应的数据存储到数据库中。从数据库中读取数据时,依然需要按照式(2)进行逆转换得到时间高度和经纬度信息

3.4 多组件融合的交互式可视化图形库

基于Qt和OpenGL技术的融合,极大地方便三维可视化的实现,但是Qt中提供的OpenGL绘图功能有限,仅仅用于普通3D 图形绘制,平台中使用OpenGL 的显示列表,帧缓冲区等技术,因此需要使用OpenGL 自身的库函数,程序中自定义类用于封装OpenGL 本地函数库,方便程序开发和功能拓展。程序将用于三维图形绘图和二维图形绘图的功能函数类进行封装,形成一个多组件融合的交互式可视化图形库。在需要绘制可视化图形时,直接响应用户指令,程序调用图形库的类函数即可实现图形绘制。

数据可视化主要实现OpenGL 绘制图形函数和QCustomPlot[16]绘制折线图直方图等以及调用NCL 脚本语言[17]进行等值线等绘图操作。分别有初始化场景类,可视化类和用户交互类。初始化场景类主要包括OpenGL 的初始化环境配置类。可视化类包括显示时间类,地球模型类EarthModel,数据贴图类DataTex,图表绘制类QCustom-Plot以及等值线图类VarNCL 和图片保存类。用户交互类分别有场景旋转类MoRotate,缩小和放大类MoResize,以及鼠标拾取类MoMouse。以下将主要的类进行介绍:

图8 转换投影算法

OpenGL的初始化环境配置类中封装清除缓冲区函数,设置投影模式函数,计算模型视图矩阵 (modeMatrix)、投影矩阵 (projMatrix)和视点 (viewprot)矩阵函数,矩阵和矢量运算和平面法向量计算函数等。

地球模型类EarthModel中实现地球模型绘制,以及地球纹理贴图和地理高程信息显示等功能。

数据贴图类DataTex实现经纬度准确定位,数据颜色值绘制等功能。

QCustomPlot类为用于绘图的Qt C++部件,独立的类库,用于绘制曲线和图表等,同时QCustomPlot类提供图片保存函数,程序中的图片保存类需封装QCustomPlot提供的图片保存函数以及保存OpenGL绘制结果函数类。

等值线图类VarNCL主要封装NCL脚本语言函数和获取参数函数和调用NCL工作平台函数。NCL 主要在Linux操作系统环境中采用工作站方式工作,因此在Windows中需要模拟Linux环境。同时NCL的工作环境与程序开发环境独立,因此在程序和NCL工作环境之间需要连接,以便于在程序中启动NCL运行环境以及调用NCL绘图函数。

用户交互类中主要包括用户鼠标拖动旋转场景和缩小放大可视化结果类,鼠标获取区域或单点屏幕坐标类,所有数据二次可视化都依靠鼠标拾取来实现。其中鼠标拖动较难实现,鼠标直接操作二维界面,而场景是三维图形,因此本文采用以下转换投影算法,具体过程如图8所示。

屏幕中对应的数据点坐标都是二维的,然而OpenGL处理的数据是三维坐标,因此在数据对应到屏幕的可视化结果过程中需要进行坐标转换。OpenGL 物体三维坐标到屏幕坐标转换过程如图9所示。

4 平台运行

本平台采用Visual Studio 2010集成开发软件,同时采用Qt 4.8,结合Oracle 10g数据库技术,NetCDF文件读取技术,NCL脚本语言和QCustomPlot以及OpenGL 三维图技术等。系统的测试运行环境为Windows 7 操作系统,图10和图11是该系统运行的部分效果图,从总体测试效果看,平台运行稳定良好。

图9 OpenGL物体坐标到屏幕坐标转换过程

图10 鼠标交互某一时间和高度层的经纬度区域数据显示

图11 某点数据变化趋势交互显示

用户选择经纬度范围内的区域信息可视化结果:用户点击鼠标右键保持不放,拖动鼠标移动,移动至某位置,鼠标右键放开,得到起始和结束鼠标窗口位置坐标,通过两次坐标转换关系函数,得到经纬度信息,根据得到的经纬信息和用户选择的高度和时间信息,将指令发送到数据层,数据层直接按照经纬度和高度时间信息读取数据,将读取出来的数据传递到业务层,业务层按照用户的需求,对数据进行修剪和插值操作等,将经过处理后的数据传递到表现层,表现层中NCL工作站将绘制业务层传递过来的数据。

用户与第一次可视化结果,也即地球模型中显示出来的数据进行交互,用户可以选择同一时间、同一高度和不同经纬度信息数据,同一时间、同一经纬度和不同高度数据,同一高度、同一经纬度和不同时间的数据,选择某一操作后,业务层按照要求在内存中选择数据传递给表现层,表现层调用QcustomPlot类中函数进行折线图的绘制。

5 结束语

围绕WRF 模式运行产生的中尺度气象数据,利用OpenGL强大的3D 绘图功能以及现有的多形式的第三方绘图插件,将这些绘图函数封装成自定义的类,将Qt作为平台的总体设计框架,程序模块化方便了平台的扩展。由于采用的现有技术都具有跨平台的特性,因此整个平台具有良好的移植性,可运行在不同的操作系统上,只需要重新编译即可。本平台方便气象专业人士和研究人员对中尺度模式气象数据的动态变化有直观的把握,以便做出相应决策。

[1]WANG Xiaojun,MA Hao.Progress of application of the weather research and forecast(WRF)model in China [J].Advances in Earth Science,2011,26 (11):1191-1199 (in Chinese). [王晓君,马浩.新一代中尺度预报模式(WRF)国内应用进展 [J].地球科学进展,2011,26 (11):1191-1199.]

[2]SHAO Baomin,CHU Weixian,QI Suiping.Design of objectoriented NetCDF reading desktop software [J].Shandong Science,2012,25 (6):69-73 (in Chinese). [邵宝民,初伟先,漆随平.面向对象的NetCDF文件桌面化读取软件的设计[J].山东科学,2012,25 (6):69-73.]

[3]HUA Wenyuan,WANG Jiarun,KANG Liang,et al.Design and Implementation of 5D meteor visualization based on OSG[J].Computer Engineering and Design,2009,30 (5):1282-1284 (in Chinese).[华文元,王家润,康亮,等.基于OSG五维气象可视化软件的设计及实现 [J].计算机工程与设计,2009,30 (5):1282-1284.]

[4]TU Nini,CHEN Jing,XIA Rudi.The use points of a four-dimension graphics software Vis5D [J].Sichuan Meteorology,2007,27 (99):39-41 (in Chinese). [屠妮妮,陈静,夏茹娣.一种四维绘图软件Vis5D 使用要点简述 [J].四川气象,2007,27 (99):39-41.]

[5]ZHANG Li,SHENG Shuanghe,SUN Xiangming,et al.Processing of non-corresponding grid data from NCEP by using GRADS [J].Journal of Meteorological Research and Application,2009,30 (3):39-44 (in Chinese). [张丽,申双和,孙向明,等.用GRADS处理NCEP资料中的非对应格点数据[J].气象研究与应用,2009,30 (3):39-44.]

[6]LongShaoAn,Reading nc file[DB/OL].[2014-07-23].http://blog.163.com/jey_df/blog/static/18255016120121029471299/(in Chinese).[LongShaoAn,关于nc文件的读取[DB/OL].[2014-07-23].http://blog.163.com/jey _df/blog/static/1825501612012 1029471299/.]

[7]LUO Junsong,DENG Fei,LU Hanyu,et al.Research of 3D visualization technology based on QT [J].Computer Measurement &Control,2013,21 (3):797-799 (in Chinese). [罗俊松,邓飞,卢涵宇,等.基于Qt的三维可视化技术研究[J].计算机测量与控制,2013,21 (3):797-799.]

[8]MA Chunyan,CHAI Huabin,LIU Changhua.3Dvisualization expression of the point cloud based on OpenGL [J].Journal of Henan Polytechnic University(Natural Science),2009,28 (3):299-302 (in Chinese). [马春艳,柴华彬,刘昌华.基于OpenGL的点云三维可视化表达 [J].河南理工大学学报(自然科学版),2009,28 (3):299-302.]

[9]Dave Shreiner,The Khronos OpenGL ARB Working Group.OpenGL programming guide [M].LI Jun,XU Bo,transl.7th ed.Beijing:Machinery Industry Press,2010 (in Chinese). [Dave Shreiner,The Khronos OpenGL ARB Working Group.OpenGL编程指南 [M].李军,徐波,译.7 版.北京:机械工业出版社,2010.]

[10]CAI Zhiming,LU Chuanfu,LI Lixia,et al.Proficient in Qt4programming [M].Beijing:Electronic Industry Press,2008 (in Chinese). [蔡志明,卢传富,李立夏,等.精通Qt4编程 [M].北京:电子工业出版社,2008.]

[11]GUO Tao,LIU Mingyang,BIAN Zhibin.Research and implementation on visualization of surfer data based on Qt and OpenGl[J].Journal of Yangtze University (Nat Sci Edit),2010,7 (3):287-289 (in Chinese).[郭韬,刘明洋,卞志彬.基于Qt和OpenGL的Surfer数据可视化研究 [J].长江大学学报 (自然科学版),2010,7 (3):287-289.]

[12]ZHANG Lin,GAO Yuchun,YANG Jinhong,et al.NetCDF data uploading and product display of phased-array weather radar based on VC++platform [J].Meteorological Science and Techinology,2010,38 (2):230-234 (in Chinese).[张林,高玉春,杨金红,等.基于VC++平台的相控阵天气雷达NetCDF数据读取与产品显示 [J].气象科技,2010,38 (2):230-234.]

[13] WANG Xianghong,LIU Jiping,XU Shenghua,et al.Visualization of marine environment data based on NetCDF data model[J].Science of Surveying and Mapping,2013,38 (2):59-61 (in Chinese). [王想红,刘纪平,徐胜华,等.基于NetCDF数据模型的海洋环境数据三维可视化研究[J].测绘科学,2013,38 (2):59-61.]

[14]Chic O,del Rio E,Garcia-Ladona E.IVADO:An oceanographic data analysis and visualization tool based on ION/IDL and Java using netCDF interface [C]//MTS/IEEE Conference and Exhibition,2001.

[15]ZHANG Hui,ZHAO Yuliang,XU Jiang,et al.Query optimization research on mass of data based on oracle database[J].Computer Technology and Development,2012,22(2):165-167 (in Chinese).[张辉,赵郁亮,徐江,等.基于Oracle数据库海量数据的查询优化研究 [J].计算机技术与发展,2012,22 (2):165-167.]

[16]Emanuel Eichhammer,QcustomPlot[DB/OL].[2014-07-22].http://www.qcustomplot.com/inde x.com/index.php/introduction.

[17]WANG Jizhu,WANG Yongqing,LI Chunhu.NCL application of graphical weather data [J].Shandong Meteorology,2007,27 (109):33-36 (in Chinese). [王继竹,王咏青,李春虎.NCL在气象数据图形化中的应用 [J].山东气象,2007,27 (109):33-36.]

猜你喜欢
经纬度绘图鼠标
来自河流的你
“禾下乘凉图”绘图人
Progress in Neural NLP: Modeling, Learning, and Reasoning
垂涎三尺
基于经纬度范围的多点任务打包算法
自制中学实验操作型经纬测量仪
澳洲位移大,需调经纬度
Surfer和ArcView结合在气象绘图中的应用
45岁的鼠标
超能力鼠标