丁 旻,張 淼,吳安坤
(1.貴州省氣象災(zāi)害防御技術(shù)中心,貴州 貴陽(yáng) 550081;2.貴州省農(nóng)村綜合經(jīng)濟(jì)信息中心,貴州 貴陽(yáng) 550081)
基于Android移動(dòng)設(shè)備的雷電預(yù)警實(shí)時(shí)推送技術(shù)
丁 旻1,張 淼2,吳安坤1
(1.貴州省氣象災(zāi)害防御技術(shù)中心,貴州 貴陽(yáng) 550081;2.貴州省農(nóng)村綜合經(jīng)濟(jì)信息中心,貴州 貴陽(yáng) 550081)
基于Android移動(dòng)設(shè)備的雷電預(yù)警信息實(shí)時(shí)推送,不僅能滿足雷電預(yù)警信息發(fā)送的及時(shí)性而且可提高預(yù)警區(qū)域的精度。因此,開(kāi)展推送技術(shù)的研究具有重要的實(shí)用意義和發(fā)展前景?;贏ndroid移動(dòng)設(shè)備,利用GPS定位技術(shù),對(duì)雷電預(yù)警信息、三維閃電監(jiān)測(cè)數(shù)據(jù)進(jìn)行采集,通過(guò)GPS位置數(shù)據(jù)與預(yù)警信息整合、數(shù)據(jù)格式轉(zhuǎn)換、服務(wù)器和客戶端XMPP協(xié)議配置以及數(shù)據(jù)初始化等過(guò)程,實(shí)現(xiàn)雷電預(yù)警信息的及時(shí)準(zhǔn)確推送。用戶能夠及時(shí)獲取所在行政區(qū)雷電預(yù)警發(fā)布信息以及附近20 km內(nèi)的雷電實(shí)時(shí)發(fā)生情況,提醒做好相應(yīng)預(yù)警等級(jí)的雷電預(yù)防措施。
Android移動(dòng)設(shè)備;實(shí)時(shí)推送;雷電預(yù)警;GPS定位技術(shù);XMPP協(xié)議
基于移動(dòng)設(shè)備的即時(shí)通訊技術(shù),具備了很好的及時(shí)性和直觀性,現(xiàn)在已不再是被單純運(yùn)用在簡(jiǎn)單的對(duì)話通信服務(wù)中。在雷電災(zāi)害防御服務(wù)中,將身邊的雷電預(yù)警和閃電監(jiān)測(cè)實(shí)時(shí)信息結(jié)合GPS定位技術(shù)以即時(shí)通訊的方式直接發(fā)送到雷電預(yù)警區(qū)域范圍內(nèi)的客戶端,雷電預(yù)警產(chǎn)品以一種郵件訂閱的方式推送在客戶端的信息欄顯示,當(dāng)用戶所在行政區(qū)發(fā)布雷電預(yù)警信息以及附近20 km內(nèi)發(fā)生雷電時(shí),用戶可以隨時(shí)通過(guò)可視化的方式掌握雷電預(yù)警信息及閃電實(shí)時(shí)發(fā)生情況,以便及時(shí)做好相應(yīng)的雷電防御措施,達(dá)到防災(zāi)減災(zāi)的目的。這種模式和技術(shù)是雷電災(zāi)害公共服務(wù)功能的一個(gè)完善。因此,基于Android移動(dòng)設(shè)備的雷電預(yù)警信息的及時(shí)推送技術(shù)具有很好的實(shí)用價(jià)值和發(fā)展前景。本文詳細(xì)介紹了圍繞該技術(shù)的研究過(guò)程。
本功能設(shè)計(jì)研究以C/S為整體結(jié)構(gòu)體系,客戶端通過(guò)GPRS無(wú)線網(wǎng)絡(luò)用TCP協(xié)議連接到服務(wù)器,服務(wù)器采用開(kāi)源的Openfire作為實(shí)時(shí)推送平臺(tái),推送功能使用開(kāi)放的XMPP即時(shí)通信協(xié)議。具體結(jié)構(gòu)設(shè)計(jì)有如下幾個(gè)部分:
一是XMPP協(xié)議設(shè)計(jì)[1]。這是一個(gè)開(kāi)放的且節(jié)約開(kāi)發(fā)成本的推送信息協(xié)議,主要是實(shí)現(xiàn)各個(gè)服務(wù)器、客戶端間的連接。Smack是XMPP協(xié)議實(shí)現(xiàn)的關(guān)鍵,操作XMPP都是通過(guò)使用其提供的API來(lái)實(shí)現(xiàn)的。
二是服務(wù)器配置。本功能服務(wù)器(以下簡(jiǎn)稱服務(wù)器)端采用Openfire作為服務(wù)器[2]。允許多個(gè)客戶端同時(shí)連接和登錄服務(wù)器。服務(wù)器對(duì)每個(gè)客戶端的連接進(jìn)行認(rèn)證,對(duì)認(rèn)證通過(guò)的客戶端創(chuàng)建會(huì)話,所有客戶端與服務(wù)器端之間的通信都在該會(huì)話的上下文中進(jìn)行。該服務(wù)器除連接客戶端還負(fù)責(zé)采集雷電監(jiān)測(cè)實(shí)時(shí)數(shù)據(jù)、雷電預(yù)警信息以及數(shù)據(jù)集成處理。
三是客戶終端設(shè)計(jì)??蛻舳送ㄟ^(guò)GPRS無(wú)線網(wǎng)絡(luò)與Internet網(wǎng)絡(luò)建立連接,在設(shè)計(jì)中,把客戶端推送分為兩類內(nèi)容:一類為雷電預(yù)警信息,服務(wù)器通過(guò)Internet網(wǎng)絡(luò)讀取雷電預(yù)警信息數(shù)據(jù);另一類為臨近閃電監(jiān)測(cè)實(shí)時(shí)信息,服務(wù)器直接讀取本地雷電服務(wù)器數(shù)據(jù)。服務(wù)器通過(guò)Message[3]的from參數(shù)來(lái)控制消息的來(lái)源。
具體功能設(shè)計(jì)如圖1。
圖1 功能設(shè)計(jì)結(jié)構(gòu)圖Fig.1 The function design structure design
3.1 服務(wù)器功能設(shè)計(jì)實(shí)現(xiàn)
本功能服務(wù)器負(fù)責(zé)實(shí)時(shí)推送數(shù)據(jù)處理、閃電監(jiān)測(cè)實(shí)時(shí)數(shù)據(jù)格式處理和雷電預(yù)警信息讀取,通過(guò)采用XMPP協(xié)議,安裝OpenFire實(shí)現(xiàn)實(shí)時(shí)推送功能。閃電監(jiān)測(cè)服務(wù)器收集和存儲(chǔ)全省閃電監(jiān)測(cè)數(shù)據(jù)。兩臺(tái)服務(wù)器同屬一個(gè)內(nèi)網(wǎng)段,因此本功能服務(wù)器使用Java自帶的JDBC數(shù)據(jù)庫(kù)[4]程序直接遠(yuǎn)程登錄閃電監(jiān)測(cè)服務(wù)器,獲取閃電監(jiān)測(cè)實(shí)時(shí)數(shù)據(jù)。
在獲取閃電監(jiān)測(cè)數(shù)據(jù)和客戶端GPS位置數(shù)據(jù)后,將這兩類數(shù)據(jù)按技術(shù)要求集成存儲(chǔ),是實(shí)現(xiàn)推送功能的關(guān)鍵。臨近閃電監(jiān)測(cè)實(shí)時(shí)信息推送,利用GPS技術(shù)[5]推送客戶端附近20 km以內(nèi)的閃電實(shí)時(shí)情況,通過(guò)程序遍歷每條閃電數(shù)據(jù)的經(jīng)緯度,獲取閃電發(fā)生的位置數(shù)據(jù)集后,分別與GPS定位數(shù)據(jù)的經(jīng)緯度進(jìn)行比較。本功能分別按閃電發(fā)生位置距離客戶端GPS定位1、3、5、10和20 km進(jìn)行分類,并將分類數(shù)據(jù)提交給功能服務(wù)器進(jìn)行分類處理、存儲(chǔ)。雷電預(yù)警信息推送直接通過(guò)客戶端GPS定位精確自動(dòng)讀取所在行政區(qū)域氣象臺(tái)發(fā)布的雷電預(yù)警信息,并利用XMPP協(xié)議中的監(jiān)聽(tīng)程序及時(shí)推送(技術(shù)內(nèi)容在XMPP協(xié)議中詳述)。整個(gè)過(guò)程通過(guò)輸出程序system.out.println("時(shí)間:"+location.getTime());system.out.println("經(jīng)度:"+location.getLongitude());system.out.println("緯度:"+location. Latitude ())輸出位置數(shù)據(jù)經(jīng)緯度,在接入氣象數(shù)據(jù)API的過(guò)程中,將位置數(shù)據(jù)初始化為該經(jīng)緯度,功能實(shí)現(xiàn)見(jiàn)圖2。
3.2 XMPP協(xié)議實(shí)現(xiàn)
XMPP協(xié)議是連接服務(wù)器和客戶端的紐帶,二者在該協(xié)議上分別配置,并完成數(shù)據(jù)和功能的交互。服務(wù)器配置采用了基于XMPP的OpenFire,其由Java編程語(yǔ)言開(kāi)發(fā)[2];客戶端配置使用Smack客戶端庫(kù)。實(shí)現(xiàn)功能設(shè)計(jì)關(guān)鍵在于服務(wù)器數(shù)據(jù)流處理,XMPP協(xié)議采用XML數(shù)據(jù)流格式[3],每個(gè)XML流有3個(gè)基本單元:
圖2 雷電預(yù)警和附近雷電信息即時(shí)推送功能Fig.2 Lightning warning and the nearby thunder lightning information instant pushed
3.3 客戶端功能設(shè)計(jì)實(shí)現(xiàn)
客戶端通過(guò)TCP連接連接到服務(wù)器,并根據(jù)XMPP協(xié)議配置獲得由服務(wù)器所提供的全部功能,即客戶端只用接收消息,而所有相關(guān)操作都由服務(wù)器處理。在XMPP協(xié)議中有一個(gè)用java開(kāi)發(fā)客戶端庫(kù)Smack,該庫(kù)提供了兩種不同的連接方式[1-3]:socket和httpclient。本文僅選取socket作為客戶端連接服務(wù)器的方式來(lái)描述。首先,通過(guò)socket中的connection 函數(shù)與服務(wù)器進(jìn)行連接connection= new XMPPConnection(),在XMPPConnection構(gòu)造函數(shù)里面主要配置IP地址和端口。同時(shí),注冊(cè)一個(gè)監(jiān)聽(tīng)connection.addPacketListener(packetListener, packetFilter); connection.connect(),通過(guò)初始化連接,即可建立socket對(duì)象。然后,建立PacketReader對(duì)象packetReader = new PacketReader(this);,PacketReader主要負(fù)責(zé)消息的處理和通知。接著調(diào)用resetParser() 方法,為parser設(shè)置輸入源,該輸入源即為服務(wù)器上的閃電監(jiān)測(cè)實(shí)時(shí)數(shù)據(jù)和雷電預(yù)警信息。最后,調(diào)用startup啟動(dòng)線程,循環(huán)監(jiān)聽(tīng)parser,如果功能服務(wù)器推送信息,監(jiān)聽(tīng)程序接收到消息后會(huì)調(diào)用parseMessage()方法。該方法主要處理message的消息,通過(guò)該方法分析message消息并返回packet包。返回的包將調(diào)用processPacket方法,通過(guò)processPacket方法本功能服務(wù)器發(fā)出的信息會(huì)被傳遞給所有注冊(cè)了PacketListener的監(jiān)聽(tīng)(即與本功能服務(wù)器建立socket連接)的客戶端。為滿足用戶自主選擇需求,在調(diào)用startup的過(guò)程中應(yīng)用程序調(diào)用開(kāi)關(guān)[1]、[7-8],分別控制對(duì)閃電監(jiān)測(cè)實(shí)時(shí)數(shù)據(jù)和雷電預(yù)警信息的監(jiān)聽(tīng)。用戶開(kāi)啟開(kāi)關(guān),則線程啟動(dòng),監(jiān)聽(tīng)程序運(yùn)行,信息功能立即被推送;當(dāng)用戶關(guān)閉開(kāi)關(guān),則線程不被啟動(dòng),監(jiān)聽(tīng)程序不運(yùn)行,信息將不會(huì)被推送,操作界面見(jiàn)圖3。
圖3 雷電信息即時(shí)推送設(shè)置功能Fig.3 The function of lightning information push setting
本文以Android移動(dòng)客戶端為基礎(chǔ),描述了通過(guò)XMPP協(xié)議實(shí)現(xiàn)及時(shí)推送用戶周邊的閃電監(jiān)測(cè)實(shí)時(shí)信息和雷電預(yù)警信息所采取的技術(shù)方法及過(guò)程。在技術(shù)研究和功能實(shí)現(xiàn)過(guò)程中,以簡(jiǎn)潔實(shí)用的方法和符合用戶體驗(yàn)為前提進(jìn)行開(kāi)發(fā),滿足了臨近雷電預(yù)警服務(wù)向移動(dòng)客戶端發(fā)展的需求,是對(duì)氣象公共服務(wù)能力的完善,有助于用戶及時(shí)接收雷電預(yù)警信息,了解閃電實(shí)時(shí)發(fā)生情況,以便及時(shí)做好相應(yīng)的雷電防御措施,減少雷電導(dǎo)致的人員和財(cái)產(chǎn)損失。
[1] 莫非特(Jack Moffitt), XMPP高級(jí)編程:使用Java Script和jquery[M].北京:清華大學(xué)出版社, 2011.
[2] 何以亮.openfire教程網(wǎng)[OL]. http://myopenfire.com/.2015.
[3] 崔同亮.通過(guò)XMPP協(xié)議實(shí)現(xiàn)即時(shí)通訊介紹[J].開(kāi)源中國(guó)社區(qū),2014.
[4] Cay S.Horstmann(美).Java 核心技術(shù)[M].北京:機(jī)械工業(yè)出版社,2014.
[5] 李明峰,馮寶紅,劉三枝. GPS定位技術(shù)及其應(yīng)用[M].北京:國(guó)防工業(yè)出版社,2006.
[6] 林念萍,鄭海祥,朱少玲,等.閃電定位資料在防雷設(shè)計(jì)中的應(yīng)用研究[J].建筑電氣,2014.
[7] 崔棟梁,馮亞,于萬(wàn)榮.氣象服務(wù)產(chǎn)品自動(dòng)處理平臺(tái)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2015,24(2):240-243.
The real-time push technology of the lightning early warningbased on the Android mobile equipment
DING Min1,ZHANG Miao2,WU Ankun1
(1.Meteorological Disasters Defense Technology Center of Guizhou Province, Guiyang 550081, China;2.Rural Comprehensive Economic Information Center of Guizhou Province , Guiyang 550081, China)
The thunder precaution information real-time push movement based on the Android mobility device can not only satisfy the timeliness of the thunder precaution information, but also improve the accuracy of the precaution area. Therefore, the research of carrying out the push technology has the significant practical meanings and developmental visions. The thunder precaution information and three-dimensional lightning monitoring data are to be gathered based on Android mobility device and by utilising GPS location technology. The timely and accurate push of the thunder precaution information will be realized through the process of the integration of GPS location data and precaution information,the transformation of the data format, the allocation of the sever and XMPP agreement of the customer end. The users are able to obtain the thunder precaution release information within the district and the thunder real-time occurrence situation within nearby 20 km. The thunder precaution measures of the corresponding precaution levels can be reminded to do better.
Android mobility device; the real-time push; the thunder precaution; the push technology; GPS location technology; XMPP agreement
1003-6598(2017)01-0078-03
2016-09-08
丁旻(1984—),男,副高,主要從事氣象災(zāi)害防御工作,E-mail:272339087@qq.com。
貴州省氣象局攻關(guān)小組:防雷減公共氣象服務(wù)APP。
TN926
B