# 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. 还剩哪些限制或待确认点