徐 沁1) 鄭寧寧1) 黃經(jīng)國(guó)1) 徐 平2)
?
使用MATLAB獲取地震前兆數(shù)據(jù)庫(kù)中觀測(cè)數(shù)據(jù)
徐 沁鄭寧寧黃經(jīng)國(guó)徐 平
1)中國(guó)地震臺(tái)網(wǎng)中心,北京 100045 2)北京市地震局,北京 100089
地震前兆數(shù)據(jù)庫(kù)中的觀測(cè)數(shù)據(jù)具有極高的科研及應(yīng)用價(jià)值。MATLAB作為具有強(qiáng)大功能的科學(xué)計(jì)算及分析平臺(tái)是地震前兆數(shù)據(jù)分析的得力工具。雖然如此,但MATLAB提供的數(shù)據(jù)庫(kù)工具箱并不能完全操控基于ORACLE的前兆數(shù)據(jù)庫(kù)。因此,直接通過(guò)MATLAB獲取前兆觀測(cè)數(shù)據(jù)進(jìn)行后續(xù)的前兆統(tǒng)計(jì)及分析工作受到了影響。本文首先介紹了主流的數(shù)據(jù)庫(kù)訪問機(jī)制以及在MATLAB中如何實(shí)現(xiàn)以這些機(jī)制對(duì)前兆數(shù)據(jù)庫(kù)進(jìn)行訪問并指出了其中的缺陷;然后,給出了通過(guò)組件對(duì)象模型(COM)的訪問方式獲取前兆觀測(cè)數(shù)據(jù)的方法;最后,給出了使用該方法進(jìn)行函數(shù)封裝后,在實(shí)際應(yīng)用中的實(shí)例的全部源代碼。通過(guò)本文提供的方法,臺(tái)站工作人員或科研人員可以快速、方便的通過(guò)MATLAB獲取前兆數(shù)據(jù)庫(kù)中的相關(guān)信息進(jìn)行科研及日常管理工作。
前兆數(shù)據(jù)庫(kù) MATLAB 觀測(cè)數(shù)據(jù)
我國(guó)的地震前兆數(shù)據(jù)庫(kù)是指除地震學(xué)以外的地磁、地電、地下流體、重力和定點(diǎn)形變等多學(xué)科固定臺(tái)站觀測(cè)數(shù)據(jù)的管理及共享平臺(tái)(周克昌等,2007)。前兆觀測(cè)系統(tǒng)所獲得的觀測(cè)數(shù)據(jù)通過(guò)臺(tái)站、區(qū)域中心、學(xué)科中心及國(guó)家中心的四級(jí)體系進(jìn)行匯集、管理、交換及應(yīng)用。目前,我國(guó)的地震前兆數(shù)據(jù)庫(kù)采用ORACLE數(shù)據(jù)庫(kù)系統(tǒng)(周克昌等,2010)。
MATLAB是Mathworks公司開發(fā)的大型數(shù)學(xué)計(jì)算應(yīng)用軟件系統(tǒng)。它提供了強(qiáng)大的矩陣計(jì)算和可視化功能,是科學(xué)研究及工程應(yīng)用方面的主流軟件(Mathworks,2011)。目前的最新版本是2011年9月發(fā)布的2011b。MATLAB包含了一系列豐富的稱為工具箱(Toolbox)的專用函數(shù)庫(kù),是針對(duì)不同學(xué)科和不同專業(yè)應(yīng)用的得力工具。本文重點(diǎn)應(yīng)用的是數(shù)據(jù)庫(kù)工具箱(Database Toolbox)。中國(guó)地震局地球物理研究所已經(jīng)購(gòu)買了MATLAB的行業(yè)專用版本。
通過(guò)前兆數(shù)據(jù)庫(kù)獲取觀測(cè)數(shù)據(jù)是進(jìn)行科學(xué)研究或日常管理必須要掌握的一項(xiàng)技術(shù)。盡管現(xiàn)有的前兆臺(tái)網(wǎng)數(shù)據(jù)管理系統(tǒng)可以進(jìn)行手工下載,也可以采用行業(yè)專用軟件或第三方開發(fā)語(yǔ)言編程獲取。但使用MATLAB訪問數(shù)據(jù)庫(kù)可以以靈活多樣的方式獲取高度定制化的觀測(cè)數(shù)據(jù)來(lái)開展包括研究在內(nèi)的各項(xiàng)工作,并且使得這些數(shù)據(jù)處理及研究流程能夠在同一平臺(tái)下無(wú)縫整合。但是,由于數(shù)據(jù)庫(kù)工具箱在處理ORACLE數(shù)據(jù)庫(kù)上的某些局限性以及涉及到對(duì)數(shù)據(jù)庫(kù)訪問機(jī)制缺少了解,導(dǎo)致使用MATLAB訪問前兆數(shù)據(jù)庫(kù)在地震前兆科研管理領(lǐng)域并不普及,臺(tái)站工作人員及科研人員缺少一條可以快速、方便的通過(guò)MATLAB獲取前兆數(shù)據(jù)庫(kù)中的相關(guān)數(shù)據(jù)信息進(jìn)行科研及日常管理工作的捷徑。
本文首先介紹包括ODBC、JDBC以及OLE-DB等主流的數(shù)據(jù)庫(kù)訪問機(jī)制以及在MATLAB中如何實(shí)現(xiàn)以這些機(jī)制對(duì)前兆數(shù)據(jù)庫(kù)進(jìn)行訪問,并指出其應(yīng)用在基于ORACLE前兆數(shù)據(jù)庫(kù)中的局限性;然后給出通過(guò)組件對(duì)象模型(COM)的訪問方式獲取前兆觀測(cè)數(shù)據(jù)的方法;最后給出對(duì)該方法進(jìn)行函數(shù)封裝后在實(shí)際應(yīng)用中的實(shí)例。通過(guò)本文提供的方法,可以為從事地震前兆數(shù)據(jù)研究及管理工作的科研及臺(tái)網(wǎng)工作人員提供更多、更好的數(shù)據(jù)訪問方式,使得利用地震前兆數(shù)據(jù)進(jìn)行后續(xù)分析更加方便快捷,同時(shí)也為地震前兆數(shù)據(jù)庫(kù)在防震減災(zāi)工作中發(fā)揮更好的作用提供了參考。
目前通常使用的數(shù)據(jù)庫(kù)訪問機(jī)制有以下三種:
(1)ODBC(Open DataBase Connectivity)
(2)JDBC (Java Data Base Connectivity)
(3)OLE-DB (Object Linking and Embedding DataBase)
除了上述三種主流的數(shù)據(jù)庫(kù)訪問機(jī)制外,還有DAO(Data Access Object)以及RDO(Remote Data Object)等數(shù)據(jù)庫(kù)訪問機(jī)制。
ODBC是一種底層的訪問技術(shù),因此ODBC API可以使客戶應(yīng)用程序能從底層設(shè)置和控制數(shù)據(jù)庫(kù),用來(lái)完成一些高級(jí)數(shù)據(jù)庫(kù)技術(shù)無(wú)法完成的功能。但不足之處在于ODBC只能用于關(guān)系型數(shù)據(jù)庫(kù),使得利用ODBC很難訪問對(duì)象數(shù)據(jù)庫(kù)及其它非關(guān)系數(shù)據(jù)庫(kù)。
JDBC是一種用于執(zhí)行SQL語(yǔ)句的Java API,可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng)一訪問,它由一組用Java語(yǔ)言編寫的類與接口組成。JDBC提供了一種基準(zhǔn),據(jù)此可以構(gòu)建更高級(jí)的工具和接口,使數(shù)據(jù)庫(kù)開發(fā)人員能夠編寫數(shù)據(jù)庫(kù)應(yīng)用程序。
OLE-DB是一種底層數(shù)據(jù)訪問界面接口,其依賴于組件對(duì)象模型(COM)。它不僅包括微軟資助的標(biāo)準(zhǔn)數(shù)據(jù)接口開放數(shù)據(jù)庫(kù)連通性(ODBC)的結(jié)構(gòu)化問題語(yǔ)言(SQL)能力,同時(shí)還具有面向其他非SQL數(shù)據(jù)類型的能力。OLE-DB是ADO的基礎(chǔ)技術(shù),同時(shí)還是ADO.NET的數(shù)據(jù)源。
在開始這部分之前,請(qǐng)確認(rèn)已經(jīng)在操作系統(tǒng)中安裝了相應(yīng)的數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序。針對(duì)地震前兆數(shù)據(jù)庫(kù)系統(tǒng)采用的ORACLE數(shù)據(jù)庫(kù),需要下載相應(yīng)版本的客戶端,筆者推薦使用Oracle Client 10g Express Edition。MATLAB需要確認(rèn)安裝數(shù)據(jù)庫(kù)工具箱(Database Toolbox),本文使用2011年9月發(fā)行的2011b版本的MATLAB。下面分別介紹三種主流訪問機(jī)制在MATLAB下如何實(shí)現(xiàn)。
2.1 ODBC模式訪問
在使用ODBC機(jī)制訪問數(shù)據(jù)庫(kù)之前,首先需要配置ODBC源。在WINDOWS的控制面板->管理工具里打開數(shù)據(jù)源(ODBC),或者在運(yùn)行里鍵入odbcad32命令直接啟動(dòng)ODBC數(shù)據(jù)源管理器。如圖1所示,在系統(tǒng)DSN的選項(xiàng)卡中點(diǎn)擊添加按鈕
出現(xiàn)創(chuàng)建新數(shù)據(jù)源對(duì)話框,如圖2所示,選擇Microsoft ODBC for Oracle驅(qū)動(dòng)后點(diǎn)擊完成。
如圖3所示,出現(xiàn)Microsoft ODBC for Oralce Setup對(duì)話框。在服務(wù)器一欄填寫數(shù)據(jù)庫(kù)服務(wù)器的IP地址以及實(shí)例,如255.255.255.255/PDBDC。數(shù)據(jù)源名稱和描述一欄填寫便于記憶的任何符合規(guī)則的字符串。用戶名稱可以填寫也可以在后續(xù)對(duì)話框中填寫。
在完成配置后自動(dòng)測(cè)試連接是否有效。隨后在MATLAB的Command Window中鍵入如下代碼:
conn=database('你取的數(shù)據(jù)源名稱','用戶名','密碼');
ping(conn)
這里使用ping命令獲得數(shù)據(jù)庫(kù)連接的狀態(tài)信息。如果連接成功,則打印如下信息,請(qǐng)注意最后一行AutoCommitTransactions的狀態(tài)是True,代表可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作:
DatabaseProductName: 'Oracle'
DatabaseProductVersion: '00.00.0000 Oracle Database 10g Enterprise Edition
Release 10.2.0.3.0 - 64bi'
JDBCDriverName: 'JDBC-ODBC Bridge (msorcl32.dll)'
JDBCDriverVersion: '2.0001 (02.575.1132)'
MaxDatabaseConnections: 0
CurrentUserName: 'QZDATA'
DatabaseURL: 'jdbc:odbc:ddd'
AutoCommitTransactions: 'True'
2.2 JDBC模式訪問
JDBC模式訪問適合在Linux系統(tǒng)或者沒有安裝ORACLE數(shù)據(jù)庫(kù)客戶端的情況下訪問數(shù)據(jù)庫(kù)。由于MATLAB對(duì)Java的支持良好,JDBC也是數(shù)據(jù)庫(kù)工具箱推薦的訪問模式,并且支持多種類型的數(shù)據(jù)庫(kù)訪問。在使用JDBC模式訪問時(shí)同樣需要配置JDBC驅(qū)動(dòng)程序。配置過(guò)程如下:
(1)找到Oracle Client 10g Express Edition所在的安裝目錄中的ojdbc14.jar文件:
一般位于...XEClientjdbclib
拷貝到如下文件目錄下:
一般位于...MATLABR2011bjavajar oolbox
(2)打開如下目錄中的classpath.txt文件
一般位于...MATLABR2011b oolboxlocal
并在該文件中最后一行添加如下語(yǔ)句并保存:
$matlabroot/java/jar/toolbox/ojdbc14.jar
完成配置后,在MATLAB的Command Window中鍵入如下代碼測(cè)試連接是否有效:
conn = database('數(shù)據(jù)庫(kù)實(shí)例名','用戶名','密碼','oracle.jdbc.driver. OracleDriver','
jdbc:oracle:thin:@IP地址:端口號(hào):');
ping(conn)
如果連接成功則返回有效值。打印信息如下:
DatabaseProductName: 'Oracle'
DatabaseProductVersion: [1x128 char]
JDBCDriverName: 'Oracle JDBC driver'
JDBCDriverVersion: '11.2.0.1.0'
MaxDatabaseConnections: 0
CurrentUserName: 'QZDATA'
DatabaseURL: 'jdbc:oracle:thin:@10.5.67.11:1521:PDBQZ'
AutoCommitTransactions: 'True'
2.3 OLE-DB模式訪問
OLE-DB模式非常適合在WINDOWS系統(tǒng)下多類型的數(shù)據(jù)庫(kù)訪問,通過(guò)其上層的ADO/ADO.NET等高級(jí)組件技術(shù)可獲得很高的數(shù)據(jù)庫(kù)訪問效率。利用OLE-DB模式訪問,同樣需要驅(qū)動(dòng)的支持。安裝完Oracle Client 10g Express Edition后就產(chǎn)生OraOLEDB10.dll驅(qū)動(dòng)。OLE-DB在使用過(guò)程中需要在MATLAB中創(chuàng)建ADO對(duì)象,其代碼如下:
cn = actxserver('ADODB.Connection');
然后針對(duì)Oracle數(shù)據(jù)庫(kù)使用invoke函數(shù)寫入連接字符串以及連接信息:
invoke(cn,'Open', 'Provider=OraOLEDB.Oracle;Data Source=數(shù)據(jù)庫(kù)IP/實(shí)例數(shù)據(jù)庫(kù);
User Id=用戶名;Password=密碼');
最后設(shè)定保持連接時(shí)間和數(shù)據(jù)庫(kù)操作狀態(tài):
set(cn,'CommandTimeout',60)
invoke(cn,'BeginTrans')
測(cè)試并查看是否已經(jīng)連接使用如下命令,如果返回值為1,則連接成功:
cn.stat
通過(guò)Workspace可以查看cn的工作狀態(tài),如圖4所示:
本文著重介紹ORACLE數(shù)據(jù)庫(kù)連接的方法,但是如果想要訪問更多種類的數(shù)據(jù)可以通過(guò)修改連接字符串Provider的方式,以下是常用的數(shù)據(jù)庫(kù)連接字符串:
連接Access數(shù)據(jù)庫(kù)
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=X:mydatabase.mdb;
連接Access2007數(shù)據(jù)庫(kù)
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=X:myAccess2007file.accdb;
Persist Security Info=False
連接SQL Server 2008數(shù)據(jù)庫(kù)
Provider=SQLNCLI10;Server=服務(wù)器IP;Database=數(shù)據(jù)庫(kù)名稱;Uid=用戶名; Pwd=密碼;
連接MySQL數(shù)據(jù)庫(kù)
Provider=MySQLProv;Data Source=數(shù)據(jù)庫(kù)IP/數(shù)據(jù)庫(kù)名稱;User Id=用戶名;Password=密碼;
連接IBM DB2數(shù)據(jù)庫(kù)
Provider=IBMDADB2;Database=數(shù)據(jù)庫(kù)名稱;Hostname=數(shù)據(jù)庫(kù)IP;Protocol=TCPIP;
Port=50000;Uid=用戶名;Pwd=密碼;
通過(guò)上述討論,已經(jīng)建立了MATLAB下訪問前兆數(shù)據(jù)庫(kù)的三種方法,在成功獲取連接信息后就需要獲得感興趣的數(shù)據(jù)信息。
首先介紹如何通過(guò)ODBC和JDBC方式獲取數(shù)據(jù)。使用MATLAB的數(shù)據(jù)庫(kù)工具箱操作數(shù)據(jù)庫(kù)并獲取數(shù)據(jù),通常是在建立完ODBC和JDBC連接得到連接對(duì)后,統(tǒng)一使用exec和fetch命令獲取數(shù)據(jù),具體格式如下:
返回游標(biāo)=exec(連接對(duì)象,sql語(yǔ)句)
獲取數(shù)據(jù)的結(jié)構(gòu)體=fetch(返回的游標(biāo))
最終數(shù)據(jù)=獲取數(shù)據(jù)的結(jié)構(gòu)體.data
這里涉及到的SQL語(yǔ)句需要符合標(biāo)準(zhǔn)SQL。
下例是使用該方法獲取前兆數(shù)據(jù)庫(kù)中所有產(chǎn)出秒采樣數(shù)據(jù)的地磁臺(tái)站的名稱、經(jīng)緯度等信息:
conn = database('數(shù)據(jù)庫(kù)實(shí)例','用戶名','密碼','oracle.jdbc.driver. OracleDriver','
jdbc:oracle:thin:@IP地址:1521:');%獲得連接
sql='select distinct(a.stationid), b.stationname, b.ALTITUDE, b.LONGITUDE,
b.LATITUDE from qz_312_dys_02 a, qz_dict_stations b where a.stationid=b.
stationid order by a.stationid';%得到臺(tái)站名稱及經(jīng)緯度信息的sql語(yǔ)句
curs=exec(conn,sql);%執(zhí)行sql語(yǔ)句返回游標(biāo)
sdata=fetch(curs)%獲得數(shù)據(jù)的游標(biāo)結(jié)構(gòu)體
data=sdata.data;
可以查看到sdata游標(biāo)結(jié)構(gòu)體中的data中有77行數(shù)據(jù),即目前全國(guó)產(chǎn)生秒數(shù)據(jù)的臺(tái)站有77個(gè),每行5列,分別是臺(tái)站編號(hào)、經(jīng)緯度、海拔高度等。游標(biāo)結(jié)構(gòu)體及最終結(jié)果如圖5所示:
在MATLAB中還提供了圖形交互形式的數(shù)據(jù)庫(kù)查詢獲取方式。其命令是在Command Window中輸入querybuilder啟動(dòng)圖形界面,在配置好的ODBC連接中選取特定的庫(kù)和表進(jìn)行交互式查詢,如圖6所示。通過(guò)2.1小節(jié)中的ODBC配置好ddd的連接后,選擇表以及字段進(jìn)行查詢并指定變量存儲(chǔ)結(jié)果。
通過(guò)數(shù)據(jù)庫(kù)工具箱以及ODBC和JDBC方式可以獲取一部分前兆數(shù)據(jù)庫(kù)中的信息,但是在獲取觀測(cè)數(shù)據(jù)方面卻可能遇到困難。其原因主要包括:首先,觀測(cè)數(shù)據(jù)在ORACLE數(shù)據(jù)庫(kù)中使用了用于存儲(chǔ)大對(duì)象的數(shù)據(jù)類型(LOB)中的CLOB類型字段,使得觀測(cè)數(shù)據(jù)的存儲(chǔ)空間增大至4GB,同時(shí)在如此大對(duì)象的處理上需要進(jìn)行轉(zhuǎn)換處理,比如java中需要轉(zhuǎn)化為字節(jié)流形式或者采用oracle objects for ole方式;其次,MATLAB中的數(shù)據(jù)庫(kù)工具箱不支持LOB字段的讀取。在數(shù)據(jù)庫(kù)工具箱中僅支持表字段數(shù)據(jù)類型:BOOLEAN、CHAR、DATE、DECIMAL、DOUBLE、FLOAT、INTEGER、LONGCHAR、NUMERIC、REAL、SMALLINT、TIME、TIMESTAMP、TINYINT、VARCHAR、NTEXT(Mathworks)。因此,采用MATLAB提供的數(shù)據(jù)庫(kù)工具箱不能獲得前兆數(shù)據(jù)庫(kù)中存儲(chǔ)觀測(cè)數(shù)據(jù)的字段類型(Mathworks, 2001)。
采用COM組件形式調(diào)用ADO組件并以O(shè)LE-DB方式訪問數(shù)據(jù)就可以解決這樣的問題,關(guān)鍵在于:在以O(shè)LE-DB方式調(diào)用ADO組件的過(guò)程中,CLOB字段可以以字節(jié)流的形式進(jìn)行轉(zhuǎn)化,在MATLAB中以字符的形式展示。因此,獲取CLOB觀測(cè)數(shù)據(jù)后只需要將字符串轉(zhuǎn)化為雙精度數(shù)據(jù)即可。
下面以查詢某臺(tái)站、某個(gè)測(cè)點(diǎn)和某天的GM4原始觀測(cè)數(shù)據(jù)為例予以說(shuō)明。
SQL語(yǔ)句如下:
sql= select startdate,stationid,pointid,itemid,obsvalue from qz_312_dys_02 where
stationid='12005' and pointid='4' and startdate=to_date('2010-10-09','yyyy-mm-dd')
請(qǐng)注意,該SQL語(yǔ)句包含引號(hào)等特殊字符符號(hào),在MATLAB中需要進(jìn)行調(diào)整,即在單引號(hào)處轉(zhuǎn)換為三個(gè)單引號(hào),或者可以采用本文推薦的方式,即使用SQL語(yǔ)句在完成測(cè)試后寫入文本文件,之后再由MATLAB中使用文本讀取函數(shù)讀入,避免由于字符串輸入錯(cuò)誤等原因?qū)е虏僮魇?。同時(shí)在文本文件中保存常用的SQL語(yǔ)句也有利于提高工作效率。
具體代碼如下:
cn = actxserver('ADODB.Connection');
invoke(cn,'Open', 'Provider=OraOLEDB.Oracle;Data Source=數(shù)據(jù)庫(kù)IP/實(shí)例數(shù)據(jù)庫(kù);
User Id=用戶名;Password=密碼');
set(cn,'CommandTimeout',60)
invoke(cn,'BeginTrans')
r = invoke(cn,'Execute',sql);
invoke(cn,'CommitTrans');
r.recordcount>0
x=invoke(r,'getrows');
x=x';
invoke(r,'release');
通過(guò)MATLAB運(yùn)行后得到如圖7所示的結(jié)果:
可以看到,最后得到的結(jié)果是細(xì)胞數(shù)組四行五列,分別是日期、臺(tái)站編號(hào)、測(cè)向分量以及觀測(cè)數(shù)據(jù)。通過(guò)對(duì)細(xì)胞數(shù)組的操作及轉(zhuǎn)化可以得到具體的觀測(cè)數(shù)據(jù)值。如:
cell2mat(ans(1,5))
得到了H分量的觀測(cè)值。
本章給出包裝成函數(shù)的數(shù)據(jù)庫(kù)連接及操作的源代碼,通過(guò)本章的實(shí)例,可以完成使用MATLAB讀取前兆數(shù)據(jù)庫(kù)中數(shù)據(jù)的全過(guò)程。
首先給出封裝成函數(shù)(pdbqz.m)的數(shù)據(jù)庫(kù)連接及操作的源代碼。該函數(shù)可以直接在MATLAB中調(diào)用:
function x=pdbqz(sql)
cnstr='Provider=OraOLEDB.Oracle;Data Source=IP地址/ 實(shí)例數(shù)據(jù)庫(kù);User Id=用戶名;
Password=密碼;';
cn = actxserver('ADODB.Connection');
set(cn,'CursorLocation',3);
invoke(cn,'Open', cnstr);
set(cn,'CommandTimeout',60);
invoke(cn,'BeginTrans');
try
r = invoke(cn,'Execute',sql);
invoke(cn,'CommitTrans');
sclSuccess = 1;
catch
invoke(cn,'RollbackTrans');
sclSuccess = 0;
end
if r.recordcount>0
x=invoke(r,'getrows');
x=x';
else
x=[];
end
invoke(r,'release');
下面使用該函數(shù)獲取泰安基準(zhǔn)臺(tái)(臺(tái)站編號(hào)37001)從2010.1—2010.6半年內(nèi)的體應(yīng)變觀測(cè)數(shù)據(jù)。
SQL語(yǔ)句如下:
select * from qz_233_dys_01 where stationid=37001 and pointid='L' and startdate
between to_date('2010-01-01','YYYY-MM-DD') and to_date('2010-06-30','YYYY-MM-DD')
代碼如下:
sql=txt2sql('sql.txt');
data=pdbqz(sql)
圖8是運(yùn)行結(jié)果:
本文介紹了ODBC、JDBC以及OLE-DB等主流數(shù)據(jù)庫(kù)的訪問機(jī)制,以及在MATLAB中如何實(shí)現(xiàn)以這些機(jī)制對(duì)前兆數(shù)據(jù)庫(kù)進(jìn)行訪問,指出了應(yīng)用在基于ORACLE前兆數(shù)據(jù)庫(kù)中的局限性;然后,給出了通過(guò)組件對(duì)象模型(COM)的訪問方式獲取前兆觀測(cè)數(shù)據(jù)的方法;最后,給出了對(duì)該方法進(jìn)行函數(shù)封裝后在實(shí)際應(yīng)用中的實(shí)例。通過(guò)本文提供的方法和源代碼,可以快速、方便的通過(guò)MATLAB獲取前兆數(shù)據(jù)庫(kù)中的相關(guān)數(shù)據(jù)信息,是進(jìn)行科研及日常管理工作的捷徑,同時(shí)也為地震前兆數(shù)據(jù)庫(kù)在防震減災(zāi)工作中發(fā)揮應(yīng)有的作用提供了參考。
周克昌,蔣春花,楊東梅等,2007. 地震前兆數(shù)據(jù)庫(kù)結(jié)構(gòu)規(guī)范. 北京:地震出版社.
周克昌,蔣春花,紀(jì)壽文等,2010. 地震前兆數(shù)據(jù)庫(kù)系統(tǒng)設(shè)計(jì). 地震,(2):143—151.
Mathworks, 2011. http://www.mathworks.cn/products/new_products/latest_features.html?s_cid= HP_FP_LR_2011a.
Retrieving Data from Earthquake Precursor Database Using MATLAB
Xu Qin, Zheng Ningning, Huang Jingguoand Xu Ping
1)China Earthquake Networks Center, Beijing100045, China. 2)Earthquake Administration of Beijing Municipalities, Beijing 100089, China.
Earthquake precursor monitoring data in the database has a very high value in research and application. MATLAB, as a powerful tool, provides us scientific calculation and analysis of seismic precursory data analysis platform. However, MATLAB Toolbox can not be completely communicated with ORACLE databases on precursor data. It is incapable to take precursor monitoring data directly through the MATLAB precursor to subsequent statistics and analytical work. In this article we firstly describe the mainstream database access mechanism and realization in MATLAB how to access to the mechanisms of precursor database. Then we propose the component object model (COM) method of accessing precursor monitoring data, which is the last function encapsulating the methods used in the actual instances of all of the application source code.By using our method, the station staff or researchers can quickly and conveniently to obtain precursor database information.
Precursor database; MATLAB; Monitoring data
GNSS系列數(shù)據(jù)產(chǎn)品在地震監(jiān)測(cè)預(yù)報(bào)中的應(yīng)用(2012419006)資助
2013-04-15
徐沁,女,生于1985年。助理工程師。主要從事前兆數(shù)據(jù)觀測(cè)和期刊編輯出版工作。E-mail: 314577461@163.com
2Microsoft http://msdn.microsoft.com/en-us/library/ ms710252%28VS.85%29.aspx
3ORACLE,http://www.oracle.com/technetwork/ java/javase/jdbc/index.html#corespec40
4Microsoft,http://msdn.microsoft. com/en-us/library/ms722784%28VS.85%29.aspx