唐慧强,薛 莉
(南京信息工程大学 信息与控制学院,江苏 南京210044)
传统的气象数据多以文本、表格等单纯的表现形式为主,对于公众来说抽象难懂,缺乏直观性。气象要素,如湿度、风向风速、气压等均针对特定的时间和空间而言,因此气象信息在某种意义上都是地理信息[1]。Google Earth系统,与传统的地理信息系统 (GIS)相比,其优势在于接口开放和数据的免维护,可视化表达效果好,并且是普及率较高的大众化系统,因此,Google Earth适合于表达气象信息。目前一般做法是利用天气过程中的降水资料、红外云图等,编写KML文件,在Google Earth平台上显示[2],只是对历史天气状况的再现而没有显示实时天气情况。国外学者则多是利用包含雷达、台风、降水量等信息的KMZ文件,在Google Earth上以多种颜色对应不同等级的方式表示天气信息[3,4],提供此KMZ文件的网站有预警决策支持系统 (WDSS)、美国国家天气服务中心 (NWS)等,虽然具有较好的实时性,但其表现形式不如公众常见的云雨雾雪等景象直观。本文通过C#调用天气预报Web服务,解析获取天气信息,基于粒子系统和物理模型模拟雨雪等天气信息对应的场景。查询时,Google Earth瞬间定位到所需城市,在该城市背景上呈现实时的天气动画,实现国内主要城市天气的三维动态可视化显示。
粒子系统理论是迄今为止描述不规则物体最成熟的理论之一,依靠对粒子随机过程的管理来充分体现无规则的模糊景物特征,粒子具有形状、大小、位置等多种属性。通过粒子的产生、成长、消亡、更新、绘制等过程,可以模拟云、雨、雾、雪等自然现象[5]。本文以下雨效果为例进行相关研究。
模拟下雨效果应考虑雨滴的形状建模和运动建模两方面,前者可采用元球模型构建,后者需考虑无风和有风环境下的运动。
(1)雨粒子的形状建模
雨粒子形状由其直径d决定:d<2 mm时,雨粒子为球状;2 mm<d<6 mm 时,雨粒子为椭球状;d>6 mm 时,较大的雨粒子会分裂,变成诸多小圆球。鉴于此,雨粒子形状可以使用元球模型来模拟,即对于d<2 mm的雨滴,两个元球融合成一个元球,雨滴增大时使二者圆心距增大,则渐渐变成椭球形雨粒子。此外,雨粒子降落过程中会发生碰撞,形成更大的雨粒子,当d>6 mm时便会分裂。
为了保证雨粒子在裂合等一系列变化过程中表面的光滑性,模型中利用Wyvill的六次多项式势函数[6]
对于多个元球,表面形状用下式表示
式中:qi——元球的密度;fi——元球的势函数;T0——极限值 (常数)。
通过确定T0便可以产生一个比较理想的雨粒子融合、变形、分裂的效果。
(2)雨粒子的运动建模
下雨时,往往风雨交加,雨粒子本身质量又很小,受风的影响较大,因此重点讨论雨粒子在有风情况下的运动。雨粒子直径d<6 mm时,在降落过程中形状维持不变,近似为球状,故只需考虑风力、水平方向粘滞阻力与雨粒子水平速度的关系。讨论如下:
设F表示风力,f表示水平方向的粘滞阻力,根据流体力学可得
式中:ρ——流体密度;S——流速垂直方向和物体之间最大的横截面积;Cd——阻力系数。
雷诺数用下式表示
式中:l——特征长度;η——流体的粘滞系数;v——物体的速度。
在0<Re<2×105的范围内,Cd与Re的关系为
对于球体,S=πr2,l=2r,当Re<1时:
当103<Re<2×105时,Cd近似为0.4,则f=0.2ρπr2v2,即球体所受阻力和v2成正比。雨滴降落接近地面时,其速度为:
(1)当Re<1时
在水平阻力与风力的影响下,雨粒子的运动用下式表示
又因为v(0)=0,解方程 (6)得
式中:ρw——水的密度;r——雨滴的半径。
(2)当103<Re<2×105时
又由v(0)=0,解方程 (9)得
式中:ρ——空气的密度。
(3)当1<Re<103时,(1)(2)中对Cd的简化不再适用。方程-F=0的解是水平方向的雨滴终速度v,设函数f(v)=-F,那么f(v))上跟随v的增大而单调递增,故可用牛顿切线法求方程-F=0的近似解,最终得到雨滴的速度v。
基于上述对雨滴运动过程的分析,能够得到比较真实的雨滴速度和加速度,以此作为粒子属性,便于体现风力对雨的影响,从而增强真实感。绘制时,在每一滴雨滴位置上直接调用OpenGL的绘制函数生成雨滴。
Google Earth(GE)提供COM API作为公共接口,其中包括11个接口,最重要的一个是IApplicationGE,本文利用此接口控制GE程序的启动、退出、地图窗口句柄的获 取 等 一 系 列 复 杂 操 作[7]。KML (keyhole markup language)类似于XML,描述了与地理要素相关的信息 (如点、线、面、文字描述、图像等),可以被 Google Earth浏览[8]。
Web Service作为应用组件,以分布式架构的方式由Web网络向服务需求者提供服务[9],结构如图1所示。本系统的天气数据通过调用 Weather Web Service获取,自动更新一次需2.5小时左右,可靠性高。实时及接下来三天的天气状况,通过调用getWeatherbyCityName函数,以查询地点名称为参数,可以轻松获取。
大型起重作业必须编制《三措两案》,并逐级审批。严格审核起重机械检验证明及作业人员的《特种作业操作证》,吊装作业必须设专人指挥,指挥人员不得兼做其他工作,应认真观察起重作业周围环境,确保信号正确无误,严禁吊装物体从人的头上越过或停留,遇大雨、雷电、大雾、风力6级以上等恶劣天气,严禁露天起重作业。
图1 Web Service体系结构
城市实时天气可视化显示系统整体由三层架构组成,利用.NET技术开发整个系统的框架,Web服务作为业务中间件用于获取实时天气信息,SQL Server 2005保存城市的经纬度等相关信息,OpenGL绘制雨雪等天气效果。客户端采用VS2008+C#.NET调用GE的接口函数,最终实现后台所提取的业务数据及天气动画的叠加显示。系统结构如图2所示。
图2 系统结构
IApplicationGE类中的GetMainHwnd()函数和GetRenderHwnd()函数分别用来实现客户端的框架窗口句柄以及各子窗口句柄的获取,方便将GE视图嵌入到用户自己的应用程序中[10-12],达到与GE的良好交互。
此外,调用HookAPI.dll能够屏蔽鼠标消息,完成对GE视图的单双击响应,以及鼠标滚轮对GE 3D视图的缩放及漫游控制。为了将当前视图保存下来用于日后查看,可以调用GE的SaveScreenShot函数。
通过Weather Web Service获取天气信息的方法如下:
(1)在VS2008+C#.NET中的 “项目”上右击 “添加服务引用”,从而引入Web Service;
(2)填写 Web Service地址及相应命名空间。
核心代码如下:
通过对雨滴运动状态的分析,确定雨滴的属性,其中最为关键的是雨滴的速度和加速度,计算得出雨滴所处位置。为了体现风对于雨滴的影响,实时调整速度和加速度,得到新雨滴所处位置,利用OpenGL绘制函数在每滴雨滴位置上依据粒子系统理论绘制雨滴,同时赋予雨滴其他相关属性,流程图如图3所示。
图3 绘制流程
本系统采用VS2008+C#.NET开发,通过导入动态链接库文件csgl.dll和csglnative.dll,就可以使用OpenGL三维图形库,此种方式调试容易、开发效率高[13]。具体操作方法如下:
(1)将csgl.dll和csglnative.dll拷贝到 C:\ WINDOWS\system32;
(2)在 “项目”上选择 “添加引用”,导入csgl.dll;
(3)在C#的程序开始,添加:using CsGL.OpenGL
经过以上操作,便可以在程序中使用OpenGL的绘图命令绘制雨滴效果了。
3.2 节得到的包含天气信息的字符串s,其中s[6]是当天天气概况,分为不同的等级,如大雨、中雨、小雨、晴天等,以此为依据,查询时,通过窗口句柄,将OpenGL绘制的对应天气效果显示在GE当前城市界面上,实现效果如图4所示。
图4 实现效果
如图4所示,图4(a)为太仓在刮西北风时下中雨的画面,图4(b)为连云港在刮北风时下小雨的画面,中间部分均是对应城市的背景,该背景随着查询城市的不同而动态改变。雨滴的飘落方向、雨滴大小依据查询地点实时天气信息的不同而动态更新。界面左侧为国内主要城市列表,右侧以文字的形式显示未来两天的天气预报,同时呈现实时天气信息的文本信息和动画效果。
本文设计的基于Google Earth的城市实时天气可视化系统具有两个方面的优越性:(1)本系统凭借Google Earth三维地理信息系统平台动态变换天气效果显示的背景,突破了传统视景仿真在固定场景下出现的局限性;(2)本系统可以根据实时天气信息动态改变天气动画,实现了天气信息和地理信息的有机叠加,便于公众对抽象天气数据的理解。存在的不足是目前可以查询340多个中国主要城市的天气信息,在以后可以考虑采用其它Web服务增加可以查询的地点数量,并且优化模拟雨雪的模型。
[1]WU Huanping.Application of GIS in meteorology[J].Meteorological Monthly,2010 (3):90-100 (in Chinese).[吴焕萍.GIS技术在气象领域中的应用 [J].气象,2010 (3):90-100.]
[2]ZHOU Yunjun,LI Zhan,QU Xing,et al.Meteorological multi-parameter integrated display system based on Google Earth[J].Geospatial Information,2010 (4):16-19(in Chinese).[周筠珺,李展,瞿婞,等.基于Google Earth的气象多参数综合显示系统 [J].地理空间信息,2010 (4):16-19.]
[3]Travis M Smith,Valliappa Lakshmanan.Real-time,rapidly updating severe weather products for virtual globes [J].Computers & Geosciences,2011,37 (1):3-12.
[4]Sun Xiaojuan,Shen Suhung,Gregory G Leptoukh,et al.Development of a web-based visualization platform for climate research using Google Earth [J].Computers & Geosciences,2012 (47):160-168.
[5]LIU Xiaoling,YANG Hongyu,GUO Huqi.Real-time simulation of rain and snow in large-scale scene based on CPU particle system [J].Computer Engineering and Design,2012,33 (6):2398-2401(in Chinese). [刘小玲,杨红雨,郭虎奇.基于GPU粒子系统的大规模雨雪场景实时模拟 [J].计算机工程与设计,2012,33 (6):2398-2401.]
[6]GU Yaolin,QI Jin.Real-time modeling and animating of hair[J].Computer Engineering and Design,2008,29 (16):4325-4328 (in Chinese). [顾耀林,亓晋.实时毛发建模和动画 [J].计算机工程与设计,2008,29 (16):4325-4328.]
[7]Ma Qian.Google intelligent map:Earth/Maps/KML [M].Beijing:Publishing House of Electronics Industry,2010 (in Chinese).[马谦.Google智慧地图:Earth/Maps/KML [M].北京:电子工业出版社,2010.]
[8]Google Inc.KML 2.2reference[R/OL].[2011-12-01].http://code/google.com/apis/kml/documentation/kmlreference.html,2007.
[9]JIAO Shengming,YAN Mingliang,GUO Jing,et al.Research of the distributed transport meteorological information sharing technique based on web service [J].Computer Engineering &Science,2012,34 (20703):196-200 (in Chinese). [焦圣明,严明良,郭静,等.基于Web Service的分布式交通气象信息共享技术研究 [J].计算机工程与科学,2012,34 (20703):196-200.]
[10]Zhang Xuesong,Luo Jianan,Zhang Hailin.The design and implementation of the geospatial information distribution system based on Google Earth [C]//International Conference on WTCS,2009:931-937.
[11]Google Inc.Google earth[EB/OL].[2011-12-03].http://earth.google.com/,2008.
[12]Google Inc.Google Earth COM API documentation[EB/OL].[2011-12-01].http://earth.google.com/comapi,2010.
[13]SU Xueman,ZHANG Zhicai,SUN Lili,et al.Robot 3-D simulation design and implementation based on OpenGL and C# [J].Journal of Anhui Polytechnic University,2012,27(8203):31-33 (in Chinese). [苏学满,张志才,孙丽丽,等.基于OpenGL与C#的工业机器人三维仿真设计与实现[J].安徽工程大学学报,2012,27 (8203):31-33.]