Files
pbf/Codex_Prompt_版_NavSea_Pickup_当前点击解读_迁移.md

4.3 KiB
Raw Blame History

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