摘要:介绍了一种基于Android操作系统的应急避难场所查询软件。应急避难场所的位置信息存储在百度云端,软件通过云检索获得相应的信息。软件将检索到的信息以列表和地图的形式展现出来,并提供条件筛选、周边检索和定位等功能。通过Android SDK模拟器仿真和手机终端测试,验证了该软件的各项功能全部达到预期目标。
关键词:安卓; 应急避难场所;云存储; 云检索;百度地图API; 百度定位
近年来,全球地震灾害多发,给人类造成巨大损失。应急避难场所是应对突发公共事件的一项灾民安置措施,是现代化大城市用于民众躲避地震、火灾、爆炸、洪水、疫情等重大突发公共事件的安全避难场所[1]。应急避难场所具有应急避难指挥中心、独立供电系统、应急直升机停机坪、应急消防措施、应急避难疏散区、应急供水等11种应急避险功能,形成了一个集通信、电力、物流、人流、信息流等为一体的完整网络。
随着移动通信技术的快速发展和Android智能终端的迅速普及,人们对信息的获取有了更高的要求[2]。开发一款基于Android系统的应急避难场所的软件显得非常必要。Android系统是谷歌公司推出的一套智能开源手机平台,由操作系统、中间件、用户友好界面和应用软件组成[3]。
应急避难场所查询涉及到每个避难场所的位置信息,而百度LBS云服务可以解决这一问题。LBS云是百度地图针对LBS开发者推出的平台级服务,结合已有的地图API和SDK服务,通过开放服务端存储和计算能力,提供海量位置数据存储、检索及展示一体化解决方案[4]。
本文针对Android系统,使用百度地图Android SDK、定位API和LBS云服务开发了一款可以筛选、定位、地图显示和周边检索的应急避难场所查询软件。
1 总体设计方案
1.1 Android开发介绍
Android是以Linux为核心的开放源码操作系统,可以运行在手机、平板电脑、GPS、播发器等各种手持终端上[5-6]。
Android主流的开发环境是Java,开发平台是Eclipse(一种基于Java的开源、可扩展平台)。Eclipse安装安卓开发工具ADT(Android Development Tools)后即可直接使用Android的软件开发工具包SDK(Software Development Kit)。同时SDK还提供可视化的模拟器,以及Dalvik虚拟机调试监控服务(DDMS)工具,用于实时查看软件运行情况及本件管理、截屏等操作[7-8]。本文的软件就在以上基础上开发调试,并最终在手机终端上通过测试。
1.2 百度地图Android SDK简介
百度地图Android SDK是一套基于Android 2.1(v1.3.5及以前版本支持Android 1.5以上系统)及以上版本设备的应用程序接口,可适用于Android系统移动设备的地图应用。通过调用地图SDK接口,可以轻松访问百度地图服务和数据,构建功能丰富、交互性强的地图类应用程序。
1.3百度定位SDK简介
LBS(Location Based Service)是互联网时代的热点,在本地搜索、定向广告、社交网络等众多领域得到了广泛应用。其核心基础就是定位能力,为各类应用提供位置信息。百度移动定位API是一个提供基础定位API的第三方平台,为各类应用提供定位能力,提升用户体验。目前百度定位SDK支持Android平台的免费使用。
1.4 百度LBS云简介
LBS云是百度地图针对LBS开发者推出的平台级服务,结合已有的地图API和SDK服务,通过开放服务端存储和计算能力,提供海量位置数据存储、检索、展示一体化解决方案。LBS云包括云存储和云检索两个部分。
LBS云有三个基本概念,分别是位置数据表(geotable)、自定义扩展列(column)和位置数据(poi)。位置数据表是百度LBS云提供给开发者自定义存储位置数据的集合,类似于常见数据库的一个表,不仅支持点线面结构还支持用户自定义结构。自定义扩展列是开发者在创建的位置数据表基础上根据自己的应用场景自定义扩展的列,类似于常见数据表的一个列。位置数据即为开发者在定义好属性和扩展列的位置数据表中带有位置属性的业务数据记录,类似于常见数据表下的一条记录。
1.5 避难场所查询软件设计方案
首先需要将所有的避难场所位置及相关信息存储到百度LBS云中,软件查询避难场所的过程其实就是对已存储信息的云端进行检索的过程。云检索必须在有网络的条件下进行,所以当没有无线网络时需要打开手机自身的移动网络。如图1所示,当检测到可用网络后要划分网络类型,因为不同网络的接口设置不同。通过百度定位API对终端用户当前所在位置进行定位。通过云检索将云端的避难场所信息调出并计算避难场所与当前位置的距离。软件有两种工作模式:一种是筛选模式,另一种是附近模式。在筛选模式下可以按照行政区、避难场所分类和关键字检索对避难场所进行查找;在附近模式可以按照距离查找当前位置周边的避难场所。
2 软件设计
系统分为2个数据包(package),一个是com.bd.lbs.yj用来完成软件的主体功能;另一个是com,bd.lbs.api用来完成百度定位、云检索和百度地图显示等功能。这2个数据包共包括了7个程序模块,如图2所示。
2.1 ContentModel模块设计
ContentModel类用来定义列表内容,包括避难场所的名称、地址、类型、避难场所与当前设备的距离、图片外连接地址、专题页地址、经度和纬度。此外该类还定义了获取这些信息的成员函数。
2.2 LBSListActivity模块设计
LBSListActivity类继承了ListActivity类并实现了对OnScrollListener的接口。实现了列表显示,同时还监控焦点是否为列表最后一行。本文的列表页为单页10条列表,当页面翻滚到最后一行时点击“读取更多”按钮,即可再打开10条列表。
要在列表底部添加“读取更多”按钮并显示读取的进度就要在重写父类Activity时添加“读取更多(loadMoreView)”按钮和进度条(progressBar)的layout设置。
本设计需要在列表中显示每个避难场所的照片,这些照片被保存在网络相册中,系统解析网络照片地址并将照片转换为Bit图片显示。这个过程通过getBitmapFromUrl函数来完成。该函数首先建立与网络相册的连接,接收来自相册的数据流并将全部数据流保存在缓存中,最后将缓存中的数据重新编码成比特图片。
2.3 DApplication模块设计
Android中的Application类是为了需要保存全局变量而设计的基本类,该类在package创建时就存在。程序中的DApplication类是从Application类继承下来的,用于保存本设计的全局变量。
本设计中的百度地图SDK使用ak验证和网络类型的划分也是在DApplication类中完成的。网络类型主要分为中国移动CMWAP、中国联通UNIWAP、中国电信CTWAP和3G网络3GWAP。
2.4 MainActivity模块设计
MainActivity类主要完成可用网络的检测、筛选/附近模式的切换,地图/列表模式的切换和筛选按钮功能的实现。
筛选/附近模式的切换通过ToggleButton按钮实现,地图/列表模式的切换通过getTabHost函数来完成,各种筛选条件通过设置Spinner控件来完成。
2.5 LBSLocation模块设计
LBSLocation类主要完成终端的定位功能。编写这个类需要用到百度定位API,所以在该文件前添加如下程序来导入百度程序包:
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
首先要在启动定位函数中配置定位信息,将定位经纬度设置为百度经纬度。然后编写定位监听函数并实现对百度定位监听函数的接口。在定位监听函数中实现定位并计算当前位置与每个避难场所的距离。
2.6 LBSCloudSearch模块设计
LBSCloudSearch类通过http post方式访问百度云,利用百度云检索API查找百度云存储数据,返回JSON数据供移动应用显示。
云检索前需要做好两项准备工作:(1)根据划分的网络类型进行网络接口配置; (2)设置百度云的databox及对应ak的校验。
2.7 LBSMapActivity模块设计
LBSMapActivity类主要用于实现百度地图的显示功能。编写这个类需要用到百度定位API,所以在该文件前添加以下程序来导入百度程序包:
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.ItemizedOverlay;
import com.baidu.mapapi.map.LocationData;
import com.baidu.mapapi.map.MKEvent;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationOverlay;
import com.baidu.mapapi.map.OverlayItem;
import com.baidu.mapapi.map.PopupClickListener;
import com.baidu.mapapi.map.PopupOverlay;
程序中使用initMapView()函数来完成初始化地图,包括设置地图中心坐标、地图缩放参数和地图控制控件等。使用addAllMarker()和removeAllMarker()两个函数,实现在地图中添加避难场所位置麻点和删除这些麻点。
在LBSMapActivity类中定义了MyGeneralListener和OverlayIcon两个类,分别用于监控网络和定义麻点样式。
3 软件测试
3.1 云存储
百度云存储接口支持单个geotable亿级数据及数百GB大小的存储,每天支持百万量级读写,每秒支持万量级读写,完全满足本设计的需求。在进行软件测试前,通过批量上传的方式将应急避难场所的信息存到百度云端。除了百度云自带的字段外还需要自定义扩展字段image、type和shelterurl。其中image为string类型,用来存储展示在终端的避难场所图片地址;type为double类型,用来区分避难场所类型;shelterurl为string类型,用来存储避难场所专辑页面地址。
3.2 手机测试
软件通过Android SDK模拟器仿真后进入到手机实物测试,本次测试所用的手机为华为G520。手机测试步骤为:
(1)检测在无网络情况下程序是否退出;
(2)在无线WiFi网络下,打开程序在列表模式下浏览避难场所列表,检查列表中的避难场所能否与百度云端存储的数据对应;
(3)检查列表中的内容和图片是否与设计一致,列表中的定位以及距离计算是否准确;
(4)按照行政区和避难场所分类逐一进行筛选测试,检测筛选是否有误;
(5)切换到周边模式进行周边检索,检查周边检索是否准确;
(6)将列表模式切换到地图模式,检查地图上麻点能否与列表对应;
(7)将WiFi网络换成GSM网络,重复步骤(2)~步骤(6)进行检测。
经过上述测试,应急避难场所查询软件所有功能工作正常,达到了预期目标。图3、图4为筛选模式和附近模式下列表/地图的测试照片。
本文设计了一个基于Android操作系统的应急避难场所查询方案,实现了对应急避难场所的查询、筛选和地图展示等功能。本设计的创新点是使用了百度LBS云技术,将避难场所的位置信息存储到百度云端,并通过云检索获取信息。与传统方式相比省去了架设服务器保存信息和维护信息的开销。同时使用百度地图API和定位API,将定位所得到的百度经纬度和避难场所的经纬度显示在百度地图上。手机测试结果表明,本设计完成了预期的全部功能。
参考文献
[1] 赵士达,张楠,杨爽. 地震时人口疏散模型研究[J]. 软件导刊,2013(5):6-8.
[2] 马志强.基于Android平台即时通信系统的设计与实现[D].北京:北京交通大学, 2009.
[3] 李宁. Android应用开发实战[M].北京:机械工业出版社, 2012.
[4] 豆瑞星.百度成立LBS事业部[J].互联网周刊, 2012,11(21):56-57.
[5] 郑云卿,黄琦.基于Android平台的软件自动化监控工具的设计开发[J].计算机应用与软件,2013,30(2):235-238.
[6] 彭璇,吴肖. Google Map API在网络地图服务中的应用[J]. 测绘信息与工程,2010,35(1):25-27.
[7] BURNETTE E. Hello, Android: introducing google’s mobile development platform[M]. American Pragmatic Bookshelf, 2009.
[8] 江燕良.基于Android智能终端的远程控制系统[J].电子技术应用,2012,38(8):129-132.