薛蕾,王遹其,付萍
基于Python的地震烈度速報(bào)軟件的設(shè)計(jì)與應(yīng)用
薛蕾,王遹其,付萍
(廈門(mén)地震勘測(cè)研究中心,福建 廈門(mén) 361000)
烈度速報(bào)是利用強(qiáng)震臺(tái)網(wǎng)的地震記錄,由計(jì)算機(jī)自動(dòng)生成地震烈度圖的應(yīng)用系統(tǒng)。相比傳統(tǒng)宏觀烈度評(píng)定,能在很短的時(shí)間內(nèi)了解震情信息,為政府決策和救災(zāi)工作提供指導(dǎo)。利用Python環(huán)境下的地震學(xué)專業(yè)軟件包Obspy以及圖形工具M(jìn)atplotlib編寫(xiě)了烈度速報(bào)的軟件。該軟件可實(shí)現(xiàn)自動(dòng)觸發(fā)、計(jì)算分析、作圖和推送等功能。
Python;ObsPy;烈度速報(bào);軟件設(shè)計(jì)
地震烈度是衡量地震影響程度大小的重要參數(shù),傳統(tǒng)的宏觀烈度評(píng)定需要在震后依靠技術(shù)人員進(jìn)行現(xiàn)場(chǎng)調(diào)查后確定。在發(fā)生影響范圍廣破壞性強(qiáng)的地震后,烈度評(píng)定可能要花費(fèi)數(shù)天時(shí)間才能完成,但政府決策和救災(zāi)工作的現(xiàn)實(shí)需要往往需要在震后第一時(shí)間了解這方面的信息。
基于這些現(xiàn)實(shí)需要,烈度速報(bào)系統(tǒng)應(yīng)運(yùn)而生。它是利用強(qiáng)震臺(tái)網(wǎng)記錄到的地震觀測(cè)數(shù)據(jù),由計(jì)算機(jī)自動(dòng)生成地震烈度圖的應(yīng)用系統(tǒng)。近年來(lái)國(guó)內(nèi)外在這方面開(kāi)展了很多研究和應(yīng)用,如美國(guó)的Shakemap系統(tǒng)、福建省地震局烈度速報(bào)系統(tǒng)、云南省地震局烈度速報(bào)系統(tǒng)[1]等。
本文依托國(guó)家地震烈度速報(bào)和預(yù)警工程建設(shè)的簡(jiǎn)易烈度計(jì)臺(tái)網(wǎng),采用Python編寫(xiě)了烈度速報(bào)軟件,可實(shí)現(xiàn)自動(dòng)觸發(fā)計(jì)算,作圖并推送用戶。
軟件使用Python語(yǔ)言編寫(xiě),主要使用面向地震學(xué)應(yīng)用的ObsPy軟件包進(jìn)行地震數(shù)據(jù)的分析計(jì)算,應(yīng)用面向科學(xué)繪圖的Matplotlib軟件包對(duì)計(jì)算結(jié)果進(jìn)行圖件繪制。Python是一種解釋型、面向?qū)ο蟆?dòng)態(tài)數(shù)據(jù)類型的高級(jí)程序設(shè)計(jì)語(yǔ)言。Python是由Guido van Rossum于1989年底發(fā)明,第一個(gè)公開(kāi)發(fā)行版發(fā)行于1991年。Python具有豐富和強(qiáng)大的庫(kù)。它常被昵稱為膠水語(yǔ)言,能夠把用其他語(yǔ)言制作的各種模塊(尤其是C/C++)很輕松地聯(lián)結(jié)在一起。近年來(lái),由于互聯(lián)網(wǎng)、大數(shù)據(jù)及人工智能等方面的發(fā)展,Python以其簡(jiǎn)潔、優(yōu)雅、易用等特性越來(lái)越受到各行各業(yè)研究人員的青睞。
為使地震學(xué)的研究能應(yīng)用Python中功能強(qiáng)大的Numpy和Scipy的數(shù)值處理和分析工具,ObsPy在Numpy的基礎(chǔ)上實(shí)現(xiàn)了特定領(lǐng)域的時(shí)間序列庫(kù),使地震學(xué)研究進(jìn)入Python生態(tài)[2]。ObsPy能夠讀取多種地震學(xué)文件格式,自帶多種地震學(xué)處理工具,并能利用Python強(qiáng)大的科學(xué)計(jì)算生態(tài)系統(tǒng),用簡(jiǎn)單的代碼實(shí)現(xiàn)復(fù)雜的分析和計(jì)算。
Matplotlib是一個(gè)Python 2D繪圖庫(kù),可以生成各種硬拷貝格式和跨平臺(tái)交互式環(huán)境的出版物質(zhì)量數(shù)據(jù)。Matplotlib只需幾行代碼即可生成繪圖,如直方圖、功率譜、條形圖、誤差圖、散點(diǎn)圖等。
1.2.1 設(shè)計(jì)思路
軟件擬實(shí)現(xiàn)的功能:在秒級(jí)尺度上對(duì)地震信息服務(wù)器進(jìn)行監(jiān)控,當(dāng)有地震發(fā)生時(shí),進(jìn)行分析計(jì)算和作圖,最后把計(jì)算成果和圖件生成報(bào)告推送給用戶。地震發(fā)生后,軟件利用地震速報(bào)目錄中的地震三要素信息作為觸發(fā)源,在數(shù)據(jù)服務(wù)器請(qǐng)求地震發(fā)生時(shí)段的臺(tái)網(wǎng)數(shù)據(jù);根據(jù)一定的算法,做儀器烈度分布的計(jì)算成圖和信息推送。
1.2.2 系統(tǒng)架構(gòu)及功能實(shí)現(xiàn)
系統(tǒng)架構(gòu)如圖1所示,烈度速報(bào)軟件采用模塊化設(shè)計(jì),根據(jù)要實(shí)現(xiàn)的功能分割為相應(yīng)的獨(dú)立模塊。
圖1 系統(tǒng)架構(gòu)圖
監(jiān)控和觸發(fā)判定功能由監(jiān)控和觸發(fā)判定模塊實(shí)現(xiàn):監(jiān)控模塊每秒監(jiān)控地震信息服務(wù)器,當(dāng)?shù)卣鸢l(fā)生,有新的地震報(bào)告生成時(shí),按照預(yù)設(shè)條件進(jìn)行判斷,則觸發(fā)下一模塊。
計(jì)算成圖功能由解析發(fā)震信息模塊、請(qǐng)求數(shù)據(jù)模塊、計(jì)算模塊和作圖模塊實(shí)現(xiàn):前序模塊觸發(fā)后,由發(fā)震信息解析模塊從地震信息服務(wù)器提取該地震事件的報(bào)告進(jìn)行解析,獲取發(fā)震信息;數(shù)據(jù)請(qǐng)求模塊按照發(fā)震時(shí)間從地震數(shù)據(jù)服務(wù)器請(qǐng)求該時(shí)段的波形數(shù)據(jù);而后計(jì)算模塊根據(jù)儀器烈度算法,計(jì)算每個(gè)臺(tái)站各個(gè)方向和三方向合成的pga、pgv,最后得出儀器烈度,生成烈度報(bào)告;作圖模塊根據(jù)各個(gè)站點(diǎn)的儀器烈度值繪制站點(diǎn)儀器烈度圖,同時(shí)在站點(diǎn)展布區(qū)域上對(duì)各個(gè)臺(tái)站的儀器烈度值進(jìn)行內(nèi)插,繪制區(qū)域儀器烈度等值線圖。
推送功能結(jié)果推送模塊實(shí)現(xiàn):將以上模塊得到的文字報(bào)告和圖件進(jìn)行分析,提取重要信息。利用微信企業(yè)號(hào)中開(kāi)發(fā)者工具生成圖文報(bào)告,發(fā)送至用戶手機(jī)。
在國(guó)家地震烈度速報(bào)和預(yù)警工程福建示范區(qū)建成試運(yùn)行后,為烈度速報(bào)提供了高密度的臺(tái)網(wǎng)數(shù)據(jù)支持。福建處于國(guó)家地震烈度速報(bào)和預(yù)警工程的重點(diǎn)預(yù)警區(qū),平均臺(tái)間距約為12 km。由于臺(tái)間距很小,不用插值已基本可以得到地震的分布情況[3-4]。本文采用中震測(cè)發(fā)〔2015〕18號(hào)《儀器地震烈度計(jì)算暫行規(guī)程》中推薦的算法對(duì)每個(gè)臺(tái)站進(jìn)行計(jì)算。計(jì)算流程如圖2所示。
本文依托福建省簡(jiǎn)易烈度計(jì)臺(tái)網(wǎng)部署了上述軟件,數(shù)據(jù)源來(lái)自Palert Advance(共計(jì)320臺(tái));數(shù)據(jù)服務(wù)器為freeBSD11.1系統(tǒng)和JOPENS6.08流服務(wù)器,數(shù)據(jù)存儲(chǔ)格式為miniseed;地震信息來(lái)源為地震速報(bào)目錄(eqim);計(jì)算服務(wù)器為Ubuntu18.04.2LTS系統(tǒng),應(yīng)用軟件包主要為Python3.7.2,obspy1.1.0,matplotlib3.0.3。
軟件從2019-04開(kāi)始部署并運(yùn)行,截至2019-07,福建臺(tái)網(wǎng)內(nèi)的28次地震事件均能自動(dòng)觸發(fā),計(jì)算作圖和推送結(jié)果。系統(tǒng)觸發(fā)后,一般在90 s(平均)后可運(yùn)行完畢。其中用時(shí)最少的是2019-06-04臺(tái)灣臺(tái)東6.4級(jí)地震,用時(shí)76.1 s;用時(shí)最多的是2019-04-01臺(tái)灣新北3.7級(jí)地震,用時(shí)111.6 s。地震事件處理時(shí)效性統(tǒng)計(jì)如表1所示。
圖2 地震儀器烈度計(jì)算流程圖
表1 地震事件處理時(shí)效性統(tǒng)計(jì)表
序號(hào)時(shí)間地震事件獲取報(bào)告/s讀取數(shù)據(jù)/s計(jì)算/s作圖/s推送/s總耗時(shí)/s 12019-04-01臺(tái)灣新北3.7級(jí)地震30.13.235.537.75.1112 22019-04-03臺(tái)灣臺(tái)東縣5.7級(jí)地震30.13.519.731.94.790 32019-04-04臺(tái)灣臺(tái)東縣5.1級(jí)地震30.43.319.934.94.993 42019-04-08臺(tái)灣臺(tái)東縣海域4.4級(jí)地震30.15.119.427.94.987 52019-04-09臺(tái)灣花蓮縣海域5.0級(jí)地震30.25.219.633.24.793 62019-04-10臺(tái)灣花蓮縣海域4.3級(jí)地震30.44.519.731.94.691 72019-04-10臺(tái)灣花蓮縣海域4.0級(jí)地震30.44.719.833.34.793 82019-04-16臺(tái)灣海峽3.5級(jí)地震30.56.219.136.44.397 92019-04-18臺(tái)灣花蓮縣海域6.7級(jí)地震30.58.918.635.24.698 102019-04-20廣東南澳縣海域2.2級(jí)地震30.24.719.633.84.993 112019-05-09臺(tái)灣宜蘭縣海域3.8級(jí)地震30.15.720.334.65.196 122019-05-13臺(tái)灣宜蘭縣海域3.9級(jí)地震30.45.919.735.64.696 132019-05-22臺(tái)灣花蓮縣海域4.0級(jí)地震30.46.119.945.94.7107 142019-05-23臺(tái)灣花蓮縣海域4.1級(jí)地震30.13.719.629.95.289 152019-05-23臺(tái)灣花蓮縣海域4.5級(jí)地震30.1619.621.26.884 162019-05-31臺(tái)灣高雄市4.2級(jí)地震30.211.519.528.17.297 172019-06-04臺(tái)灣臺(tái)東縣海域5.8級(jí)地震30.34.219.215.96.576 182019-06-06臺(tái)灣花蓮縣海域3.8級(jí)地震30.36.519.420.66.984 192019-06-18臺(tái)灣海峽3.8級(jí)地震30.33.518.720.26.880
表1(續(xù))
序號(hào)時(shí)間地震事件獲取報(bào)告/s讀取數(shù)據(jù)/s計(jì)算/s作圖/s推送/s總耗時(shí)/s 202019-06-30臺(tái)灣臺(tái)東縣海域4.5級(jí)地震30.56.719.823.26.987 212019-07-12先島群島5.1級(jí)地震30.22.919.726.86.886 222019-07-19巴坦群島4.2級(jí)地震30.44.419.520.66.882 232019-07-22臺(tái)灣屏東縣海域4.2級(jí)地震30.45.319.927.96.690 242019-07-23臺(tái)灣東北4.6級(jí)地震30.44.719.819.87.182 252019-07-26臺(tái)灣宜蘭縣3.5級(jí)地震30.46.220.131.26.995 262019-07-26巴坦群島海域4.1級(jí)地震30.54.520.119.97.282 272019-07-27巴坦群島海域5.3級(jí)地震30.5520.120.36.883 282019-07-27巴坦群島海域5.1級(jí)地震30.53.82019.56.781
近期福建地區(qū)未發(fā)生破壞性地震,為驗(yàn)證軟件運(yùn)行效果,本文以2018-11-26臺(tái)灣海峽6.2級(jí)地震事件作為模擬,觸發(fā)軟件計(jì)算,微信接收地震報(bào)告如圖3所示。
使用Python語(yǔ)言和其提供的ObsPy、Matplotlib軟件包編寫(xiě)地震烈度速報(bào)軟件,可以實(shí)現(xiàn)自動(dòng)觸發(fā)、分析計(jì)算作圖和推送功能。通過(guò)在福建省簡(jiǎn)易烈度計(jì)臺(tái)網(wǎng)中的測(cè)試發(fā)現(xiàn),該軟件可以穩(wěn)定可靠運(yùn)行,并實(shí)現(xiàn)預(yù)設(shè)的功能。該軟件可完全實(shí)現(xiàn)自動(dòng)觸發(fā)、無(wú)人值守。當(dāng)有地震發(fā)生時(shí),立即觸發(fā)運(yùn)行。在軟件收到觸發(fā)信息后,平均90 s左右可完成全部步驟,保守估計(jì)2 min內(nèi)可收到地震烈度速報(bào)信息;成果推送到微信,可精準(zhǔn)投放到目標(biāo)用戶。
問(wèn)題和討論:目前的觸發(fā)依賴于地震速報(bào)目錄,如果地震速報(bào)有延遲,也會(huì)造成結(jié)果產(chǎn)出延遲;軟件部署運(yùn)行以來(lái),主要受臺(tái)灣及周邊地震影響,震級(jí)小距離遠(yuǎn)。在極端情況下的可靠性尚需驗(yàn)證。因此下一步要提高極端條件下整個(gè)運(yùn)行系統(tǒng)的穩(wěn)定性,繼續(xù)優(yōu)化容量和性能;尋找更加快速穩(wěn)定的地震速報(bào)作為觸發(fā)源,繼續(xù)提升時(shí)效性;并在此基礎(chǔ)上,針對(duì)不同用戶定制更加精細(xì)化差異化的產(chǎn)品。
[1]楊黎薇,段洪杰,林國(guó)良,等.基于JavaEE設(shè)計(jì)模式的烈度速報(bào)建設(shè)與應(yīng)用[J].世界地震工程,2018(2):147-156.
[2]KRISCHER L,MEGIES T,BARSCH R,et al.ObsPy:將地震學(xué)引入科學(xué)Python生態(tài)系統(tǒng)的橋梁[J].世界地震譯叢,2016,47(4):344-357.
[3]王士成,金星,張紅才,等.臺(tái)網(wǎng)密度對(duì)地震烈度速報(bào)的影響研究[J].地震工程與工程振動(dòng),2017(6):162-168.
[4]張紅才,王士成.地震烈度速報(bào)產(chǎn)品可靠性分析[J].地震工程與工程振動(dòng),2016(5):65-75.
P315.7
A
10.15913/j.cnki.kjycx.2019.19.062
2095-6835(2019)19-0146-03
〔編輯:嚴(yán)麗琴〕