羅治國,李少睿,趙 韜,關 昕
(陜西省地震局,陜西 西安 710068)
地震發生后,社會公眾對地震發生的時間、地點、震級(俗稱地震三要素)及災情等最為關心,這就要求地震速報工作者快速準確定位,通過多種途徑及時將結果發布出去。相關機構已開發多種地震信息發布系統,如江蘇地震臺網在地震速報軟件中集成手機短信群發、多路電話語音群呼、自動傳真和網站發布等多種信息發布手段[1],中國地震臺網中心開發的基于12322短信的地震速報短信服務系統[2],安徽臺網基于互聯網的地震短信發布軟件[3],江西地震局基于Google地圖顯示地震震中及震中位置查詢和發送的地震速報信息發布[2, 4],陜西省地震局利用MapABC地圖、Google地圖和百度地圖的Web GIS功能,與門戶網站集成起來實現震中分布圖的Web展示,豐富地震速報信息的內容[5]。
陜西省地震局部署了移動代理服務器(MAS),用于短信發送。陜西省地震臺網中心開發了基于MAS的短信發送系統,實現地震自動速報和人工正式速報信息自動分區域、分類別的精細化短信發送[6],但無法快速速報微震。為貫徹實施《陜西省地震局地震速報實施細則》(以下簡稱《細則》),快速發布地震信息,基于Mapxtreme軟件開發工具包,使用.NET 編程語言,開發震情信息快速發布系統,實現微震震中參考地名的快速獲取、正式報地震信息快速獲取、自動按照模板組裝速報文本,通過多種渠道發布出去。
陜西省地震臺網中心(以下簡稱臺網中心)對外速報信息發布包括短信和門戶網站網頁信息服務兩種方式,信息來源為EQIM[7](全國地震速報信息共享服務系統)和人工定位結果?!都殑t》規定臺網中心通過EQIM向國家地震臺網中心完成全省及行政邊界外50 km范圍內M≥3.0地震的初報。對于通過EQIM速報的地震信息,可直接從數據庫中獲取。但是對于未達到速報條件的微震,對外發布短信、信息時,需要在Mapsis中輸入震中經緯度獲得參考地名,然后登錄MAS的web發送頁面,手動編輯短信內容,最后提交發送。與此同時,需要登錄局門戶網站后臺提交頁面,手動填寫相關信息,提交后才能在門戶網站生成一條震情信息。該過程繁雜,費時費力,且容易出錯,很大程度上影響了地震速報的速度和準確度,與公眾對地震速報快速、準確的要求相差甚遠。為此,開發了一套地震速報快速發布系統,獲取震情信息尤其是微震信息,最終實現一鍵發送,實現短信發送及門戶網站上網的目的。
MSDP(人工交互分析模塊)為JOPENS系統下的地震臺網數據處理軟件包[8],該軟件包嚴格遵循中國地震局2006年12月推出的“中國數字臺網數據規范”,利用地震數據庫技術對臺網日常處理的地震波形、定位結果、震相數據進行統一管理,具備完成測震臺網所承擔的地震速報、地震編目和數據服務功能,數據格式、數據產出統一、規范,快速實現地震速報和統一編目。省級臺網中心普遍使用MSDP來進行地震事件的分析和定位。
res文件是MSDP定位后形成的十六進制結果文件,保存有定位結果信息及震相信息。使用EQIM進行速報時,EQIM Sender作為發送端,可從該定位結果文件中讀入地震參數。
對于未達到《細則》規定的需要通過EQIM對外進行速報的微震,為實現程序獲取震情信息,就需要分析res定位結果文件,從中獲得震情信息。
關于res文件的結構,少有文獻提及。筆者經過認真分析研究,獲得了res文件中地震事件的發震時刻、經緯度及震級等關鍵信息的文件格式及數據結構(見圖1)。

圖1 res文件信息Fig.1 Res file information
res文件中地震事件的發震時刻、經緯度及震級等關鍵信息的數據結構如下:
Struct earthquakeinfo
{
int year;
int mon;
int day;
int hour;
int min;
float sec;
long otime;
float lat;
float lon;
float depth;
float delta;
float azimuth;
float x;
float y;
int wx;
int wy;
float Ml;
float Md;
float Ms;
float Mb;
float mB;
float Mm;
float residual;
}
圖1可以看出,0x00-0xA3全為空白,不包含任何信息;0xA4-0xD7為震情數據,是earthquakeinfo數據結構的具體內容;后面的數據則為震相等信息。
通過了解文件結構,使用開發人員熟悉的編程語言來獲取信息即可。讀取res文件,獲取震情信息的C#核心源碼如下:
FileStream fs = new FileStream(filename, FileMode.Open,FileAccess.Read);
binReader = new BinaryReader(fs);
int Time = new int[5];
float OtherInfo = new float[16];
binReader.BaseStream.Seek(164, SeekOrigin.Current);
for (inti = 0; i< 5; i++)
{
Time[i] = binReader.ReadInt32();
}
float second = binReader.ReadSingle();
double otime = binReader.ReadDouble();
for (int i = 0; i< 16; i++)
{
OtherInfo[i] = binReader.ReadSingle();
}
通過上述代碼打開res文件并讀取后,在Time數組中存放年、月、日、時、分值,OtherInfo數組中存放經緯度、震級等信息。其中OtherInfo[0]是緯度,OtherInfo[1]是經度,OtherInfo[2]是深度,OtherInfo[9]是ML震級,OtherInfo[11]是MS震級。對于地方震,可通過ML震級轉換得到M震級。M震級轉換公式如下:
M=1.13×ML-1.08。
通過經緯度獲得震中參考地名就涉及地理信息系統(Geographic Information System,GIS)的操作,本系統采用Mapxtreme來進行(本文中所使用的Mapxtreme為MapXtreme 2008 v7.0 Evaluation)。
Mapxtreme是MapInfo主推的Windows軟件開發工具包,具有.NET開發經驗的軟件開發人員使用該工具可以創建功能強大的位置增強型桌面和客戶機/服務器應用程序,能夠讀取mapinfo數據格式的地圖。
EQIM所使用的地圖數據每年至少更新2次,保證地圖數據的現勢性。其地圖數據格式卻鮮有文獻介紹,筆者無法掌握和使用。較新的MSDP軟件附帶的中國地圖與 EQIM 當前版本基本一致,準確度較高。對于省內微震參考地名的獲取來說,其地圖數據精度也基本滿足要求,在無更精確的地圖文件之前先使用該地圖文件,將其轉換成mapinfo地圖格式后,由Mapxtreme調取使用。
通過經緯度信息獲取震中地名的c#源碼如下:
seisPoint = new DPoint(lon, lat);
countyMap.Center = seisPoint;
ISession session = Session.Current;
Distance d = new Distance(1, DistanceUnit.Kilometer);
FeatureGeometry Pennsylvania = new MapInfo.Geometry.Point(countyMap.GetDisplayCoordSys(), seisPoint) as FeatureGeometry;
SearchInfosi = MapInfo.Data.SearchInfoFactory.SearchNearest(Pennsylvania, d); si.QueryDefinition.Columns = null;
(si.SearchResultProcessor as ClosestSearchResultProcessor).Options = ClosestSearchOptions.ReturnAll;
IResultSetFeatureCollection fc = session.Catalog.Search(layername, si);
if (fc != null)
{
foreach (Feature feature in fc)
{
this.txtPlaceName.Text += feature[fc[0].Columns[3].ToString()].ToString();
}
}
在發送主界面的參考地名txtPlaceName文本框中顯示的就是獲得的地名,通過臨時地圖操作,將震中位置以點的形式在地圖上標示出來,形成一個直觀的位置顯示。
作為一個地震信息發布系統,需要將不同來源的地震信息通過多種手段發送出去。該系統結構如圖2所示。
系統可從EQIM數據庫中讀取正式速報信息(中國地震臺網中心正式速報結果CC,中國地震臺網中心轉發省級臺網中心的正式速報結果CD,陜西省地震臺網中心速報結果SN),或者從res定位文件中讀取微震信息。地震信息發布系統主界面如圖3所示。
當速報微震時,定位到MSDP產生的res定位結果文件,系統獲取到發震時刻、震中經緯度及震級等信息,通過經緯度獲取參考地名。

圖2 地震信息發布系統結構圖Fig.2 Structure of earthquake information publishing system

圖3 地震信息發布系統主界面Fig.3 Main interface of earthquake information publishing system
當震中距離省界較近或在省內時,計算震中到大城市的距離,供公眾參考。
if (ProvincialDistance <= 200) //省界200km范圍內
{ Table tb_SNcity = MapInfo.Engine.Session.Current.Catalog.GetTable("sn-city");
foreach (Feature incity in tb_SNcity)
{ double d = SeisPoint.Distance(incity.Geometry, DistanceUnit.Kilometer, DistanceType.Spherical, true);
if (d <= 200) {
ProvCity.Add(new city(incity["name"].ToString(), d)); }
}
ProvCity.Sort(delegate(city a, city b) { return a.CityDistance.CompareTo(b.CityDistance); }); }
在獲取相關要素后,按照《細則》中“正式地震速報短信格式”要求進行短信內容組裝。如圖3所示,陜西地震臺網測定2016年11月26日04時34分在陜西榆林市神木縣(北緯38.98°,東經110.33°)發生1.9級地震(塌陷),距最近城市榆林市91 km。
陜西局部署的MAS移動代理服務器提供API和數據庫接口等開發接口。鑒于前期使用MAS的web發送時,發送人員的群組、號碼管理都放在MAS機上,為便于統一管理,發布系統發送短信使用數據庫接口。在MAS數據庫中建立一個存儲過程,提交短信內容、短信接收人員群組名稱、發送時間等參數,實現短信發送目的,減少MAS數據庫的查詢及回調等操作,提高發送速度及效率。同時對MAS發送數據庫中SEND_TIME字段賦予null或未來時間值,實現即時或延時發送。
陜西局應急中心負責門戶網站及終端信息的對外發布,同時提供應急服務產品的產出;提供應急數據庫及門戶網站中轉數據庫接口,發布系統將震情信息分別提交到其指定的數據庫。對于門戶網站,在提交震情信息到門戶網站中轉數據庫后,使用http協議的POST方式,生成該震情信息的一個靜態頁面。
數據庫操作所需時間較一般操作要長,而POST方式生成靜態頁面所需的時間更長。為提高系統響應時間,系統采用異步執行的方法,使MAS短信數據庫提交、應急數據庫提交、門戶網站數據庫提交并靜態頁面生成同時操作而不用等待。
陜西省地震速報信息發布系統能快速讀取res文件中包含的微震信息,從而實現正式速報信息和微震信息的短信、門戶網站及應急服務產品數據庫的快速發布。該系統的研發成功,有效地解決陜西局以前存在的微震信息發布“最后一公里”的問題,滿足地震速報信息發布的需要,及時為社會公眾服務。
[1] 繆發軍,霍祝青,徐 戈,等.在地震速報軟件中集成多種信息發布手段初探[J].地震地磁觀測與研究,2009,30(3):121-126.
[2] 趙國峰,李 麗,李永紅,等.12322地震速報短信服務系統設計與實現[J].地震研究,2014,37(1):157-162.
[3] 夏仕安,黃 光,俞亞東,等.基于互聯網地震短信發布平臺的構建[J].華北地震科學,2009,27(3):45-48.
[4] 曾文敬,肖 健,趙愛平,等.江西省地震局地震速報信息發送軟件介紹[J].高原地震,2013,25(1):46-48.
[5] 董星宏,賈寧.基于WebGIS的地震震中分布圖實現方式探討[J].高原地震,2011,23(1):63-67.
[6] 羅治國,李少睿,金昭娣,等.震情短信分類發送系統研發[J].地震地磁觀測與研究,2016(6):133-138.
[7] 楊 陳,黃志斌,高景春,等.全國地震速報信息共享服務系統[J].地震地磁觀測與研究,2009,30(5):133-138.
[8] 蘇柱金,黃文輝.MSDP軟件震相自動識別技術實現[J].地震地磁觀測與研究,2015,36(5):121-127.