崔 仁,孟兆敏,譚巧林,邵長高
(1.國土資源部海底礦產資源重點實驗室 廣州海洋地質調查局,廣東 廣州 510075;
2.上海工程技術大學,上海 201620;3.廣東省地質測繪院,廣東 廣州 510800)
BSR測線導航數據入庫接口模型的設計與實現
崔 仁1,孟兆敏2,譚巧林3,邵長高1
(1.國土資源部海底礦產資源重點實驗室 廣州海洋地質調查局,廣東 廣州 510075;
2.上海工程技術大學,上海 201620;3.廣東省地質測繪院,廣東 廣州 510800)
BSR測線導航數據通常以單個文件形式進行管理,數據的檢索查詢需手工進行,管理復雜且易出錯。采用數據庫形式對單個BSR測線導航數據進行管理,設計了BSR測線導航數據入庫接口模型,并在VB環境下開發了該模型。模型包含BSR測線導航數據庫結構、數據索引方式和導航數據入庫方法。模型對BSR測線導航數據進行了統一管理,提高了數據管理的效率,改善了數據索引機制;同時整合的測線導航數據也為未來測線規劃提供了基礎,特別是在海洋地質調查等數據量大的領域,可以較快的運算速度提取所需數據。
海洋地質調查;似海底反射波;導航數據;數據庫
天然氣水合物作為最有可能替代石油的下一代清潔能源,其研究越來越受重視[1-3]。2013年我國在南海鉆獲了高純度的天然氣水合物,為我國的商業化開采奠定了基礎。近年來,國家對天然氣水合物的調查產生了海量數據,如何有效、安全地管理這些數據資料成為亟待解決的問題。BSR指含水合物的地層在地震反射剖面上常常會出現一強振幅的連續反射波,大致與海底反射波平行,故又稱似海底反射波[1]。研究表明,BSR是目前天然氣水合物識別的重要標志之一[4-7]。海洋地質調查獲取的BSR測線導航數據通常以單個文件形式進行管理,需手工進行數據檢索與查詢,管理復雜且易出錯;目前工作中尚無有效方式管理全部的BSR測線導航數據。本文提出了采用數據庫形式管理單個BSR測線導航數據的方法;設計了BSR測線導航數據的數據接口模型;并在VB環境下實現了BSR測線導航數據模型。模型為單條測線的索引、區域內測線的索引以及任意屬性的索引均提供了基本性支持;同時整合的測線導航數據也為未來測線規劃提供了基礎,特別是在海洋地質調查等數據量大的領域,可以較快的運算速度提取所需數據[5]。
1.1 數據結構
本文將BSR測線導航數據管理分為3個部分(見圖1)。①調查測線數據,負責管理海上野外勘查過程中所有的測線數據信息。調查測線數據表是空間圖形數據表,包含數據集編號、工區編號、測線編號、測線長度、調查類別、起始日期、結束日期、起始經度、起始緯度、終止經度、終止緯度、起始點號、終止點號、調查比例、導航數據文件、數據文件路徑、坐標系統等。②BSR測線信息,負責管理有BSR剖面圖像測線段的基本信息,是對調查測線信息的延伸,即調查側線上含有BSR信息的測線段信息。其內容包含測線編號、BSR測線號、起點經度、起點緯度、終點經度、終點緯度、起點炮號、終點炮號、起點CDP號、終點CDP號、平均雙程時間、平均深度、BSR類型、波形組合、弱振幅、空白帶、備注等。③導航數據信息,即野外勘查測線和BSR測線段的導航信息,主要有測線編號、炮號、經度、緯度4個方面信息。
圖1 BSR測線導航數據總體數據結構
1.2 數據索引
調查測線表中主鍵為測線編號,外鍵為數據集編號,數據集編號負責與整個調查項目的索引;BSR測線表中主鍵為BSR測線號,外鍵為測線編號,測線編號負責與調查測線表的索引;地震測線導航數據表主鍵為炮號,外鍵為測線編號,測線編號負責與調查測線表的索引。BSR測線表與地震測線導航數據表之間索引較為復雜,首先通過調查測線表索引出調查測線編號,然后通過起始炮號、終止炮號字段索引出地震測線導航數據表中的數據。數據集編號采用廣州海洋地質調查通用數據集編碼規則,按“項目代碼—年份—調查船—航次”編碼,項目代碼取自廣州海洋地質調查局數據庫的數據項目代碼表[3]。
2.1 數據入庫及獲取流程
按照BSR測線導航數據結構,本文設計了BSR測線導航數據入庫及獲取流程圖,如圖2所示。
圖2 BSR測線導航數據入庫及獲取流程圖
在數據入庫方面,調查測線信息和BSR測線信息以基本信息形式進行數據錄入或數據導入,要求信息完整,索引結構字段主外鍵不能為空;地震測線導航數據以文件信息形式導入,先讀取導航數據的原始文件,再進行測線編號的信息填充,填充完畢后入庫。
在數據獲取中,首先讀取BSR測線信息,通過測線編號在調查測線表中進行信息索引查詢;再把BSR測線和調查測線兩個數據表信息進行關聯;然后將關聯后的數據表與地震測線導航數據表數據進行索引,尋找導航測線數據表中的測線信息和炮號信息;最終形成完整的BSR測線導航數據表。
2.2 數據原始文件讀取及入庫實現方法
根據BSR測線導航數據入庫及獲取流程,本文設計了一個在VB環境下的數據入庫方法。其難點主要為導航數據文件的導入和數據入庫(圖3)。
圖3 導航原始文件讀取
導航數據文件解析及導入具體實現代碼為:
Private Sub txtLNavFile_LostFocus() '自動填充測線編號,起止點坐標,把文本讀到內存里
On Error GoTo ErrOccurs
Dim strTmp As String
strTmp = FileChk(txtLNavFile)
If strTmp <> "" Then
txtLineID.Text = strTmp '將文件名指定為默認的測線編號
txtLFilePath.Text = txtLNavFile.Text '保存文本數據至內存
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Dim tsFile As TextStream
Set tsFile = fso.OpenTextFile(txtLNavFile.Text, ForReading)
Dim curLine() As String, rLine As String, iNum As Integer, eLine As Integer
Dim curShot As String, curLon As Double, curLat As Double '當前行之炮號,首尾兩點無條件保留,其余按200的間距抽稀
strLons = ""
strLats = ""
curShot = ""
iNum = -1
eLine = tsFile.Line
Do Until tsFile.AtEndOfStream
‘------原始文件讀取及空格信息處理-------------
rLine = Trim(tsFile.ReadLine)
rLine = Replace(rLine, " ", " ")
rLine = Replace(rLine, " ", " ")
rLine = Replace(rLine, " ", " ")
rLine = Replace(rLine, " ", " ")
rLine = Replace(rLine, " ", " ")
curLine = Split(rLine) '解析出的數據為(炮號,緯度,經度)
iNum = iNum + 1
ReDim Preserve wShotID(iNum)
ReDim Preserve wLats(iNum)
ReDim Preserve wLons(iNum)
wShotID(iNum) = curLine(0)
wLats(iNum) = CLng(curLine(1) * 100) / 100
wLons(iNum) = CLng(curLine(2) * 100) / 100
If eLine Mod 200 = 1 Then '取點的行號為:1 201 401 601 ...,如果坐標有誤,則跳過
curShot = curLine(0)
curLat = DegCon(CDbl(curLine(1)))
curLon = DegCon(CDbl(curLine(2)))
If curLat >= 0 And curLat <= 90 And curLon >= 0 And curLat <= 180 Then
strLats = strLats & curLat & " "
strLons = strLons & curLon & " "
End If
End If
eLine = tsFile.Line
DoEvents
Loop
txtLSPoint.Text = wShotID(0)
txtLSLatitude.Text = wLats(0)
txtLSLongitude.Text = wLons(0)
txtLEPoint.Text = wShotID(iNum)
txtLELatitude.Text = wLats(iNum)
txtLELongitude.Text = wLons(iNum)
If curShot <> curLine(0) Then
strLats = strLats & DegCon(CDbl(curLine(1)))
strLons = strLons & DegCon(CDbl(curLine(2)))
Else
strLats = Trim(strLats)
strLons = Trim(strLons)
End If
Set fso = Nothing
tsFile.Close
Set tsFile = Nothing
Else
txtLineID.Text = ""
txtLFilePath.Text = ""
ReDim wShotID(0)
ReDim wLats(0)
ReDim wLons(0)
ReDim curLine(0)
txtLSPoint.Text = ""
txtLSLatitude.Text = ""
txtLSLongitude.Text = ""
txtLEPoint.Text = ""
txtLELatitude.Text = ""
txtLELongitude.Text = ""
End If
strPreNavFile = txtLNavFile.Text
Exit Sub
ErrOccurs:
MsgBox "所用文件不是有效的導航數據文件!", , "原始文件讀取失?。?
End Sub
代碼通過解析導航數據文件的原始數據對數據信息進行提取,再將提取出導航坐標信息的屬性信息進行數據入庫,空間信息進行數據繪圖形成地圖點坐標信息。
2.3 坐標投影轉換
測線導航數據提取后要進行WGS84投影下經緯度坐標與墨卡托投影的轉換。墨卡托投影正解公式為[8]:
式中,k0為原點處比例因子;θ1為墨卡托投影中第一標準緯線。
式中,E為墨卡托投影緯度坐標;a為地球半徑,單位為m;FE為經度偏移;λ為經度;λ0為起點經度。
N= FN+aK0ln{tan(π/4+θ/2)[(1-esinθ)/(1+esinθ)](e/2)}式中,N為墨卡托投影經度坐標;FN為緯度偏移;θ為測量經度。
基于ArcEngine的坐標轉換方法可詳見參考文獻[8],墨卡托投影反解公式可詳見參考文獻[9]、[10]。
2.4 BSR測線生成
坐標轉換后,再生成數據測線,其核心代碼為:
Case "BSR測線導航" '地震測線導航
If Trim(cmbELineID.Text) = "" Then
MsgBox "測線編號不能為空,請重新輸入!"
cmbELineID.SetFocus
ElseIf Trim(txtEShotID.Text) = "" Then
MsgBox "炮號不能為空,請重新輸入!"
txtEShotID.SetFocus
Else
strObject = "select OBJECTID from sde." & strCurSeaArea & "_調查項目基本信息 "
ObjectRs.Open strObject, Conn, adOpenKeyset, adLockOptimistic
While Not ObjectRs.EOF
m = m + 1
ObjectRs.MoveNext
Wend
If m <> 0 Then
ObjectRs.MoveFirst
End If
For n = 1 To m
If ObjectRs.Fields(0).Value = "" Then
Exit For
Else: ObjectRs.MoveNext
End If
Next
ObjectRs.Close
'查詢是否有重復記錄
sqlStr = "select 測 線 編 號 , 炮 號 from sde." & strCurSeaArea & "_BSR測線導航數據 where trim(測線編號)='" _& Trim(cmbELineID.Text) & "' and trim(炮號)='" & Trim(txtEShotID.Text) & "'"
prjRS.Open sqlStr, Conn, adOpenKeyset, adLockOptimistic
If prjRS.BOF And prjRS.EOF Then
prjRS.Close
Set prjRS = Nothing
'允許插入一條新記錄
sqlStr = "insert into sde." & strCurSeaArea & "_BSR測線導航數據 (OBJECTID,測線編號, 炮號, 經度, 緯度) values ('" & n & "','"
sqlStr = sqlStr & Trim(cmbELineID) & "', '" & Trim(txtEShotID) & "', '"
sqlStr = sqlStr & Trim(txtELongitude) & "', '" & Trim(txtELatitude) & "')"
Conn.Execute sqlStr
openSDEWorkspace.ExecuteSql (sqlStr)
If Conn.State = adStateOpen Then Conn.Close
MsgBox "成功錄入一條記錄!", , "提示:"
'********* (注:單個導航點不生成圖形) *********
Else
prjRS.Close
Set prjRS = Nothing
If Conn.State = adStateOpen Then Conn.Close
MsgBox "數據庫中已有使用[" & Trim(cmbELineID.Text) & "]作為測線編號, [" & Trim(txtEShotID.Text) & "]作為炮號的記錄存在!", , "重復錄入錯誤:"
End If
cmbELineID.SetFocus
End If
BSR測線導航數據生成前需進行索引過程主鍵檢查,檢查通過后才能進行打點成線。
實施天然氣水合物資源勘查試采工作、加快水合物的商業開發,將是解決我國能源供需矛盾、保證國家能源安全的有效途徑之一。為此,廣州海洋地質調查局近年實施了大規模的水合物勘查工作,獲取了大量地球物理、地球化學、地質學、環境科學等多個學科的數據。為了保證對勘查數據的有效安全管理,實現專業化角度的共享服務,廣州海洋地質調查局建設了水合物數據庫管理系統(圖4)。目前系統已應用于廣州海洋地質調查局的實際工作中,持續為實際勘查工作服務。系統的數據結構以及對BSR測線導航數據的管理均采用本文設計的BSR測線導航數據入庫接口模型。
BSR測線導航數據是海洋地質調查野外數據的重要內容,針對目前處理BSR數據技術的缺乏,按照本文設計的BSR測線導航數據結構和實現方法,在水合物數據庫管理系統中開發了一個數據錄入模塊。該模塊實現了BSR測線導航數據原始文件讀取、屬性數據錄入、空間數據成圖等功能,負責測線數據及BSR測線導航數據的管理及錄入。該模塊的實際應用證明了本文設計模型的可靠性和可推廣性。
圖4 水合物數據庫管理系統界面
本文設計了BSR測線導航數據的數據庫結構及索引機制,實現了對BSR測線導航數據的安全管理;還設計了BSR測線導航數據原始文件及數據庫之間的入庫接口,并在VB環境下實現了數據接口,提供了專業的代碼。目前BSR測線導航數據入庫接口模型已進入實際應用階段,應用效果良好,具有解決實際工作的能力,值得借鑒。
[1] 金慶煥,張光學,楊木壯,等.天然氣水合物資源概論[M].北京:科學出版社,2006:2-5
[2] 黃永樣,張光學.我國海域天然氣水合物地質:地球物理特征及前景[M].北京:地質出版社,2009
[3] 陳宏文,王立飛,邵長高,等.天然氣水合物屬性及空間數據庫結構設計[J].海洋地質前沿,2012,28(5):59-63
[4] 沙志彬,楊木壯,梁金強,等.BSR的反射波特征及其對天然氣水合物識別的應用[J].南海地質研究,2003(1):55-61
[5] 徐華寧,楊勝雄,鄭曉東,等. 南中國海神狐海域天然氣水合物地震識別及分布特征[J].地球物理學報,2010,53(7):1 691-1 698
[6] 鄒大鵬,盧博,閻貧,等.南海北部海底沉積物在溫度變化下的三種聲速類型[J].地球物理學報,2012,55(3):1 017-1 024
[7] 宋海斌,吳時國,江為為.南海東北部973剖面BSR及其熱流特征[J].地球物理學報,2007,50(5):1 508-1 517
[8] 邵長高,譚建軍,荊麗梅,等.海洋小比例尺地圖精確測量及計算方法[J].地理與地理信息科學,2009,25(2):42-45
[9] International Association of Oil & Gas Producers. Coordinate Conversions and Transformation Including Formulas[M]. OGP Publicaiton,2013:35-39
[10] 邵長高,崔仁.地震剖面解釋數據提取接口方法[J].測繪科學,2015(???:143-146
P208
B
1672-4623(2017)05-0025-04
10.3969/j.issn.1672-4623.2017.0050.8
崔仁,主要從事海洋地質調查數據入庫、數據結構制定、原始資料管理等方面研究。
2016-04-27。
項目來源:國家高技術研究發展計劃資助項目(2013AA092501、2013AA0925010401);“127”國家專項資助項目(DD20160227、DD20160227-6、GZH201100312);“729”國家專項資助項目(GZH201200512、GZH201200512-2)。