基于自研GIS的标准格式雷达基数据应用和预警系统的设计与实现
2020-10-15甄廷忠康道俊孙俊奎齐荣庆
甄廷忠 江 龙 康道俊 孙俊奎 齐荣庆
1(昆明市气象局 云南 昆明 650501) 2(西南林业大学土木工程学院 云南 昆明 650224) 3(昆明理工大学建筑工程学院 云南 昆明 650500)
0 引 言
新一代天气雷达以其高精度的时空分辨率[1-2],为临近天气预报和灾害性天气警报提供了重要的高质量的大气观测资料,充分利用好新一代天气雷达探测数据,能提高灾害性天气的预报能力、气象服务能力和防灾减灾能力[3]。随着社会经济发展,新一代多普勒天气雷达观测数据与精确而丰富的地理信息的融合,实时强天气手机短信预警,精细化临近预报等信息越来越受到基层业务人员和公众的广泛关注,如何将这些信息方便、快捷、高效、直观地展示在气象业务服务人员和公众面前,已经成为气象现代化建设中的迫切需要和重要内容[4-5]。
近年来,地理信息系统(GIS)被广泛应用于气象服务、道路交通管理、土地资源利用、智慧城市、大数据等领域中[6-10]。在GIS与雷达数据资料应用和预警方面,国内相关专家研究了GIS与雷达显示控制系统的应用集成[11],利用ArcGIS开发雷达地理信息系统的方法[12]和雷达图像在WebGIS上的显示技术[13-14]等。以往的研究和应用中,气象部门业务系统大多使用专业软件公司开发的收费GIS控件,需要气象部门付费购买使用权限。如果使用破解版本,可能引起版权纠纷,对气象业务服务造成影响;如果使用免费地图服务(如百度地图、高德地图、天地图等)会造成地图目标物与雷达回波颜色重合,无法满足气象业务服务需求。因此开发拥有自主知识产权的GIS系统就非常有必要。
以往的雷达数据应用系统大多是基于雷达厂家自定义格式的基数据来研发的,缺乏数据统一性标准。2018年7月16日中国气象局综合观测司发布了《组网天气雷达数据流传输业务化方案》,方案要求2018年底实现全国天气雷达基数据流传输业务化及标准格式雷达基数据业务应用。数据流传输和标准格式雷达基数据试运行一年多以来,中国气象局并未配发标准格式雷达基数据的应用软件,有必要开发一套基于标准格式雷达基数据的应用系统。气象业务服务人员在天气实况监测的过程中,无法做到全天候关注雷达监测资料,可能会造成重大天气遗漏或预报服务失误[15],且雷达数据预警的方法较多[16-18],因此有必要据此经验并结合本地实际需要研发雷达预警系统。
基于上述多方面考量,根据地理信息系统在气象行业的应用现状、中国气象局对标准格式雷达基数据的业务应用要求和各级气象部门的预警需要,依托CIMISS数据环境,以昆明天气雷达标准格式基数据为例,研发基于自研GIS的天气雷达标准格式基数据应用和预警系统。
1 系统设计
1.1 设计思路
系统的核心业务问题是解决天气雷达标准格式基数据在基层气象部门的业务服务使用,在监测到设定区域有强回波天气的同时,快速、准确地进行声音预警,并将预警信息第一时间发送到业务值班人员手机上,引起值班人员重视。主要目的是推广标准格式基数据应用的同时,降低值班人员工作压力,提高工作效率。其设计理念是以数据为核心,以需求为导向,研究天气雷达标准格式基数据获取方式、数据存储结构、图像制作算法和地理信息数据源、投影方式、成图方法,分析业务服务人员对预警条件、预警方式的需求。坚持预警范围和预警条件可高度定制的原则,实现天气雷达标准格式基数据雷达图像和自主研制精细化地理信息系统的精确匹配和完美融合,触发报警时以声音报警和短信报警的方式,保证业务值班人员在任何时刻、任何地方都能准确、及时地收到强回波预警信息。
1.2 开发及运行环境
系统的开发环境为Microsoft Visual Studio 2010,只要安装了Microsoft.NET Framework 4.0组件的计算机都可以运行并使用本系统。系统采用全国综合气象信息共享平台(CIMISS)[19]作为数据源,计算机需接入国家气象业务内网通信系统[20-22]。
1.3 系统结构
天气雷达标准格式基数据应用和预警系统包括数据、功能和显示控制三个模块,如图1所示。
图1 系统结构图
数据模块是以CIMISS数据资源平台为雷达数据源,依托气象数据统一服务接口(MUSIC),实现标准格式雷达基数据的获取;依托地理信息软件的数据转出接口获取.mif、.mid格式的GIS数据;从谷歌地球中导出部分经纬度数据。功能模块和显示控制模块即为本系统客户端,功能模块主要完成数据下载、数据读取、数据处理、存储管理、预警判定和发布、GIS数据解析、图元绘制、透明图层的实现和图层控制等,显示控制模块主要完成雷达回波图像、预警信息和自研GIS的融合显示和控制。
2 核心功能模块及技术
2.1 天气雷达标准格式基数据解析
根据《天气雷达基数据标准格式(V1.0版)》的规定,标准格式基数据分为多个区块,每个区块描述一组信息,如站点配置块用来描述雷达站的信息,包括经纬度、天线架设高度等。标准格式基数据可分为公共数据块和径向数据块两部分,如表1所示。其中:N表示第N个仰角;M表示第M个径向;K表示第K个数据类型;I表示径向数据长度。公共数据块用于提供数据站点信息、任务配置等公共信息;径向数据块用于存储天气雷达的探测资料,包括3个子块:径向头,径向数据头,径向数据。
表1 天气雷达标准格式基数据的整体结构
标准格式中定义了各数据块的结构体,根据各数据块的顺序分别读取相应结构体大小的数据记录[23]。数据类型是基于32位操作系统的C语言环境来定义,本系统基数据是在C#开发环境下读取,由于C#和C在计算机内存中的存储对齐方式不一样,在读取数据时需要在结构体前加入语句“[StructLayout(LayoutKind.Sequential, Pack=8)]”来规定数据存储对齐方式,并把C语言数据类型转换为C#数据类型。标准格式雷达基数据按照存储结构依次读取公共数据块、径向数据块,并按照相应的数据头、径向数据格式依次读取每一个径向的数据,直到所有数据读取完毕即可。
2.2 雷达图像绘制
雷达回波图像的绘制技术已经比较成熟,包括屏幕坐标反查法、线段填充法[24]和弧线填充法[25]等。以上三种方法各有优劣,本系统采用描点填充法完成图像制作,并根据实际需要作了修改和完善。首先根据雷达径向距离库数确定画布大小,以昆明为例,径向距离库数为500,探测范围即半径为500像素的圆,画布则为这个圆所在的最小外接正方形,即大小为1 000×1 000的位图,如图2所示。
图2 雷达回波图画布示意图
2.3 基础GIS系统的自主研制
基础地理信息系统(GIS)依托地理信息软件的公共数据接口,将.tab格式的省、地(州/市)、县、乡镇的地理信息数据转换为.mif、.mid格式的经纬度点阵数据,从谷歌地球中导出行政村、自然村的经纬度数据,在C#开发环境下读取经纬度点阵数据,实现地理信息图层的绘制。行政村和自然村图层的加入,大大丰富地理信息,提高地理信息的精细化程度。
2.3.1经纬度点阵数据的获取
用地理信息软件打开所需TAB格式的地理信息图层,在菜单“表”的下拉菜单中选择“转出”功能,在弹出对话框中选择转出类型为“交换格式(*.mif)”,将地理信息图层保存为.mif、.mid格式的经纬度点阵数据。从谷歌地球中导出行政村、自然村的经纬度数据,并将数据存储为.mif、.mid格式的经纬度点。
2.3.2投影方式和坐标系转换
等距圆柱投影是地图投影中常见方法之一,它将地球的经纬线网格映射成平面上均匀的矩形网格,且横纵坐标分别与经度差和纬度差成正比,即球面上经纬度坐标为λ和φ的点,对应在平面上的坐标为x和y,对应关系为x=cλ和y=c′φ[26](c和c′为常数)。因等距圆柱投影容易理解和实现,且适用于低纬度地区,所以本系统采用等距圆柱投影。坐标系的转换包括在画图时将经纬度坐标转换为平面坐标,在交互操作时将平面坐标转换成经纬度坐标,转换函数如下:
private Point LatitudeLongitude_to_ScreenPoint(PointF LatitudeLongitudePoint)
{
//经纬度坐标转换为平面坐标
Point ScreenPoint=new Point(0, 0);
int Min=ScreenPoint_Views_Width float a=(float)LatitudeLongitude_Views_Height/(float)Min; //每个点所占纬度 float b=(float)LatitudeLongitude_Views_Width/(float)Min; //每个点所占经度 ScreenPoint.X=(int)((LatitudeLongitudePoint.X-LatitudeLongitude_Views_Center.X)/b+ScreenPoint_Views_Width/2.0f+0.5); ScreenPoint.Y=(int)(ScreenPoint_Views_Height/2.0f-(LatitudeLongitudePoint.Y-LatitudeLongitude_Views_Center.Y)/a+0.5); return ScreenPoint; } private PointF ScreenPoint_to_LatitudeLongitude(Point ScreenPoint) { //平面坐标转换为经纬度坐标 PointF LatitudeLongitudePoint=new PointF(0f, 0f); int Min=ScreenPoint_Views_Width float a=(float)LatitudeLongitude_Views_Height/(float)Min; //每个点所占纬度 float b=(float)LatitudeLongitude_Views_Width/(float)Min; //每个点所占经度 LatitudeLongitudePoint.X=(ScreenPoint.X-ScreenPoint_Views_Width/2.0f)*b+LatitudeLongitude_Views_Center.X; LatitudeLongitudePoint.Y=(ScreenPoint_Views_Height/2.0f-ScreenPoint.Y)*a+LatitudeLongitude_Views_Center.Y; return LatitudeLongitudePoint; } 2.3.3地理信息图层的绘制 雷达回波图像在地理信息系统中表现为面图元,为避免雷达回波图像和地理信息面图元之间的颜色冲突,地理信息图层全部采用点图元和线图元的形式绘制。 点图元.mif、.mid文件结构如图3所示,.mif文件包含文件头、存储要素和显示信息三个部分。文件头对点图元的显示没有实际意义;存储要素包括要素名称和数据类型,与.mid文件的要素值对应,如要素“NAME”按照30个char字符类型存储,存储值如“曲靖”;显示信息包括点图元的类型标志“Point”、经纬度“103.794 7 25.496 166”和显示图标“Symbol(…)”,显示图标包括显示图标样式、来源、大小等信息。在点图元的绘制过程中,首先读取.mif文件所有点的显示信息,将点图元经纬度转换为平面坐标值A(x,y),绘制显示图标到点A处,并根据要显示的要素读取相应的要素值,绘制于点A。 图3 点图元.mif、.mid文件结构图 线图元.mif文件结构如图4所示,包含了文件头、存储要素和显示信息三部分。文件头和存储要素对线图元的显示没有实际意义,显示信息部分包含线图元类型标志“Pline”、线图元包含的点个数“262”、点的经纬度和画笔参数“Pen(…)”。在绘制线图元的过程中,.mif文件包含系统所需的全部信息,.mid文件不用读取。首先按行读取.mif文件,读取到类型标志“Pline”后,创建Point数组,存储所有点的经纬度信息;读取到画笔参数“Pen(…)”后,创建画笔连接所有的点,即完成线图元的绘制。 图4 线图元.mif文件结构图 2.3.4透明图层的实现和图层控制 在C#开发环境下,采用多个大小相同的PictureBox控件重叠,并从底层往上依次设置上层PictureBox的Parent属性为下层PictureBox,即可实现图层透明。通过“pictureBox.Image=bitmap”和“pictureBox.Image=null”实现图层的显示和隐藏控制。 2.3.5放大、缩小和拖动的实现 绘制地理信息时设置了显示地图的经纬度范围和视图中心点,对此经纬度范围进行增大或缩小后重新绘制地理信息,从而实现地图的放大和缩小功能。根据鼠标左键按下拖动时,截取显示区视图到PictureBox控件显示,鼠标移动过程中通过移动PictureBox控件的位置实现视图跟随鼠标移动,放开鼠标左键时按照视图中心点的最新位置重新绘图,从而实现拖动功能。 2.4.1预警指标 由于雷达基数据内包含地物、太阳辐射等非气象回波[27],为有效减少误报情况的发生,预警指标采用反射率强度和高度组合的方式,反射率强度和高度为“且”的关系,即反射率强度达到阈值的同时回波高度也必须达到阈值,阈值为各用户自定义设置。如“强度≥50 dBZ且高度≥4 km”,如果只需强度预警则把高度阈值设为0 km即可。 2.4.2预警范围及其判定方法 预警范围分为行政区划边界范围和任意多边形范围。行政区划边界范围是根据地理信息图层中行政区划边界的.mif文件来确定的经纬度点阵集合,任意多边形范围是自定义工具获取多边形边缘点的经纬度集合。通过判断经纬度点是否位于经纬度点阵集合组成的封闭区域内来实现回波预警,代码如下: public static bool PointInRegion(PointF pt, PointF[]Pts) {//判断经纬度点pt是否在经纬度点阵集合Pts内 int j=0, cnt=0; for(int i=0; i { j=(i==Pts.Length-1)? 0: j+1; if((Pts[i].Y!=Pts[j].Y)&&(((pt.Y>=Pts[i].Y)&&(pt.Y } return(cnt % 2>0)? true: false; } 2.4.3预警方式 预警方式分为声音报警、图像闪烁、预警信息显示和短信报警。在触发预警后警报位置会出现闪烁图标,同时触发声音报警和手机短信报警。手机短信报警采用中国移动企信通(行业版)的动态链接库进行二次开发来实现。 2.4.4预警流程 预警流程图如图5所示,循环基数据每个数据库的数据,对达到预警指标且在预警范围内的数据进行图像闪烁、预警信息显示和声音预警,根据用户设定来执行发送短信的操作。 图5 预警流程图 基于自研GIS的天气雷达标准格式基数据应用和预警系统已于2018年初在昆明全市气象部门投入业务运行,经过一年多时间的实际运行和不断完善,系统运行稳定可靠,可视化交互操作良好,系统运行界面如图6所示。 图6 系统运行界面 雷达数据和产品方面,系统支持基本反射率、基本速度、基本谱宽、组合反射率产品图像和信息的实时显示,也可以对历史数据进行调取和显示,支持雷达台站信息、雷达系统信息、数据通信信息的显示,支持动画制作、加速播放、减速播放,支持一键跳转到下一时刻(或上一时刻)等;强回波预警方面,系统支持强度和高度两个预警指标,预警范围可以由用户选择或者自定义任意多边形区域,预警方式包括声音预警、图标闪烁预警和手机短信预警,可以人工或自动发送手机短信;GIS方面,支持线图元和点图元的分层显示和控制,点图元可以设置显示图标和显示大小,地理信息包含省、地(州/市)、县、乡镇、村(包括行政村和自然村)共五级,如图7所示。 图7 地理信息图层控制 2018年10月7日,受南支槽影响,昆明地区出现强降水天气过程。17点18分,昆明主城区雷达回波强度达到60 dBZ,高度达到5.4 km,回波强度和高度达到预警阈值且回波位于预警范围内,触发预警,在预警图标闪烁(见图6)和显示预警信息的同时,可自动发送短信至值班员手机上,也可以手动编辑并发送短信至指定人员手机上,如图8所示。 图8 预警信息显示和手机短信发送 基于自研GIS的天气雷达标准格式基数据应用和预警系统以全国综合气象信息共享平台(CIMISS)为数据源,完成天气雷达标准格式基数据的实时下载、解析和成图,在全国范围内较早实现天气雷达标准格式基数据在基层气象部门的业务应用。利用地理信息数据和谷歌地球部分地理信息数据,在C#开发环境下自主开发适合气象行业使用的基础地理信息系统,解决气象部门缺乏自主知识产权的精细化地理信息系统的难题。在及时使用雷达监测数据的同时,以雷达回波强度和高度为指标,实现雷达强回波的实时声音、图像和短信预警,把业务值班人员从繁琐且重复的天气实况监测工作中解放出来,提高了工作效率,增强了强天气精细化预警和临近预报的能力。2.4 预 警
3 业务应用
4 结 语