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

7.7 KiB
Raw Blame History

二维分析:锁定俯视相机 + 内容显隐 + 高程拖动 — Spec2026-06-26

0. 一句话目标

把「二维分析」从"另一套平面地图"改为同一个 3D 地形场景的一个锁定近俯视视角:切 tab 只切相机+翻另一方数据集的可见标志(不清空),二维内容(轨迹/栅格)落在带高程的地形上,且可选中后沿高程上下拖动分离。


1. 背景与现状

  • 三维分析栏(CategoryAnalysisTab)与二维分析栏(Column2DDataset / col2D共用同一个 VtkSceneView / InteractionManager / renderWindow。现状:两栏勾选的 actor 叠在同一场景,切 tab 不切相机、不区分内容。
  • 二维内容现状:col2D 勾选 → loadMapLinedd/ert/trajectory/line)→ MapLineActorlat/lon 折线);有 view2DModeChanged 信号已接到 sceneCtrl2D 视图模式钩子,本 spec 在其上扩展)。
  • 地形 + 底图:场景已有地形(buildTerrain,带高程)+ 天地图底图(TileBasemap,按经纬贴)。
  • 维度分类:DatasetDimension::dimOf + Api3dRepository/LocalSample3dRepository::dimensionOf,已对齐数据字典 DD06232D = dd_trajectory_datacommit 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二维栅格过滤 + 渲染(本期新增)

  • 数据字典 DD0623dd_raster(栅格/遥感影像,本次新增,展示模式 2D形态=栅格)。
  • 纳入 2D 过滤:dimOf/dimensionOfdd_rasterDim2D;但 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