□ 賀旭東 □劉 蕊 □陳欣欣 □汪真真
(1河南省信陽(yáng)水文水資源勘測(cè)局 2河南黃河河務(wù)局供水局 3河南省開封水文水資源勘測(cè)局)
目前,防汛相關(guān)信息應(yīng)用大部分通過計(jì)算機(jī)端實(shí)現(xiàn)。隨著移動(dòng)計(jì)算技術(shù)和無線傳輸網(wǎng)絡(luò)的迅猛發(fā)展,以安卓操作系統(tǒng)為代表的智能設(shè)備日益普及,防汛應(yīng)用的移動(dòng)化、智能化條件已日趨成熟。通過在手機(jī)等智能設(shè)備上安裝防汛App應(yīng)用程序,使得掌上智能設(shè)備具有與計(jì)算機(jī)端相同的功能,可使防汛人員擺脫時(shí)空的局限,隨時(shí)隨地掌握相關(guān)信息。這無疑會(huì)極大地提高信息獲取的效率。
類似的手機(jī)應(yīng)用在中央氣象臺(tái)的手機(jī)應(yīng)用MICAPS移動(dòng)終端軟件及中國(guó)地震臺(tái)網(wǎng)中心的手機(jī)應(yīng)用“地震速報(bào)”中已有所反應(yīng)。首先,此類應(yīng)用軟件提供統(tǒng)一的諸如Google地圖、百度地圖等地圖頁(yè)面來顯示最新信息。其次,此類應(yīng)用通過WebService服務(wù)方式與后臺(tái)服務(wù)器通信,保證軟件數(shù)據(jù)的適時(shí)更新。受氣象、地震等手機(jī)應(yīng)用的啟發(fā),設(shè)計(jì)了防汛導(dǎo)航系統(tǒng)。
VisualStudio集成開發(fā)環(huán)境通過功能齊全的代碼編輯器、編譯器、項(xiàng)目模板、設(shè)計(jì)器、代碼向?qū)?、調(diào)試器以及其他工具,實(shí)現(xiàn)對(duì)C#語(yǔ)言的支持,可以幫助開發(fā)人員快速方便地創(chuàng)建和部署高質(zhì)量的Web應(yīng)用程序。Android是Google提供的移動(dòng)通信平臺(tái)。通過集成AndroidEclipsePlug,可以在Eclipse集成開發(fā)環(huán)境中輕松構(gòu)建Android應(yīng)用程序。根據(jù)防汛工作的特點(diǎn),本文設(shè)計(jì)了滿足防汛工作需求的防汛導(dǎo)航系統(tǒng),并使用VisualC#及Java開發(fā)實(shí)現(xiàn)。
防汛人員需要方便的查詢軟件,來獲取一些防汛相關(guān)信息,而市面上暫無類似軟件來滿足應(yīng)用需求,需要構(gòu)建針對(duì)性強(qiáng)的防汛導(dǎo)航軟件。
用戶要求防汛導(dǎo)航應(yīng)用軟件具有以下功能:地圖顯示、定位、路徑導(dǎo)航、信息查詢等功能。
地圖顯示功能:提供國(guó)內(nèi)2維和3維矢量地圖顯示,并在地圖上顯示水文站及水利工程分布情況。
定位功能:提供基于GPS、移動(dòng)基站、GPRS及WiFi定位功能。
路徑導(dǎo)航功能:提供駕車、徒步、騎行路線查詢導(dǎo)航功能。
信息查詢功能:提供流域內(nèi)各水文站點(diǎn)的概況、水位、流量、雨量等實(shí)時(shí)數(shù)據(jù)及歷年特征值數(shù)據(jù)及水利工程的相關(guān)資料查詢功能。
1.2.1 地圖顯示
防汛導(dǎo)航系統(tǒng)地圖控件采用高德地圖開發(fā)包。高德地圖AndroidSDK是一套簡(jiǎn)單的地圖應(yīng)用開發(fā)調(diào)用接口,可支持地圖顯示與操作,興趣點(diǎn)搜索,地理編碼、離線地圖等功能。地圖顯示界面由一個(gè)全屏平鋪的地圖控件構(gòu)成。地圖顯示模塊根據(jù)用戶當(dāng)前視圖范圍和地圖縮放級(jí)別向數(shù)據(jù)服務(wù)端請(qǐng)求視圖當(dāng)前區(qū)域內(nèi)的水文站、水位站、雨量站分布數(shù)據(jù),并將服務(wù)端返回的信息繪制于地圖之上。
1.2.2 定位功能
用戶可以通過系統(tǒng)菜單中的“定位功能”菜單項(xiàng)啟用定位功能。該模塊使用手機(jī)內(nèi)置GPS硬件模塊,通過實(shí)現(xiàn)高德地圖AndroidSDK提供的GPS定位應(yīng)用程序接口,獲得用戶所在位置經(jīng)緯度并以箭頭圖標(biāo)形式顯示于地圖之上。
表1 高德地圖程序包參考表
1.2.3 路徑導(dǎo)航
路徑導(dǎo)航模塊通過繼承地圖覆蓋物類WalkRouteOverlay、BusRouteOverlay及DrivingRouteOverlay實(shí)現(xiàn) ,通過 重 載 各RouteOverlay類的導(dǎo)航方法,防汛導(dǎo)航系統(tǒng)可將步行、駕車去往河道、水庫(kù)、雨量站點(diǎn)及水利工程的導(dǎo)航路線及關(guān)鍵點(diǎn)顯示于地圖之上。
1.2.4 信息查詢
信息查詢模塊通過偵聽地圖顯示界面的點(diǎn)擊操作,獲取當(dāng)前觸點(diǎn)的測(cè)站編碼,根據(jù)獲取的測(cè)站類型向數(shù)據(jù)服務(wù)端發(fā)送查詢請(qǐng)求,并將查詢結(jié)果以對(duì)話框形式返回用戶。防汛信息查詢模塊可以顯示水文站基本信息、水文站歷年特征值統(tǒng)計(jì)、水庫(kù)站歷年特征值統(tǒng)計(jì)及實(shí)時(shí)水位、流量、雨量信息等。水文站基本信息包括測(cè)站名稱、編碼、站別、流域名稱、水系名稱、河流名稱、施測(cè)項(xiàng)目碼、行政區(qū)劃碼、水資源分區(qū)碼、設(shè)站年份、設(shè)站月份、撤站年份、撤站月份、集水面積、流入何處、至河口距離、基準(zhǔn)基面名稱、領(lǐng)導(dǎo)機(jī)關(guān)、管理單位、站址、經(jīng)緯度等數(shù)據(jù)。水文站歷年特征值統(tǒng)計(jì)信息包括最高水位、最大流量及出現(xiàn)時(shí)間等信息。水庫(kù)站歷年特征值統(tǒng)計(jì)信息包括最高(低)水位、最大入(出)庫(kù)流量、相應(yīng)蓄量、發(fā)生日期等數(shù)據(jù)。
Windows通信基礎(chǔ)(Windows Communication Foundation,WCF)是基于Windows平臺(tái)開發(fā)和部署服務(wù)的軟件開發(fā)包(Software Development Kit,SDK),包括服務(wù)交互、類型轉(zhuǎn)換、封送(Marshaling)以及各種協(xié)議的管理??紤]到系統(tǒng)跨平臺(tái)數(shù)據(jù)交換的要求,防汛導(dǎo)航系統(tǒng)采用WCF技術(shù),實(shí)現(xiàn)面向服務(wù)的技術(shù)架構(gòu)(Serviceorientedarchitecture,SOA),提供服務(wù)之間的跨平臺(tái)互操作性。
基于Android的防汛導(dǎo)航系統(tǒng)采用三層架構(gòu),由數(shù)據(jù)層、消息層和應(yīng)用層構(gòu)成。數(shù)據(jù)層由河南省基礎(chǔ)水文數(shù)據(jù)庫(kù)及實(shí)時(shí)水情數(shù)據(jù)庫(kù)組成,提供建國(guó)以來海量的歷史水文數(shù)據(jù)及雨量、河道水位、流量、水庫(kù)水位、流量、蓄水量等實(shí)時(shí)數(shù)據(jù)。消息層提供WCF服務(wù),完成Android客戶端與數(shù)據(jù)層間的數(shù)據(jù)交互。應(yīng)用層為防汛導(dǎo)航應(yīng)用的展示層,為用戶提供各種顯示和查詢應(yīng)用。按照系統(tǒng)層次結(jié)構(gòu),系統(tǒng)分成三個(gè)功能模塊:信息查詢模塊、數(shù)據(jù)發(fā)布及訂閱模塊和地圖操作模塊。數(shù)據(jù)發(fā)布及訂閱模塊為另外兩功能模塊提供數(shù)據(jù)支撐,另外兩功能模塊負(fù)責(zé)與用戶交互。
本系統(tǒng)的實(shí)現(xiàn)是通過信息查詢模塊、數(shù)據(jù)發(fā)布及訂閱模塊和地圖操作模塊的實(shí)現(xiàn)來完成的。這些模塊的實(shí)現(xiàn)主要應(yīng)用WCF技術(shù)、多線程技術(shù)、界面編程技術(shù)。下面簡(jiǎn)單闡述這幾項(xiàng)關(guān)鍵技術(shù)。
防汛導(dǎo)航系統(tǒng)客戶端是一個(gè)單文檔項(xiàng)目。由地圖控件構(gòu)成的信息查詢界面是程序的主界面(圖1)。防汛導(dǎo)航系統(tǒng)客戶端軟件提供功能菜單項(xiàng)及地圖手勢(shì)操作與用戶交互。在界面中,AMap是地圖的控件對(duì)象。MapView作為地圖的容器,通過AMap對(duì)象顯示地圖。主界面通過實(shí)現(xiàn)On Camera Change Listener,Location Source,AmapLocation Listener接口完成定位等用戶操作功能。
圖1 防汛導(dǎo)航系統(tǒng)界面圖
本系統(tǒng)客戶端訂閱模塊獲取數(shù)據(jù)發(fā)布模塊服務(wù)的過程是比較耗時(shí)的網(wǎng)絡(luò)通信過程,在Android4.1.2(API16)以上版本中,當(dāng)數(shù)據(jù)訂閱模塊部分代碼直接在UI線程運(yùn)行時(shí),程序會(huì)拋出異常,影響用戶體驗(yàn)。為了不阻塞主線程,AndroidSDK提供的輕量級(jí)異步類Async Task可以很好地解決程序用戶界面更新的問題。訂閱模塊類繼承自AsyncTask類,通過實(shí)現(xiàn)do In Background、public Progress及on Post Execute方法反饋當(dāng)前異步執(zhí)行的程度,并在異步操作完成時(shí)將異步操作執(zhí)行的結(jié)果通知UI線程。
本系統(tǒng)數(shù)據(jù)發(fā)布及訂閱模塊采用WCF技術(shù)實(shí)現(xiàn)。WCF的所有服務(wù)都公開為契約(Contract)。契約與平臺(tái)無關(guān),是描述服務(wù)功能的標(biāo)準(zhǔn)、方式。其中,服務(wù)契約(Service Contract)描述客戶端能夠執(zhí)行的服務(wù)操作。數(shù)據(jù)契約(Data Contract)定義與服務(wù)交互的數(shù)據(jù)類型。下面給出本系統(tǒng)數(shù)據(jù)發(fā)布模塊的水文要素查詢服務(wù)契約接口定義及數(shù)據(jù)發(fā)布服務(wù)模塊在IIS托管下的運(yùn)行界面(圖2)。
水文要素查詢服務(wù)契約接口定義如下:
圖2 IIS托管下的數(shù)據(jù)發(fā)布服務(wù)圖
本系統(tǒng)客戶端數(shù)據(jù)訂閱模塊使用開源的第三方類庫(kù)ksoap2-androidjar包在異步類中調(diào)用本系統(tǒng)數(shù)據(jù)發(fā)布模塊給出的相應(yīng)服務(wù)。
文章設(shè)計(jì)并實(shí)現(xiàn)了防汛導(dǎo)航系統(tǒng)。本系統(tǒng)界面友好、操作簡(jiǎn)便,包括地圖顯示、定位、路徑導(dǎo)航、信息查詢等功能。借助本系統(tǒng),防汛人員可以及時(shí)了解區(qū)域內(nèi)各控制站的實(shí)時(shí)、歷史特征水位、流量、雨情等信息。本系統(tǒng)實(shí)現(xiàn)主要應(yīng)用WCF技術(shù)、多線程技術(shù)、界面編程技術(shù)等關(guān)鍵技術(shù)。讀者可以在本文基礎(chǔ)上構(gòu)建自己的防汛導(dǎo)航軟件。