From 227ee8fdef097b56f944690e39518d1519b47351 Mon Sep 17 00:00:00 2001 From: gaozheng Date: Fri, 26 Jun 2026 18:04:53 +0800 Subject: [PATCH] =?UTF-8?q?docs(spec):=20=E4=BA=8C=E7=BB=B4=E5=88=86?= =?UTF-8?q?=E6=9E=90=E9=94=81=E5=AE=9A=E4=BF=AF=E8=A7=86=E7=9B=B8=E6=9C=BA?= =?UTF-8?q?+=E5=86=85=E5=AE=B9=E6=98=BE=E9=9A=90+=E9=AB=98=E7=A8=8B?= =?UTF-8?q?=E6=8B=96=E5=8A=A8=20spec?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 一个场景两相机:二维分析=同一 3D 地形场景的锁定近俯视(禁旋转,仅平移缩放);切 tab 翻另一方数据集 可见标志(不清空,性能零代价);2D 内容选中后沿 Z 高程拖动分离(锁 XY,实时读数);dd_raster 过滤+地理 配准贴地形(C期,依赖端点)。含与雷达反馈的边界、维度口径(对齐 DD0623)、分期 A/B/C、风险、验收。 --- ...026-06-26-2d-analysis-topdown-elevation.md | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 docs/superpowers/specs/2026-06-26-2d-analysis-topdown-elevation.md diff --git a/docs/superpowers/specs/2026-06-26-2d-analysis-topdown-elevation.md b/docs/superpowers/specs/2026-06-26-2d-analysis-topdown-elevation.md new file mode 100644 index 0000000..c41f51e --- /dev/null +++ b/docs/superpowers/specs/2026-06-26-2d-analysis-topdown-elevation.md @@ -0,0 +1,101 @@ +# 二维分析:锁定俯视相机 + 内容显隐 + 高程拖动 — 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)。