2) 中国山西 030025 太原大陆裂谷动力学国家野外科学观测研究站;
3) 中国山西 030082 山西省应急管理厅
2) National Continental Rift Valley Dynamics Observatory of Taiyuan, Shanxi Province 030025, China;
3) Emergency Management Department of Shanxi Province, Shanxi Province 030082, China
近年来,随着“一县一台”工作的深入推进,山西省各市县加大地震监测台站的建设力度,市县新建地震监测台站越来越多(刘瑞丰,2016),同时,对各级监测台站的规范化管理、运行考核提出了更高要求。根据山西省市县地震前兆监测台站名录中的三级考核台站分类,其中省级和市县级地震台站共涉及前兆仪器80余套,相关信息及数据记录存储在区域中心的3个数据库中。目前,山西省信息安全及市县2个数据库中共收录地震前兆监测仪器180多台套,而区域中心主库收录147台套,仪器数量较多,不易进行统一快速查询。本方案基于山西省地震局区域中心市县前兆数据库,通过创建数据库表、新增视图,并依据山西省“市县地震前兆监测台站名录”三级考核台站的测项信息进行分类,最终实现山西地震前兆台站测项分类查询及管理功能。
1 现有模式、存在问题和需求分析地震监测是有效进行预测预报的基础,是防震减灾工作的重中之重。随着“一县一台”工作的深入推进,对市县地震台站的规范化管理、运行考核提出更高要求。尤其是监测数据、信息的及时汇集、报送,以及相关信息的汇总等,成为地震部门年度防震减灾考核工作的重要依据。
在地震监测日常管理及年度防震减灾目标考核工作中,需对山西省各市县地震台站前兆数据运行情况进行分类统计。目前现有系统,均通过山西地震前兆监控软件进行汇集统计并导出报表,人工查询考核名录内涉及的测项,对产出结果二次加工,提取所需信息进行分类汇总。山西各级地震监测台站(国家级、省级、市县级)考核测项信息存储在山西地震前兆台网的区域中心主库、信息安全库及市县库等3个数据库中,这种模式存在以下问题:①台站及测项未按类别进行划库归类,分布上较为分散,不易进行统一管理与信息快速提取;②导出的传统报表无法将各级监测台站的测项进行直接分类;③日常工作及年度考核工作中信息查询不便,人工统计易出错,统计时间长且相对繁琐。
为准确查询并及时汇总日常及年度考核工作各项信息,实现各级地震部门对测点运行情况的高效监控和科学管理,需在区域中心前兆数据库结构基础上创建数据库表,新增相应功能,并对数据汇集、数据库参数及基础信息查询等进行相应优化及改进。基于此,在山西各前兆台站测项信息基础上,依托区域中心市县数据库建立数据汇集,按照“市县地震前兆监测台站名录”分类管理,实现国家级、省级、市县级考核台站的测项等信息的快速分类查询,进而达到日常分类管理及提高工作效率的目的,进一步提升山西地震前兆台网台站管理能力。
2 地震前兆数据库结构设计原则鉴于地震前兆观测方法、观测仪器、采样率以及观测结果的复杂多样性,涉及形变、流体、电磁3个学科几十个观测项目上百种观测仪器,采样间隔从日、时、分到秒。因此,地震前兆数据库结构设计也比较复杂(周克昌等,2010;王红蕾等,2017)。
按照《地震前兆数据库结构规范第一部分:固定台站观测》要求,地震前兆台网各级节点的数据库结构应保持一致,以便于数据库层面上的数据交换、分布式数据库系统的构建以及应用软件开发。
2.1 建库原则地震前兆数据库结构设计原则要遵循库、表结构一致性原则、交换一致性原则、数据信息关联性原则以及命名一致性原则。建立的数据库将模拟前兆数据、数字化原始前兆数据、数字化预处理前兆数据、流动观测数据(水准、重力、跨断层场地、GPS、地磁、地电、流体等)、产品数据放在同一库中进行管理,不同类型的数据表通过表名标识。
2.2 建表原则表包括数据表、日志表和数据字典表3大类。
数据表和日志表按模拟观测和数字化观测2种方式分别建立2套表。对于每一套表,数据表以测项分量为最小管理单元,按测项和采样率分别建表,将不同台站相同测项相同采样率的数据放在一个表中。按采样率分别建日(均)值表、小时值表、分钟值表、秒值表、事件数据表。
日志表包括观测日志表、仪器运行日志表和工作日志。前两者与数据表相对应,按测项建表,将不同台站相同测项(仪器)的日志条目放在一个表中。每个节点建立一张工作日志表,工作日志以节点为单位,一天的工作日志为一条记录。
数据字典表包括存放与观测数据有关的各种信息的辅助表。对于每个包含以上前兆数据表的数据库,应建立一套数据字典表。
2.3 关系数据库中表之间的联系通过关系实现。关系是整个数据库的灵魂,将数据库中的各表关联为一个有机整体,满足各种业务需求。例如,数据表与基础信息表、数据表与日志表之间通过台站代码、测点编码和测项分量代码实现关联,仪器信息表之间通过仪器代码和仪器ID实现关联。各表之间的关系见图 1。
根据中国地震前兆数据库结构规范,将山西地震前兆国家级、省级、市县级台站涉及的所有测项(包括区域中心主库、信息安全库和市县库)台站名称、台站代码、台站级别、测点编码、运行参评、仪器名称、仪器型号、学科、仪器类型、跟踪参评、仪器开始观测时间、运行状态、台站分类、台站管辖、市县考核、数据库参数、备注等信息录入考核评估清单。
3.2 服务端以省地震局区域中心现有市县数据库服务器作为服务端,服务端操作系统采用Suse Linux Enterprise 11 SP3,数据库软件版本采用Oracle 11 g,安装中国地震前兆台网数据管理系统(区域版)。为实现市县考核的评估及分类查询功能,按照中国地震前兆数据库结构规范进行设计,已有数据库结构保持原样,在市县数据库基础上建立数据汇集,通过创建相关数据库表及视图,对台站测项信息进行分类录入,实现各级监测台站分类查询、运行评估等功能。
使用SQL语言,实现新增字段、创建数据库表和评估清单视图等功能。在服务端市县数据库表(QZ_TEMP_STATIONITEMSCOUNT)中新增(DATABASEPARA)字段,增加数据库参数信息,该字段的主要功能是,区分台站测项数据来源数据库。核心程序为:
-QZ_TEMP_STATIONITEMSCOUNT新增DATABASEPARA字段
CREATE TABLE “QZDATA”.”QZ_TEMP_STATIONITEMSCOUNT”
新增字段示例见图 2,其中数据库参数:1表示区域中心主库;2表示信息安全库;3表示市县库。
新增一张数据库表(QZ_DICT_EVALUATION_TABLE),表为字典表,主要记录测项基础信息,用于数据汇聚、运行评估及报表制作使用。核心程序为:
-市县评估清单QZ_DICT_EVALUATION_TABLE创建语句
CREATE TABLE “QZDATA”.”QZ_DICT_EVALUATION_TABLE”
创建的数据库表见图 3,其中市县考核参数:1表示国家级;2表示省级;3表示市县级;0表示不在市县考核范围内。
新增字段及创建的数据库表与现有台站及仪器进行关联,通过关联结果创建视图(QZ_TEMP_EVALUATION_VIEW)。创建的视图包含台网运行监控所需有关测项基础信息及运行评估等信息。核心程序为:
-市县评估清单视图
CREATE OR REPLACE FORCE VIEW “QZDATA”.”QZ_TEMP_EVALUATION_VIEW”
创建的评估清单视图示例见图 4。
通过新增数据库表、字段及视图,实现了台站测项的分类管理及运行评估功能,也为之后分类管理查询、动态更新及报表导出搭建了基础。
3.3 客户端客户端主要功能是,基于山西地震前兆台站数据监控分析软件,计算各测项缺测个数及优化基础信息,将3个数据库中每套仪器、每个测项运行率、连续率、完整率计算结果写入新建市县数据库表QZ_DICT_EVALUATION_TABLE。在此基础上搭建Python开发环境,进行客户端相应功能的优化改进。由于Python功能强大、类型安全,且面向对象,易于使用解释器及其他工具实现应用程序的快速开发。因此,在优化改进过程中,使用Python语言编写脚本,实现山西地震前兆台站的分类管理查询、动态更新及运行评估报表查询等功能,并对数据汇集、数据库参数及基础信息查询等进行相应的优化改进。
4 功能实现 4.1 脚本编写为了实现各级地震监测台站的分类查询、动态更新、观测数据连续率计算报表导出等功能,需新建2个Python脚本,分别具有信息的导入、导出功能。考核清单需定期更新,而通过数据库操作相对复杂。为此,利用Python脚本,导入.CSV文件中的考核评估清单,即可简单实现考核清单的更新。
导入脚本核心内容如下:
with open(“山西局前兆台网运行仪器清单.csv”, ”r”) as csvfile:
read = csv.reader(csvfile)
for row in read:
print(row)
sql_insert = “Insert into QZ_DICT_EVALUATION_TABLE (台站名称, 台站代码, 台站级别, 测点编码, 运行参评, 仪器名称, 仪器型号, 学科, 仪器类型, 跟踪参评, 仪器开始观测时间, 运行状态, 台站分类, 台站管辖, 市县考核, 数据库参数, 备注) values (‘”+row[0]+”’, ’”+row[1]+”’, ’”+row[2]+”’, ’”+row[3]+”’, ’”+row[4]+”’, ’”+row[5] + “’, ’” +row[6]+”’, ’”+row[7]+”’, ’”+row[8]+”’, ’”+row[9]+”’, to_date(‘” +row[10] + “’, ’MM/DD/YYYY’), ’” +row[11]+”’, ’”+row[12]+”’, ’”+row[13]+”’, ’”+row[14] +”’, ’” + row[15]+”’, ’’)”
执行程序后,所有信息通过代码插入数据库,完成评估清单导入。导入窗口见图 5。
导出脚本核心内容如下:
printHeader = True # include column headers in each table output
# output each table content to a separate CSV file
csv_file_dest = “山西局前兆台网运行仪器评估结果.csv”
outputFile = open(csv_file_dest, ’w’, newline=’’) # ‘wb’
output = csv.writer(outputFile, dialect=’excel’)
startdate = input(“input startdate(: YYYY-MM-DD): ”)
enddate = input(“input enddate(: YYYY-MM-DD): ”)
sql = “SELECT台站名称, 台站代码, 台站级别, 测点编码, 仪器名称, 仪器型号, 学科, 台站分类, 台站管辖, 市县考核, 数据库参数, AVG(运行率), AVG(连续率), AVG(完整率) FROM QZ_TEMP_EVALUATION_VIEW WHERE to_char(运行日期, ’YYYY-MM-DD’)>=’”+ startdate + “’ AND to_char(运行日期, ’YYYY-MM-DD’)<=’” + enddate + “’ GROUP BY台站名称, 台站代码, 台站级别, 测点编码, 仪器名称, 仪器型号, 学科, 台站分类, 台站管辖, 市县考核, 数据库参数”
my_dsn = cx_Oracle.makedsn(“10.14.*.*”, 1521, sid=”PDBQZ”)
执行程序后,在导出窗口中输入需要查询的评估结果的开始时间、结束时间,自动查询并导出评估结果,见图 6。
通过在数据库创建相关表及视图,编写Python脚本,最终实现如下功能:①监测台站分类查询功能;②监测台站动态更新功能;③监测台站观测数据运行率、连续率及完整率计算功能;④监测台站观测数据评估结果报表导出功能;⑤监测台站数据库参数、基础信息查询功能。
经实践检验,在日常实际工作中,通过执行上述导入、导出脚本,即可在监控软件导出的评估结果文件中完成对国家级、省级、市县级考核台站测项的快速分类查询及管理。具体评价结果查询界面见图 7,基础信息查询界面见图 8。
山西地震前兆台站分类管理方案是在地震前兆数据库结构规范基础上进行设计的,通过在区域中心市县数据库中创建数据库表、视图的基础上,编写Python脚本新增相关功能,进而实现各级监测台站的分类查询、动态更新等功能。该方案优化了日常功能需求,达到了设计要求。从实际运行效果看,在日常管理及各类基础信息查询工作中操作简单,与传统信息查询方式相比,节约了大量人力,工作效率提高;新增动态更新功能,方便对台站仪器测项的添加、修改及删除。山西地震前兆台站测项分类查询及管理设计方案,可为日常管理及年度考核工作提供便利。
刘瑞丰. 中国地震台网的建设与发展[J]. 地震地磁观测与研究, 2016, 37(4): 封二. |
王红蕾, 冯录刚, 边鹏飞, 等. 地震监测信息综合数据库建设[J]. 地震地磁观测与研究, 2017, 38(6): 122-130. |
周克昌, 蒋春花, 纪寿文, 等. 地震前兆数据库系统设计[J]. 地震, 2010, 11061106(2): 143-151. |