2. 中国石家庄 050021 河北省地震局
2. Hebei Earthquake Agency, Shijia Zhuang 050021, China
随着2010年1月22日启动“国家地震烈度速报与预警工程项目”的启动,地震台网密度逐年加强,地震台站和设备数量逐年增长。因台站建设的环境需求造成大多数台站位置较为偏僻,设备维修人员日常巡台工作比较困难。目前几款主流导航软件不能满足需求,给日常巡台外业工作带来不便,基于Yii+Android开发的地震台站信息系统可解决此问题。
根据市场调查机构Kantar发布的2015年移动市场统计报告,Android系统在全球应用中占有主导性优势。在中国,Android市场占有率达到74%的份额,而IOS只有24.4%。另外,Windows Phone占有一定比例,但在中国份额仅1%。从数据看,Android平台主导移动产品市场,因此,基于Android平台开发的应用是移动市场主流。
Android是基于Linux系统(朱生等,2013;杨单等,2016)内核开发的移动操作系统,由应用程序层、应用程序框架层、中间件层和操作系统层4层叠层方式构建而成(耿东久等,2011)。Android系统(周辉等,2017)的叠层结构与当今主流Web开发中MVC架构设计思想一致,层与层之间完全透明,上层应用无需关心下层代码实现,可有效降低系统耦合性。手机终端和平板电脑携带方便,性能强大,日益深入人们的日常生活和工作,随着智能手机和平板电脑的不断发展,移动终端办公软件应用成为现代化办公的发展趋势。
1 系统设计在Android平台上设计开发基于Yii架构(岳雨俭等,2014)的地震台站信息系统。服务器采用MVC架构进行设计(刘宁等,2008),客户端采用Afinal框架,FinalHttp是网络通讯类,负责与服务器进行数据交互,通过Http请求(“GET”和“POST”)告知服务器客户端请求;服务器将请求地址分派到控制器,控制器整合参数,并传递到业务逻辑层进行处理;数据服务层负责数据库操作;业务逻辑层将处理结果返回Android客户端。系统设计分为数据库、服务器和客户端3部分,见图 1。
![]() |
图 1 功能框架 Fig.1 The function frame |
创建地震台站信息综合数据库,信息包括:台站位置(经纬度)、设备信息、联系人等。服务器运行台站信息系统后台程序,用于响应客户端操作和数据库更新、管理等。客户端用于查询地震台站信息和相关设备信息,还可以实时查询设备网络连通状态。
1.1 数据库数据库设计是系统根基,直接影响系统运行效率和运行成本。通过对测震台站、强震台站、烈度台站、前兆台站和信息网络节点等台站信息以及设备信息进行分析,建立基于MySQL的数据库。本系统共建立13个数据表,包括:测震台站信息表、测震设备信息表、信息节点台站信息表、信息节点设备表、前兆台站信息表、前兆台站测点信息表、前兆台站仪器运行信息表、前兆台站测项分量信息表、终端用户表、鹰眼记录表、经纬度修正表、设备断开记录表、设备状态表。数据库表说明见表 1。
![]() |
表 1 数据库表说明 Tab.1 The equipments table of database |
为了保证数据的完整性和一致性,前兆数据通过数据库同步模块与前兆管理系统数据库完全同步。
1.2 服务器端系统开发环境采用php5.4 + apache + yii4.6架构(龚成莹等,2013;周娜等,2014)。Yii是基于组件的高性能PHP5的Web应用开发框架,采用OPP(面向对象程序设计),组件功能丰富,包括:MVC、Web服务、widgets、DAO/ActiveRecord、caching、到主题化、等级式RBAC、I18N和L10N等,可以满足现今各种大型Web 2.0项目的应用开发。
Yii除采用主流的MVC(刘亚鹏等,2011)分层方法,还拥有一个前端控制器(应用),是指请求处理中的执行上下文。通过分析用户请求,并将其分派给相应控制器,以作进一步处理。图 2展示了一个Yii应用在处理用户请求时的典型工作流。
![]() |
图 2 Yii应用工作流 Fig.2 The workflow of Yii application |
其中:①用户在浏览器中访问URL:“http://xxxx/index.php?REQUEST_PARAMETER”,REQUEST_PARAMETE为请求参数,如本例中设置为“r=post/show&id=1”,Web服务器收到请求后,立即执行index.php入口脚本,并处理此请求(request)。当用户通过客户端(浏览器)向Web服务器发送请求时,用户请求信息通过客户端(浏览器)返回Web服务器;②Web服务器接收用户请求后,通过入口脚本(index.php)为用户创建应用实例;③应用实例(application)被创建后,通过request应用组件获取用户请求的REQUEST_PARAMETER(请求信息);④urlManager为应用处理组件,通过用户请求的URL和REQUEST_PARAMETER解析相应路由,即相应Controller(控制器)和Action(操作)。如本例中REQUEST_PARAMETER的post参数决定了请求控制器为post,通过PostController类创建控制器实例;⑤控制器实例被创建后,决定了Action的相关内容,即“show”操作,是控制器中的actionShow方法。Action被定义后,控制器创建并执行与其相关的filters(过滤器)实例,如:用户权限验证、访问控制、系统日志、异常处理等,若过滤器实例允许Action操作,则Action操作将被进一步执行;⑥控制器实例被创建后,作为一个分发器,根据用户请求来选择相应服务器对象(Model)和相应视图(View),不做数据处理,而是将业务逻辑交给Model进行处理。Model即为MVC架构核心,负责业务处理,最终返回视图数据请求。本例中Action创建了ID为1的Post模型;⑦服务器对象被创建后,根据视图请求,创建相应模型,Action通过该模型渲染一个视图(根据Post模型渲染一个show视图);⑧视图解析器(View)接收控制器发送请求,并将逻辑视图名称映射到相应视图显示文件上。如本例中,视图读取并显示Post模型属性;⑨通过控制器获知显示结果的视图文件,该视图通过模板数据(widget)产出结果,并通过response对象返回;⑩布局将进一步渲染response对象,并将结果返回视图。由Action完成视图渲染,将结果返回用户端。
1.3 客户端基于Android4.0(level 14)以上(朱小凡等,2013)版本,采用ADT为开发环境,选择JDK1.6版,在客户端嵌入百度地图(龙际梦等,2015)。百度地图SDK提供便捷地图数据接口,加载百度地图操作步骤具体如下。
(1)AndroidManifest配置。在AndroidManifest配置文件中添加开发密钥、权限等信息,代码如下
<meta-data android:name=" com.baidu.lbsapi.API_KEY" android:value=" 开发者key" />。
其中:开发者key在申请开发者身份后获取。
(2)添加所需权限。格式为 <uses-permission android:name=" 权限名称" />,权限信息见表 2。
![]() |
表 2 权限信息列表 Tab.2 The information table of authority |
以上仅为Android平台上百度地图api开发的常用权限配置(赵国峰等,2014;杨单等,2016),更多配置可参考百度地图api开发文档。
(3)添加地图控件。布局配置文件,代码如下
<com.baidu.mapapi.map.MapView
android:id=" @+id/bmapView"
android:layout_width=" fill_parent"
android:layout_height=" fill_parent"
android:clickable=" true" />
其中:“@+id/bmapView”为视图ID;“fill_parent”为地图布局设置,一般采取强制性满屏布局设置;“clickable”为是否允许点击。
(4)地图Activity。在创建应用程序时,初始化SDK引用Context全局变量,创建地图Activity,并管理地图生命周期,代码如下
public class MainActivity extends Activity {
MapView mMapView = null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
//获取地图控件引用
mMapView = (MapView) findViewById(R.id.bmapView); }}
其中:在使用SDK各组件初始化之前,通过getApplicationContext方法获取context信息,初始化工作完成后,通过setContentView方法实现引用。MapView是地图的视图类,可以响应屏幕触控事件,与服务器端进行地图数据的交互。此类中有4个生命周期操控方法,并必须按顺序执行,见表 3。
![]() |
表 3 权限信息列表 Tab.3 The authority table of MapView |
设备监听服务是本系统核心业务,监听服务结果分别保存在设备状态表和故障记录表中,表格参数见表 4、表 5,其中设备状态表记录设备最新状态;当设备发生故障(网络中断)时,系统将本次故障作为事件进行记录,即将故障发生的事件ID、开始时间、结束时间、故障持续时间以及设备ID记录在故障记录表中。设备状态及故障记录表中的状态标识同步更新。
![]() |
表 4 设备状态表 Tab.4 The status information table of equipment |
![]() |
表 5 故障记录表 Tab.5 The breakdown information table |
设备监听服务工作流程见图 3,主要流程如下:①服务初始化:读取设备状态表,获取设备状态标识、事件ID;②向设备发送状态请求;③接收设备状态回复,并与状态标识对比;④若相同,继续步骤②;⑤若statusflag为up,设备状态回复为down,则在故障记录表中添加一条新记录,记录事件ID、设备ID、开始时间,并将状态标识设置为down。若statusflag为down,设备回复为up,修改故障记录表中相应事件ID的结束时间和故障时间,并将状态标识设置为up,同时更新设备状态表。
![]() |
图 3 监听服务工作流程 Fig.3 The listening service workflow |
本系统主要对设备网络联通性进行监测服务。测震数采设备记录实时数据流,对网络联通性要求高,若链路发生中断或线路阻塞,必须第一时间进行故障响应处理。前兆数采设备能保存一段时间的数据,对网络联通性要求不高,一般为定时自动上传数据,当连接发生中断后,设备会自动连接服务器,并上传数据。另外,地震行业有些数据通过3G无线网络传输,数据传输按流量计费。
监听服务的响应时间和所需资源成正比,即监听服务的响应时间越高,监听服务占用的系统资源越大。因此,针对设备网络联通性的不同需求,分别设置秒级、分钟级和小时级监听服务,具体说明见表 6。
![]() |
表 6 监听服务说明表 Tab.6 The listening service table |
设备监听服务采用队列方式对设备发送状态请求,工作原理见图 4。由图 4可知,服务对设备状态的判断需要设备对监听服务做出回复,设备正常,回复监听服务时间一般约1 s;若设备未对监听服务做出正常回复,则认为该设备的网络链路发生故障。由于网络链路瞬间阻塞,网络设备通常发生瞬断,故障时间一般1—2 s。瞬断故障发生时,链路基本正常,此时响应故障机制显然不合理,因此在设备监听服务中增加故障判定机制。故障判定机制的处理结果一般需10 s返回请求结果,若故障判定机制也在设备监听服务队列中进行处理,则必然影响整体监听服务工作效率。
![]() |
图 4 设备监听服务工作原理 Fig.4 The working principle of listening service |
地震台站位置往往比较偏僻,尤其是测震台站和强震台站,有些台站甚至部署在山洞中,通过百度导航无法搜索到有效路径。因此,本系统引入百度鹰眼服务,通过记录路径轨迹,从而实现对偏远台站的路径规划和导航。鹰眼服务记录工作流见图 5。
![]() |
图 5 鹰眼服务工作流 Fig.5 The hawkeye workflow |
本系统一般在4G网络环境下工作,为了节省流量,降低通信费用,鹰眼服务非自动开启,只在导航功能启动时自动开启,导航服务结束后自动关闭,并保存鹰眼路径信息。鹰眼记录的路径数据保存在百度服务器上,每次调用轨迹数据时,需通过鹰眼记录时间签向百度服务器发送请求,从而获取路径信息。
3 应用效果地震台站信息系统包括服务器程序、客户端程序、数据库3部分。建立地震台站综合数据库,包括测震台站、强震台站、烈度台站、前兆台站以及信息节点相关信息,而且建立设备信息数据库及台站信息查询机制。系统支持分类查询、详细查询和模糊查询3种查询模式,如图 6所示,分别展示台站和设备的查询结果,其中:左图显示河北省前兆地磁台站查询结果,右图显示台站设备及状态查询结果。
![]() |
图 6 台站列表和设备列表截图 Fig.6 The screenshot of station and equipment |
3G网络和GP环境支持定位功能,可以直接查找台站位置,实现路径规划和导航功能。引入百度鹰眼服务,可增强偏远地震台站路径规划和导航功能。如河北省寨主沟地震台地处山区,位置偏僻,使用百度地图及添加鹰眼服务进行路径规划,路径导航截图见图 7,可见百度路径规划不完整(左图),而鹰眼服务路径规划规划完整(右图)。
![]() |
图 7 路径导航截图 Fig.7 The screenshot of navigation |
智能手机的数据处理能力和存储性能越来越强大,因其便捷性、灵活性以及易用性等特点,将逐渐成为日常办公的主要工具。
本研究尝试将地震业务应用在手机终端,使用效果明显,今后将就以下需求进一步开发,包括:①除监测设备网络状态外,进一步研究设备通讯和数据服务协议,实现对设备的数据服务、流服务进行监控;②进一步开发设备故障警报机制、故障报送机制;③进一步研究流体、形变、电磁等学科业务,研究学习各学科数据处理业务,以手机终端为控制台,远程调用业务数据服务,实现业务处理。
耿东久, 索岳, 陈渝, 等. 基于Android手机的远程访问和控制系统[J]. 计算机应用, 2011, 31(2): 559-561. | |
龚成莹, 邢敬宏, 胡银保. 基于JSON的android移动终端与PHP及MySQL数据通信[J]. 工业仪表与自动化装置, 2013(1): 63-65. DOI:10.3969/j.issn.1000-0682.2013.01.018 | |
刘宁, 陆荣国, 缪万胜. MVC体系架构从模式到框架的持续抽象进化[J]. 计算机工程, 2008, 34(4): 107-110. | |
刘亚鹏, 张征, 俞婷. 基于MVC多层架构的Web应用框架设计[J]. 微计算机信息, 2011, 27(7): 169-171. DOI:10.3969/j.issn.2095-6835.2011.07.067 | |
龙际梦, 刘宏建, 蔡中祥, 等. 主流网络地图应用开发API技术研究[J]. 北京测绘, 2015(3): 79-82. DOI:10.3969/j.issn.1007-3000.2015.03.021 | |
杨单, 何建安, 伍振华. 一种基于Android平台的智能导游系统[J]. 电子商务, 2016(2): 57-59. DOI:10.3969/j.issn.1009-6108.2016.02.028 | |
岳雨俭, 尹柯, 吴观茂. 一种基于YⅡ框架移动编程通信接口的设计于实现[J]. 计算机与数字工程, 2014, 42(12): 2428-2432. DOI:10.3969/j.issn1672-9722.2014.12.046 | |
赵国峰, 李丽, 李永红, 等. 12322地震速报短信服务系统设计与实现[J]. 地震研究, 2014, 37(1): 157-162. DOI:10.3969/j.issn.1000-0666.2014.01.023 | |
赵国峰, 李鑫, 李丽, 等. 中国地震信息网速报信息实时同步设计与实现[J]. 震灾防御技术, 2014, 9(2): 310-316. DOI:10.3969/j.issn.1673-5722.2014.02.017 | |
周辉, 王文青, 赵峰, 等. 基于Android的跨断层测距记簿程序的开发[J]. 现代电子技术, 2017, 40(1): 17-19. | |
周娜, 康凯, 李丽, 等. 中国地震信息网移动互联网服务研究与设计[J]. 地震研究, 2014, 37(3): 484-488. DOI:10.3969/j.issn.1000-0666.2014.03.024 | |
朱生, 牟星亮, 单康康. 基于Android平台的应用程序开发研究[J]. 网络安全技术与应用, 2013(10): 46-47. DOI:10.3969/j.issn.1009-6833.2013.10.031 | |
朱小凡, 梅明, 熊婷, 等. Android移动终端与服务器数据传输的研究[J]. 武汉冶金管理干部学院学报, 2013, 23(1): 66-70. DOI:10.3969/j.issn.1009-1890.2013.01.022 |