7.7 KiB
7.7 KiB
二维分析:锁定俯视相机 + 内容显隐 + 高程拖动 — Spec(2026-06-26)
0. 一句话目标
把「二维分析」从"另一套平面地图"改为同一个 3D 地形场景的一个锁定近俯视视角:切 tab 只切相机+翻另一方数据集的可见标志(不清空),二维内容(轨迹/栅格)落在带高程的地形上,且可选中后沿高程上下拖动分离。
1. 背景与现状
- 三维分析栏(
CategoryAnalysisTab)与二维分析栏(Column2DDataset/col2D)共用同一个VtkSceneView/InteractionManager/renderWindow。现状:两栏勾选的 actor 叠在同一场景,切 tab 不切相机、不区分内容。 - 二维内容现状:
col2D勾选 →loadMapLine(dd/ert/trajectory/line)→MapLineActor(lat/lon 折线);有view2DModeChanged信号已接到sceneCtrl(2D 视图模式钩子,本 spec 在其上扩展)。 - 地形 + 底图:场景已有地形(
buildTerrain,带高程)+ 天地图底图(TileBasemap,按经纬贴)。 - 维度分类:
DatasetDimension::dimOf+Api3dRepository/LocalSample3dRepository::dimensionOf,已对齐数据字典 DD0623(2D =dd_trajectory_data,commit c1a824e)。
用户确认的认知:二维分析"只是 3D 的固定视角",底图不是平面图、是带高程的地形图;内容沿用不清空。
2. 核心设计:一个场景 + 两种相机
- 不分两个场景,只有一个 3D 地形场景(地形 + 底图 + 全部已勾选数据),两栏区别仅在相机与哪类数据集可见。
| 三维分析 | 二维分析 | |
|---|---|---|
| 相机 | 自由透视(可旋转/倾斜/平移/缩放) | 锁定近俯视(不可旋转,仅平移+缩放) |
| 可见数据集 | 3D 数据集(体/切片/剖面…)可见;2D 数据集隐藏 | 2D 数据集(轨迹/栅格)可见;3D 数据集隐藏 |
| 地形 + 底图 | 常驻可见 | 常驻可见(同一地形,俯视看即"地形图") |
3. 二维分析的相机:锁定近俯视
- 切到二维分析 → 相机切到近俯视固定角(约 75–80°,非绝对正俯视):理由——绝对正俯视在正交/小透视下高程变化不可见,留一点倾斜以便看出高低(§5 拖动反馈需要)。
- 锁定:禁用旋转(interactor style 不响应旋转/倾斜),仅保留平移 + 缩放。
- 切回三维分析 → 恢复自由透视相机(恢复切走前的视角或合理默认)。
- 实现锚点:扩展
view2DModeChanged钩子 →VtkSceneController切相机模式 + 切 interactor style(或在 style 内按模式禁旋转)。
4. 内容显隐:切 tab 翻可见标志(不清空)
- 切 tab 时,对"另一方"的数据集 actor 用
SetVisibility(false),切回SetVisibility(true)。不移除 actor、不重建。 - 性能:VTK 渲染跳过不可见 actor → 隐藏内容不参与绘制、不耗 FPS;切换瞬时(无重插值/重传 GPU);唯一代价是内存/显存驻留(数据本已加载,无新增加载)。
- 禁止用清空:重体素(GPR/ERT)每次切回要重插值+重传 GPU,必卡。
- 地形 + 底图两边都不隐藏。
- 实现锚点:
VtkSceneView按数据集维度(dimensionOf/记录每 actor 的维度)批量翻可见标志;切 tab 时调用。
5. 高程拖动(C1):选中 2D 内容沿 Z 上下移
- 二维分析里,拾取选中已渲染的 2D 内容(轨迹/栅格),支持单选 / 多选。
- 选中后竖向拖动 → 仅改其高程 Z(离地高度),锁死 X/Y(不动地理位置)。用于把叠在一起的 2D 层分离、看清。
- 拖动时实时显示当前高程数值(屏幕浮层读数)。
- 近俯视固定角(§3)使高低可见。
- 实现锚点:新增/复用一个 2D 拾取-拖动交互(类似切片 widget 但只允许 Z 平移 + 多选);actor 的 Z 偏移持久(切走再回保留)。
- 待定:高程是否需要随数据保存(暂定仅会话内 actor 变换,不落库;接真实端点再议)。
6. dd_raster:二维栅格过滤 + 渲染(本期新增)
- 数据字典 DD0623:
dd_raster(栅格/遥感影像,本次新增,展示模式 2D,形态=栅格)。 - 纳入 2D 过滤:
dimOf/dimensionOf增dd_raster→Dim2D;但 col2D 勾选渲染须按 ddCode 分派——轨迹走loadMapLine,栅格走栅格加载(不可让栅格走轨迹端点)。 - 渲染:取栅格的地理范围(四至/仿射)+ 像素,作为地理配准的纹理平面贴到地形上(带高程,可被 §5 高程拖动),类似底图瓦片按经纬度定位。
- 依赖:dd_raster 的数据端点(返回像素 + 四至/投影)——待确认,未明确前 §6 不落地(先做 §3–§5)。
7. 维度过滤口径(对齐数据字典 DD0623,已部分落地)
- 2D(足迹/栅格):
dd_trajectory_data(统一通用轨迹,"保留",已并入 dd_radar_rtk_trajectory)+dd_raster(本期新增,随 §6)。 - 已删除、不再单列:
dd_radar_rtk_trajectory/dd_transient_electromagnetic_trajectory_data/dd_radar_channel_trajectory(字典均"删除")。已清理:commit c1a824e。 dd_radar_2d/dd_radar_3d:字典为展示模式=3D(通道剖面 / 三维插值模型)→ 属三维分析,不进 2D 过滤。
8. 与雷达客户反馈的边界(本 spec 不含)
- 雷达 TM 模型(单/双/多频,每频一个
dd_radar_2d/dd_radar_3d,共用一个dd_trajectory_data轨迹)→ 数据模型,与本 spec 无冲突。 - 雷达数据在 3D 视图的渲染(二维雷达=线/curtain、三维雷达=切面,按 trace 坐标,带打标 hover tip)→ 三维分析的另立任务。
- 详情页用 trace 坐标校准异常 + 剖面打标 → 详情页另立任务。
- 2D 视图只显示轨迹线、打标暂不在 2D 展示(客户 #6 修正)→ 与本 spec 的"2D 显示轨迹足迹"一致,无新增 2D 工作。
- 雷达轨迹就是
dd_trajectory_data,本 spec 的 2D 分析按统一轨迹处理,无需特判。
9. 实现分期
- A. 一场景两相机:切 tab → 锁定近俯视/恢复自由相机 + 翻另一方数据集可见标志(§3、§4)。基础,先做。
- B. 高程拖动:2D 拾取单/多选 + 仅 Z 拖动 + 锁 XY + 实时读数(§5)。
- C. dd_raster:过滤纳入 + 按 ddCode 分派渲染 + 栅格地理配准贴地形(§6)。依赖栅格数据端点确认。
10. 风险 / 待定
- 近俯视角度(75–80°)需实机调;用户若坚持绝对正俯视,则 §5 高程反馈改为纯数值(不直观)。
- §4 翻可见标志需可靠区分每个 actor 的维度归属(按数据集 ddCode 记录维度 → actor)。
- §5 高程是否持久化/落库待定(暂会话内)。
- §6 dd_raster 数据端点(像素 + 四至/投影)未确认 → C 期阻塞点。
- 切相机/可见标志切换需与现有
view2DModeChanged、底图、地形 VE(垂直夸张)逻辑兼容,勿互相打架。
11. 验收
- 切到二维分析:相机变近俯视、不能旋转,只能平移+缩放;3D 数据集(体/切片/剖面)不可见,轨迹+地形+底图可见。
- 切回三维分析:恢复自由相机;3D 数据集重新可见,2D 轨迹隐藏。切换瞬时无卡顿(无重建)。
- 二维分析里选中一条/多条轨迹,竖向拖动→只改高程、地理位置不动、实时显示高程;叠在一起的层能被拉开。
- (C 期)勾选 dd_raster → 栅格按地理范围贴在地形上、可被高程拖动;轨迹与栅格各走各的加载路径、互不串。
- 维度过滤与数据字典 DD0623 一致(2D=trajectory_data+raster;radar_2d/3d 归 3D)。