geopro/docs/superpowers/STATUS.md

99 lines
9.8 KiB
Markdown
Raw 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.

# Geopro 3.0 桌面客户端 — 当前状态与交接M1 进行中)
**更新**2026-06-07 · **分支**`feat/m1-core`(尚未合并 master
> 本文件是**会话交接的单一事实来源**。下次继续前先读本文 + `specs/2026-06-07-geopro-desktop-m1-design.md`(设计基线)。计划在 `plans/`。
> **铁律教训**:渲染正确性**必须用离屏 PNG 肉眼核对**,不能只看"进程启动不崩"。工具:`tests/spike/render_verify.cpp` → `render_verify.exe` → `D:/dev/spike_data/verify_*.png`。本会话多次"声称成功"实为自欺,根因就是没看像素。
---
## 1. 现在能跑起来的东西(已离屏 PNG 核对 / 真机验证)
桌面 app `geopro_desktop`:
- **真实登录**:LoginWindow(用户名/密码/图形验证码/记住)→ `verifyCodeCheck` → RSA 加密密码 → `login2` → token → 进工作台。**真机登录成功**;输入框样式已修(三态白底深字)。
- **工作台 ADS 三区 + 数据详情**:
- **左 对象树**:GS→TM→DS,复选框勾选 → 控制中央显示哪些测线。
- **中央 二维地图 / 三维视图**(两个**真内容**,非相机切换):
- 二维地图 = `MapLineActor`:测线 `lat/lon` 轨迹**红线**俯视(浅底),像地图。
- 三维视图 = `CurtainActor`:沿测线的**竖直断面墙**(分段色带,z 纵向夸张×3,沿弯曲测线弯)。
- **下方 数据详情**:工具条「原数据/网格数据」切换 +「显示异常」开关(对齐原型命名)。单击数据集 → 网格数据=`GridContourActor` 平面剖面(#18,colorBar 真实非均匀分段值上色,纵向夸张×1.5);原数据=`ScatterActor` 彩色方块散点(#17,x=距离/y=深度取负,用散点自带色阶);显示异常=`AnomalyActor` 在上图叠加异常 dashed 折线(同纵向夸张对齐)。
- **右 属性**:名称/网格 nx×ny/vmin·vmax。
- 单元测试累计 **35 个全绿**(core/data/net/render;含 Scatter 2 + Anomaly 4、修复了陈旧的 Curtain mapper 类型断言);离屏 `verify_section/map/curtain_3d/scatter/section_anomaly.png` 均核对正确(scatter 吻合 ref_17、异常折线位置吻合 ref_18)。
## 2. 各 Phase 完成度
| Phase | 内容 | 状态 |
|---|---|---|
| P0 | 三 spike | ✅ |
| P1 | core(LocalFrame/模型/ColorScale/IDW/CrsTransform/GeoLocalFrame) | ✅ |
| P2 | data(解析器/LocalSampleRepository)+ 对象树 | ✅ |
| P3 | 登录(RsaEncryptor/ApiClient/AuthService/LoginWindow) | ✅(**Credential 记住免登录未做**) |
| P4 | 渲染:render 层 + 二维地图(线)+ 三维视图(帘面)+ 数据详情(#18/#17/异常) | 🔶 **核心三视图 + 散点#17 + 异常叠加 已对**;**DEM地形 / dd_voxel回归 / 底图瓦片 未做;布局对齐原型(左下数据列表/右上异常列表/电极/底图)未做** |
## 3. 构建约定(**机器本地**
- VS2026(MSVC 14.51)+ 官方 MSVC Qt 6.11.1(`D:\Qt\6.11.1\msvc2022_64`)+ vcpkg(`d:\dev\vcpkg`)。
- 方案②-修订:Qt/VTK/ADS/QtKeychain 对接官方 Qt(不走 vcpkg);非 Qt 依赖走 vcpkg。VTK 9.6.2 源码编在 `external/vtk-install`。统一 **Release**
- **构建/测试经** `& cmd /c "D:\Git\lanbingtech\geopro\external\dev.bat <cmd>"`(**PowerShell 调**,Bash 下参数透传坏)。C: 极小→TEMP/构建全在 D:。
- **app 构建前先** `taskkill /IM geopro_desktop.exe /F`(运行中 LNK1104 锁 exe)。
- 部署:`D:\Qt\6.11.1\msvc2022_64\bin\windeployqt.exe --release <exe>`(找不到 ads dll 的警告无害);VTK/vcpkg dll 由 POST_BUILD `TARGET_RUNTIME_DLLS` 拷。
- **离屏渲染验证**:`render_verify` 需 PATH 加 `external\vtk-install\bin` + `build\release\vcpkg_installed\x64-windows\bin` 再运行。
- **改源码用 Write 工具,勿用 PowerShell `Set-Content -Encoding UTF8`**(会把中文注释弄乱、断构建)。
## 4. 关键决策与已核实事实
- 登录:基址 `http://tenant.geomative.cn/pop-api`;头 `geomativeauthorization: Geomative <token>`;`getImageCode` 验证码答案**明文** `data.code`;`verifyCodeCheck→login2` 靠**会话 cookie** 串联;login2 `checkCode` 空;token=`data.accessToken`。
- **RSA 公钥已取**(Playwright route 注入 setPublicKey hook + 缓存绕过 + 真登录捕获),`resources/rsa_public_key.pem`(RSA-2048,PKCS#1 v1.5)。
- **CRS ✅ 已实证确定(2026-06-08)**:剖面 `projectX/Y` 的真实 CRS = **EPSG:4547「CGCS2000 / 3-degree Gauss-Kruger CM 114E」**(=`+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80`)。
- **如何确定**:同一条测线既有网格电极 `lat/lon`(EPSG:4326)又有散点 `projectX/Y`;用 pyproj 把 lat/lon→EPSG:4547 得 `dX=+0.20m, dY=+0.30m`(亚米级),反向→经纬 `dlon/dlat≈3e-6°(~0.3m)`。Krassovsky(北京54)椭球差 44m 排除→**椭球=GRS80/CGCS2000(与 WGS84 现今差<1m,M1 可视化无影响)**。
- 旧结论"EPSG:32649 解出 111°E"是因 32649 中央经线=111°E;改用 CM=114°E 即完美吻合
- **影像 `image.tfw` 仍是 EPSG:3857**(与项目系不同,DEM/底图须 PROJ 重投影);`dem.tif` 自身 CRS GDAL 读时核对
- **影响**:DEM/影像 **dd_voxel 回归 不再被 CRS 阻塞**——散点 projX/Y 可经 EPSG:45474326→`GeoLocalFrame` 与帘面/地图配准
- **坐标统一**:帘面/地图/数据详情已统一用 **lat/lon→GeoLocalFrame(等距圆柱)局部米**;dd_voxel 输入(散点 projX/projY)现可经 **EPSG:4547→lat/lon→GeoLocalFrame** 配准(CRS 已定);VoxelActor 代码就绪,待接入
- 网格 `v`/`z` `[j=y][i=x]`,点序 i 最快;深度 `y` 越大越深渲染时 **z 取负**;colorBar 网格色阶 alpha=0255、LVL 色阶 alpha=01;等值线级用 **colorBar 真实分段值**(均匀分级会一片蓝)。
## 5. 正确的视图模型(已实现,**P4 续做务必照此,勿再走偏**
对齐原型 + 物探用户工作流:
- **二维地图** **三维视图** **两种不同内容**(地图=测线线/点/底图;3D=断面墙/体素/地形),**不是同一物体换相机**。
- **数据详情**(下方)才是"分析单条数据集"的专业图(ERT=#18 平面反演剖面)。
- 体素异常体是 3D 视图里的内容/派生产物,**不是对象树里硬塞的兄弟节点**。
- 渲染表现由 **dd 类型**决定(dd_section帘面/剖面;dd_voxel体绘制;轨迹;异常线/)。
- **2D 相机可考虑锁旋转**(只平移缩放)以区别 3D
## 6. 已知问题 / 待办P4 下次会话)
1. ~~**散点 #17**:`ScatterActor`(剖面原数据 2597 点彩色散点),数据详情"原数据"视图~~ **已完成**(2026-06-08,离屏 PNG 核对吻合 Python 真值,接入数据详情反演剖面/原数据切换;app 待人工登录肉眼复核交互)。
2. ~~**异常叠加**:`AnomalyActor`(markType 点/线/面)~~ **已完成**(2026-06-08,叠加在数据详情 #18/#17 ,「显示异常开关默认开;离屏 `verify_section_anomaly.png` 折线位置吻合 ref_18;样本 3 异常均 markType=2 dashed;app 待人工登录复核)。****:dashed 点画在 VTK OpenGL2 下偏弱(几乎实线),几何/颜色/位置正确,纯观感项可后续调
3. **DEM/影像地形**:加 vcpkg `gdal`;GDAL dem.tif/image.tif;**影像 EPSG:3857 必须 PROJ 重投影到世界系**;`vtkWarpScalar` 地形面 + 纹理
4. **dd_voxel 回归**:需先确认项目 CRS,使散点 projX/Y 能转到 lat/lon 世界系,与帘面配准;VoxelActor 已就绪
5. **底图瓦片**(二维地图,天地图/Mapbox):M1.5
6. **Credential(QtKeychain)**:记住一个月免登录持久化(P3 Task2 未做)。
7. 多测线:当前样本仅 1 dd_section(grid1);多条共存机制已就绪,加数据即叠加
8. 取景微调(数据详情/帘面的相机余量);纵向夸张倍数(剖面1.5/帘面3)可做成可调
9. render 仍部分内联在 main.cpp;可逐步抽到 view/controller
10. **布局对齐原型**(权威参考 `http://prototype.geomative.cn/`,用户指定;截图存 `.playwright-mcp/`)。原型为**四区六面板**,当前 app 为简化版,缺:
- **左下数据真实显示栏」**:选中 TM(测线)后列其采集批次(=DS 数据集),tab数据/文件」。当前 app DS 直接塞树里
- **右上异常列表」**:异常条目(名称/深度/尺寸/电阻率 + 颜色标记 + 眼睛显隐),与数据详情显示异常联动
- **数据详情工具条**:原型还有 色阶配置/滤波处理/显示等值线标签/纵化容差滑块/显示电极/网格 (当前仅原数据·网格数据·显示异常)。
- **电极标记**:剖面顶部倒三角电极位 + 数值标签;**底图影像**(3D 卫星底图 + 测线落地)= DEM/底图任务(CRS 阻塞)。
诚实记录:已对齐者=中央二维/三维切换、数据详情原数据/网格数据/显示异常、对象树、属性。
## 7. 渲染验证手段(务必用)
```
cmd /c "...\external\dev.bat cmake --build build/release --target render_verify"
# 运行(PATH 加 vtk-install\bin 与 vcpkg bin)→ 看 D:/dev/spike_data/verify_*.png
```
新增/改动渲染后,先用此离屏 PNG 核对方向/颜色/几何,再接进 appapp 是交互窗口,无法离屏验证,接入后需人工登录肉眼确认
## 8. 文档与工具索引
- 设计基线:`specs/2026-06-07-geopro-desktop-m1-design.md`(§45 已含正确视图模型注记)
- 计划:`plans/` phase0-4 + `2026-06-07-m1-view-redesign.md`(正确视图模型)+ spike-report
- 环境:`../ENV_SETUP_Windows.md`
- 验证脚本:`tools/validate_samples.py`(#17/#18 真值)、`tools/validate_voxel.py`(voxel)、`tests/spike/render_verify.cpp`(app 渲染积木离屏核对)
- 渲染积木(render ):`MapLineActor`(测线线)、`CurtainActor`(断面墙)、`GridContourActor`(#18 平面)、`ScatterActor`(#17 散点)、`AnomalyActor`(异常 /线/)、`VoxelActor`(,未接 UI)、`ColorLutBuilder`、`CameraPreset`、`Scene`;`core::GeoLocalFrame`(经纬局部米)。
- 散点 #17 专属色阶经 `LocalSampleRepository::loadScatterColorScale`(剖面原数据自带色阶,范围/分段与网格色阶不同)。