薛蕾,王遹其,付萍
基于Python的地震烈度速報軟件的設計與應用
薛蕾,王遹其,付萍
(廈門地震勘測研究中心,福建 廈門 361000)
烈度速報是利用強震臺網的地震記錄,由計算機自動生成地震烈度圖的應用系統。相比傳統宏觀烈度評定,能在很短的時間內了解震情信息,為政府決策和救災工作提供指導。利用Python環境下的地震學專業軟件包Obspy以及圖形工具Matplotlib編寫了烈度速報的軟件。該軟件可實現自動觸發、計算分析、作圖和推送等功能。
Python;ObsPy;烈度速報;軟件設計
地震烈度是衡量地震影響程度大小的重要參數,傳統的宏觀烈度評定需要在震后依靠技術人員進行現場調查后確定。在發生影響范圍廣破壞性強的地震后,烈度評定可能要花費數天時間才能完成,但政府決策和救災工作的現實需要往往需要在震后第一時間了解這方面的信息。
基于這些現實需要,烈度速報系統應運而生。它是利用強震臺網記錄到的地震觀測數據,由計算機自動生成地震烈度圖的應用系統。近年來國內外在這方面開展了很多研究和應用,如美國的Shakemap系統、福建省地震局烈度速報系統、云南省地震局烈度速報系統[1]等。
本文依托國家地震烈度速報和預警工程建設的簡易烈度計臺網,采用Python編寫了烈度速報軟件,可實現自動觸發計算,作圖并推送用戶。
軟件使用Python語言編寫,主要使用面向地震學應用的ObsPy軟件包進行地震數據的分析計算,應用面向科學繪圖的Matplotlib軟件包對計算結果進行圖件繪制。Python是一種解釋型、面向對象、動態數據類型的高級程序設計語言。Python是由Guido van Rossum于1989年底發明,第一個公開發行版發行于1991年。Python具有豐富和強大的庫。它常被昵稱為膠水語言,能夠把用其他語言制作的各種模塊(尤其是C/C++)很輕松地聯結在一起。近年來,由于互聯網、大數據及人工智能等方面的發展,Python以其簡潔、優雅、易用等特性越來越受到各行各業研究人員的青睞。
為使地震學的研究能應用Python中功能強大的Numpy和Scipy的數值處理和分析工具,ObsPy在Numpy的基礎上實現了特定領域的時間序列庫,使地震學研究進入Python生態[2]。ObsPy能夠讀取多種地震學文件格式,自帶多種地震學處理工具,并能利用Python強大的科學計算生態系統,用簡單的代碼實現復雜的分析和計算。
Matplotlib是一個Python 2D繪圖庫,可以生成各種硬拷貝格式和跨平臺交互式環境的出版物質量數據。Matplotlib只需幾行代碼即可生成繪圖,如直方圖、功率譜、條形圖、誤差圖、散點圖等。
1.2.1 設計思路
軟件擬實現的功能:在秒級尺度上對地震信息服務器進行監控,當有地震發生時,進行分析計算和作圖,最后把計算成果和圖件生成報告推送給用戶。地震發生后,軟件利用地震速報目錄中的地震三要素信息作為觸發源,在數據服務器請求地震發生時段的臺網數據;根據一定的算法,做儀器烈度分布的計算成圖和信息推送。
1.2.2 系統架構及功能實現
系統架構如圖1所示,烈度速報軟件采用模塊化設計,根據要實現的功能分割為相應的獨立模塊。

圖1 系統架構圖
監控和觸發判定功能由監控和觸發判定模塊實現:監控模塊每秒監控地震信息服務器,當地震發生,有新的地震報告生成時,按照預設條件進行判斷,則觸發下一模塊。
計算成圖功能由解析發震信息模塊、請求數據模塊、計算模塊和作圖模塊實現:前序模塊觸發后,由發震信息解析模塊從地震信息服務器提取該地震事件的報告進行解析,獲取發震信息;數據請求模塊按照發震時間從地震數據服務器請求該時段的波形數據;而后計算模塊根據儀器烈度算法,計算每個臺站各個方向和三方向合成的pga、pgv,最后得出儀器烈度,生成烈度報告;作圖模塊根據各個站點的儀器烈度值繪制站點儀器烈度圖,同時在站點展布區域上對各個臺站的儀器烈度值進行內插,繪制區域儀器烈度等值線圖。
推送功能結果推送模塊實現:將以上模塊得到的文字報告和圖件進行分析,提取重要信息。利用微信企業號中開發者工具生成圖文報告,發送至用戶手機。
在國家地震烈度速報和預警工程福建示范區建成試運行后,為烈度速報提供了高密度的臺網數據支持。福建處于國家地震烈度速報和預警工程的重點預警區,平均臺間距約為12 km。由于臺間距很小,不用插值已基本可以得到地震的分布情況[3-4]。本文采用中震測發〔2015〕18號《儀器地震烈度計算暫行規程》中推薦的算法對每個臺站進行計算。計算流程如圖2所示。
本文依托福建省簡易烈度計臺網部署了上述軟件,數據源來自Palert Advance(共計320臺);數據服務器為freeBSD11.1系統和JOPENS6.08流服務器,數據存儲格式為miniseed;地震信息來源為地震速報目錄(eqim);計算服務器為Ubuntu18.04.2LTS系統,應用軟件包主要為Python3.7.2,obspy1.1.0,matplotlib3.0.3。
軟件從2019-04開始部署并運行,截至2019-07,福建臺網內的28次地震事件均能自動觸發,計算作圖和推送結果。系統觸發后,一般在90 s(平均)后可運行完畢。其中用時最少的是2019-06-04臺灣臺東6.4級地震,用時76.1 s;用時最多的是2019-04-01臺灣新北3.7級地震,用時111.6 s。地震事件處理時效性統計如表1所示。

圖2 地震儀器烈度計算流程圖
表1 地震事件處理時效性統計表
序號時間地震事件獲取報告/s讀取數據/s計算/s作圖/s推送/s總耗時/s 12019-04-01臺灣新北3.7級地震30.13.235.537.75.1112 22019-04-03臺灣臺東縣5.7級地震30.13.519.731.94.790 32019-04-04臺灣臺東縣5.1級地震30.43.319.934.94.993 42019-04-08臺灣臺東縣海域4.4級地震30.15.119.427.94.987 52019-04-09臺灣花蓮縣海域5.0級地震30.25.219.633.24.793 62019-04-10臺灣花蓮縣海域4.3級地震30.44.519.731.94.691 72019-04-10臺灣花蓮縣海域4.0級地震30.44.719.833.34.793 82019-04-16臺灣海峽3.5級地震30.56.219.136.44.397 92019-04-18臺灣花蓮縣海域6.7級地震30.58.918.635.24.698 102019-04-20廣東南澳縣海域2.2級地震30.24.719.633.84.993 112019-05-09臺灣宜蘭縣海域3.8級地震30.15.720.334.65.196 122019-05-13臺灣宜蘭縣海域3.9級地震30.45.919.735.64.696 132019-05-22臺灣花蓮縣海域4.0級地震30.46.119.945.94.7107 142019-05-23臺灣花蓮縣海域4.1級地震30.13.719.629.95.289 152019-05-23臺灣花蓮縣海域4.5級地震30.1619.621.26.884 162019-05-31臺灣高雄市4.2級地震30.211.519.528.17.297 172019-06-04臺灣臺東縣海域5.8級地震30.34.219.215.96.576 182019-06-06臺灣花蓮縣海域3.8級地震30.36.519.420.66.984 192019-06-18臺灣海峽3.8級地震30.33.518.720.26.880
表1(續)

序號時間地震事件獲取報告/s讀取數據/s計算/s作圖/s推送/s總耗時/s 202019-06-30臺灣臺東縣海域4.5級地震30.56.719.823.26.987 212019-07-12先島群島5.1級地震30.22.919.726.86.886 222019-07-19巴坦群島4.2級地震30.44.419.520.66.882 232019-07-22臺灣屏東縣海域4.2級地震30.45.319.927.96.690 242019-07-23臺灣東北4.6級地震30.44.719.819.87.182 252019-07-26臺灣宜蘭縣3.5級地震30.46.220.131.26.995 262019-07-26巴坦群島海域4.1級地震30.54.520.119.97.282 272019-07-27巴坦群島海域5.3級地震30.5520.120.36.883 282019-07-27巴坦群島海域5.1級地震30.53.82019.56.781
近期福建地區未發生破壞性地震,為驗證軟件運行效果,本文以2018-11-26臺灣海峽6.2級地震事件作為模擬,觸發軟件計算,微信接收地震報告如圖3所示。
使用Python語言和其提供的ObsPy、Matplotlib軟件包編寫地震烈度速報軟件,可以實現自動觸發、分析計算作圖和推送功能。通過在福建省簡易烈度計臺網中的測試發現,該軟件可以穩定可靠運行,并實現預設的功能。該軟件可完全實現自動觸發、無人值守。當有地震發生時,立即觸發運行。在軟件收到觸發信息后,平均90 s左右可完成全部步驟,保守估計2 min內可收到地震烈度速報信息;成果推送到微信,可精準投放到目標用戶。
問題和討論:目前的觸發依賴于地震速報目錄,如果地震速報有延遲,也會造成結果產出延遲;軟件部署運行以來,主要受臺灣及周邊地震影響,震級小距離遠。在極端情況下的可靠性尚需驗證。因此下一步要提高極端條件下整個運行系統的穩定性,繼續優化容量和性能;尋找更加快速穩定的地震速報作為觸發源,繼續提升時效性;并在此基礎上,針對不同用戶定制更加精細化差異化的產品。
[1]楊黎薇,段洪杰,林國良,等.基于JavaEE設計模式的烈度速報建設與應用[J].世界地震工程,2018(2):147-156.
[2]KRISCHER L,MEGIES T,BARSCH R,et al.ObsPy:將地震學引入科學Python生態系統的橋梁[J].世界地震譯叢,2016,47(4):344-357.
[3]王士成,金星,張紅才,等.臺網密度對地震烈度速報的影響研究[J].地震工程與工程振動,2017(6):162-168.
[4]張紅才,王士成.地震烈度速報產品可靠性分析[J].地震工程與工程振動,2016(5):65-75.
P315.7
A
10.15913/j.cnki.kjycx.2019.19.062
2095-6835(2019)19-0146-03
〔編輯:嚴麗琴〕