docs(pbf): archive Full production provenance and engineering history

This commit is contained in:
OpenAI Codex
2026-10-13 14:02:56 +08:00
parent 1fef4c6dd1
commit 07d16c38a8
381 changed files with 107826 additions and 527 deletions

View File

@@ -0,0 +1,174 @@
# Codex Prompt 版:NavSea Pickup 当前点击解读迁移
请在当前 `React + MapLibre` 项目中,实现 `NavSea` 海图的 `pickup` “当前点击解读”。
## 目标
把 `/root/sourceserver/pbf` 仓库里当前 web 测试页上的点击解释逻辑,迁移到当前 React 前端项目里。
不要只给方案,请直接完成实现。
## 必须先阅读的参考文件
请先阅读下面这些文件,再开始改代码:
1. `/root/sourceserver/pbf/Codex_指令_NavSea_Pickup_当前点击解读_迁移到_React_MapLibre.md`
2. `/root/sourceserver/pbf/src/pbf/navsea-pickup-test-karatsu-20nm.html`
3. `/root/sourceserver/pbf/src/pbf/navsea-pickup-interpreter.ts`
4. `/root/sourceserver/pbf/src/pbf/navsea-pickup-rules.v1.json`
5. `/root/sourceserver/pbf/NavSea_Native_Pickup_ReactNative_MapLibre_实现说明.md`
## 核心要求
### 1. 点击结果必须分成两类
- `海面/露出物`
- `海底信息`
规则:
- 只要用户点到了看得见的具体对象,就优先按对象解释
- 只有在没有明确命中对象,或更适合按海底信息解释时,才回退到海底信息
### 2. 必须复用当前规则,不要另造一套
- 使用:
- `navsea-pickup-rules.v1.json`
- 使用:
- `navsea-pickup-interpreter.ts`
的结构或直接移植其逻辑
不要重新发明:
- 图层名单
- 对象分类
- title/detail/render 规则
### 3. 查询方式必须保留双阶段
必须保留:
1. `exact point query`
2. `bbox query`
当前规则:
- `exact` 使用:
- `area + primary + info`
- `bbox` 使用:
- `primary + info`
### 4. “附近”必须按真实距离,不允许再用固定像素作为业务定义
当前业务定义:
- `附近 = 100 米内`
正确做法:
1. 把 `100m` 换算成当前 zoom 下的屏幕半径
2. 用这个半径做 `queryRenderedFeatures`
3. 再按真实 `distance_m <= 100` 二次过滤
### 5. 必须实现“当前点击解读”展示数据
至少输出下面这些字段:
- `结果类型`
- `主显示`
- `当前水深`
- `物体名`
- `水底情况`
- `判断理由`
- `补充提示`
### 6. “判断理由”必须保留
不要把判断做成黑箱。
至少要能说明:
- 当前水深取自哪个最近可见深度
- `100 米` 内深度样本范围和跨度
- 附近等深线数量
- 深度标签数量
- 海底辅助线数量
- 附近结构或底质
### 7. 建筑物、陆地、地标不能被海底解释吞掉
必须确保下面这些可见对象优先按对象解释:
- `land-area`
- `land-structures-area`
- `land-structures-line`
- `coast-structures-area`
- `coast-structures-line`
- `facility-points`
- `landmark-points`
- `landmark-point-fallback`
- `bridge-area`
### 8. 用户文案要简单
不要把内部术语直接给普通用户。
允许内部调试保留:
- `坡折`
- `槽`
- `脊`
- `bathymetry`
但最终展示优先用普通用户能懂的话,比如:
- `这里水底起伏比较明显,像一道坎。`
- `这里像水底一条沟的边上。`
- `这里像水底一个小包或小凸起边上。`
- `这里水底看起来比较平。`
- `这附近像礁边,鱼容易沿边活动。`
- `当前位置只有少量海底辅助线证据,暂不判断明显坎沟。`
## 推荐拆分
请至少实现:
1. 一个 `pickup rules loader`
2. 一个 `pickup interpreter`
3. 一个 `depth context service`
4. 一个 `terrain interpretation service`
5. 一个 `friendly click interpretation service`
6. 一个 React 组件或 hook,把 map 点击接进这套逻辑
7. 一个展示 `当前点击解读` 的 panel
## 不要做的事
1. 不要重新设计一套新的 pickup 体系
2. 不要删掉 `判断理由`
3. 不要把所有点击都优先解释成海底
4. 不要把“附近”改回固定 `px`
5. 不要为了“更聪明”擅自引入复杂插值算法
## 验收标准
实现完成后,至少满足:
1. 点到灯塔、灯标、浮标、建筑物、地标、防波堤、栈桥、桥梁、陆地时:
- 优先返回具体对象
2. 点到空白水域时:
- 返回海底信息
- 不是直接返回空
3. “附近”稳定定义为:
- `100 米内`
4. “当前水深”和“判断理由”不互相打架
5. 页面不会再出现:
- 明明点到建筑物,却解释成海底
## 交付要求
完成后请给出:
1. 改了哪些文件
2. 主要实现了什么
3. 如何在当前项目里接入
4. 还剩哪些限制或待确认点