王静怡,罗治国
(1.西安理工大学 工程训练中心,陕西 西安710054;2.陕西省地震局台网中心,陕西 西安710068)
3G的普及、无线网络的发展及智能手机的价格持续走低为手机上网奠定了较好的使用基础,促进网民对各类手机应用程序的使用,尤其为网络接入、终端获取受限的人群提供接入互联网的可能。截至2013年12月,我国手机网民规模达5亿。而手机地图将成为生活信息服务的重要入口,截止到2012年12月,中国手机地图在手机网民中的渗透率达 35.4%[1]。
怎样利用3G手机的优势,充分利用手机地图快速、直观地显示震情要素,更好地为防震减灾服务,成为了科技工作者需要关注的问题。
为提高SMS短信及手机地图的综合应用,实现了基于Baidu Maps的地图可视化的Android手机震情显示系统,从SMS短信中获取信息并在Baidu Maps中显示出来,实现了震情信息的显示和地图方式的切换等。
Android是一种以Linux为基础的开放源代码操作系统,主要用于便携设备。Android操作系统最初由Andy Rubin开发,最初主要支持手机。2005年由Google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上。
Android软件栈由图1中所示的元素组成。Android提供了常用软件都会使用到的框架:用于控制活动的生命周期的活动管理器(Activity Manager)、用于为活动构建用户界面的视图(View)、提供一种一致的和非打断性的机制来通知用户的通知管理器 (Notification Manager)、应用程序共享数据的内容提供器(Content Providers)和支持非代码资源的具体化的资源管理器(Resource Manager)等。这些是所有Android应用程序的架构基础[2]。
Android通过SQLite为每一个应用程序提供了一个轻量级的关系数据库。应用程序可以利用这个托管的关系数据库引擎来安全高效地存储数据。
百度地图移动版API是一套基于移动互联网设备的应用程序接口,支持iOS/Android平台。通过该接口,可以轻松访问百度服务和数据,构建功能丰富、交互性强的地图应用程序。该API支持GPS、A-GPS和WiFi定位,定位速度快于谷歌地图。
图1 Android软件栈
系统结构如图2所示,分为后台服务及前端显示两部分。后台服务用于分析由陕西地震台网中心通过移动MAS机或者短信猫池发送的包含震情信息的SMS短信,获得震中位置(经纬度及震中地名)、发震时刻、震级等相关震情要素。借助移动网络(GPRS、3G、WiFi等)或者Baidu离线地图,将获得的震中位置在Baidu Maps的MapView中显示出来,并实现拖动、缩放地图及卫星地图切换显示等。卫星地图可显示震中位置及其周边地形环境,可对震情对人群的影响、灾害可能产生的大小有一个预评估。
Android平台有着严格的安全机制,位置服务、手机地图服务等操作需在AndroidManifest.xml文件中申明相关的权限。GPS要获取ACCESS_FINE_LOCATION等权限,百度地图需 ACCESS_NETWORK_STATE、WRITE_EXTERNAL_STORAGE等权限,收到短信启用相关服务需要设置RECEIVE_SMS等权限[3]。
图2 系统结构
在Android中,Intent作为一个系统级的消息传递机制,可在进程间发送结构化消息,后台监听程序可通过实现BroadcastReceiver来监听和响应应用系统内的这些Broadcast Intent[2]。
当提取参数成功后,以ContentValues的方式将参数信息写入SQLite数据库,同时弹出提示框,提示收到新的地震信息。图3为接收到一条地震消息。
图3 接收到一条地震消息
图4 系统主窗口
系统主窗口如图4所示。当打开系统主界面时,使用ContentProvider从SQLite数据库中读取已存入的震情信息,以ListView的形式显示出来。该Activity通过实现Comparator接口的方式对已读取的震情信息列表按发震时刻或者震级大小排序。
震中的定位使用经度和纬度来确定,在Android中的GeoPoint类代表了一个地点的经纬度,函数格式为:GeoPoint(int latitude×1E6,int longitude×1E6),E6 是纬度,即度数乘以106。
地震图用以在地图MapView上显示多数地震。该图层使用getDrawable方法按震级大小获取系统事先定义的代表不同震级的大小和颜色各异的icon,传递给扩展了的ItemizedOverlay这个覆盖物的抽象基类,实现不同震级、不同图标及震级大小标注显示等。图5为图层显示多数震情信息。
图5 图层显示多数震情信息
地震详情模块通过Intent的方式获取一条震情的要素,并通过Overlay这个覆盖物的抽象基类,在图层上显示该条震情信息,同时MyLocationOverlay覆盖物图层通过网络或者GPS定位的方式获取当前位置用以计算震中距,如图6所示。
计算震中距的方法如下,lat1、lng1代表震中的经纬度值,lat2、lng2为获取的当前位置的经纬度值:
图6 卫星视图显示震情详情
针对现有的震情发送主要通过SMS短信的特点,通过截取震情信息短信内容在Baidu Maps上的显示并集中管理,较好地解决了过去陕西台网震中图靠彩信发送、手机接收容易出错、震中图显示像素有限而无法缩放、耗费手机流量等不足。结合Baidu离线地图(缓存地图),在使用少量流量的情况下可以获得更加详细的卫星视图,内容更加丰富。该接收系统可较好地应用在应急救援及灾害初评等方面的防震减灾服务上。
[1]CNNIC.第33次中国互联网络发展状况统计报告[R].2014:18,78.
[2]Reto Meier.Android 4高级编程(第 3版)[M].北京:清华大学出版社,2012.
[3]刘安战,贾晓辉.基于Android的私密短信系统设计与实现[J].微型机与应用,2012,31(17):51-56.