docs(pbf): archive Full production provenance and engineering history
This commit is contained in:
174
Codex_Prompt_版_NavSea_Pickup_当前点击解读_迁移.md
Normal file
174
Codex_Prompt_版_NavSea_Pickup_当前点击解读_迁移.md
Normal 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. 还剩哪些限制或待确认点
|
||||
Reference in New Issue
Block a user