崔 仁,孟兆敏,谭巧林,邵长高
(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)。