-
随着中国经济高速发展,非天然地震事件发生率逐步上升,近年来国内发生的多起非天然事件造成了人员伤亡和财产损失[1]。为提高地震监测和信息服务水平,拓宽地震监测台网服务领域[2],中国地震局监测预报司相继印发中震办函〔2019〕101 号《关于试行开展非天然地震事件信息专报的通知》和中震测函〔2020〕4 号《关于做好全国冲击地压矿井地震监测与信息服务工作的通知》等文件,将非天然地震事件速报列入地震监测范围。2020年河北省煤矿安全监察局、河北省应急厅、河北省地震局联合印发《河北省建立冲击地压矿井地 震信息共享机制实施办法》,要求省地震局在第一时间将发生在省内各煤矿附近的冲击地压事件信息报送至省煤监局和省应急厅。自非天然事件速报业务启动至今,河北省测震台网已完成多次省内非天然事件速报任务,通过参与非天然地震事件的处置发现,非天然地震事件处置存在以下几点难题:①非天然事件处置要求时效性高,短时间内手工完成压力大;②对事发地附近空间地理信息查询不便,展示方式单一;③历史报告管理混乱、查询不便。
地震业务融入应急部门后,更快、更准、更清晰地提供非天然地震事件服务已成为亟待解决的问题。人工撰写和查询、单一展示已无法满足工作需求,研发软件实现快速产出、多维展示、便捷查询和妥善保存,可满足准确、高效、及时服务的工作要求。
-
根据中国地震台网中心相关文件规定,河北测震台网需在震后8 min内完成属地M≥3.0(唐山M≥2.0)或者有AU产出的非天然地震事件初报,震后20 min完成其他情形的非天然地震事件初报;初报完成后30 min内将事件报告报送中国地震台网中心。事件报告模板(图1)包括:标题、事件基本概述、震中分布图、事件附近地名、台站记录、台站分布图、事件波形图和事件特征等信息。报告撰写时标题、事件基本概述和事件附近地名可从地震速报信息中获取;震中分布图、台站分布图、事件波形图和台站记录从编目软件中获取;事件特征则根据值班员以往经验填写。除撰写报告外值班人员还需协助其他部门提供事件周边台站、历史地震、矿企位置及距离等信息。
根据上述需求分析及安全访问要求,本平台需实现报告产出与管理、地图服务、访问控制和辅助数据(台站、历史地震和矿企信息)管理等功能。
-
平台采用SpringBoot框架开发,利用该框架提供的各种Starter,用户可有效避开大量繁琐配置,简化开发过程[2]。平台整体架构自下而上分为6层(图2),其中:①实体类,为便于实现数据持久化,将数据库中所有的表映射为实体类并提供setter和getter方法;②数据访问层,因本平台涉及到的所有数据库表操作以CRUD为主,故直接使用JPA封装好的方法,该方式可以减少代码量,遇到较复杂的查询操作直接用@query标签调用原生SQL语句即可;③业务逻辑层,因数据访问层的操作都属于原子操作,当需要整合多个原子操作或实现非数据库操作时则需要借助业务逻辑层来实现;④控制层,这是整个框架的控制器,负责接收前台的请求,调用业务逻辑层完成各类操作同时返回结果给表现层;⑤表现层,该层属于前台部分,负责提供表单数据给控制层并将控制层传回的结果进行展示;⑥shiro层,该层负责为上述各层提供安全控制策略,防止各类非法访问和非法操作。
-
1) 信息采集。报告产出流程如图3所示,值班员把速报信息粘贴到“信息采集界面”,平台即可解析提取相关数据,用户确认无误后提交数据库。
2)报告产出与管理。报告文本生成可利用POI技术,该技术是Apache基金会的开源项目,主要为Java语言提供API操作doc、docx、xls等格式的数据。平台从数据库中读出上一步产生的非天然事件记录,调用“文档格式配置文件”和“文档内容模板”产出报告,具体步骤为:①读取“文档格式配置文件”获得文档的格式信息,包括字体、字号等;②调用POI里面的XWPFDocument创建空文档;③创建文档标题、内容、图和图标题等部分,读取“非天然事件记录”,按照“文档内容模板”将其中的占位符替换为真实数据。生成后的报告具有唯一reportId,产出后的报告以“年月日时分秒_参考地名_震级_事件类型.docx”的格式命名,如“19700101000000_河北xx市xx县_2.0_塌陷. docx”,报告保存在服务器端,存储路径保存在数据库中,在报告管理页面有“已生成报告”的下载链接,用户可自行下载。
3) 图片管理。除管理事件报告外平台还提供事件相关图片管理,包括:震中分布图、台站分布图和事件波形图等,用户可自行上传,上传后的图片命名方式与报告命名方式一致,同时提供图片下载功能。
4) 事件信息管理。对已生成的事件信息进行浏览、查询、修改和删除操作。
该部分主要代码如下:
// 创建主标题
public static void createTitle(XWPFDocument document, String repalceStr) throws IOException, ParseException{
XWPFParagraph mainTitle=document.createParagraph(); // 指定段落对齐方式
mainTitle.setAlignment(ParagraphAlignment.CENTER);
XWPFRun r_mainTitle=mainTitle.createRun();
r_mainTitle.setText(repalceStr); //字号
r_mainTitle.setFontSize(DocConstants.TITLE_FONT_SIZE); //字体颜色
r_mainTitle.setColor(DocConstants.TITLE_FONT_COLOR); //字体
r_mainTitle.setFontFamily(DocConstants.TITLE_FONT);//加粗
r_mainTitle.setBold(true);
}
// 创建正文
public static void createParagraphContent(XWPFDocument document, String repalceStr) throws IOException, ParseException{
XWPFParagraph paragraph1_content = document.createParagraph();//指定段落对齐方式
paragraph1_content.setAlignment(ParagraphAlignment.THAI_DISTRIBUTE); //首行缩进
paragraph1_content.setIndentationFirstLine(533);
XWPFRun r_paragraph1_content=paragraph1_content.createRun();
r_paragraph1_content.setText(repalceStr); //字号
r_paragraph1_content.setFontSize(DocConstants.PARA_CONTENT_FONT_SIZE); //字体颜色
r_paragraph1_content.setColor(DocConstants.PARA_CONTENT_FONT_COLOR);//字体
r_paragraph1_content.setFontFamily(DocConstants.PARA_CONTENT_FONT);
}
-
根据需求分析,本平台需要提供地图服务显示主震、台站、历史地震、矿企及主震周边其他设施并计算上述点位与主震的距离。地图上位置的标识主要依靠经纬度数据,平台提取非天然地震事件信息时已获得事件的经纬度信息,台站等点位的地理信息则由“2.4辅助数据管理”部分提到的功能获取。地图上除标识位置外还需显示各点位的基本信息,如台站名称,历史地震震级、发震时刻,矿企名称、地址、联系人等信息。因历史地震和台站数量较多,为提高查询精准度设置5个控制参数来筛选数据。这5个参数是:目录最小震级、目录距离范围、台站距离范围、矿企距离范围和覆盖区域半径。
在代码层面,首先获取非天然事件信息,根据其经纬度及上述5个控制参数筛选出符合条件的矿企信息、台站信息和历史地震,并分别计算上述信息中的各个点位与主震之间的距离(图4);再封装好这些信息,传递到页面展示。除矿企、台站和历史地震信息外,还提供周边其他地理位置的展示,如学校、企业等(图5)。
该部分主要代码如下:
// 地图展示:
var map = new BMapGL.Map('container');
map.enableScrollWheelZoom(true);
const scaleCtrl = new BMapGL.ScaleControl(); // 添加比例尺控件
map.addControl(scaleCtrl);
const zoomCtrl = new BMapGL.ZoomControl(); // 添加缩放控件
map.addControl(zoomCtrl);
const cityCtrl = new BMapGL.CityListControl(); // 添加城市列表控件
map.addControl(cityCtrl);
var optsF = {
width : 400, // 信息窗口宽度
height: 200, // 信息窗口高度
title : "矿企信息", // 信息窗口标题
message:"矿企信息"
}
var optsS = {
width : 200, // 信息窗口宽度
height: 100, // 信息窗口高度
title : "台站信息", // 信息窗口标题
message:"台站信息"
}
var optsC = {
width : 200, // 信息窗口宽度
height: 200, // 信息窗口高度
title : "编目信息", // 信息窗口标题
message:"编目信息"
}
var optsE = {
width : 200, // 信息窗口宽度
height: 100, // 信息窗口高度
title : "震中信息", // 信息窗口标题
message:"震中信息"
}
[[${datas}]];
// 基本信息展示
<div>【震中附近矿企([[${f_d}]] KM范围内)】</div>
<div><table border="1"><thead><tr>
<th>序号</th>
<th>距离震中距离(km)</th>
<th>矿企名</th>
<th>地址</th>
<th>经度</th>
<th>纬度</th>
<th>联系人</th>
<th>手机号码</th>
</tr></thead> <tbody>
<tr th:each="factory : ${factorys}" th:object="${factory}" th:align="center">
<td th:text="*{factory.id}"></td>
<td th:text="*{distance}"></td>
<td th:text="*{factory.factoryName}"></td>
<td th:text="*{factory.address}"></td>
<td th:text="*{factory.lon}"></td>
<td th:text="*{factory.lat}"></td>
<td th:text="*{factory.contacts}"></td>
<td th:text="*{factory.mobilephone}"></td>
</tr></tbody></table></div>
-
除为非天然事件提供地图服务外,还为台站、历史地震和矿企提供了地图服务。服务方式包括条件查询数据和条件查询地图,用户可根据需要自行选择。其中,历史地震的查询以数据的发震时刻、经纬度、震级等为查询条件,台站和矿企信息查询则是以台站名和矿企名为查询条件。
-
本系统采用Shiro框架提供访问控制策略,该框架是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理操作[3]。为满足Shiro框架的要求,平台设计了用户、角色、权限3个主要实体,并设计用户角色和角色权限2个中间实体来关联3个主要实体。该设计方式既实现了实体之间的关联也降低了实体之间的耦合度。
访问控制决定了平台的安全访问,平台的访问控制策略(图6)由系统的控制层来实现,平台中的每个功能拥有唯一权限,用户的访问路径就是平台的权限路径,如用户添加功能的访问路径为/user/add,其权限路径也是/user/add。用户调用某个功能时会首先对比用户访问路径与权限路径,如两者一致将执行相应业务逻辑操作,并在页面展示数据;如不一致则直接跳转到错误页面。
-
辅助数据管理就是平台对台站数据、历史地震数据和矿企数据的管理,这3类数据对于地图服务起到辅助效果。此部分多数功能为基本CRUD操作,在代码层面此类操作主要依赖JPA实现,JPA继承自org.springframework.data.jpa.repository.JpaRepository,该类已经实现了绝大部分CRUD操作,如:
List<T> findAll();
List<T> findAll(Sort var1);
List<T> findAllById(Iterable<ID> var1);
<S extends T> List<S> saveAll(Iterable<S> var1);
void flush();
<S extends T> S saveAndFlush(S var1);
void deleteInBatch(Iterable<T> var1);
void deleteAllInBatch();
T getOne(ID var1);
<S extends T> List<S> findAll(Example<S> var1);
<S extends T> List<S> findAll(Example<S> var1, Sort var2);
用户使用时直接继承该类,在自己的代码里调用这些方法即可,如需使用没有被定义的方法,可以按照“约定方式”命名新方法。如以name字段名为查询条件查询Factory类就可以命名为“findByFactoryNameLike”;或者采用原生SQL方式进行查询,如“@Query(value = ‘select * from events c where c.otime>=?1 and c.otime<?2 and c.mag >=?3 and c.mag< ?4’,nativeQuery = true)”。本部分涉及到的具体功能见表1。
表 1 各模块功能
Table 1. Functions of each module
模块名 功能点 模块名 功能点 模块名 功能点 历史地震管理 历史地震查询数据 台站信息管理 台站查询 矿企信息管理 矿企添加 历史地震查询地图 台站批量导入 矿企修改 历史地震批量导入 台站添加 矿企删除 历史地震添加 台站修改 矿企查询 历史地震删除 台站删除 矿企数据列表及分页 历史地震地图显示 台站地图显示 矿企地图显示 历史地震数据列表及分页 台站数据列表及分页 -
在进行数据测试时,先将台站和历史地震数据进行导入。由于最初设计的数据录入都是一条条进行的,遇到大批数据导入则显得效率低下。为解决将来平台运行时大量的数据导入问题,重新开发了针对历史地震和台站数据的批量导入方法。其中,历史地震的数据源是中国地震台网中心目录,该目录中每个字段长度固定,字段之间以空格分隔,用户只需下载后保存成文本文件,批量导入时将下载好的目录文件上传到本平台即可完成批量导入。台站数据则主要是省台网运维人员填写的台站要素表,用户使用时需要将数据转为如下格式:“台网名,台站代码,台站中文名,纬度,经度,高程”,上传该格式文本到平台即可完成批量导入。
-
非天然地震事件处置平台设计完成后,由河北省测震台网工作人员进行测试,测试数据选择2018年04月01日至今河北测震台网处置过的全部非天然地震事件(表2)。整个事件的处置按照2.1中提到的流程:信息采集及确认、上传图片、产出报告,测试过程中平台所有功能运转正常。每个事件从信息采集到报告产出花费时间大约为数分钟,比之前人工处理耗费近1小时效率提升很高。信息查询和展示方面,在网络正常情况下只需几秒钟就能完成地图及周边点位的查询与展示,比之人工处理效率提升明显。
表 2 测试数据
Table 2. Test data
发震时刻 经度/(°E) 纬度/(°N) 深度/km 震级 事件类型 参考地名 2020-07-09T09:18:16 114.4 39.0 0 1.9 爆破 河北保定市阜平县 2019-08-02T12:24:48 118.2 39.6 0 1.6 疑似塌陷 河北唐山市路南区 2018-04-15T17:44:38 114.5 39.2 0 1.4 爆破 河北保定市涞源县 -
非天然地震事件处置是地震行业归属应急部门后新增的一项重要工作,事件发生后第一时间向上级部门提供信息是该项工作的核心任务。该平台的研发与使用是对测震台网现有工作的完善,为今后及时准确产出报告、清晰有效展示空间地理信息、妥善保存产出结果提供有利支持。通过平台的试运行可以预见,测震台网处置非天然地震的效率将大大提升。由于该平台开发是B/S模式,在不影响台网正常工作的情况下,可以为其他部门及工作人员提供访问权限,方便业务工作交流,拓展服务领域。
Design of Non-natural Earthquake Events Dealing Platform Based on SpringBoot and Baidu Maps
-
摘要: 为提高非天然地震事件处置效率,优化地理信息展示方式,减轻值班人员负担,基于SpringBoot、百度地图和POI技术设计非天然地震事件处置平台。该平台通过解析速报信息调用模板产出事件报告,借助百度地图标识震中及周边设定范围内的台站、历史地震和矿企的地理位置,并计算出上述区域与震中的距离及其基本信息,同时提供对台站、历史地震和矿企信息的数据管理、查询及地图展示服务。该平台的研发解决了报告产出周期长、数据查询不便、无可视化方式展示地理信息的问题,提升地震应急信息服务能力。Abstract: In order to improve the processing efficiency of non-natural earthquake events, optimize the display of geographical information and reduce the burden of the personnel on duty, the author designed a platform for dealing with non-natural earthquake events. which is based on SpringBoot, Baidu Maps and POI technology. By analyzing the quick report information, the platform calls the template to output the event report. With Baidu map, the epicenter and the geographical location of stations, historical earthquakes and mining enterprises within the setting range around the epicenter are indentified. The distance from the above areas to the epicenter and other relevant information are calculated. It also provides data management, query and map display services for stations, historical earthquakes and mining enterprises. The development of this platform has solved the problems of long report production cycle, inconvenient data query, and no visual way to display geographic information. It can provide support for earthquake emergency services.
-
Key words:
- Non-natural earthquake events /
- Report output /
- Map service
-
表 1 各模块功能
Table 1. Functions of each module
模块名 功能点 模块名 功能点 模块名 功能点 历史地震管理 历史地震查询数据 台站信息管理 台站查询 矿企信息管理 矿企添加 历史地震查询地图 台站批量导入 矿企修改 历史地震批量导入 台站添加 矿企删除 历史地震添加 台站修改 矿企查询 历史地震删除 台站删除 矿企数据列表及分页 历史地震地图显示 台站地图显示 矿企地图显示 历史地震数据列表及分页 台站数据列表及分页 表 2 测试数据
Table 2. Test data
发震时刻 经度/(°E) 纬度/(°N) 深度/km 震级 事件类型 参考地名 2020-07-09T09:18:16 114.4 39.0 0 1.9 爆破 河北保定市阜平县 2019-08-02T12:24:48 118.2 39.6 0 1.6 疑似塌陷 河北唐山市路南区 2018-04-15T17:44:38 114.5 39.2 0 1.4 爆破 河北保定市涞源县 -
[1] 徐志双, 高小跃, 李志强, 等. 矿震和水库地震等非天然地震的公共服务需求调查研究[J]. 中国地震, 2020, 36(3): 630-638. doi: 10.3969/j.issn.1001-4683.2020.03.024 [2] 李刚. 疯狂Spring Boot终极讲义[M]. 北京: 电子工业出版社, 2021: 1-180. [3] 百度网. 百度百科Shiro框架[EB/OL]. [2021-01-25].https://baike.baidu.com/item/shiro/17753571?fr=Aladdin. -