geopro/docs/superpowers/specs/2026-06-26-2d-analysis-topd...

102 lines
7.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 二维分析:锁定俯视相机 + 内容显隐 + 高程拖动 — Spec2026-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`,已对齐数据字典 DD06232D = `dd_trajectory_data`commit c1a824e
**用户确认的认知**:二维分析"只是 3D 的固定视角",底图不是平面图、是**带高程的地形图**;内容沿用不清空。
---
## 2. 核心设计:一个场景 + 两种相机
- **不分两个场景**,只有一个 3D 地形场景(地形 + 底图 + 全部已勾选数据),两栏区别仅在**相机**与**哪类数据集可见**。
| | 三维分析 | 二维分析 |
|---|---|---|
| 相机 | 自由透视(可旋转/倾斜/平移/缩放) | **锁定近俯视**(不可旋转,仅平移+缩放)|
| 可见数据集 | 3D 数据集(体/切片/剖面…可见2D 数据集隐藏 | 2D 数据集(轨迹/栅格可见3D 数据集隐藏 |
| 地形 + 底图 | 常驻可见 | 常驻可见(同一地形,俯视看即"地形图"|
---
## 3. 二维分析的相机:锁定近俯视
- 切到二维分析 → 相机切到**近俯视固定角(约 7580°非绝对正俯视**:理由——绝对正俯视在正交/小透视下高程变化不可见留一点倾斜以便看出高低§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. 风险 / 待定
- 近俯视角度7580°需实机调用户若坚持绝对正俯视则 §5 高程反馈改为纯数值(不直观)。
- §4 翻可见标志需可靠区分每个 actor 的维度归属(按数据集 ddCode 记录维度 → actor
- §5 高程是否持久化/落库待定(暂会话内)。
- §6 dd_raster 数据端点(像素 + 四至/投影)未确认 → C 期阻塞点。
- 切相机/可见标志切换需与现有 `view2DModeChanged`、底图、地形 VE垂直夸张逻辑兼容勿互相打架。
---
## 11. 验收
- 切到二维分析:相机变近俯视、**不能旋转**,只能平移+缩放3D 数据集(体/切片/剖面)不可见,轨迹+地形+底图可见。
- 切回三维分析恢复自由相机3D 数据集重新可见2D 轨迹隐藏。切换**瞬时无卡顿**(无重建)。
- 二维分析里选中一条/多条轨迹,竖向拖动→只改高程、地理位置不动、实时显示高程;叠在一起的层能被拉开。
- C 期)勾选 dd_raster → 栅格按地理范围贴在地形上、可被高程拖动;轨迹与栅格各走各的加载路径、互不串。
- 维度过滤与数据字典 DD0623 一致2D=trajectory_data+rasterradar_2d/3d 归 3D