5.9 KiB
5.9 KiB
反演剖面(dd_inversion_data)竖向字段 y / z / elevation 语义待业务确认
- 日期:2026-06-16
- 背景:桌面客户端在 3D 视图里把 ERT 反演剖面(
dd_inversion_data)渲染成竖直帘面。水平方向已用lat/lon摆到真实测线位置(弯曲测线渲染为曲面,已验证)。竖直方向用哪个字段、如何定位,目前不确定,需业务/数据方确认。 - 数据来源:线上
GET /business/dd/ert/inversion/rows/{dsObjectId}。
1. 接口返回的竖向相关字段
dd/ert/inversion/rows 的 data 含:
x:长度nx,水平轴(距离?)。y:长度ny,竖直轴(含义不明,见下)。v:[ny][nx]电阻率值矩阵(不规则区大量null)。z:[ny][nx],逐格一个数(含义不明)。elevation:长度nx,疑似每列地表高程。lat/lon:长度nx,每列经纬度(已用于水平定位)。vmin/vmax、sectionType等。
2. 核心问题:y / z / elevation 的范围与关系跨数据集不一致
抽样 4 条真实 dd_inversion_data(全部 sectionType=1,即不是"剖面类型不同"导致):
| 数据集 | 项目 | x 范围 | y 范围 | z 范围 | elevation 范围 | z/v 空值 |
|---|---|---|---|---|---|---|
| T251230002-M-2 | 地大华睿演示 | [200.0, 437.7] | [-35.1, -1.1] | [-101.5, -0.09] | [-35.0, -34.1] | 0 |
| T120526003-3 | 香港威立雅 | [2.9, 74.6] | [13.1, 26.2] | [2.1, 15.4] | [41.6, 51.0] | 1618/1900 |
| ERT1-WS | 演示(高密度+瞬变) | [0.2, 75.7] | [9.8, 26.7] | [0.1, 15.4] | [36.1, 37.9] | 14911/90000 |
| ert2-ws | 射洪垃圾填埋场 | [0.04, 235.4] | [287.6, 353.4] | [-10.1, -0.03] | [287.8, 292.8] | 0 |
观察到的矛盾:
y的范围毫无统一规律:有负(-35~-1)、有小正(9~27)、有大正(287~353)。无法判断它是"深度(向下为正)"、"相对层号"、还是"绝对高程"。z同样无规律:有深负(-101.5)、有小正(0~15)、有小负(-10)。elevation看起来最像"地表高程"(随项目所在地不同:-34 / 41~51 / 36 / 288~293),但与y、z的换算关系对不上(例:射洪y≈elevation≈287~353,而地大y=-35~-1 远小于elevation=-34)。z的空值数恰好等于v的空值数 →z随"有无数据"分布(像是逐格的某个量)。
结论:仅凭数据无法可靠推断竖向模型,且不同数据集疑似采用了不同的竖向约定/基准(可能与上传来源/格式有关)。
3. 客户端做法演变
- 早期(已废弃):竖直 Z =
-y[j](把y当"深度向下"),平顶、不随地表。加真实地形底图后暴露问题:剖面整体沉到地下。 - 当前(2026-06-17):竖直 Z =
+y[j](把y当真实高程),与同样按真实高程渲染的地形底图同系对齐 → 剖面顶≈地表、露出地面(复刻原版观感)。详见 §6。 - 仍未使用
z和alt/elevation。
4. 请业务/数据方确认的问题
y是什么? 深度(向下为正/为负?)、相对层号、还是绝对高程?为何不同数据集范围差异巨大(-35~-1 vs 287~353)?是否存在多套竖向基准?z([ny][nx])是什么? 逐格的真实高程?深度?还是别的量(如反演网格的实际竖向坐标/褶皱面)?elevation([nx])是什么? 每列地表高程吗?单位、基准(海拔/相对)?- 3D 剖面竖向应如何定位?
- (A) 维持现状:平顶"距离×深度"面(与 2D 详情一致);或
- (B) 跟随地表起伏:顶面按
elevation/z摆到真实高程、随地形上下。 若选 (B),请给出用哪个字段、如何换算(Z = ?(y, z, elevation))。
- 垂向单位与方向:米?向上为正还是向下为正?
- 不同数据集的竖向差异是数据本身的真实差异,还是上传/解析造成的不一致(需后端修正)?
5. 影响
- 现状 (A) 已能正确渲染(与 2D 详情一致),可继续使用。
- 若业务要 (B) 地形跟随,需上面第 2/3/4 项的明确定义后,客户端按真实竖向模型实现(避免凭猜测导致渲染错误)。
6. 进展(2026-06-17):原版 web 代码已部分解答,但仍有跨数据集风险
拿到原版 commercial-admin 代码(dataView/threeMap/threeMap.vue addEntityToMap)后确认其做法:
data.y= 真实高程(不是深度)。原版originY = data.y[0]、localY = data.y - originY(相对形状),剖面世界 Z =originY + localY = data.y,并用alt(测线每点地表高程) 算坡度/地表偏移;地形用 Mapbox 真实 DEM。两者同在真实高程系 → 剖面顶≈地表、露出地面。- 无垂直夸张(
scale.y = 1,真实比例)。
客户端据此已改为 Z = +y(§3 当前),对 y ≈ 真实高程 的数据集(如射洪 y≈elevation≈287~353)对齐良好。
⚠️ 仍未解决:§2 表中 y 跨数据集不一致——香港 T120526003-3(y=13~26 但 elevation=41~51,差 ~28m)、演示 ERT1-WS(y=9.8~26.7 但 elevation=36~38,差 ~10~26m)这类,y 并不等于真实地表高程。对它们,仅用 +y 会让剖面整体偏离地表一个常量。
稳妥的完整做法(= 原版):取 alt(测线每点地表高程)把剖面顶部贴到地表,data.y 只决定相对形状/深度跨度。即 Z(列i, 行j) = altSurface(i) - (data.y[top] - data.y[j])(或等价:用 alt 定地表、y 定相对位置)。这需要客户端解析并使用 alt/elevation 字段(当前未取)。
待办:客户端拉取 alt(或 elevation),按"地表 alt + y 相对形状"摆放剖面,消除跨数据集垂直偏移。在此之前,+y 是对 y≈高程 数据集成立的近似。