ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

双狐构造图成图与井校闭环:数据、网格化、时深转换避坑

双狐构造图成图与井校闭环:数据、网格化、时深转换避坑

简介:双狐软件构造图编制实用资料,面向地质、物探及石油工程领域的技术人员与学习者,聚焦地质成图与构造成图中的实际问题:如何把井位、地质分层、断层、T0散点等基础数据整理成规范格式,并在软件中完成修饰、网格化、时深转换、井校与成图出图。资料以PDF形式呈现,仅1个文件,压缩包约646KB,篇幅集中,适合作为手边速查或流程参照。内容按操作环节展开:井位(含斜井、水平井轨迹)、海拔分层、断层与作图边界、T0散点四类数据的字段要求与来源;点类与线类图层的导入修饰,正断层上下盘的分别处理;网格参数、不可信度、等值线间距的选取与结果检查;时深拟合与转换、深度散点网格化、误差统计与校正、等值线去冗余、平滑与编辑,直至图框、图例、比例尺、指北针等整饰及图片导出。内容预览还涉及地震属性图的烤屏校正与老图件的活化描线。已有148人浏览学习,可为构造图编制与勘探成果成图提供可复用的操作参考。

1. 构造图被退回来,十次有八次是井点对不上

构造图交上去被打回来,理由往往不是线条不够顺滑,而是把井点分层海拔往图上一叠,偏差几十米,断层组合再合理也得重来。双狐软件在地质成图这条线上干的活,说到底是把井位、地质分层、断层边界、T0 散点这几堆表格,变成一张能自洽、能过井校的构造图,再顺手把地震属性图、老图件叠进来做统一整饰。它不适合只想画张示意图的人,适合手上真有井、有解释成果、要对井点相对误差负责的勘探开发从业者。下面按实际干活的顺序走一遍:数据怎么备、图层怎么分、网格化参数怎么定、时深怎么拟合、井校怎么闭环,参数和翻车点都摆在明面上。

2. 四类基础数据:三列、四列与不能动的列序

双狐的导入界面按列索引做映射,不做字段名智能识别,这就意味着表格的列数和列序是硬约束:多一列就整体错位,少一列直接报错,列序换了它照样能导进去,只是导进去的东西你自己都不认识。所以开工前第一件事不是打开软件,而是把四类数据摊在表格里逐列核对。井位、分层、断层边界、T0 散点各有各的格式要求,其中 T0 散点最苛刻——只能三列,顺序不能变。下面按我实际备份的顺序一类一类过。

2.1 井位与井斜:直井三列起步,斜井要补井口、轨迹、目的层

直井的井位表最省事,只要井名、X、Y 三列,X 和 Y 必须是投影坐标(单位米),不能拿经纬度凑数,因为后面网格化和误差统计都是按平面距离算的,经纬度进去出来的图比例完全是乱的。

井名,X,Y W-01,20636904.000,4205864.000 W-02,20640592.000,4205895.000

这段表头的顺序就是双狐导入时右侧 xyz 下拉框要对齐的顺序:第一列映射到名称,第二列映射到 X,第三列映射到 Y。导入之后如果点全挤在画布左下角,八成是 X/Y 映射反了或者用了经纬度。

斜井和水平井要复杂一档,除了井口坐标,还得准备井斜轨迹和目的层坐标两块。井斜轨迹常见两种格式:原始的是“斜深—井斜角—方位角”,算好的是“垂深—东西位移—南北位移”。两种都能用,区别在于前者需要先做轨迹计算拿到目的层垂深和水平位移,后者直接就是目的层处的空间位置。

数据类型最少列列序要求常见来源
井位井名、X、Y严格,不可插列井数据库导出
井斜轨迹斜深、井斜角、方位角按工具要求钻井轨迹表
地质分层井名、地层名、底深海拔、X、Y后三列必须对齐井数据库导出
断层与边界X、Y、点号、线号严格解释软件导出
T0 散点X、Y、T0严格,只此三列解释软件导出

斜井这块最容易省事省出问题:只导井口坐标不导轨迹,图上井点位置就是地面井口的位置,目的层在几百米外的水平位移被整个吃掉,井校的时候误差全堆在这一点上,回头找原因能耗掉半天。

2.2 分层、断层边界与 T0 散点:多一列就导不进去

地质分层表的列稍微多一列,但每一列都有明确含义,缺一不可。

井名,地层名称,底深海拔(米),层底横坐标(米),层底纵坐标(米) W-01,Es3x,-3342.36,20636958.55,4205848.33 W-02,Es3x,-3329.93,20640592.10,4205895.20

底深海拔是负值,表示海平面以下多少米,这一列如果误填成井深(正数),后面时深拟合出来的公式会整体抬上去一个常数,图上所有等值线跟着平移,而且平移量随井深变化,不是简单加个固定值就能救回来的。层底横纵坐标是分层点落在目的层上的平面位置,斜井里它和井口坐标不是一个点,这一点在叠图检查时特别明显。

断层和作图边界走的是线类数据,实际导出常见四列:X、Y、段内点号、断层编号。

X,Y,点号,断层编号 20632310.000,4209667.500,6,1 20632486.000,4210503.500,7,1 20643268.000,4210115.000,7,1 20634040.000,4209691.000,6,2 20634064.000,4201769.500,7,2

第三列在示例里是段内递增的点序号,第四列用来区分不同断层线,同一条断层的不同线段共用同一个编号。导入时把编号列映射到线编号字段,双狐会按编号把点串成一条条线,如果编号列映射错了,几条断层会被连成一条横穿全图的乱线。

T0 散点表的约束最死,只能三列,顺序不能变,连点号列都不能加。

X,Y,T0 20634050.00000,4202011.98578,2828.00000 20634050.00000,4202311.96682,2878.50000 20634050.00000,4202511.95419,2894.00000

T0 是双程旅行时(毫秒),网格化之前它只是散点,网格化之后才变成时间曲面。如果要做厚度图,把第三列换成厚度值,格式完全一样,别在同一个文件里既放 T0 又放厚度,双狐读到第三列就当时间用。

导入前我习惯跑一遍列数校验,几十行的小脚本能省掉后面几小时的返工:

import csv # 每个文件期望的列数,跟双狐导入时的映射一一对应 spec = {"wells.csv": 3, "tops.csv": 5, "faults.csv": 4, "t0.csv": 3} for fn, n in spec.items(): with open(fn, newline="", encoding="utf-8-sig") as f: rows = list(csv.reader(f)) header, body = rows[0], rows[1:] bad = [(i, len(r)) for i, r in enumerate(body, start=2) if len(r) != n] print(f"{fn}: 表头{len(header)}列, 数据{len(body)}行, 异常{len(bad)}行", bad[:5])

逻辑很直白:按文件名读期望列数,逐行比对,行号从 2 开始是为了跟 Excel 里看到的行号对上,方便直接跳过去改。encoding="utf-8-sig"是给从 Excel 另存为 CSV 的文件准备的,带 BOM 的表头第一列会被读成带不可见字符的字段名,虽然这个脚本里不影响列数判断,但后面用 pandas 处理时会莫名其妙多出一个空列。只打印前 5 条异常,是防止几千行的文件刷屏。这一步跑完,四类数据的骨架就算立住了。

3. 图层导入与修饰:点类线类分开走,断层先分盘

双狐里所有导入的对象都落在图层上,导入时选点类还是线类,决定了后面能用哪些修饰手段。井位、分层、井斜是点类,断层、作图边界是线类,两类不能混在一个图层里管,否则修饰面板里一半参数是灰的。我一般按“点类三件套 → 线类两件套 → 底图叠合”的顺序推进,每导完一类就立刻改名、修饰、存盘,不攒到最后一起弄,因为图层一多,图层 0这种默认名字根本对不上号。

3.1 点类三件套:井位、分层、井斜的导入与修饰

启动双狐,新建空白画布,点“新建”按钮后从文件菜单导入井位文件。导入对话框里选点类信息,右侧 xyz 三个下拉框分别对到 X、Y 和名称列,确认后点界面上方的全图显示图标,让所有点落进视野。这时候图层管理器里躺着一个叫图层 0的东西,双击改成“井位”,再右键进修饰面板调符号。

修饰参数没有标准答案,但有两条经验:井位符号直径按出图比例定,1:50000 的图面上 2 到 3 毫米比较合适,太小打印出来看不见;颜色跟后面等值线拉开,等值线用黑色或深灰,井位用红色或蓝色圆点,叠在一起才分得清。

地质分层导入同样是点类,但要注意一个细节:分层点要按地层名分组,不同层位用不同颜色或符号形状,否则一张图上几十口井几百个分层点全是一个样子,根本没法检查哪口井缺层。导入之后在修饰面板里按“地层名称”字段做分类,双狐支持按字段值自动分配符号,这一步做完,缺层、串层的井一眼就能看出来。

井斜的处理跟直井不一样。如果只导井口坐标,图上就一个点;要把轨迹也表达出来,得把井斜轨迹按线类导入,或者用专门的井斜显示功能按斜深分段画。我一般先导井口点,再把轨迹表按线类导进来,每条轨迹一个线编号,修饰成细虚线,跟断层线区分开。斜井的目的层坐标单独做成一个点图层,用来跟分层数据交叉核对。

3.2 线类两件套:断层上下盘与作图边界的修饰边界

断层导入时在导入对话框里选线类信息,xyz 下拉框对到 X、Y 和线编号。导完先全图显示看一眼走向对不对,再改图层名、右键修饰。断层修饰的核心不是线宽和颜色,是上下盘的区分。

正断层必须把上升盘和下降盘分开修饰,常见做法是用两条平行线加齿状符号,齿指向下降盘;双狐里可以给同一条断层建两个线型,一段画实线一段画带齿线,也可以直接用断层面符号。断距小的逆断层可以不分上下盘,一条实线加三角符号就够了,分得太细反而在图面上糊成一片。断距大的逆断层还是要分,因为上下盘的地层对接关系不一样,读图的人要靠这个判断接触关系。

作图边界是另一类线,作用是框住有效数据范围。它的修饰反而要克制:细实线、浅灰、不加符号,因为它是辅助线不是地质信息。导入顺序上我习惯先导边界再导断层,边界在最底层,断层压在上面,等值线再压上去,图层顺序从下往上依次是边界、断层、等值线、井位、分层,导出前检查一遍,顺序错了打印出来断层会被等值线盖住。

修饰参数可以参考这张表,具体数值按项目习惯调:

对象线宽/符号颜色备注
作图边界0.1 到 0.15 毫米浅灰不加符号,置于底层
正断层0.3 毫米 + 齿标黑色齿指下降盘,上下盘分线型
小断距逆断层0.25 毫米 + 三角黑色可不分盘
井位直径 2 到 3 毫米红/蓝按出图比例定
分层点直径 1.5 毫米按层位分色按地层名分类

每导完一类就另存一次,文件名带日期和版本号,比如断层_0821_v2.dfd。这个习惯看着啰嗦,等哪天参数调乱了想回退,就知道有多值。

3.3 属性图烤屏与四点校正:没有矢量的底图怎么落地

地震属性图在双狐里不是矢量导入的,走的是烤屏加坐标校正的路子。先在属性提取软件里把色标、对比度调到满意,再在双狐里新建空白画布,把属性图截图粘贴进去。

这里有个分情况处理:属性图周边自带坐标刻度的,只需拷屏一次不带井位的属性图,粘贴后做坐标校正即可;周边没有坐标的,要拷两次,一次带井位、一次不带井位,两张图在画布上必须完全重叠,然后用带井位那张去对井位,用不带井位那张做底图。两张图没对齐,后面校正出来的坐标全是歪的,这是属性图流程里最常见的一类翻车。

坐标校正优先用四点校正,四个点尽量覆盖全图四角,不要挤在中间一小块。每个点的坐标要准,拾取的时候放大到像素级,点错一个角,整张图就是斜的。校正完之后用内切、外切功能把图框外的多余部分切掉,再叠井位检查——如果井点落不到属性图的井位上,说明校正点选错了,回去重做。

老图活化是同一套逻辑的延伸:导入前人图件、坐标校正、建图层、描线描点把需要的元素分图层采集下来,等值线类的先赋值再网格化,最后跟自己的图件叠合。这一步的坑在于描线时图层没分清楚,所有元素堆在一个图层上,后面想单独改某条断层都下不了手。

4. T0 网格化:参数、临时目录与“满意”的判据

网格化是整个流程里最玄学的一步,同一份 T0 散点,网格间距差一点、不可信度调一档,出来的曲面能差出一个小圈闭。双狐的网格化模块把结果临时写在C:/temp下,文件名固定为Contour.dfd和f(x,y).dfg,这两个文件一个带等值线可编辑,一个是纯网格用于曲面运算,后面的时深转换、误差校正全靠它们。搞清楚这两个文件各自的用途,比记住参数数值更重要。

4.1 网格参数三件事:网格间距、不可信度、等值线间距

网格化对话框里参数不少,真正影响结果的是三个:网格间距、不可信度、等值线间距。

网格间距决定曲面的分辨率。经验值是取数据点平均间距的三分之一到五分之一,点距 500 米的话网格取 100 到 150 米比较合适。取太大,断层附近的地形拐点被抹平;取太小,网格文件体积暴涨,而且散点稀疏的地方会插出一堆虚假的小起伏。判断方法很简单:网格化完把等值线叠在散点上,看等值线是不是顺着散点的趋势走,出现明显的锯齿或者孤立小圈,就是间距偏小了。

不可信度控制的是外推范围。数据覆盖不到的区域,网格化算法会往外推,推得越远越不可信。这个参数调大,有效曲面收缩;调小,边部会推出大片假等值线。我一般先按默认值跑一遍,看边部有没有明显外推的痕迹,有就往上调一档重跑。

等值线间距是成图参数,不是网格化参数,但它跟网格间距要匹配。间距取 10 米还是 20 米,取决于构造的陡缓:缓构造取 5 到 10 米,陡构造取 20 到 50 米。间距太小,等值线密到糊成一片;间距太大,圈闭形态看不出来。

4.2 Contour.dfd 与 f(x,y).dfg:临时文件与结果判读

网格化跑完,结果不在你指定的目录里,而在C:/temp下,名字固定。这是双狐的一个设计习惯,很多人第一次用会找不到文件。

Contour.dfd是带等值线的图形文件,能直接双击打开、能编辑能修饰,用来肉眼检查网格化质量。f(x,y).dfg是纯网格文件,没有图形,专门用于单网格计算或者两个网格之间的运算,后面的时深转换、误差校正都要拿它当输入。

判读网格化结果就看Contour.dfd:等值线走向是不是跟散点趋势一致、断层两侧有没有被错误平滑、边部有没有大片同心圆状的外推假象、有没有孤立的牛眼。不满意就回退改参数重跑,不要在这时候手动去改等值线,改了也是白改,因为下一步时深转换用的是网格文件不是等值线。

满意之后立刻把这两个文件复制或剪切到项目文件夹里,别留在C:/temp。下一次网格化会直接覆盖同名文件,前一次的成果说没就没,这个后悔药没处买。

4.3 时深拟合与时深转换:从井位统计到曲面逻辑运算

T0 是时间,构造图要的是深度,中间靠时深关系搭桥。做法是在井位图层上右键,进统计功能,统计每口井井口位置的 T0 值,再跟这口井目的层的海拔深度做拟合,得到一条拟合公式。

拟合形式常见三种:线性、二次多项式、分段线性。速度横向变化不大的地区,线性拟合的相关系数能到 0.95 以上,够用;速度横向变化明显,二次多项式拟合得更贴,但外推段容易发散,井少的区域慎用。判断标准不是看相关系数哪个高就用哪个,而是看残差分布——残差随深度系统性偏大,说明拟合形式选错了,换一种再试。

拿到拟合公式后做时深转换,走曲面逻辑运算模块,把公式作用到 T0 网格文件f(x,y).dfg上,输出深度曲面。这一步的输入是网格文件不是等值线文件,选错文件会直接报错或者算出一堆无意义的值。转换完的深度曲面还没经过井校,叫“未井校深度曲面”,先存一份,后面误差分析要拿它做基准。

4.4 深度散点二次网格化:得到未井校深度曲面

时深转换得到的是曲面,但井校需要的是井点处的深度值,两者对不上,所以要再做一次深度散点网格化。把时深转换后的深度值按井点位置抽出来,形成深度散点,再走一遍网格化流程,参数沿用 T0 网格化那一套,网格间距最好保持一致,不然两个曲面叠的时候网格节点对不齐。

这一步的产物就是标准的“未井校深度曲面”,后面误差分析和井校都基于它。有些流程会跳过这一步直接用转换后的曲面,省事是省事,但井点处的深度值是插值出来的,跟实际分层深度对不上,误差统计会失真。

5. 避坑排查:五条从返工现场捡回来的记录

这套流程我走了很多遍,每一次返工都能对应到一个具体的操作失误,没有一次是软件本身的问题。下面五条是按出现频率排的,每条都按“现象—原因—解决”写,照着排查能省不少时间。

5.1 数据与导入环节

第一条:T0 文件多一列点号,网格化出来一片乱点。

现象是网格化后的等值线完全不成形,散点图上看着数据分布挺正常,一网格化就出现密集的锯齿和孤立牛眼,像是数据被随机打乱过。

原因是 T0 文件里加了点号列,变成四列,双狐按列索引读取时把第二列当成 Y、第三列当成 T0,实际读到的是 X、点号、Y,坐标整体错位,散点被摆到一个完全错误的位置上。这种错位在散点显示阶段不一定看得出来,因为点的相对分布可能还是像的,但坐标值全变了。

解决方法是严格保持 T0 文件三列,点号列在导出前删掉,如果确实需要保留点号用于追溯,另存一个副本,导入用三列版。导入后在画布上随机抽几个点,跟原始表格的坐标对一下,数值一致再往下走。

第二条:分层用了井深,时深拟合公式整体偏移。

现象是拟合出来的公式相关系数很高,看着挺漂亮,但代进去算深度,所有井点系统性地偏浅或偏深,偏差量还随井深变化。

原因是分层表的“底深海拔”列填成了井深(正数,从井口往下算),而不是海拔深度(负数,从海平面往下算)。井深和海拔之间差一个补心海拔,每口井的补心高度不一样,所以偏差不是一个常数,没法用平移修正。

解决办法是导入前统一检查分层列的符号,海拔深度应该全是负值,出现正值就是填错了。补心海拔的数据单独维护一张表,需要换算的时候用井深减补心高度得到海拔,不要在分层表里手工改,改着改着就乱了。

5.2 网格化与时深环节

第三条:网格化范围小于作图边界,边部等值线被拉直。

现象是构造图边部的等值线变成一组平行直线,跟内部的弯曲形态完全脱节,或者边界外侧凭空多出一圈同心圆。

原因是网格化的有效范围设小了,没覆盖到作图边界,边界附近的网格节点靠外推填充,外推算法在数据稀疏时倾向于拉直。另一头的原因是不可信度参数调得太松,允许外推的距离过大。

解决办法是把网格化范围设成跟作图边界一致或者略大一圈,不可信度按边部数据密度调紧一档,重跑之后看边部等值线是不是还贴着散点趋势走。如果边部确实没数据,宁可在图上留白,也不要让外推的假等值线进图。

第四条:误差曲面范围跟构造图不一致,井校后边部翘边。

现象是井校后的深度曲面在边部出现明显的上翘或下凹,跟未井校曲面在内部吻合得很好,一到边部就分家。

原因是误差值网格化时用的范围比构造图范围小,误差曲面在边部没有数据,做曲面相加时边部被当成零误差或者外推值处理,加出来的结果自然不对。

解决办法是误差点网格化时把范围设成跟构造图范围完全一致,网格间距也保持一致,两个曲面的节点一一对应,相加才不会出问题。加完之后把井校前后的曲面各生成一次等值线叠在一起看,边部形态应该只差一个缓变的趋势,不应该出现突变。

5.3 成图与导出环节

第五条:导出 png 分辨率不够,报告插图返工。

现象是屏幕上看着清晰的图,插进报告或者 PPT 里放大就糊,等值线变成虚线,断层齿标糊成一团。

原因是导出时按屏幕分辨率出图,没有按出图用途设置像素尺寸。屏幕 96 dpi 的图放到 300 dpi 的印刷文档里,等效分辨率只剩三分之一。

解决办法是导出前先明确用途:报告插图按 300 dpi 出,图幅宽度按最终排版尺寸乘 300 算像素;PPT 用图 150 dpi 够;附图册按打印尺寸和打印机分辨率定。导出前把所有图层的线宽、符号尺寸按目标分辨率重新核一遍,屏幕上 0.1 毫米的线在 300 dpi 下只有 1 个多像素,该加粗的加粗。导出格式一般用 png,透明背景按需勾选,别用 jpg,等值线的细线在 jpg 压缩下会出现彩色噪点。

6. 井校闭环与精度验证:误差曲面怎么加、0.1% 怎么核

井校这一步的核心是把每口井的实测深度和构造深度之间的差,变成一个连续的误差曲面,再加回未井校曲面上。听起来简单,符号方向错一次,整张图就反了。

6.1 误差曲面:符号与范围

误差值按“海拔深度减构造深度”算,统计各井在未井校曲面上的构造深度,跟分层表里的海拔深度相减。结果是正数表示构造深度偏浅,需要往下压;负数表示偏深,需要往上抬。这个符号约定要在项目组内统一,别一个人用构造减海拔、另一个人反过来,两张误差曲面叠在一起会互相抵消。

误差点网格化的参数跟构造图保持一致,范围也要对齐,这是前面第四条坑里说过的。网格化完得到一个误差曲面,跟未井校深度曲面做曲面与曲面的加减运算,得到井校后的深度曲面。加还是减,取决于误差值的符号定义,加之前先在井点上验算一两口井,算完的深度跟实测海拔对得上,再批量处理。

6.2 等值线回代与相对误差核验

井校后的深度曲面不能直接当成品,还要生成等值线、去冗余、平滑、编辑修饰。把曲面文件拖进画布,右键进曲面处理,选生成等值线,设置等值线间距和断层存在方式——断层存在方式选错,等值线会直接跨过断层连成一片,断层的封堵性就看不出来了。

等值线出来之后做去冗余和平滑,多余的分支用外切、内切功能切掉,切的时候放大操作,切多了补不回来。如果等值线改动较大,要用编辑后的等值线再做一次网格化,得到与等值线完全一致的曲面,这一步视改动程度而定,不是必需但改了就该做。

最后核精度:统计井校后各井点的误差,用相对误差衡量,开发阶段三维地震解释的井点深度相对误差一般控制在 0.1% 以内。超标的井单独拉出来看,是分层数据有问题还是井斜轨迹没处理好,别整张图一起调参数去凑。加图框、图例、比例尺、指北针这些整饰元素时,参数按导出用途定,png 导出前把图层顺序再核一遍。

从那以后我每次做井校,都强制先在两口井上手算一遍误差符号和加减方向,确认跟曲面运算的结果对得上,再往下批量跑。这个习惯是从一次整张图反过来的事故里换来的,当时图都出了,叠井检查才发现所有等值线上下颠倒。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进