□ 賀旭東 □劉 蕊 □陳欣欣 □汪真真
(1河南省信陽水文水資源勘測局 2河南黃河河務局供水局 3河南省開封水文水資源勘測局)
目前,防汛相關信息應用大部分通過計算機端實現。隨著移動計算技術和無線傳輸網絡的迅猛發展,以安卓操作系統為代表的智能設備日益普及,防汛應用的移動化、智能化條件已日趨成熟。通過在手機等智能設備上安裝防汛App應用程序,使得掌上智能設備具有與計算機端相同的功能,可使防汛人員擺脫時空的局限,隨時隨地掌握相關信息。這無疑會極大地提高信息獲取的效率。
類似的手機應用在中央氣象臺的手機應用MICAPS移動終端軟件及中國地震臺網中心的手機應用“地震速報”中已有所反應。首先,此類應用軟件提供統一的諸如Google地圖、百度地圖等地圖頁面來顯示最新信息。其次,此類應用通過WebService服務方式與后臺服務器通信,保證軟件數據的適時更新。受氣象、地震等手機應用的啟發,設計了防汛導航系統。
VisualStudio集成開發環境通過功能齊全的代碼編輯器、編譯器、項目模板、設計器、代碼向導、調試器以及其他工具,實現對C#語言的支持,可以幫助開發人員快速方便地創建和部署高質量的Web應用程序。Android是Google提供的移動通信平臺。通過集成AndroidEclipsePlug,可以在Eclipse集成開發環境中輕松構建Android應用程序。根據防汛工作的特點,本文設計了滿足防汛工作需求的防汛導航系統,并使用VisualC#及Java開發實現。
防汛人員需要方便的查詢軟件,來獲取一些防汛相關信息,而市面上暫無類似軟件來滿足應用需求,需要構建針對性強的防汛導航軟件。
用戶要求防汛導航應用軟件具有以下功能:地圖顯示、定位、路徑導航、信息查詢等功能。
地圖顯示功能:提供國內2維和3維矢量地圖顯示,并在地圖上顯示水文站及水利工程分布情況。
定位功能:提供基于GPS、移動基站、GPRS及WiFi定位功能。
路徑導航功能:提供駕車、徒步、騎行路線查詢導航功能。
信息查詢功能:提供流域內各水文站點的概況、水位、流量、雨量等實時數據及歷年特征值數據及水利工程的相關資料查詢功能。
1.2.1 地圖顯示
防汛導航系統地圖控件采用高德地圖開發包。高德地圖AndroidSDK是一套簡單的地圖應用開發調用接口,可支持地圖顯示與操作,興趣點搜索,地理編碼、離線地圖等功能。地圖顯示界面由一個全屏平鋪的地圖控件構成。地圖顯示模塊根據用戶當前視圖范圍和地圖縮放級別向數據服務端請求視圖當前區域內的水文站、水位站、雨量站分布數據,并將服務端返回的信息繪制于地圖之上。
1.2.2 定位功能
用戶可以通過系統菜單中的“定位功能”菜單項啟用定位功能。該模塊使用手機內置GPS硬件模塊,通過實現高德地圖AndroidSDK提供的GPS定位應用程序接口,獲得用戶所在位置經緯度并以箭頭圖標形式顯示于地圖之上。

表1 高德地圖程序包參考表
1.2.3 路徑導航
路徑導航模塊通過繼承地圖覆蓋物類WalkRouteOverlay、BusRouteOverlay及DrivingRouteOverlay實現 ,通過 重 載 各RouteOverlay類的導航方法,防汛導航系統可將步行、駕車去往河道、水庫、雨量站點及水利工程的導航路線及關鍵點顯示于地圖之上。
1.2.4 信息查詢
信息查詢模塊通過偵聽地圖顯示界面的點擊操作,獲取當前觸點的測站編碼,根據獲取的測站類型向數據服務端發送查詢請求,并將查詢結果以對話框形式返回用戶。防汛信息查詢模塊可以顯示水文站基本信息、水文站歷年特征值統計、水庫站歷年特征值統計及實時水位、流量、雨量信息等。水文站基本信息包括測站名稱、編碼、站別、流域名稱、水系名稱、河流名稱、施測項目碼、行政區劃碼、水資源分區碼、設站年份、設站月份、撤站年份、撤站月份、集水面積、流入何處、至河口距離、基準基面名稱、領導機關、管理單位、站址、經緯度等數據。水文站歷年特征值統計信息包括最高水位、最大流量及出現時間等信息。水庫站歷年特征值統計信息包括最高(低)水位、最大入(出)庫流量、相應蓄量、發生日期等數據。
Windows通信基礎(Windows Communication Foundation,WCF)是基于Windows平臺開發和部署服務的軟件開發包(Software Development Kit,SDK),包括服務交互、類型轉換、封送(Marshaling)以及各種協議的管理。考慮到系統跨平臺數據交換的要求,防汛導航系統采用WCF技術,實現面向服務的技術架構(Serviceorientedarchitecture,SOA),提供服務之間的跨平臺互操作性。
基于Android的防汛導航系統采用三層架構,由數據層、消息層和應用層構成。數據層由河南省基礎水文數據庫及實時水情數據庫組成,提供建國以來海量的歷史水文數據及雨量、河道水位、流量、水庫水位、流量、蓄水量等實時數據。消息層提供WCF服務,完成Android客戶端與數據層間的數據交互。應用層為防汛導航應用的展示層,為用戶提供各種顯示和查詢應用。按照系統層次結構,系統分成三個功能模塊:信息查詢模塊、數據發布及訂閱模塊和地圖操作模塊。數據發布及訂閱模塊為另外兩功能模塊提供數據支撐,另外兩功能模塊負責與用戶交互。
本系統的實現是通過信息查詢模塊、數據發布及訂閱模塊和地圖操作模塊的實現來完成的。這些模塊的實現主要應用WCF技術、多線程技術、界面編程技術。下面簡單闡述這幾項關鍵技術。
防汛導航系統客戶端是一個單文檔項目。由地圖控件構成的信息查詢界面是程序的主界面(圖1)。防汛導航系統客戶端軟件提供功能菜單項及地圖手勢操作與用戶交互。在界面中,AMap是地圖的控件對象。MapView作為地圖的容器,通過AMap對象顯示地圖。主界面通過實現On Camera Change Listener,Location Source,AmapLocation Listener接口完成定位等用戶操作功能。

圖1 防汛導航系統界面圖
本系統客戶端訂閱模塊獲取數據發布模塊服務的過程是比較耗時的網絡通信過程,在Android4.1.2(API16)以上版本中,當數據訂閱模塊部分代碼直接在UI線程運行時,程序會拋出異常,影響用戶體驗。為了不阻塞主線程,AndroidSDK提供的輕量級異步類Async Task可以很好地解決程序用戶界面更新的問題。訂閱模塊類繼承自AsyncTask類,通過實現do In Background、public Progress及on Post Execute方法反饋當前異步執行的程度,并在異步操作完成時將異步操作執行的結果通知UI線程。
本系統數據發布及訂閱模塊采用WCF技術實現。WCF的所有服務都公開為契約(Contract)。契約與平臺無關,是描述服務功能的標準、方式。其中,服務契約(Service Contract)描述客戶端能夠執行的服務操作。數據契約(Data Contract)定義與服務交互的數據類型。下面給出本系統數據發布模塊的水文要素查詢服務契約接口定義及數據發布服務模塊在IIS托管下的運行界面(圖2)。
水文要素查詢服務契約接口定義如下:




圖2 IIS托管下的數據發布服務圖
本系統客戶端數據訂閱模塊使用開源的第三方類庫ksoap2-androidjar包在異步類中調用本系統數據發布模塊給出的相應服務。
文章設計并實現了防汛導航系統。本系統界面友好、操作簡便,包括地圖顯示、定位、路徑導航、信息查詢等功能。借助本系統,防汛人員可以及時了解區域內各控制站的實時、歷史特征水位、流量、雨情等信息。本系統實現主要應用WCF技術、多線程技術、界面編程技術等關鍵技術。讀者可以在本文基礎上構建自己的防汛導航軟件。