牛一鳴,張國莉,劉 莉
(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