牛一鸣,张国莉,刘 莉
(1.河南省伊川县气象局,河南 伊川 471300;2.河南省孟津县气象局,河南 孟津 471100)
新一代天气雷达产品在iPhone手机中的绘制
牛一鸣1,张国莉1,刘 莉2
(1.河南省伊川县气象局,河南 伊川 471300;2.河南省孟津县气象局,河南 孟津 471100)
分析了新一代多普勒天气雷达的地图文件和雷达产品文件的二进制数据结构,给出数据解析方案。针对搭载iOS操作系统的iPhone手机,使用Objective-C编程语言在集成开发工具Xcode上开发一款手机APP,将天气雷达的地图和雷达产品绘制到APP中,通过手势捏合操作对雷达产品进行缩放,实现雷达产品的动画播放,使其具备不亚于PC端PUP程序的展示效果。
新一代多普勒天气雷达;地图数据解析;雷达产品数据解析;iPhone手机APP
新一代多普勒天气雷达是气象部门监测暴雨、冰雹、大风等灾害性天气的主要工具之一,其生成的多种雷达产品为预报员提供了丰富的天气信息,对雷达产品的应用显著的提高了中小尺度天气系统的监测能力,在短时临近天气预报中发挥着重要作用[1-6]。天气雷达的雷达产品和系统状态信息,需经天气雷达终端显示软件(PUP客户端)来解析和绘制[7],工作人员只能在安装了PUP客户端的计算机上对雷达产品进行查看,现如今智能手机功能日益强大,是否可以在不便直接操作计算机时通过手机查看雷达产品呢?本文将以搭载iOS操作系统的iPhone手机为例,开发手机APP,对雷达产品进行绘制和显示。
多普勒天气雷达产品的绘制需要两部分数据,即地图和雷达产品。地图数据文件存放在PUP安装目录的Maps目录下,PUP提供的地图文件命名格式为mapX.map,其中X为雷达站的站代号[8-9],如洛阳雷达站站代号为379,则洛阳雷达站对应的地图文件为map379.map。文件中包含的地理信息有:省界、城市、县界、河流和地名等,这些数据信息以二进制的形式存储,字节存储机制为大端模式(Big-Endian),即数据的高字节保存在内存的低地址中,数据的低字节保存在内存的高地址中;雷达产品的文件命名格式形如20150728.005448.00.37.379,表示的含义是洛阳雷达站(站代号379)在2015年7月28日00时54分48秒(世界时)生成的仰角代号为00的组合反射率产品(产品代号37)[10],数据同样以大端模式的二进制形式存储。要在手机APP中绘制产品,首先要将以上二进制数据解析出来。
3.1 地图文件数据解析
以洛阳雷达站为例,地图文件为map379.map。通过使用二进制数据查看器查看数据,结合查询资料分析,其数据可分为地理信息头块和地理信息描述块两部分。地理信息头块的数据结构如图1所示。从文件开头的第4个字节开始,连续5个数据块分别是省界、城市、县界、河流和地名的地理信息头块,每个信息头包含的数据有:地图类别、标志位、各地图数据长度、各地图数据偏移量等信息,根据数据偏移量和地图数据长度,可以定位到各个地图的地理信息描述块在二进制数据中的位置。
图1 地理信息头块的数据结构Fig.1 The data structure of geographic information header
3.1.1 省界、城市、县界和河流地理信息描述块的数据解析 省界、城市、县界和河流地理信息描述块的数据结构及解析方法相同。每种地图的数据块均由若干条折线数据组成,其折线的数据结构如图2所示。每一条折线数据包括标志位、折线起始点坐标、后续字节数以及若干个后续拐点坐标组成。从折线起始点开始依次连接每一个后续拐点,由此构成一条完整的折线,若干条这样的折线就构成了地图。
图2 地图折线的数据结构Fig.2 The data structure of map polyline
3.1.2 地名地理信息描述块的数据解析 地名地理信息描述块的数据结构稍有不同,其由若干组地名地理信息组成,数据结构如图3所示。每组地名地理信息数据由标志位、地名坐标、地名字节数和地名字符组成。地名坐标指示了地名字符在地图上的位置。地名字符采用GBK编码,一个汉字占两个字节,故地名字节数为6时,地名由3个汉字构成,如“三门峡”;地名字节数为4时,地名由2个汉字构成,如“洛阳”。
图3 地名地理信息的数据结构Fig.3 The data structure of geographic names
需要注意的是,地名地理信息结构体数据并不是连续的,经测试发现,当读取到的结构体的各个成员变量值都为0时,应再向后偏移132个字节,然后继续读取,即地名地理信息描述块数据被150个值为0的字节分割为两部分(值为0的一个结构体占18个字节)。
3.2 雷达产品文件数据解析
雷达产品数据文件由信息头块、产品描述块、产品符号表示块、图像数字文本块和文本列表块组成。信息头块包含了雷达产品的基本信息,如产品代号、生成时间、雷达站代号、接收站代号等;产品描述块除了描述产品属性外,还提供了产品符号表示块、图像数字文本块与文本列表块的字节偏移量,可以据此定位到后3个数据块在二进制数据中的起始位置;产品符号表示块中存储了雷达产品绘制所需的详细数据;图像数字文本块和文本列表块包含了雷达产品附加的文字信息和适配数据[11-13]。
这里对存储雷达产品详细数据的产品符号表示块进行解析说明,数据结构如图4所示。块中包含了块分隔符、块代号、块数据长度、块数据层数和若干个数据层,每个数据层包含了层分隔符、层数据长度和若干个数据包,数据包的结构根据其类型可分为5种,即径向数据包、栅格数据包、向量数据包、文本数据包和等值线数据包,不同的雷达产品对应着不同的数据包。以组合反射率产品为例,其产品数据存储在栅格数据包中,数据结构如图5所示。
图4 产品符号表示块的数据结构Fig.4 The data structure of the product symbol block
图5 栅格数据包的数据结构Fig.5 The data structure of raster data packet
解析组合反射率产品时,其包识别码应为0xBA0F或0xBA07。x、y方向放大倍数表示了产品的分辨率,在与地图叠加绘制时要注意二者的比例关系。根据栅格数据包中的栅格行行数读取到若干栅格行。每个栅格行包括行字节数和若干栅格小块,根据行字节数读取到所有的栅格小块。
完成地图数据和雷达产品数据的解析之后,即可在手机APP中进行绘制。目前手机APP大体可分为两类:Web APP(网页APP)和Native APP(原生APP)。Web APP采用HTML5语言编写,在浏览器中运行(Written Once, Run Everywhere),并且无需用户手动更新,直接在服务器端完成版本迭代。虽然其开发成本较低,但性能和用户体验较差,不支持离线缓存。Native APP是指基于手机操作系统开发的原生APP,具备强大的性能、出色的动画效果及最佳的交互体验,支持离线缓存处理,但安装和更新需要用户在应用商店中手动下载。由于绘制的雷达图需要较高的分辨率以满足在一定的放大倍数下保持清晰,必须进行大量的实时渲染,对性能要求较高;并且通过在Native APP中进行缓存优化,可缩短加载时间,减少流量消耗,综上考虑,选择Native APP开发。
编写iOS操作系统上运行的应用程序,需要在Mac OS X操作系统上,使用集成开发工具Xcode进行编程,编程语言是Objective-C或Swift。这里以组合反射率产品为例,进行分析和绘制。
4.1 组合反射率产品绘制
对雷达产品文件完成解析之后,主要对产品符号表示块的数据进行绘制。分析解析结果,发现栅格数据包中栅格行数固定为464行,每行有若干个栅格小块,每个栅格小块数据占用一个字节,即8个二进制位,绘制时取高4位二进制数作为这个栅格小块的宽度,取低4位二进制数作为绘制栅格小块的填充颜色,4位二进制数表示的十进制数范围是0~15,故填充颜色有16种,组合反射率产品的RGB颜色表如图6所示。测试发现每一个栅格行中所有栅格小块的二进制数据的高4位值之和等于464,故所有栅格行绘制的结果是在464*464区域内由若干栅格小块组成的图像。例如假设从(0,0)点开始绘制,第1行第1个栅格小块的二进制值为11110000,则表示把起始点在(0,0),宽度15个像素,高1个像素的矩形区域填充为黑色;第1行第2个栅格小块的二进制值为01011101,则表示紧挨前一个栅格小块,把宽度5个像素,高1个像素的矩形区域填充为红色。以此类推就可以得到464*464大小的组合反射率产品图。
图6 RGB颜色表Fig.6 RGB color table
在iOS中,通过UIKit框架中提供的函数UIGraphics Begin Image Context With Options可以创建一个图片类型的上下文,在该上下文上进行绘制后,调用UIGraphics Get Image From Current Image Context函数可以从当前上下文中获取到绘制的图片对象。iOS提供了Core Graphics框架来协助绘制复杂的图形,使用Core Graphics可以方便高效的创建直线、路径、渐变、文字与图像等内容。绘制组合反射率产品时,在464*464大小的上下文中,使用CGContext Set Fill Color With Color函数设置栅格小块的颜色,使用CGContext Fill Rect函数对栅格小块进行填充绘制。
4.2 雷达地图绘制
雷达的地图图像由5个部分组成,分别是省界、城市、县界、河流和地名,除了地名之外的其余4类地图数据绘制方法相同,绘制折线时仍然利用Core Graphics框架,使用CGContext Move To Point函数开始绘制一条新的折线,使用CGContext Add Line To Point将每一个后续拐点连接成线;地名部分的绘制涉及到文本绘制,iOS提供了Core Text框架来对文字进行排版和渲染。需要注意的是由于地名字符采用GBK编码存储,而iOS的字符串编码枚举中并未给出GBK编码类型,需要从更底层的字符串对象中创建,代码如下:
NSString Encoding gbkEncoding = CFString Convert Encoding To NSString Encoding
(kCFString Encoding GB_18030_2000);
4.3 绘制效果
将雷达产品和地图叠加显示时,因为各种雷达产品的分辨率不尽相同,应注意其与地图的比例关系,如组合反射率产品与地图分辨率之比是1∶2,1 h累积降水产品与地图分辨率之比是1∶1。几种常用雷达产品在iPhone中的绘制效果如图7所示:
图7 雷达产品在iPhone手机中的显示效果(a)组合反射率产品(CR);(b)基本速度产品(V);(c)1 h累积降水产品(OHP);(d)回波顶产品(ET);(e)垂直积分液态含水量产品(VIL);(f)基本反射率产品(R)Fig.7 Radar products displayed on iPhone.(a)Composite Reflectivity (CR); (b)Velocity(V); (c)One Hour Precipitation (OHP); (d)Echo Tops (ET); (e)Vertically Integrated Liquid(VIL); (f)Reflectivity (R)
4.4 雷达产品的缩放
在PUP客户端中,缩放雷达产品是通过点击鼠标右键,然后选择缩放倍数来完成的,缩放倍数仅限2、4、6、8、16倍,而借助iOS设备的交互手势“两指捏合”,即可以实现在调节范围内线性缩放任意倍数,同时根据缩放比例控制地图细节的显示和隐藏,以达到最佳观测效果。捕捉两指在屏幕上滑动,需要重载touchesMoved:withEvent:函数,在函数中不断捕获两指之间的距离变化,对雷达产品的图片对象执行相应倍数的缩放。
4.5 动画播放
iOS提供了简便易用的帧动画播放方案,只需将若干张雷达产品的图像组成的数组赋给图片容器对象,通过设置每帧时长、重复次数,即可实现动画播放。
本文以iPhone手机为例,对几种常用雷达产品和地图进行了绘制,实现了缩放和动画播放操作,可以看出,雷达产品在iPhone手机上的显示效果并不亚于PC端的PUP程序。在今后的研究中,还可根据手机自身特性,添加一些PC端不能具备的功能,如利用苹果公司提供的APNS消息推送服务(Apple Push Notification Service),服务器可以在检测到有较强雷达回波生成时对安装此手机APP的用户进行推送提醒。此外,目前读取的数据文件均来自手机本地存储(由于雷达产品文件的保密性,存储的文件已经过重新编码处理),若要随时随地的查看实时的雷达产品,需建立与雷达产品服务器内网的连接,有待进一步开发实现。
[1] 方标,罗晓松,陈关清,等. 铜仁市2014年5月25日致灾大暴雨天气过程雷达特征分析[J]. 贵州气象,2015,39(1):55-59.
[2] 高楠,王飞. 新一代天气雷达产品数据共享显示系统[J]. 科技与生活,2010,(17):131-131.
[3] 罗晓松,方标,严小冬. 黔东北一次局地特大暴雨天气的雷达回波特征分析[J]. 贵州气象,2014,38(6):16-19.
[4] 陈海泉,陈立宏,曾祥标,等. 雷达和自动气象站资料在GIS中的同步显示[J]. 广东气象,2011,33(1):64-66.
[5] 钟常鸣. CINRAD-SA 多普勒天气雷达产品简介[J]. 气象研究与应用,2009,30(A02):226-227.
[6] 郭晓超,李明元,肖蕾. 遵义多普勒天气雷达反射率资料的杂波抑制算法研究[J]. 贵州气象,2014,38(6):27-29.
[7] 姚立宏,方琼. 新一代天气雷达资料的共享[J]. 广西气象,2006,27(02):35-36.
[8] 张深寿. 新一代天气雷达(CINRAD/SA)PUP的地图汉化[J]. 福建气象,2002(5):26-26.
[9] 张廷秀,付彦兵,苏添记. 新一代天气雷达PUP地图细化设计与实现. 气象水文海洋仪器,2007(1):40-43.
[10]但玻,李庆,徐会明,等. 成都新一代天气雷达资料整编程序开发[J]. 四川气象,2007,27(4):34-34.
[11]陈海泉,廖仕湘. 新一代天气雷达产品数据格式分析[A]//中国气象学会. 中国气象学会2007年年会气象综合探测技术分会场论文集.北京:气象出版社,2007:390-396.
[12]李红玉,李晓勇,刘鹏. 跨省区新一代多普勒天气雷达PUP产品调用与拼图实现[J]. 西华大学学报:自然科学版,2009,28(5):78-82.
[13]楚志刚,银燕,顾松山. 新一代天气雷达基数据文件格式自动识别方法研究[J]. 计算机与现代化,2013,(7):180-184.
[14]赵姝慧,秦鑫,李帅彬,等. 新一代天气雷达常用产品在我国人工影响天气工作中的应用[J]. 地球科学进展,2012,27(6):694-702.
[15]胡胜,伍志方,刘运策,等. 新一代多普勒天气雷达广东省区域拼图初探[J]. 气象科学,2006,26(1):74-80.
Rendering of the New Generation Weather Radar’s products in iPhone
NIU Yiming1,ZHANG Guoli1,LIU Li2
(1.Yichuan Meteorological Office, Yichuan 471300, China;2.Mengjin Meteorological Office, Mengjin 471100,China)
The binary data structure of the New Generation Weather Radar’s map files and radar product files was analyzed, presents a parser scheme was presented. For the iPhone mobile phones equipped with iOS operating system, Objective-C programming language was used to develop an application in the Xcode Integrated Development Environment (IDE). Radar map and products was rendered in the app. Users can zoom in or out of the radar image by pinch gesture. Key-frame Animation technique was used to play radar echo animation. The demonstration effect of the app is the same as the Principal User Processor(PUP) client in computer.
new generation weather radar; map files analysis; radar product analysis; iPhone application
1003-6598(2016)04-0068-05
2016-05-13
牛一鸣(1989—),男,助工,主要从事软件开发及网络维护工作,E-mail:120971999@qq.com。
TP311.52
B