JOPENS系统是按照中国“十五”期间《中国数字地震观测网络》项目测震软件CZ-01包需求分析开发的,目的是为了适应我国“十五”期间新建数字地震观测网络的发展要求,开发出具有国际先进水平、符合国际地震观测技术发展方向、能提供地震观测台站实时观测数据收集、传输、共享的实时数据流服务(李大辉等,2001)。SEED格式具有通用性和灵活性及数据编排科学合理的特点,便于测震数据的存储和管理。目前很多成熟的测震数据转换软件,大多面向最终用户的功能集成版本,提供图形化交互界面,不向外公开调用接口。而面向开发人员提供测震数据解析服务的工具类软件包领域,相比之下研究成果略少。刘坚(2012)提出基于ICE测震数据库通用网关的构建方法,结合分布式中间件技术,定义开发一系列读写操作测震数据库通用接口,其应用范围只限于JOPENS数据库。李铂(2009)提出采用面向对象的C++程序设计读取文件方法,研制SEED波形数据转换成ASCII文件的程序软件,应用范围受限于SEED文件。为灵活适用多种测震数据解析的应用场景,本文设计研发测震数据对象关系映射软件包。
软件包是基于Java面向对象语言开发的开源代码,具有开放性结构,拥有可继承,跨平台的优点,易于扩展进行二次开发。其技术架构继承自Jrdseed开源项目,充分利用国际流行的开源成熟软件,以相对小的代价换取较强的系统功能,达到事半功倍的效果。目前中国地震行业接触的测震数据大多以JOPENS数据库或SEED文件方式保存,软件包针对当前主流数据存储方式研发,可满足大多数情况下的数据提取需求。
1 软件包与接口定义测震数据对象关系映射软件包基于eclipse环境研发,在Jrdseed原有功能基础上进行继承、扩展、封装,实现便于调用的简洁统一接口。JOPENS数据库及SEED文件存储结构属于一维线性结构,利用解析、重构等算法处理流程,软件包实现测震数据从一维序列化空间到面向对象多维结构化空间的映射转换。通过调用软件包功能接口,Java程序员可忽略底层数据存储结构,采用对象化思维,随心所欲操作来自JOPENS数据库及SEED文件的测震数据,缩减重复开发的工作量。本文结合软件包功能需求,遵照面向对象简洁易用原则,开展外部接口设计。
类Eq_data与类Eq_stationdata统一存储3种数据来源查询结果,支持文件模式、流模式多种数据读取方式。其中,类Eq_data用于定义台网卷信息内存存储结构,类Eq_stationdata用于定义台站卷信息内存存储结构。类Reader_SEED实现SEED文件的对象关系映射,详细函数定义与功能说明见表 1。类Reader_database实现JOPENS数据库对象关系映射,详细函数定义与功能说明见表 2。
依据数据来源进行功能分解,将软件包划分为3个模块,分别是SEED文件分析模块,JOPENS数据库连续波形分析模块、事件波形分析模块。底层数据存储结构的差异性决定了数据处理流程的差异性,但忽略技术细节的考究,本质上,3种来源测震数据的解析算法大同小异:①根据用户数据提取需求定制数据过滤器;②读取数据源,使用过滤器完成数据筛选,满足条件的数据片段被存储在数据缓存区;③算法对缓存区内数据片段逐一进行解析,将台网、台站、通道等辅助信息进行对照匹配,按照相同辅助信息归类合并原则,逐步生成辅助信息的树形目录,同时将时间相邻的波形片段解码、拼接,以txt格式存储为单个数据文件。经过算法解析,辅助信息与波形数据文件的关联关系映射为面向对象的属性关系。
从数据源提取的数据存储格式为二进制,经过对测震数据块的充分解析梳理,去除冗余信息等操作,数据最终以内存中结构化的组织形式进行存储,数据信息间的逻辑关系更加简洁清晰,易于程序读取。
2 SEED文件分析模块地震数据交换标准(Standard for the Exchange of Earthquake Data)简称SEED,是国际地震数据交换的一种标准格式,帮助地震研究者以科学、规范的方式使用和共享地震数据(万永革等,1995)。
2.1 文件结构SEED文件包括SEEDVOLUMN文件和MINISEED格式文件,SEEDVOLUMN文件包括控制头段和波形数据2部分。MINISEED格式文件仅包括波形数据部分。
MINISEED数据包主要由固定头段、1个或2个子块序列组成的可变头段(通常是1000子块和1001子块)和数据区3部分组成。其中固定头段包括18个数据字段,前7个字段使用ASCII码,其余字段使用二进制代码(王秀文等,1994)。数据部分包含一个台站若干通道在一个有限时间段内连续记录的原始数据,即时间序列数据。每个数据记录的数据均以编码格式存放,MINISEED有多种编码格式可选,其中以FDSN台网编码格式最为广泛,本文选取其中的Steim2压缩格式(陈运泰等,2000)。
2.2 设计思路Jrdseed开源软件由ISTI开发,是rdseed应用程序的Java实现版本,支持rdseed核心功能,基于命令行界面提供包括SEED文件卷读写,SAC、CSS格式输出等服务。在其代码实现框架中,依照SEED标准的子块结构定义Blockette基类及众多子类,同时集成实现SEED文件格式解析类。在一次解析流程中,工厂类顺序读取SEED文件,对底层块数据进行识别,判断所属类型,在内存中初始化匹配的Blockette子类。类SEEDObjectContainer作为对象容器,存储管理解析流程中创建的Blockette子类。
软件包继承Jrdseed框架解析功能,对类SEEDObjectContainer中Blockette子类逐个进行算法解析与二次数据加工,完成SEED文件对象关系映射。
3 JOPENS数据库分析模块 3.1 数据库JOPENS系统使用数据库作为波形数据二级存储,存储系统接收和产出各种数据。JOPENS系统使用的数据库类型为目前世界上流行的开源数据库Mysql,当前使用的版本为Mysql5.1。Mysql是一个高性能、多线程、建立在客户—服务器结构上的RDBMS,已成为线上和线下适合于数据库驱动的应用程序最受欢迎的RDBMS之一(Vikram Vaswani,2004)。Java编程环境提供数据库驱动软件包,方便进行数据库查询操作。测震数据对象关系映射软件包使用mysql-connector-Java-5.1.13-bin.jar作为数据库驱动软件包。
3.2 设计思路深入研究JOPENS数据库数据规范可知,波形数据存储前被分割成大量离散序列化片段。数据片段的采集时间及所属台网、台站、通道等属性信息,分别以字段形式存储于数据库,字段名依次为Start_time、End_time、Net_code、Sta_code、Chn_code;数据片段则以miniSEED或SEED格式压缩编码,存储于waveform字段(图 1)。每个数据片段与相关属性信息构成一条表格记录。该记录方式具有存储、传输便捷的优势,但也不可避免地带来信息存储的冗余化与离散化,不利于连续时间段测震数据查询。
本文将数据库的数据关系模型归纳映射为“Eq_data”类与“Eq_station_data”类。按照具体情形,单个“Eq_data”可以包含一个或多个“Eq_station_data”。JOPENS数据库中离散的波形片段、属性信息经过算法的分析、比对、重组,被映射成面向对象语言中的对象属性,映射关系见图 1。
4 软件包引入与接口调用测震数据对象关系映射软件包以jar类库包形式为第三方程序提供数据解析服务,以eclipse为例,介绍软件包导入步骤。在eclipse软件包视图package explorer下,右键单击源代码所在工程文件夹,在弹出目录中选择build path→configure build path,在libraries选项卡中单击右侧按钮add external jars,按照软件包存放路径查找添加,即可将软件包配置到项目类库中。后续代码编写过程中,预先对软件包进行import声明,即可成功调用相关解析接口。
针对3种来源的数据提取场景分别编写测试实例,采用多选项卡界面与用户交互,程序界面截图见图 2。软件包产出的波形数据以txt文本明文存储,以“台网代码.台站代码.通道代码”的规则命名。软件包接口调用部分代码如下
import datasource.Reader_SEED; //引入工具类Reader_SEED
public void actionPerformed(ActionEvent arg0) {
if (arg0.getActionCommand().equals("读取数据")){
Reader_SEED reader=new Reader_SEED();
reader.setroot(text1.getText()+'/'); //设置产出数据的存放路径
reader.getdata (text.getText()); //调用软件包接口,对SEED文件进行对象关系映射
li.setText(reader.getStationList ()); //输出属性信息树形目录 }
}
5 结束语在深入研究JOPENS数据库存储规范与SEED文件格式的基础上,通过对国际成熟的SEED文件解析软件Jrdseed进行继承与功能扩展,完成测震数据对象关系映射软件包研发。该软件包针对JOPENS数据库事件波形、连续波形及SEED文件3种数据源的数据提取需求研发,将测震数据提取中涉及的繁琐底层解析过程封装起来,只提供一个简洁统一的调用接口,为软件开发人员提供灵活统一的测震数据解析实现方案。该软件包基于Java面向对象语言实现,具有开放性结构,拥有可继承、跨平台的优点,易于扩展进行二次开发。经多次实例调用验证,软件包能为测震相关软件研发提供多元化且高效便捷的数据解析服务,为测震数据共享工作提供有力的技术支撑。
陈运泰, 吴忠良, 王培德, 等. 数字地震学[M]. 北京: 地震出版社, 2000, 72-73. | |
李铂, 颜启, 石玉燕, 等. 采用面向对象编程方法实现SEED地震波形格式转化[J]. 华北地震科学, 2009, 27(3): 27-30. | |
李大辉, 韩磊, 黄文辉. LIS S系统在中国数字地震台网的应用设想[J]. 地震地磁观测与研究, 2001, 22(1): 63-67. | |
刘坚, 高景春, 戴苗, 等. 基于ICE中间件的通用测震数据库网关应用研究[J]. 地震地磁观测与研究, 2012, 33(2): 145-151. | |
王秀文, 姚立平, 赖德伦, 等. 地震数据交换标准[J]. 地震地磁观测与研究, 1994, 15(2): 1-80. | |
万永革, 李鸿吉, 姚立平, 等. SEED格式台站卷及带有可变头段节数据记录的实例剖析[J]. 地震地磁观测与研究, 1995, 16(5): 6 | |
Vikram Vaswani著, 路晓村, 徐小青, 等译. MYSQL完全手册[M]. 北京: 电子工业出版社, 2004: 4. |