□ 贺旭东 □刘 蕊 □陈欣欣 □汪真真
(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技术、多线程技术、界面编程技术等关键技术。读者可以在本文基础上构建自己的防汛导航软件。