地震编目数据是测震台网产出的主要地震资料,用于地震预报、震情监视、科研等 (王兰兰等,2008)。地震编目数据需每日定时上传至中国地震局数据库 (常俊等,2011),用户通过访问JOPENS系统实现查询。大震应急时,非测震台网人员不熟悉JOPENS系统相关操作,无法及时获取最新数据,势必影响地震应急工作,且不利于防震减灾宣传工作。随着智能手机的普及和APP的大量应用 (李娜等,2015),地震目录移动终端发布成为现实,设计开发手机版地震编目查询软件,可提供便捷的查询方式,为大震应急、防震减灾工作提供支持。
1 平台架构和辅助程序 1.1 平台架构地震编目数据查询平台包括Web服务器、数据拷贝软件和Android APP软件3部分 (图 1),运转流程是:数据拷贝软件定时从测震编目数据库拷贝数据到查询平台数据库 (查询平台的数据源);客户端APP向Web服务器发送查询请求,Web服务器作为信息交换平台连接查询平台数据库实现查询任务,并将结果返回客户端,客户端解析并展示数据。该架构的优点是:① 将平台查询数据库与测震数据库分离,减少测震数据库访问量,确保测震数据安全、稳定;② Web服务器可提供手机客户端和浏览器双重访问方式。
![]() |
图 1 平台架构 Fig.1 Platform architecture diagram |
(1) 数据拷贝软件。测震编目数据库是测震台网的核心数据源,为保障地震数据安全,使用Java语言,开发设计数据拷贝软件 (与编目数据表结构一致),定时复制数据到查询平台数据库。复制时间间隔可自行设置,大震发生时可缩短间隔时间,实现数据的及时更新。
(2) Web服务器程序。该程序部署在Tomcat容器中,使用Java EE技术开发,并利用SSH框架搭建核心部分,服务器整体架构分为3层:控制器层、业务逻辑层和DAO层,Web服务器与手机客户端之间使用HTTP协议通信,借助JSON格式交换数据。JSON (JavaScript Object Notation) 是一种常用数据交换格式,不受系统平台限制,易生成、易解析,数据传输速度快 (李刚,2009),格式为:{"O_time":"2015-01-01 00:00:00", "Location_cname":"河北唐山"},其中冒号之前为字段名,之后为字段值,可以在一个大括号里包含多条数据。
2 平台设计手机客户端程序是地震编目数据查询平台核心软件,鉴于Android手机的通用性,选择在Android平台下开发客户端程序。Android是建立在Linux上的开放式移动操作平台,主要由操作系统、中间件、用户界面和应用软件组成,该系统采用软件叠层方式构建,具有层间分离,低耦合的优点 (李刚,2011)。
2.1 设计原理手机客户端是查询请求的发起者和查询结果的展示者。客户端调用Android开发包的HttpClient对象与服务器进行通信,返回结果以文本方式保存在手机SD卡,调用JSONObject对象解析数据,并使用列表、统计信息和百度地图 3种方式展示结果。客户端连接Web服务器的主要代码如下
HttpClient httpClient = new DefaultHttpClient ();
HttpPost httpPost = new HttpPost (url);
List < NameValuePair > params = new ArrayList < NameValuePair > ();
for (String key : rawParams.keySet ()) {
params.add (new BasicNameValuePair (key, rawParams.get (key))); }
post.setEntity (new UrlEncodedFormEntity (params, "gbk"));
HttpResponse httpResponse = httpClient.execute (httpPost);
if (httpResponse.getStatusLine ().getStatusCode () == 200) {
return EntityUtils.toString (httpResponse.getEntity ()); }
2.2 数据展示方式手机客户端面向用户提供3种展示方式,分别为:列表、统计信息和百度地图。
(1) 列表。列表是数据展示常用形式,直观反映地震“三要素”,包括发震时刻、纬度、经度、震级、深度、参考地名 (图 2)。
![]() |
图 2 列表数据展示 Fig.2 Show data by list |
(2) 统计信息。统计信息用于数据集整体描述,便于用户把握数据整体特征 (图 3),内容主要包括:地震个数和最大震级,及1.0级以下、1.0 — 2.0级、2.0 — 3.0级、3.0 —4.0级和4.0级以上地震个数。
![]() |
图 3 统计信息数据展示 Fig.3 Show data by statistic information |
(3) 利用百度地图直观展示地震分布区域。百度地图包括矢量地图、卫星地图等,通用、兼容性强,百度公司提供开发包供用户下载,便于开发者使用 (张波等,2015)。客户端采用颜色不同的圆形区分地震震级,3.0级以下地震用绿点表示,3.0 — 4.0级地震用蓝点表示,4.0级以上地震用红点表示 (图 4)。
![]() |
图 4 百度地图展示数据 Fig.4 Show data on Baidu Map |
用户登录查询平台后进入手机APP主菜单,可选择点击“当前目录”和“目录查询”,进行不同功能的查询。
当前目录。本功能主要用于地震应急,用户只需输入时间范围 (小时) 即可实现查询。该查询涉及默认的经纬度范围,可在配置文件中自行修改。查询结果以统计信息形式显示,便于用户整体把握数据概况,点击“查看详情”可得到数据列表,点击“查看地图”得到数据在地图上的分布状况 (图 3)。
数据查询主要代码如下
List < Catalog > catalogs = new ArrayList < Catalog > ();
List < Catalog > cl = catalogDao.query (o_time1, o_time2, lat1, lat2, lon1, lon2, ml1, ml2);
for (Catalog c : cl){
catalogs.add (new Catalog (c.getO_time (), c.getLat (), c.getLon (), c.getMl (),
c.getDepth (), c.getLocation_cname ())); }
return catalogs;
调用百度地图的主要代码如下
SpecialAdapter adapter = new SpecialAdapter (this, getItem (), R.layout.detail,
new String[]{"o_time", "lat", "lon", "ml", "depth", "locationCname"},
new int[]{R.id.o_time, R.id.lat, R.id.lon, R.id.ml, R.id.depth, R.id.locationCname});
lv = new ListView (this);
lv.setHorizontalScrollBarEnabled (true);
lv.setAdapter (adapter);
HorizontalScrollView hsv = new HorizontalScrollView (this);
hsv.addView (lv);
setContentView (hsv);
目录查询。本功能是对“当前目录”功能的补充,同样以统计信息、列表和百度地图形式展示数据,允许用户自行输入参数 (包括起始发震时刻、起始纬度、起始经度、起始震级和起始深度) 实现条件查询,并通过设定参数控制数据输出。目录查询与当前目录所用代码一致,只是将默认条件换成用户自行输入条件。
服务器地址修改。手机APP登录服务器需用到服务器IP地址,为避免修改服务器地址重新修改APP程序,客户端提供修改服务器地址功能,主要代码如下
etIp = (EditText) findViewById (R.id.ipAddressEditText);
if (!(sdUtil.isExist ())){ etIp.setText (sdUtil.readServerCfg ()); }
else{ etIp.setText ("192.168.1.100"); }
bnSubmit = (Button) findViewById (R.id.bnSubmit);
bnBack = (Button) findViewById (R.id.bnBack);
//绑定事件监听器
bnSubmit.setOnClickListener (new OnClickListener () {
public void onClick (View v) {
sdUtil.writeServerCfg (etIp.getText ().toString ());
Intent intent = new Intent (Ip.this, Login.class);
startActivity (intent);
finish (); } });
手机APP软件获取。手机客户端的APK文件存放在服务器,用户只需扫描二维码即可下载安装。二维码生成部分代码如下
int width = matrix.getWidth ();
int height = matrix.getHeight ();
BufferedImage image=new BufferedImage (width, height, BufferedImage.
TYPE_INT_ARGB);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
image.setRGB (x, y, matrix.get (x, y) == true? BLACK : WHITE); }}
3 平台应用地震编目数据查询平台设计完成后,在河北地震台网地震编目工作人员手机终端进行安装测试。以2015年9月14日河北唐山昌黎地区4.0级地震为例,此次主震后发生大量余震序列,利用该平台查询余震统计信息及分布区域,快速便捷。手机端部分余震分布Baidu地图显示结果见图 5。与传统余震分布的纸介质方式或幻灯片方式展示相比,该平台无须借助打印设备或投影设备展示,用户可随时利用个人手机查询最新结果,方便快捷。
![]() |
图 5 昌黎4.0级地震余震分布 Fig.5 The distribution of aftershock for Changli M 4.0 earthquake |
地震应急期间地震编目数据查询平台为我局工作人员提供便捷的地震编目数据查询服务,该平台的应用提升了地震编目数据的流转速度,节约了用户时间,为地震应急工作提供了有力支持。在软件开发过程中笔者发现以下问题:① 使用Eclipse作为开发与调试环境,发现自带虚拟设备调试程序速度较慢,有时发生退出现象,采用数据线直连手机,调试过程稳定、速度加快,且界面更直观;② 利用百度地图展示数据比Google地图速度快,二者调用方式接近,且使用百度地图可避免数据维护,故此平台选用前者用于展示地震分布。
常俊, 赵曦, 姬建中. 基于Oracle的地震数据共享方案设计及数据库实现[J]. 地震地磁观测与研究, 2011, 32(5): 143-147. | |
李刚. 疯狂Ajax讲义[M]. 北京: 电子工业出版社, 2009: 137-139. | |
李刚. 疯狂Android讲义[M]. 北京: 电子工业出版社, 2011: 2-3. | |
李娜, 周峰. 基于Android平台软件开发方法的研究[J]. 信息通信, 2015, 6: 38-39. DOI:10.3969/j.issn.1673-1131.2015.06.022 | |
王兰兰, 杨晶琼, 张雪玲, 等. 技术进步是提高编目质量的关键[J]. 地震地磁观测与研究, 2008, 29(4): 105-107. | |
张波, 赵双明. 基于Android平台的百度地图开发研究[J]. 软件导刊, 2015, 14(7): 96-99. |