# 项目步骤记录 最后更新:`2026-04-18 14:18` 仓库:`/root/sourceserver/pbf` 远端:`ssh://git@nas:2222/tei/pbf.git` ## 文档规则 - `STEP_RECORD.md` 必须使用中文 - 后续新增输出文档必须使用中文 - 后续新增审计报告必须使用中文 ## 当前固定基线 唯一固定使用的视觉审计页面: - `http://192.168.200.184/newpec/navsea-compare-karatsu-20nm.html` 当前页面版本: - `HTML: compare-r19-20260402-1203` - `Style: karatsu-final-style-r15-20260402-1203` - `PBF: karatsu-final-pbf-20nm-20260402-1156-fullrefresh1` ## 2026-04-18 全国 full / semantic 逻辑审计与 AOI 图像审计启动 ### 1. 本轮新增入口 - 已新增全国几何 / native 风险审计脚本: - [`navsea_geometry_native_audit.py`](/root/sourceserver/pbf/navsea_geometry_native_audit.py) - 已新增全国 AOI 截图 + diff 审计脚本: - [`navsea_full_aoi_visual_audit.py`](/root/sourceserver/pbf/navsea_full_aoi_visual_audit.py) - 已新增 AOI 配置: - [`tasks/pbf/NavSea_Full_AOI_Visual_Audit_2026-04-18.json`](/root/sourceserver/pbf/tasks/pbf/NavSea_Full_AOI_Visual_Audit_2026-04-18.json) ### 2. 全国人工审计页调整 - 已把全国人工审计页改为支持: - `?variant=full` - `?variant=semantic` - 已同步部署: - [`src/pbf/navsea-compare-full-audit.html`](/root/sourceserver/pbf/src/pbf/navsea-compare-full-audit.html) - `/mnt/sda1/www/newpec/navsea-compare-full-audit.html` - 这样同一张页面就可以直接做: - 原始 `newpec vs full` - 原始 `newpec vs semantic` 的固定 AOI 截图审计 ### 3. 全国 z12 extent 逻辑审计结果 - 当前先聚焦全国最敏感的: - `z12` - 抽查和目录统计确认: - `/home/wwwroot/pbf-delivery-full-20260415` - `/home/wwwroot/pbf-delivery-full-semantic-20260416` 中都存在一批 `z12` 瓦片 extent 错退成 `4096` - 修前统计: - `full z12`: - 总瓦片 `48556` - `1048576`:`47366` - `4096`:`1190` - `semantic z12`: - 总瓦片 `48556` - `1048576`:`47296` - `4096`:`1260` ### 4. 本轮逻辑修复 - 已先做硬链接备份,便于快速退回: - `/home/wwwroot/pbf-delivery-full-20260415-backup-20260418-preextentfix` - `/home/wwwroot/pbf-delivery-full-semantic-20260416-backup-20260418-preextentfix` - 已按原始 `newpec` 同 tile 的 source extent 回写当前错片: - `full repaired = 1183` - `semantic repaired = 1215` - 修后复核: - `full z12`:`48556 / 48556` 全部为 `1048576` - `semantic z12`:`48556 / 48556` 全部为 `1048576` ### 5. 当前视觉 AOI 审计结果 - 已跑全国固定 AOI 截图 + 图像 diff 报告: - [`report/full_aoi_visual_audit_2026-04-18_r1/full_aoi_visual_audit.md`](/root/sourceserver/pbf/report/full_aoi_visual_audit_2026-04-18_r1/full_aoi_visual_audit.md) - [`report/full_aoi_visual_audit_2026-04-18_r1/full_aoi_visual_audit.json`](/root/sourceserver/pbf/report/full_aoi_visual_audit_2026-04-18_r1/full_aoi_visual_audit.json) - 当前固定 AOI: - 博多港中心 `10nm` - 东京湾 `10nm` - 大阪 `10nm` - 冲绳 `10nm` - 唐津 `5nm` - 当前固定 zoom: - `10` - `12` ### 6. 当前视觉结论 - 当前差异最大的 case 不是 `semantic` 独有问题 - 而是: - `full` - `semantic` 在同一 AOI 上同时大幅偏离原始 `newpec` - 当前 top diff 主要集中在: - `冲绳 10nm z12` - `唐津 5nm z12` - 代表 changed ratio: - `okinawa full z12 = 0.861954` - `karatsu full z12 = 0.859021` - `okinawa semantic z12 = 0.850170` - `karatsu semantic z12 = 0.847223` ### 7. 当前判断 - 这轮已经确认并修掉的是: - 全国 `z12 extent` 错片问题 - 这轮尚未收口的是: - 全国 `full / semantic` 与原始 `newpec` 的视觉等价性 - 且当前视觉差异更像: - `full / semantic` 共用的主线 style / PBF 问题 - 不只是语义版单独引入的回退 ### 8. 下一步 1. 继续按当前 AOI diff 排序,从: - `唐津 5nm z12` - `冲绳 10nm z12` 开始逐张定位具体 layer / 对象组差异 2. 优先把: - `full` 和 `semantic` 同时异常的主线问题 从语义版专项问题中剥离出来 3. 每修一类问题后,直接复跑同一组 AOI 截图,直到 diff 明显收敛 ## 2026-04-18 全国热点 AOI 旧坏 tile 重建修复 ### 1. 这轮补充确认 - 用户指出唐津热点截图右侧仍有明显大片空白 - 继续下钻后确认: - 上一轮修掉的只是 `extent = 4096` 错退片 - 但当前全国 `full / semantic` 热点里还有另一类更深的问题: - 几何坐标本身被旧构建产物写坏 ### 2. 已定位到的根因 - 在问题 tile 例如: - `12/3526/1643.pbf` 上: - 原始 `newpec` 的正常 buffer 只约为 `±20480` - 但当前 delivery 旧 tile 的多层几何 `min_y` 已被写到约 `-1064960` - 这不是 source 原始 PBF 自带的问题 - 因为用当前 builder 对同一 tile 临时重建后: - 几何最大 overflow 可回到正常的 `20480` - 因此当前判断为: - 线上全国 `full / semantic` 里混有一批旧坏 tile - 需要直接按当前 builder 重建 ### 3. 本轮新增重建脚本 - 已新增: - [`navsea_rebuild_hotspot_tiles.py`](/root/sourceserver/pbf/navsea_rebuild_hotspot_tiles.py) - 用途: - 按全国固定 AOI 热点枚举 tile - 先用当前 builder 重建 `full` - 再以重建后的 full tile 为底稿刷新 `semantic` - 同时生成备份和修复报告 ### 4. 本轮实际修复 - 已对当前固定 AOI 热点 tile 做一次重建修复: - 博多港中心 `10nm` - 东京湾 `10nm` - 大阪 `10nm` - 冲绳 `10nm` - 唐津 `5nm` - 覆盖 zoom: - `10` - `12` - 实际重建并部署: - `154` 张热点 tile 到 `full` - `154` 张热点 tile 到 `semantic` - 备份目录: - `/tmp/navsea_hotspot_rebuild/backup_full` - `/tmp/navsea_hotspot_rebuild/backup_semantic` - 修复报告: - [`report/full_hotspot_rebuild_2026-04-18/full_hotspot_rebuild.md`](/root/sourceserver/pbf/report/full_hotspot_rebuild_2026-04-18/full_hotspot_rebuild.md) - [`report/full_hotspot_rebuild_2026-04-18/full_hotspot_rebuild.json`](/root/sourceserver/pbf/report/full_hotspot_rebuild_2026-04-18/full_hotspot_rebuild.json) ### 5. 当前复核 - 已再次复核问题 tile: - `/home/wwwroot/pbf-delivery-full-20260415/12/3526/1643.pbf` - `/home/wwwroot/pbf-delivery-full-semantic-20260416/12/3526/1643.pbf` - 当前两边都已从: - `max_overflow = 1064960` 修回到: - `max_overflow = 20480` ### 6. 唐津 z12 单点复跑结果 - 已单独复跑: - [`report/karatsu_hotspot_verify_2026-04-18/full_aoi_visual_audit.md`](/root/sourceserver/pbf/report/karatsu_hotspot_verify_2026-04-18/full_aoi_visual_audit.md) - [`report/karatsu_hotspot_verify_2026-04-18/full_aoi_visual_audit.json`](/root/sourceserver/pbf/report/karatsu_hotspot_verify_2026-04-18/full_aoi_visual_audit.json) - 结果: - `karatsu full z12` - 修前 `0.859021` - 修后 `0.761277` - `karatsu semantic z12` - 修前 `0.847223` - 修后 `0.751505` - 说明: - 右侧大片空白已明显收敛 - 但当前视觉 diff 仍偏高,表示主线风格 / 文本 / 细节匹配仍未收口 ### 7. 当前下一步 1. 继续对: - `唐津 z12` - `冲绳 z12` 做第二轮逐层定位 2. 先把“旧坏 tile”与“主线 style 差异”两类问题彻底拆开 3. 之后再决定是否把这套 rebuild 从热点 AOI 扩到全国更大范围 ## 2026-04-17 Karatsu 20nm final Native ParseTile 异常定位 ### 1. 用户现象 - native 端出现大量: - `MapLibre error [ParseTile]: Could not get geometries: paths outside valid range of coordinate_type` - 同时画面出现局部几何缺失 / 轮廓异常 ### 2. 本轮确认结果 - 当前问题不能只归因于 style - `pbf-delivery-karatsu-20nm-final` 本身存在对 native 不友好的高精度几何编码: - `z12` 瓦片 layer `extent` 普遍为 `1048576` - 且几何仍带有约 `±20480` 的 buffer 坐标 - 这套编码在浏览器 compare 页里仍可能勉强通过 - 但在 MapLibre Native 下会更容易触发: - `paths outside valid range of coordinate_type` ### 3. 本轮顺手发现的附带问题 - [`build_semantic_delivery_assets.py`](/root/sourceserver/pbf/build_semantic_delivery_assets.py) 之前对命中替换的瓦片做了: - 解码 - 改属性 - 再编码 - 若重编码时不显式带回原 layer `extent` - 会把高 extent 瓦片直接写坏 ### 4. 本轮代码修正 - 已确认 [`build_semantic_delivery_assets.py`](/root/sourceserver/pbf/build_semantic_delivery_assets.py) 当前重写语义版瓦片时会: - 保留 feature `id` - 保留各 layer 原始 `extent` - 已新增: - [`navsea_normalize_tile_extents.py`](/root/sourceserver/pbf/navsea_normalize_tile_extents.py) - 用途: - 把现有高 extent 瓦片按比例归一到标准 `4096` 网格 - 作为 native 兼容修复入口 ### 5. 当前判断 - 这次“大量 ParseTile 报错”更接近: - delivery/final PBF 几何编码口径与 native 解析器兼容性不一致 - 下一步优先: - 先把 `pbf-delivery-karatsu-20nm-final` 归一化到 `4096` - 再回到 native 端复核是否还会持续抛同类 ParseTile 错误 当前仍使用同一张 HTML 做两个 profile: 1. 唐津 20 海里 - `style.navsea-delivery-karatsu-20nm-final.json` - `pbf-delivery-karatsu-20nm-final` 2. 九州 - `style.navsea-delivery-kyushu.json` - `pbf-delivery-kyushu-reencoded` ## 当前结论 - 当前主视觉问题不再优先怀疑 compare HTML 切错。 - 当前主问题分成两类: - `style` 过滤条件写错或过宽 - 线上仍在使用较早生成的 `20nm final` 瓦片,部分关键对象没有 `class_code / display_code` ## 2026-04-16 灯弧缺失修复 ### 1. 用户反馈 - 全国人工审计页右侧语义版中,灯标的光弧没有显示 - 左侧原始 `newpec` 可见,右侧 delivery / semantic 不可见 ### 2. 本轮排查结果 - 不是 `sprite-semantic` 缺图块: - `arc-daytime-04027289` - `arc-daytime-m1` - `arc-daytime-m2` - `arc-daytime-m3` 以及: - `light-daytime-1/2/3` 在 `/mnt/sda1/www/newpec/sprite-semantic/sprite*.json` 中都还存在 - 当前真正根因是 delivery style 中: - `nav-light-arc` 这一层被写成了: - `"visibility": "none"` - 且页面脚本没有再把它切回可见 - 因此只要命中该层,最终仍会被整层隐藏 ### 3. 本轮修复 - 已把以下样式中的: - `nav-light-arc` 从隐藏改为可见 - 已修改: - `src/pbf/style.navsea-delivery-full.json` - `src/pbf/style.navsea-delivery-full-semantic.json` - `src/pbf/style.navsea-delivery-karatsu-20nm-final.json` - `src/pbf/style.navsea-delivery-karatsu-10nm.json` - `src/pbf/style.navsea-delivery-kyushu.json` ### 4. 页面版本提示 - 已同步更新全国人工审计页显示的语义版 style 版本号为: - `full-semantic-style-r2-20260416-2148` ### 5. 当前结论 - 这次“光的弧没有了”不是: - `PBF` 缺字段 - 或 `sprite` 缺资源 - 而是 delivery style 把光弧层整层隐藏了 - 修完后,右侧 delivery / semantic 应恢复与左侧原始版同类灯弧显示 ## 2026-04-16 投锚注意障害物图标缺失修复 ### 1. 用户反馈 - 全国人工审计页中,`p投錨注意障害物` 的一部分右侧语义版图标缺失 - 用户截图示例对象: - 左侧原始版 `fid = 15002075` - `分類番号 = 420` ### 2. 本轮排查结果 - 当前问题不是: - `sprite-semantic` 缺图 - 已核实: - `foul_ground` - `symbol-daytime-420` 在语义版 sprite 中都存在 - 且对应图块像素完全一致 - 同时已核实该区域 delivery / semantic `PBF` 中对象数量并未少: - 原始 `p投錨注意障害物` 当前 tile 为 `12` 个 - delivery `anchor_caution_hazard_point` 当前 tile 也是 `12` 个 - 但当前 delivery 数据里这批对象的 `chart_icon_image` 仍普遍回落成: - `symbol-daytime-428` - 因此在当前“语义版 style + 旧编号 icon 回落数据”混用阶段, - `anchor-hazard-points-428` 这层继续强行使用新语义 key - 风险高于收益 ### 3. 本轮修复 - 已把语义版 style 中: - `anchor-hazard-points-428` 这一层 - 从语义 key 映射临时回退为原始稳定的: - `symbol-daytime-*` 映射 - 这样可保证: - 右侧语义版在这条危险物图标链上先恢复与原始版一致 - 不继续依赖当前尚未完全收口的语义 key 图标链 ### 4. 页面版本提示 - 已同步更新全国人工审计页显示的语义版 style 版本号为: - `full-semantic-style-r3-20260416-2210` ### 5. 当前结论 - 这次“图标丢失”更接近: - 语义版危险物图标映射链在当前过渡阶段不够稳 - 当前先按“恢复原始表现优先”处理 - 后续若要继续推进这条危险物图标的语义 key 迁移, - 应先把 builder / PBF 输出里的 `chart_icon_image` 也一并收口 ## 2026-04-16 危险物图标 builder 正式修复与局部 PBF 回写 ### 1. 本轮继续处理目标 - 不再只停留在 style 兜底 - 继续把: - `p投錨注意障害物` - `p航行危険障害物` 的图标问题收回到 builder / PBF 输出层 ### 2. 当前确认的根因 - `navsea_tile_builder.py` 里危险物 `chart_icon_image` 的派生逻辑此前只看: - `canonical_object_type` - `chart_symbol_code` - `hazard_class` - 没有把: - `class_code / 分類番号` 纳入优先判定 - 结果就是: - `420` - `434` 这类对象会被粗暴回落成: - `symbol-daytime-428` ### 3. builder 侧正式修复 - 已在: - `navsea_tile_builder.py` 中新增危险物: - `class_code -> icon` 正式映射表 - 当前 `infer_chart_icon_image()` 已改为: - 对 `p投錨注意障害物 / p航行危険障害物` 先按 `class_code` 精确出图标 - 再回退旧的粗语义判断 ### 4. 当前样本验证 - 直接验证 builder 推断结果已变为: - `420 -> foul_ground` - `428 -> fish_reef` - `434 -> subsea_installation_outfall_intake` ### 5. 当前 PBF 局部回写 - 由于全国全量危险物瓦片回写耗时过长,本轮没有继续强行等完全量收口 - 当前先对用户截图所在区域的局部 `z12` 瓦片做了就地回写 - 本轮实际改动到的 delivery 瓦片: - `12/3549/1624.pbf` - `12/3551/1622.pbf` - `12/3551/1623.pbf` - 与其硬链接共享的语义版目录中的对应瓦片也同步生效 ### 6. 当前关键抽样结果 - 已复核: - `/home/wwwroot/pbf-delivery-full-20260415/12/3550/1623.pbf` - `/home/wwwroot/pbf-delivery-full-semantic-20260416/12/3550/1623.pbf` - 当前 `anchor_caution_hazard_point` 中的图标值已变为: - `420 -> foul_ground` - `428 -> fish_reef` - `434 -> subsea_installation_outfall_intake` ### 7. 页面版本提示 - 已把全国人工审计页显示的语义版 `PBF` 版本号更新为: - `full-semantic-pbf-r2-20260416-2248-hazardfix` ### 8. 当前状态 - 当前: - style 兜底已补 - builder 正式修复已落地 - 用户当前审计区域的局部瓦片已完成回写 - 尚未完成的部分: - 全国全量危险物相关瓦片的完整重放 / 回写 ## 2026-04-16 全国语义版 PBF 缺瓦片补齐 ### 1. 用户指出的问题 - 用户反馈: - `src/pbf/style.navsea-delivery-full-semantic.json` 指向的全国语义版 `PBF` 不完整 ### 2. 本轮排查结果 - 样式文件本身的 `tiles` 路径没有缺项: - `src/pbf/style.navsea-delivery-full-semantic.json` - 当前仍指向: - `http://192.168.200.184/pbf-delivery-full-semantic-20260416/{z}/{x}/{y}.pbf` - 实际缺口出在语义版全国 `PBF` 输出目录: - 源目录 `/home/wwwroot/pbf-delivery-full-20260415` 共 `65148` 张瓦片 - 语义目录 `/home/wwwroot/pbf-delivery-full-semantic-20260416` 共 `65145` 张瓦片 - 当前确认缺失的 3 张瓦片: - `12/3659/1567.pbf` - `12/3661/1548.pbf` - `8/223/101.pbf` ### 3. 根因判断 - 当前 `build_semantic_delivery_assets.py` 的生成逻辑是: - 先 `cp -al` 整树复制 - 再并行重写命中旧 sprite key 的瓦片 - 这次语义版目录里少 3 张,更像是生成过程中个别目标瓦片未最终落盘 - 因而需要在重写完成后补一轮“输出目录完整性回填”,不能只假设整树复制一定 100% 留存 ### 4. 本轮修复 - 已修改: - `build_semantic_delivery_assets.py` - 新增收口逻辑: - 重写完成后,遍历源目录 - 对输出目录中不存在的 `.pbf` 自动补硬链接 / 复制 - 并输出: - `tiles_backfilled` - `tiles_total_after_backfill` - 已把当前缺失的 3 张瓦片直接补回: - `12/3659/1567.pbf` - `12/3661/1548.pbf` - `8/223/101.pbf` ### 5. 当前状态 - 当前 `/home/wwwroot/pbf-delivery-full-semantic-20260416` 已与 `/home/wwwroot/pbf-delivery-full-20260415` 对齐到同样的瓦片总数: - `65148` - `style.navsea-delivery-full-semantic.json` 对应的全国语义版 `PBF` 现已补齐,不再少这 3 张瓦片 ## 2026-04-02 本轮关键发现 ### 1. 航标紫色圈“又回来了”的原因 - 问题层:`nav-light-flare` - 根因:这一层的过滤条件写得过宽,几乎所有带 `light_color_code` 的对象都会被套上 flare。 - 直接表现: - 一些本来不该带圈的航标、浮标又被画成紫色圈 - 例如 `31300003` 这类脚手架浮标不应再命中 flare - 现已修正: - `nav-light-flare` 只对原始样式允许的那几类灯标生效 - 不再给普通浮标乱套圈 ### 2. “眼睛”图标回来的原因 - 问题层:`anchor_caution_hazard_point` - 根因不是对象丢失,而是线上旧 `20nm final` 瓦片里很多对象没有 `class_code`。 - 一旦 `class_code` 缺失,样式只能退回: - `chart_icon_image = symbol-daytime-428` - 直接表现: - `420` 这类投锚注意危险物又被画成眼睛图标 - 实际核对结果: - 用当前 builder 只重建 `11/1765/820` 这一张瓦片后,同一批对象已经恢复: - `class_code = 420` - 同时对应浮标对象也恢复: - `display_code = 31300003` - `chart_icon_image = symbol-daytime-327` ### 3. 为什么会出现“我们改过了,怎么又错了” - 之前改对的是 `style` 逻辑 - 但 compare 页底下继续使用的是较早生成的 `20nm final` 瓦片 - 这批旧瓦片缺少关键码值字段 - 所以一旦样式依赖这些字段,就会退回错误兜底图标 一句话总结: - 这次回退不是“代码白改了” - 而是“新 style 压在旧 PBF 上跑”,导致修正无法完整生效 ### 4. `pパイロットステーション` 丢失的原因 - 这个对象不是 PBF 丢了。 - 实际核对结果: - 原始对象在 `z12/3530/1641` - 原始层:`pパイロットステーション` - 原始 `fid = 9002206` - `分類番号 = 500` - 当前 final PBF 里也存在对应对象: - `source-layer = pilot_station_point` - `class_code = 500` - `chart_symbol_code = pilot_station` - 真正问题: - final style 之前没有 `pilot_station_point` 这一层 - 所以右侧页面虽然有对象,但完全没画出来 - 现已修正: - 新增 `pilot-station-points` - 固定使用 `symbol-daytime-500` ## 当前已落地的修正 - 已修正 `nav-light-flare` 过滤逻辑 - 已上线新的 compare 页版本号显示 - 已完成 `20nm final` 全量重生并切到线上 - 当前整套 `20nm final` 都是当前 builder 生成的新版本,不再是只修单瓦片 ## 2026-04-03 canonical_object_type 去日文推进 ### 1. 本轮代码侧已完成 - 在 [`navsea_tile_builder.py`](/root/sourceserver/pbf/navsea_tile_builder.py) 中把: - `canonical_object_type` 的内部原值 - 和最终 release 输出值 分开处理 - 保留内部旧值给: - DB render rule - field value rule - 现有 builder 语义推断 - 最终输出到 delivery / final PBF 的 `canonical_object_type` 改为稳定 ASCII 值 - 已同步改: - [`src/pbf/style.navsea-delivery-karatsu-10nm.json`](/root/sourceserver/pbf/src/pbf/style.navsea-delivery-karatsu-10nm.json) - [`src/pbf/style.navsea-delivery-karatsu-20nm-final.json`](/root/sourceserver/pbf/src/pbf/style.navsea-delivery-karatsu-20nm-final.json) - [`src/pbf/style.navsea-delivery-kyushu.json`](/root/sourceserver/pbf/src/pbf/style.navsea-delivery-kyushu.json) - 当前 style 中原先直接依赖的日文 `canonical_object_type` 过滤值,已切到对应 ASCII 值。 ### 2. 10nm 临时副本结果 - 临时副本目录: - `/tmp/pbf-delivery-karatsu-10nm-canonical-20260403` - 当前结果: - `canonical_object_type` 非 ASCII 复扫结果已经降到: - `non_ascii_distinct = 0` - 说明: - 唐津 10 海里这条可信 backend baseline 上,`canonical_object_type` 去日文已经跑通到 0 残留。 ### 3. 10nm 渲染审计结果 - 新报告: - [`report/render_audit_10nm_canonical_type_2026-04-03.md`](/root/sourceserver/pbf/report/render_audit_10nm_canonical_type_2026-04-03.md) - [`report/render_audit_10nm_canonical_type_2026-04-03.json`](/root/sourceserver/pbf/report/render_audit_10nm_canonical_type_2026-04-03.json) - 结果统计与 2026-03-31 trusted rerun 一致: - `exact_match = 121855` - `mismatch = 12912` - `missing_in_engineering = 5` - 结论: - 本轮 `canonical_object_type` 去日文没有引入新的 10nm backend render 回退。 ### 4. 20nm 对象保真审计结果 - 新报告: - [`report/object_preservation_20nm_canonical_type_2026-04-03/object_preservation_final_20nm.md`](/root/sourceserver/pbf/report/object_preservation_20nm_canonical_type_2026-04-03/object_preservation_final_20nm.md) - [`report/object_preservation_20nm_canonical_type_2026-04-03/object_preservation_final_20nm.json`](/root/sourceserver/pbf/report/object_preservation_20nm_canonical_type_2026-04-03/object_preservation_final_20nm.json) - 结果: - `tiles compared = 154` - `raw objects = 4165` - `preserved = 4165` - `missing / wrong_relayer / identifier_lost / identifier_mismatch = 0` - 结论: - 20nm final 在对象保真口径上没有因为本轮 `canonical_object_type` 清理出现对象级退化。 ### 5. 当前未收完的部分 - 20nm 临时副本: - `/tmp/pbf-delivery-karatsu-20nm-final-canonical-20260403` - 已经完成过一轮旧映射 replay,也完成了对象保真审计 - 但在映射表补第二批 / 第三批尾项后,20nm 全量 ASCII replay 还没有完整重新跑完并做最终非 ASCII 复扫 - 因此当前真实状态是: - `10nm backend trusted baseline` 已完成去日文和审计 - `20nm object preservation` 已完成审计 - `20nm canonical_object_type 全量去日文复扫` 仍差最后一步 replay + rescan ## 当前未完成项 - 继续按同一张 compare 页回扫其他依赖 `class_code / display_code` 的细分类图标 - 继续做热点截图复核,确认没有新的样式回退 - 完成 `/tmp/pbf-delivery-karatsu-20nm-final-canonical-20260403` 的全量 replay - 对 20nm canonical 副本补做最终 `non_ascii canonical_object_type` 复扫 ## 2026-04-04 全量 PBF 按最新逻辑重建启动 ### 1. 本轮启动前确认 - 已按仓库续接要求复读: - `STEP_RECORD.md` - `PROJECT_HANDOFF_2026-03-31.md` - `NavSea_Delivery_Preflight_Audit_Spec.md` - `NavSea_Audit_Logic_And_Evolution_2026-04-01.md` - 已确认当前远端仍是: - `ssh://git@nas:2222/tei/pbf.git` - 已确认当前 builder 里的“最新逻辑”包含: - `navsea_tile_builder.py` 中 `RELEASE_CANONICAL_OBJECT_TYPE_MAP` - delivery / final 输出会把 `canonical_object_type` 物化为最新 ASCII 发布值 ### 2. 启动过程中发现的阻塞 - 直接用脚本默认参数启动会失败: - `RuntimeError: navsea mapping registry is empty` - 已核实数据库当前实际存在的规则 bundle 只有: - `bundle_id = navsea-core` - 因此本轮全量重建统一改为: - `--bundle-id navsea-core` ### 3. 当前已启动的重建会话 - 为避免 `reference_tile_root` 和输出目录互相清空,已先把现有瓦片集合复制到: - `/tmp/pbf-refsets/karatsu10-delivery` - `/tmp/pbf-refsets/karatsu10-engineering` - `/tmp/pbf-refsets/karatsu20-delivery` - `/tmp/pbf-refsets/karatsu20-final` - `/tmp/pbf-refsets/kyushu-delivery` - `/tmp/pbf-refsets/kyushu-engineering` - 当前正在运行的 builder 会话: - `karatsu10 delivery`: session `72703` - `karatsu10 engineering`: session `33691` - `karatsu20 delivery`: session `9519` - `karatsu20 final`: session `97913` - `kyushu delivery`: session `79176` - `kyushu engineering`: session `88222` - 统一使用: - `--fid-key thisMyWorld@2026` - `--bundle-id navsea-core` - delivery / final 口径统一附带: - `--release-minimal` - engineering 口径统一附带: - `--engineering` ### 4. 本轮目标 - 把当前活跃的 builder 产物统一按最新逻辑重放: - `/home/wwwroot/pbf-delivery-karatsu-10nm` - `/home/wwwroot/pbf-engineering-karatsu-10nm` - `/home/wwwroot/pbf-delivery-karatsu-20nm` - `/home/wwwroot/pbf-delivery-karatsu-20nm-final` - `/home/wwwroot/pbf-delivery-kyushu-reencoded` - `/home/wwwroot/pbf-engineering-kyushu` ### 5. 下一步 1. 持续轮询 6 个 builder 会话,确认没有新的运行时异常 2. 待会话完成后复核各目录瓦片数是否回到原集合规模 3. 如需要,再补做 `canonical_object_type` 非 ASCII 复扫与对象保真 / render 审计 ## 2026-04-05 九州 compare 图标问题收口 ### 1. 新确认的问题类型 - 九州 profile 中出现的“红 X 变鱼礁 / 航标 icon 不对”,本轮确认不属于前一轮唐津那种: - `旧 PBF 缺 class_code / display_code` - 导致样式退回兜底图标 - 本轮在九州对应瓦片中核实到: - `class_code` - `display_code` - `canonical_object_type` - `chart_symbol_code` 这些关键字段本身是存在的 - 因此当前九州问题的真实根因是: - `style.navsea-delivery-kyushu.json` 仍停留在较早的粗分类图标逻辑 - 没有同步到 `karatsu 20nm final` 已经收好的精细图标分支 ### 2. 危险物图标根因 - 旧原始样式对: - `409` - `420` - `425` - `428` - `434` 都是按 `分類番号` 分开画不同图标 - 但九州 delivery 样式之前: - `navigation_hazard_point` 只吃 `chart_icon_image` - `anchor_caution_hazard_point` 里 `obstruction / hazard_mark / fish_reef` 又被统一压进 `symbol-daytime-428` - 所以视觉上会出现: - 红 X / 障碍物 / 鱼礁混成一类 icon ### 3. 航标图标根因 - 九州 delivery 样式之前的 `navigation_marks` 图标分支太粗: - `light_beacon` 固定画 `symbol-daytime-310` - 普通 `nav-marks` 也没有按 `display_code` 细分浮标 / 灯标样式 - 所以像 `312` 这类灯浮标、以及更细的 `311xxx / 312xxx / 323xxx / 325xxx` 都会回成粗图标 ### 4. 已完成修正 - 已把 [`src/pbf/style.navsea-delivery-kyushu.json`](/root/sourceserver/pbf/src/pbf/style.navsea-delivery-kyushu.json) 同步到 `karatsu 20nm final` 的图标口径: - `hazard-points` 改为优先按 `class_code` 精确分图标 - `anchor-hazard-points-428` 改为优先按 `class_code` 精确分图标 - `nav-light-flare` 改为和 `display_code` / `minor_light` 口径一致 - `nav-marks-light-beacons` 改为按 `display_code` 细分 `311xxx` - `nav-marks` 改为按 `display_code` 细分 `312/313/323/325/327/328` 等图标 - 并补上 `lattice_buoy / pillar_buoy / can_buoy` 的 canonical fallback - 已继续补上 `facility_boundary_point` 的设施点图标逻辑: - 不再固定画 `symbol-daytime-520` - 改为按 `class_code` 区分: - `505 / 510 -> symbol-daytime-505` - `520 -> symbol-daytime-520` - `530 -> symbol-daytime-530` - `540 -> symbol-daytime-540` - `550 -> symbol-daytime-550` ### 5. 已部署 - 已部署新的九州样式到: - `/mnt/sda1/www/newpec/domain/style.navsea-delivery-kyushu.json` - 已同步 bump compare 页版本并部署: - HTML 版本:`compare-r22-20260405-0910` - 九州 style 版本:`kyushu-style-r4-20260405-0910` - HTML 路径:`/mnt/sda1/www/newpec/navsea-compare-karatsu-20nm.html` ### 6. 继续补到的小灯图标问题 - 新发现九州还有一类 `minor_light` 小灯点位图标不对 - 代表点位: - `display_code = 30600000` - delivery 中当前对象属性显示为: - `canonical_object_type = minor_light` - `chart_symbol_code = light_beacon` - `chart_icon_image = symbol-daytime-310` - 旧原始样式中: - `30600000 -> symbol-daytime-303` - 说明: - 这类点位不只是 style 旧逻辑问题 - 也暴露出 builder 对部分 `minor_light` / `light_beacon` 的图标推断偏粗 - 当前先在九州 style 层做了旧版兼容兜底: - `nav-marks-small-lights` 改为按 `display_code` 细分: - `303xxx` - `305xxx` - `306xxx` - `307xxx` - `308xxx` - `309xxx` - 先恢复到原始样式的图标表现 ### 7. builder 侧已继续收口 - 已在 [`navsea_tile_builder.py`](/root/sourceserver/pbf/navsea_tile_builder.py) 中继续修正 `navigation_marks` 的图标生成逻辑: - 新增一组按旧 `display_code` 直接映射图标的 builder 内部表 - 当前先覆盖: - `303xxx` - `305xxx` - `306xxx` - `307xxx` - `308xxx` - `309xxx` - 已把原始 `canonical_object_type = 灯 (Lt)` 的语义判断单独识别为: - `chart_symbol_code = minor_light` 不再先落到 `light_beacon` - 单瓦片验证结果已确认: - `display_code = 30600000` - 现在 builder 直接产出: - `chart_symbol_code = minor_light` - `chart_icon_image = symbol-daytime-303` ### 8. 当前已重跑的 builder 会话 - 已重新启动: - `kyushu delivery`: session `80537` - `kyushu engineering`: session `73505` - 目的: - 让九州现网 compare 不只依赖 style 兜底 - 同时把新的 builder 图标推断真正写回 delivery / engineering PBF ## 下一步 1. 在固定 compare 页上复查: - 浮标不再被错误套圈 - `420` 不再回成眼睛图标 2. 继续清理其他依赖 `class_code / display_code` 的细分类图标问题 3. 继续完成 20nm canonical 副本的全量 replay,并确认: - `canonical_object_type` 非 ASCII 残留归零或收敛到明确尾项 4. 如需上线这轮 canonical 去日文结果: - 先决定是否同时重放 20nm final PBF - 再决定是否同步部署 compare 用 style / 页面版本号 ## 快速续接提示 下次继续时,先做这几件事: 1. 确认页面顶部版本仍然是 `compare-r18 / style-r14 / pbf-fullrefresh1` 2. 继续从博多港和中央航路这类热点回扫细分类图标 3. 优先检查仍依赖 `display_code / class_code` 的对象组 ## 2026-04-05 九州 `at` 规则回扫 ### 1. 对今天几类错位的统一判断 - 本轮重新对了原始 [`style.json`](/root/sourceserver/pbf/src/pbf/style.json) 后,已确认今天几类错位的共同根因是: - 之前仍在用“归一语义字段优先”的方式补样式 - 但原始 `at` 图层实际是“旧字段直驱” - 本轮重新钉实的规则: - `p航行危険障害物` / `p投錨注意障害物`:按 `分類番号` - `p錨泊地等`:按 `分類番号` - `p施設・境界線等` 点要素:按 `分類番号` - `p航路標識群` 主图标:按 `表示用番号` - `p航路標識群フレア`:按 `形状分類番号` - `p陸上構造物`:按 `分類番号` 直接拼 `symbol-daytime-*` ### 2. 本轮已修改的 delivery / style 逻辑 - 已修改 [`src/pbf/style.navsea-delivery-kyushu.json`](/root/sourceserver/pbf/src/pbf/style.navsea-delivery-kyushu.json): - `anchorage-symbols` 改为优先按 `class_code` 直出 `719/720/721/724` - `nav-light-flare` 改为优先按 `shape_class_code` 命中原始 flare 允许集合,仅在缺字段时退回旧兼容分支 - `nav-marks-harbor-lighthouses` / `nav-marks-breakwater-lighthouses` / `nav-marks-small-lights` / `nav-marks-light-beacons` - 过滤条件改为优先按 `display_code` 前缀分层 - 仅在缺 `display_code` 时退回 `canonical_object_type` - `nav-marks` 主层过滤同步改为排除这些 `display_code` 前缀,而不再只靠 `canonical_object_type` - `facility-points` 保持按 `class_code` 分图标,并补上 `icon-ignore-placement` - 补回 `pilot-station-points` - `landmark-points` 改为优先按 `class_code` 直接拼 `symbol-daytime-*` - `landmark-point-fallback` 只对缺 `class_code` 且不在已知旧图标类中的对象保留圆点兜底 ### 3. 本轮已修改的 builder / 字段保留逻辑 - 已修改 [`navsea_tile_builder.py`](/root/sourceserver/pbf/navsea_tile_builder.py): - `FINAL_RELEASE_PROPERTY_ALLOWLIST` 新增 `shape_class_code` - `--release-minimal` 口径现在也会保留 `shape_class_code` - 已修改 [`tasks/pbf/mappings/navsea_field_name_rules_v1.yaml`](/root/sourceserver/pbf/tasks/pbf/mappings/navsea_field_name_rules_v1.yaml): - `形状分類番号 -> shape_class_code` 改为 `keep_in_delivery: true` - 目的: - 让 delivery PBF 重新具备支撑原始 `at` 规则的最小旧字段 - 不再让 `航路標識群フレア` 只能靠 `display_code + canonical_object_type` 猜 ### 4. 本轮已部署版本 - compare HTML 已 bump 并部署: - `HTML: compare-r23-20260405-1533` - 路径:`/mnt/sda1/www/newpec/navsea-compare-karatsu-20nm.html` - 九州 style 已 bump 并部署: - `Style: kyushu-style-r5-20260405-1533` - 路径:`/mnt/sda1/www/newpec/domain/style.navsea-delivery-kyushu.json` ### 5. 本轮已重新启动九州重建 - 使用仓库虚拟环境 `.venv/bin/python` - 直接用系统 `python3` 会报: - `ModuleNotFoundError: No module named 'mapbox_vector_tile'` - 已重新启动: - `kyushu delivery`: session `6078` - `kyushu engineering`: session `63691` - 当前目标: - 把新的 `shape_class_code` 与 `at` 修正真正写回九州 delivery / engineering PBF ### 6. 下一步 1. 等待九州两套 builder 完成 2. 抽查热点瓦片,确认 delivery 内已出现 `shape_class_code` 3. 在固定 compare 页继续复查今天提到的几类同源错位点 ## 2026-04-05 九州 delivery 双用途图层整理 ### 1. 本轮新增整理文档 - 已新增: - [`NavSea_九州_Delivery_双用途图层分类_2026-04-05.md`](/root/sourceserver/pbf/NavSea_九州_Delivery_双用途图层分类_2026-04-05.md) ### 2. 本轮整理目标 - 不再只按旧样式/旧图层名字理解九州 delivery - 改为按两个业务目标重新归类当前实际图层: 1. 航海用 2. 钓鱼用 ### 3. 本轮整理结论 - 航海用的核心方向已明确为: - 危险物优先 - 障碍物优先 - 导助航优先 - 净空/设施/锚地等通航约束优先 - 水深细节退后 - 钓鱼用的核心方向已明确为: - 海底地形优先 - 水深细节优先 - 底质优先 - 鱼礁 / 穴 / 海底结构优先 - 安全层只保底不抢主视觉 ### 4. 当前建议的实施方式 - 建议后续不要继续只维护一套 delivery style - 而是同一套 PBF 下拆成两个 profile: 1. `delivery-navigation` 2. `delivery-fishing` - 先拆 style,不急着拆数据 ## 2026-04-07 九州 delivery 按对象属性分组整理 ### 1. 本轮新增整理文档 - 已新增: - [`NavSea_九州_Delivery_对象属性分组_2026-04-07.md`](/root/sourceserver/pbf/NavSea_九州_Delivery_对象属性分组_2026-04-07.md) ### 2. 本轮整理目标 - 不再按“航海用 / 钓鱼用”分 - 改为按对象属性相同的 group 整理当前九州 delivery - 目标是给后续 style 重排、profile 拆分、专题层拆分打基础 ### 3. 本轮已整理的主要 group - 等深线 - 鱼礁 - 灯塔 - 港口灯 - 渔网 / 渔具 - 海上标识 - 陆地设施 - 桥梁 / 跨空线 - 海底质 - 海底危险物 - 锚地 - 引航 / 航海服务 - 陆海背景与海岸线 - 地名与定位参考 ### 4. 本轮结论 - 当前最值得继续细拆的 group 已确认是: 1. 海底危险物 2. 海上标识 3. 陆地设施 4. 海底质 - 这四组最适合作为下一步 style 结构重排和多 profile 组织的主切口 ## 2026-04-07 九州 delivery 前端图层分组消费配置 ### 1. 本轮新增配置文件 - 已新增: - [`src/pbf/layer-groups.navsea-delivery-kyushu.json`](/root/sourceserver/pbf/src/pbf/layer-groups.navsea-delivery-kyushu.json) ### 2. 本轮配置目的 - 给前端一个可直接消费的图层分组配置 - 不再让前端直接理解 style 内部的全部 render layer - 让前端只面对: - 基础底图 - 可切换业务 group - 航海 / 钓鱼 / 自定义预设 ### 3. 当前配置内容 - 已包含: - `base_groups` - `groups` - `presets` - 当前主要业务 group 包括: - 鱼礁/海底危险物 - 海上标识 - 锚地/引航 - 港口与设施 - 桥梁/净空 - 等深线 - 海底地形 - 渔网/渔具 - 海底质 - 地名 ### 4. 当前建议的前端消费方式 - 前端用 group 配置驱动 UI,不直接暴露底层 render layer - 实际切换时,通过: - `map.setLayoutProperty(layerId, "visibility", "visible" | "none")` - 建议用户入口只暴露: - 航海模式 - 钓鱼模式 - 自定义 ### 5. 本轮 i18n 结构调整 - 已把 [`src/pbf/layer-groups.navsea-delivery-kyushu.json`](/root/sourceserver/pbf/src/pbf/layer-groups.navsea-delivery-kyushu.json) 从直接写死中文 `label` 的结构,调整为: - `label_key` - `description_key` - `i18n` - 当前 key 命名已统一成: - `pbf.group.xxx` - `pbf.preset.xxx` - 这样前端可以: - 先直接读同文件内的 `i18n` - 后续再平滑迁移到统一翻译系统 ### 6. 本轮前端配置字段扩展 - 已继续给 [`src/pbf/layer-groups.navsea-delivery-kyushu.json`](/root/sourceserver/pbf/src/pbf/layer-groups.navsea-delivery-kyushu.json) 增加: - `sort_order` - `icon_key` - `feature_flag` - 当前作用: - `sort_order` - 控制前端菜单展示顺序 - `icon_key` - 让前端图标系统不必写死在代码里 - `feature_flag` - 方便做灰度、AB、权限或版本开关控制 ## 2026-04-08 全国 delivery 候选构建与严格审计启动 ### 1. 当前目标 - 用户要求: - 生成全国范围 delivery 版本 - 严格审计 - 本轮采取的口径: - 先生成全国候选目录 - 不直接覆盖现网旧目录 - 先跑对象保真 + render-hit 两层严格审计 - 审计过后再决定是否切正式目录 ### 2. 当前确认的全国构建方式 - `navsea_tile_builder.py` 已确认支持: - `--all-tiles` - 当前全国原始源目录文件总量是: - `/home/wwwroot/newpec/exported_auto/tile.mapple-on.jp__newpec-mvt-20260106__z___x___y_.pbf/tiles` - 全量文件数:`79229` - 当前旧全国目录状态: - `/home/wwwroot/pbf`:`65148` - `/home/wwwroot/pbf-engineering-full`:`65148` - 说明: - 旧全国 full 目录不是当前源集合的完整重放结果 - 因此本轮不能直接把旧目录当作可交付全国版 ### 3. 本轮全国候选输出目录 - delivery 候选: - `/home/wwwroot/pbf-delivery-full-20260408` - engineering 候选: - `/home/wwwroot/pbf-engineering-full-20260408` ### 4. 本轮已启动的全国构建会话 - 使用仓库虚拟环境: - `.venv/bin/python` - 已启动: - 全国 delivery:session `8644` - 全国 engineering:session `60378` - 使用参数: - `--all-tiles` - `--fid-key thisMyWorld@2026` - `--bundle-id navsea-core` - delivery 附带:`--release-minimal` - engineering 附带:`--engineering` ### 5. 当前已观察到的风险信号 - builder 已确认拿到的全国 tile job 数: - `79229` - 但构建过程中已出现大量: - `skipped z/x/y` - 这说明: - 全国源瓦片不等于全国 delivery 可写出瓦片 - 严格审计第一层就必须先检查文件集合与对象保真 - 很可能会暴露出: - 数据库候选缺失 - 某些原始瓦片无可输出 rows - 全量覆盖不完整 ### 6. 本轮严格审计计划 - 第一层: - 文件集合 / 覆盖率检查 - 第二层: - 全国对象保真审计 - 第三层: - 全国 render-hit 审计 - 当前说明: - 现有审计脚本默认口径偏 10nm / 20nm / kyushu - 本轮会在全国候选目录构建完成后,按全国路径重定向运行 - 审计输出文档仍需单独整理成中文放行报告 ### 7. 下一步 1. 等待全国 delivery / engineering 候选构建完成 2. 先做全国文件集合对齐检查 3. 运行全国对象保真审计 4. 运行全国 render-hit 审计 5. 输出中文严格审计报告并给出是否可交付结论 ## 2026-04-08 delivery style sprite 统一 ### 1. 本轮调整 - 按用户要求,把 delivery style 的 sprite 地址统一改为: - `http://192.168.200.184/newpec/sprite/sprite?v=111` ### 2. 当前已修改的仓库文件 - [`src/pbf/style.navsea-delivery-kyushu.json`](/root/sourceserver/pbf/src/pbf/style.navsea-delivery-kyushu.json) - [`src/pbf/style.navsea-delivery-karatsu-20nm-final.json`](/root/sourceserver/pbf/src/pbf/style.navsea-delivery-karatsu-20nm-final.json) - [`src/pbf/style.navsea-delivery-karatsu-10nm.json`](/root/sourceserver/pbf/src/pbf/style.navsea-delivery-karatsu-10nm.json) ### 3. 当前说明 - 仓库内源文件已完成统一 - 线上 `/mnt/sda1/www/newpec/domain/` 下的部署文件尚未在本轮同步 - 后续如需页面立即生效,还需要再做一次部署同步 ## 2026-04-08 全国 delivery style 草稿 ### 1. 本轮新增文件 - 已新增: - [`src/pbf/style.navsea-delivery-full.json`](/root/sourceserver/pbf/src/pbf/style.navsea-delivery-full.json) ### 2. 本轮生成方式 - 以 [`src/pbf/style.navsea-delivery-kyushu.json`](/root/sourceserver/pbf/src/pbf/style.navsea-delivery-kyushu.json) 为底复制 - 仅调整: - `name -> NavSea Delivery Full` - `tiles -> http://192.168.200.184/pbf-delivery-full-20260408/{z}/{x}/{y}.pbf` ### 3. 当前说明 - 这是当前全国 delivery 候选 PBF 的配套 style 草稿 - 当前尚未单独部署到线上公开路径 - 当前也还没有配套的全国单屏 HTML / compare 页面 ## 2026-04-08 全国 delivery style / HTML 部署 ### 1. 本轮部署文件 - 已部署 style: - `/mnt/sda1/www/newpec/domain/style.navsea-delivery-full.json` - 已部署 HTML: - `/mnt/sda1/www/newpec/navsea-final-delivery-full.html` ### 2. 当前可访问 URL - style: - `http://192.168.200.184/newpec/domain/style.navsea-delivery-full.json` - 单页查看: - `http://192.168.200.184/newpec/navsea-final-delivery-full.html` ### 3. 当前说明 - 全国版 style 现已不只是仓库草稿,已同步到线上公开路径。 - 当前 HTML 为单屏查看入口,不是 compare 页面。 ## 2026-04-08 磁盘风险全量快照提交 ### 1. 触发原因 - 用户反馈当前电脑硬盘可能存在问题 - 为避免本地未提交代码与文档因磁盘异常丢失,本轮优先执行一次仓库内全量快照提交 ### 2. 本轮执行前确认 - 已按仓库续接要求复读: - `STEP_RECORD.md` - `PROJECT_HANDOFF_2026-03-31.md` - `NavSea_Delivery_Preflight_Audit_Spec.md` - `NavSea_Audit_Logic_And_Evolution_2026-04-01.md` - 已确认当前远端仍是: - `ssh://git@nas:2222/tei/pbf.git` - 已确认当前工作区包含大量: - 已修改代码 - 新增 Domain 原型文件 - 新增审计报告 - 新增页面与 style 草稿 ### 3. 本轮处理原则 - 本轮目标是“先保全当前仓库进展” - 因用户明确要求提交所有代码,本轮采用全量暂存与提交 - 本轮提交不额外声称: - 已完成新的全国审计 - 已完成新的交付放行结论 ### 4. 当前说明 - 提交完成后,仓库历史中应保留一份可回溯的本地快照 - 若后续硬盘继续异常,优先再确认远端可推送与备份介质状态 ## 2026-04-08 数据库完整备份 ### 1. 备份原因 - 当前 PBF 生成链路不只依赖: - 旧 PBF - 代码仓库 - 还依赖数据库中的规则与映射数据 ## 2026-04-15 全国 PBF 全量重建启动 ### 1. 本轮目标 - 用户要求: - 把全日本海域的 PBF 都生成出来 - 本轮执行口径: - 沿用当前仓库可用的全国生成入口 `navsea_tile_builder.py --all-tiles` - 同时生成全国 `delivery` 与 `engineering` - 不覆盖 `2026-04-08` 旧候选目录,改为新日期目录 ### 2. 启动前确认 - 已按仓库续接要求复读: - `STEP_RECORD.md` - `PROJECT_HANDOFF_2026-03-31.md` - `NavSea_Delivery_Preflight_Audit_Spec.md` - `NavSea_Audit_Logic_And_Evolution_2026-04-01.md` - 已确认当前远端仍是: - `ssh://git@nas:2222/tei/pbf.git` - 已确认当前 builder 仍需使用: - `--bundle-id navsea-core` - `--fid-key thisMyWorld@2026` ### 3. 本轮输出目录 - 全国 delivery: - `/home/wwwroot/pbf-delivery-full-20260415` - 全国 engineering: - `/home/wwwroot/pbf-engineering-full-20260415` ### 4. 本轮计划命令 - delivery: - `.venv/bin/python navsea_tile_builder.py --all-tiles --output /home/wwwroot/pbf-delivery-full-20260415 --fid-key thisMyWorld@2026 --bundle-id navsea-core --release-minimal` - engineering: - `.venv/bin/python navsea_tile_builder.py --all-tiles --output /home/wwwroot/pbf-engineering-full-20260415 --fid-key thisMyWorld@2026 --bundle-id navsea-core --engineering` ### 5. 下一步 1. 启动全国 delivery / engineering 全量构建 2. 等待两条构建跑完 3. 回填实际 tile 数、mapping audit 输出与目录状态 ### 6. 2026-04-15 中途方向变更 - 用户随后要求: - `engineering` 版本暂停 - 已执行: - 全国 `engineering` 构建会话已人工中断 - 当前保留半成品目录: - `/home/wwwroot/pbf-engineering-full-20260415` - 中断时已写出文件数: - `1485` - 当前继续保留运行中的仅有: - 全国 `delivery` 全量构建 ### 7. 2026-04-15 delivery 转后台持续运行 - 由于全国 `delivery` 全量构建耗时较长,本轮没有继续占用交互会话等待收尾 - 已把 `delivery` 改为后台进程持续运行 - 后台父进程: - `PID 74539` - 实际 builder 子进程: - `PID 74548` - 日志文件: - `/root/sourceserver/pbf/logs/full_delivery_20260415.log` - 当前输出目录: - `/home/wwwroot/pbf-delivery-full-20260415` - 切后台并重新启动后,builder 会先清空目标目录再重建 - 本次后台重启后首轮确认状态: - 已开始持续写入 - 首次复核文件数:`91` ### 8. 当前下一步 1. 等后台 `delivery` 全量构建完成 2. 复核全国 delivery 实际输出文件数 3. 补看 `mapping_audit.json / .md` 4. 再决定是否需要全国对象保真 / render-hit 审计 ## 2026-04-15 全国 style 指向修正 ### 1. 本轮问题确认 - 用户反馈全国页面在 `zoom < 10` 时看起来“没有数据” - 代表示例: - `/9/441/205.pbf` - 本轮实际核对结果: - 新全国 delivery 目录中的该瓦片实际存在: - `/home/wwwroot/pbf-delivery-full-20260415/9/441/205.pbf` - 文件大小: - `78486` - 直接访问新目录 URL 返回: - `HTTP 200` - 旧 style 仍指向: - `http://192.168.200.184/pbf-delivery-full-20260408/{z}/{x}/{y}.pbf` - 同一路径在 `20260408` 目录下返回: - `HTTP 404` ### 2. 根因判断 - 不是全国 `delivery` 在 `zoom 10` 以下没生成 - 而是全国 style 还连着旧的 `20260408` 候选目录 - 因此前端请求到旧目录缺失瓦片时,会表现成低层级“没有数据” ### 3. 本轮已完成修正 - 已把仓库内全国 style: - [`src/pbf/style.navsea-delivery-full.json`](/root/sourceserver/pbf/src/pbf/style.navsea-delivery-full.json) 的瓦片地址改为: - `http://192.168.200.184/pbf-delivery-full-20260415/{z}/{x}/{y}.pbf` - 已同步更新线上部署文件: - `/mnt/sda1/www/newpec/domain/style.navsea-delivery-full.json` - 已同步把全国单页查看入口文字从: - `Full 20260408` 改为: - `Full 20260415` ### 4. 当前说明 - 这次修正解决的是: - 全国 style 与实际生成目录不一致 - 这不等于: - 全国严格审计已经完成 - 全国对象保真 / render-hit / 放行结论仍需后续单独收口 - 因用户担心硬盘风险,本轮补做数据库完整 dump 备份 ### 2. 当前确认的数据库信息 - 当前项目主库: - `pbf_analysis` - 当前连接方式: - `root` - `unix_socket = /tmp/mysql.sock` - 本轮核对到的库体量约: - `19343.42 MB` ### 3. 本轮备份方式 - 使用: - `mysqldump --single-transaction --quick --routines --events --triggers --databases pbf_analysis` - 输出为压缩文件: - `gzip` - 备份时间戳: - `20260408_194631` ### 4. 本轮备份落点 - 第一份: - `/mnt/sda1/pbf_backup_20260408_194631/pbf_analysis_20260408_194631.sql.gz` - 第二份: - `/home/tei/pbf_backup_20260408_194631/pbf_analysis_20260408_194631.sql.gz` ### 5. 校验结果 - 两份文件 `sha256` 一致: - `4cdb7d5c943b6223220a92f923ac718fccb73c7bc99c1007207cd60541a6f25a` - `gzip -t` 校验通过: - `/mnt/sda1` 备份通过 - `/home/tei` 备份通过 ### 6. 当前说明 - 现阶段已同时保全: - 仓库代码与文档历史 - PBF 生成所需主数据库快照 - 若后续还要进一步降风险,下一步可考虑: - 再做一份离机备份 - 额外导出数据库表清单与建表结构摘要 ## 2026-04-09 物体统一判定与点击查询设计收口 ### 1. 本轮目标 - 按当前 `NavSea` 项目真实目标,整理一份可落地的物体模型设计文档 - 目标明确收口为三件事: - 点击物体后能知道“这是什么”以及关键细节 - 能和 `NewPEC` 原体系稳定对回并审计“不丢对象” - 能渲染出与 `NewPEC` 等价的图标和文字语义 ### 2. 本轮设计结论 - 不再尝试用单一字段同时承担: - 身份追踪 - 本体分类 - 渲染控制 - 统一改为三层职责: - `identity / trace` - `object semantics` - `render semantics` - `canonical_object_type` 可以作为统一语义子类名的重要字段 - 但当前不应把它当成唯一主分类或唯一审计锚点 - `class_code / display_code` 仍要保留,并通过映射进入 NavSea 自有分类体系 ### 3. 本轮新增文档 - 新增: - `NavSea_物体统一判定_点击查询_审计设计.md` ### 4. 文档重点 - 明确了 `native MapLibre` 点击拾取的结果模型 - 明确了 `NewPEC -> NavSea` 的码值映射思路: - `native_code_type` - `native_code_value` - `object_domain` - `object_class` - `object_subclass` - 明确了两条硬审计线: - 物体不丢 - 渲染结果一致 - 同时补充: - 字段完整性审计 - 可查询性审计 - AOI / 视觉审计 ### 5. 下一步建议 1. 先把文档中的目标字段模型补进工程版 PBF 输出 2. 再补一版交付版最小字段清单,确认哪些查询字段必须保留 3. 为 `class_code / display_code -> NavSea object taxonomy` 建正式映射表 4. 在现有对象保真审计和 render audit 脚本上补: - 分类映射审计 - 查询字段完整性审计 ## 2026-04-09 首版语义定义草案补充 ### 1. 本轮讨论结论 - 当前已经可以基于: - `Karatsu 20nm final` 实际标准层 - `Chart Domain v1` 给出一版 `NavSea` 首版语义定义草案 - 这版草案不再把问题停留在抽象层,而是直接回答: - 当前每个标准层在业务上是什么 - 哪些层已经接近稳定业务对象层 - 哪些层仍属于容器层 / 支撑层 / 待收敛层 ### 2. 本轮文档更新 - 已在: - `NavSea_物体统一判定_点击查询_审计设计.md` 中新增: - `21. 首版语义定义草案` ### 3. 当前首版定义重点 - 新增 `object_domain` 首版集合: - `navigation_mark` - `hazard` - `depth` - `clearance` - `anchorage` - `route` - `facility` - `landsea` - `seabed` - `toponym` - `fishery` - `support` - `pending` - 已把当前主要标准层按上述域逐层定义 ### 4. 当前已可视为稳定业务对象层 - `navigation_marks` - `navigation_hazard_point` - `anchor_caution_hazard_point` - `depth_contour` - `depth_contour_overview` - `clearance_limit_point` - `clearance_limit_line` - `anchorage_area` - `anchorage_point` - `route_outline` - `pilot_station_point` - `place_label_sea` - `place_label_land` - `seabed_text_point` - `land_area` ### 5. 当前仍待收敛层 - `baseline_area` - `baseline_line` - `baseline_outline` - `facility_boundary_area` - `facility_boundary_outline` - `bathymetry_line` - `hole_area` - `depth_zone_739` - `depth_zone_741` - `clip_outline_754` ### 6. 下一步建议 1. 先把首版语义定义落成 builder 可输出字段: - `object_domain` - `object_class` - `object_subclass` 2. 再按 `source_layer + native code` 建正式 taxonomy 规则表 3. 在审计脚本中补: - 语义定义覆盖率审计 - `pending/support` 漏入正式交付审计 ## 2026-04-09 核心规则、20nm 调整判断与 pickup 消费方案 ### 1. 本轮进一步收口的规则 - 对象主键继续固定为: - `fid` - `NewPEC fid` 与 `NavSea fid` 视为同一主键的两种编码形式 - 当前正式口径继续坚持: - `1 raw object -> 1 primary feature` - pickup、CPA、安全判断与渲染继续消费同一个统一对象载荷 - 不再为 query / CPA / render 设计三套不同对象模型 ### 2. 当前对 20nm final 的判断 - 当前 `Karatsu 20nm final` 不建议推倒重写 - 当前更适合在现有标准层和现有 style 基线上做增量调整 - 优先补的是: - `object_domain` - `object_class` - `object_subclass` - 当前不建议拆出独立 query API 取代统一对象载荷 ### 3. 当前对 style 的判断 - 当前 style 主结构不建议大改 - compare 主视觉基线不切换 - 若要改动,优先改: - pickup 聚合逻辑 - 面板展示结构 - 左右按 `fid` 对照 ### 4. pickup 消费方案 - native 端点击后应: 1. 用小范围 `queryRenderedFeatures` 2. 先按 `feature.id` 聚合 3. 再按对象优先级挑代表对象 4. 返回统一对象结构: - `fid` - 统一语义 - 查询属性 - 渲染命中信息 - 当前 compare 页现有 `features[0]` 逻辑只适合临时 inspect,不适合作为正式 pickup 口径 ### 5. 当前阻塞说明 - 本轮尝试直接抽样解码 `/home/wwwroot/pbf-delivery-karatsu-20nm-final` 瓦片 - 但当前宿主缺少: - `python` - `python3 mapbox_vector_tile` - 因此本轮关于 `20nm final` 字段现状的确认,主要仍依据: - builder 输出白名单 - style 依赖 - 现有对象保真报告 ## 2026-04-09 20nm final 实际瓦片字段抽样确认 ### 1. 本轮确认方式 - 已改用仓库内: - `.venv/bin/python` - 已直接解码: - `/home/wwwroot/pbf-delivery-karatsu-20nm-final` 中的真实 `.pbf` 瓦片 ### 2. 当前确认结果 - 当前 `20nm final` 的对象 identity 确实主要走: - `feature.id` - 示例: - `baseline_area` 抽样对象: - `id = 924902528` - `properties = canonical_object_type, chart_fill_style, class_code` - 当前 `properties` 明显是瘦载荷,不再保留 engineering 风格的大量 trace 字段 ### 3. 关键对象抽样结果 - `navigation_marks` - 保留: - `canonical_object_type` - `chart_icon_image` - `chart_label_position_code` - `chart_label_subtext` - `chart_label_text` - `chart_symbol_code` - `chart_text_color` - `chart_text_style` - `display_code` - `light_color_code` - `light_sector_mode` - `name_ja` - `depth_contour` - 保留: - `canonical_object_type` - `chart_label_text` - `chart_text_color` - `chart_text_style` - `class_code` - `least_depth_m` - `anchor_caution_hazard_point` - 保留: - `canonical_object_type` - `chart_icon_image` - `chart_symbol_code` - `class_code` - `navigation_hazard_point` - 保留: - `canonical_object_type` - `chart_icon_image` - `chart_symbol_code` - `class_code` - `clearance_limit_point` - 保留: - `canonical_object_type` - `chart_label_text` - `chart_text_style` - `class_code` - `clearance_height_m` - `name_ja` ### 4. 当前结论修正 - 当前 `Karatsu 20nm final` 不是“仅保留 style 最低限度字段”的纯渲染壳 - 它实际已经保留了一批: - pickup 可直接消费的关键字段 - 渲染所需字段 - 关键原生码值字段 - 但它也还没有补: - `object_domain` - `object_class` - `object_subclass` ### 5. 对后续设计的影响 - 当前更不建议拆出独立 query 数据源 - 更合理的方向仍然是: - 在现有统一对象载荷上继续增量补统一语义字段 - native pickup 继续围绕: - `feature.id` - 当前 `properties` 做聚合和解释是可行的 ## 2026-04-09 pickup 规则字典与解释器落地 ### 1. 本轮目标 - 用户明确选择: - 不增加 PBF 容量 - 前端基于 pickup 后拿到的 feature 信息自行判读 - 因此本轮落地: - 规则字典 - 薄解释器 ### 2. 本轮新增文件 - 新增: - `src/pbf/navsea-pickup-rules.v1.json` - `src/pbf/navsea-pickup-interpreter.js` ### 3. 当前规则字典内容 - 已覆盖当前主要标准层 - 已声明: - `object_domain` - 默认 `object_class` - 主分类码字段 - pickup 标题字段优先级 - 明细字段 - render 回显字段 - `support / broad / pending` 状态 ### 4. 当前解释器职责 - 输入: - `queryRenderedFeatures` 候选数组 - 处理: 1. 按 `feature.id` 聚合 2. 按 `source_layer_std` 规则解释 3. 生成统一 pickup 结果 - 输出: - `primary` - `candidates` ### 5. 当前更新规则 - 当前已明确: - 不是每次纯视觉微调都要改 pickup 规则字典 - 但以下情况必须同步更新: - PBF 标准层变化 - 关键分类字段变化 - style 主渲染字段依赖变化 - 新增正式 pickup 层 ## 2026-04-09 Native MapLibre React Native pickup 实现说明 ### 1. 本轮目标 - 用户明确要求输出一份给前端团队直接实现的 Markdown 文档 - 前端目标环境: - `native MapLibre` - `React Native` ### 2. 本轮新增文档 - 新增: - `NavSea_Native_Pickup_ReactNative_MapLibre_实现说明.md` ### 3. 文档内容重点 - 明确当前 `native pickup` 返回三类结果: - `object` - `info` - `context` - 明确: - 主对象层 - 信息层 - 默认屏蔽层 - 明确: - `feature.id` 作为对象主键 - 空白水域返回深度上下文 - 明确: - 规则字典与解释器如何接入 RN 前端 - 已补: - `queryRenderedFeaturesInRect` 的官方方法参考 ### 4. 当前实现建议 - RN 前端优先: 1. 接规则字典 JSON 2. 迁移/复用解释器 3. 先做对象 + 信息 pickup 4. 再补空白水域上下文 ### 5. 当前说明 - 本轮没有再改 PBF / style - 本轮输出重点是: - 让前端团队可按统一口径直接实现 pickup ## 2026-04-09 pickup 规则字典 r2 与 TS 解释器补齐 ### 1. 本轮目标 - 用户明确要求把前端效率再提一步: 1. 补更适合 `React Native` 的 TS 解释器版本 2. 把 pickup 规则字典收成前端更容易直接消费的结构 ### 2. 本轮已完成 - 已把: - `src/pbf/navsea-pickup-rules.v1.json` 从首版规则升级为 `r2` 结构 - 已新增: - `src/pbf/navsea-pickup-interpreter.ts` - 已同步更新: - `src/pbf/navsea-pickup-interpreter.js` - `NavSea_Native_Pickup_ReactNative_MapLibre_实现说明.md` - `NavSea_物体统一判定_点击查询_审计设计.md` ### 3. 规则字典结构变化 - 规则字典新增: - `render_layer_groups.primary` - `render_layer_groups.info` - `render_layer_groups.ignore` - 原先较模糊的: - `feature_priority` 已明确改为: - `pickup_priority` - 同时为每个标准层补入: - `interaction_role` - `semantic_status` ### 4. 当前解释器变化 - JS / TS 两份解释器现在统一支持: - `getRenderLayerGroups` - `pickup_priority` - `interaction_role` - 解释器仍保持“薄解释器”原则: 1. 按 `feature.id` 聚合 2. 按 `source_layer_std` 匹配规则 3. 输出统一 pickup 结果 ### 5. 对前端实现的直接收益 - RN 前端不需要再硬编码: - 主对象层数组 - 信息层数组 - 默认屏蔽层数组 - 只需读取规则字典中的: - `render_layer_groups` - 这样后续若 style / pickup 规则变化,前端通常只需同步规则文件,不必手改代码 ### 6. 本轮校验情况 - 已通过: - `jq . src/pbf/navsea-pickup-rules.v1.json` - `node --check src/pbf/navsea-pickup-interpreter.js` - 当前未能完成: - `tsc` 编译校验 - 原因: - 当前环境没有可直接使用的 TypeScript 编译器,`npx tsc` 不可用 ### 7. 当前结论 - 当前已可把: - `navsea-pickup-rules.v1.json` - `navsea-pickup-interpreter.ts` 直接交给 `React Native + native MapLibre` 前端团队接入 - 当前不需要为这一步再改: - PBF - style ## 2026-04-10 pickup 解释器缺 layer 信息兜底修复 ### 1. 本轮问题 - 用户提供了一条实际 `React Native` pickup 结果 - 现象是: - 对象能被拿到 - 但 `source_layer_std = ""` - `object_domain = unknown` - `object_class = unknown` - 标题退化成了泛化的: - `灯标` ### 2. 根因判断 - 当前问题不是“排序把对象拿错了” - 真正原因是: - RN 返回的 feature 中缺少 `sourceLayer / layer.source-layer` - 解释器无法命中 `navigation_marks` 规则 - 于是只能走无规则 fallback - 在旧逻辑里,一旦无规则: - `title` 会退到 `canonical_object_type` - `details` 会变空 - `interaction_role` 只能落到默认值 ### 3. 本轮修复 - 已在: - `src/pbf/navsea-pickup-interpreter.ts` - `src/pbf/navsea-pickup-interpreter.js` 中补入两类兜底能力 第一类: - 当 `source_layer_std` 缺失时,按属性推断标准层 - 当前已覆盖的典型规则包括: - `display_code / light_color_code / light_sector_mode / light_beacon` -> `navigation_marks` - `clearance_height_m` -> `clearance_limit_point / clearance_limit_line` - `least_depth_m / depth_value_m` -> `depth_contour / depth_contour_overview` - 危险物常见 `canonical_object_type` -> `navigation_hazard_point` 第二类: - 当没有命中 layer 规则时,不再直接退成泛化标题 - 统一优先使用: - `name_ja` - `chart_label_text` - `canonical_object_type` - 同时补通通用: - `details` - `render fields` fallback ### 4. 当前样本修复结果 - 用户提供的灯标样本: - `fid = 3305109497` 修复后已能解释为: - `source_layer_std = navigation_marks` - `object_domain = navigation_mark` - `object_class = beacon` - `object_subclass = light_beacon` - `title = 博多港中央航路第2号灯標` - `primary_code_field = display_code` - `primary_code_value = 31135102` ### 5. 当前仍保留的说明 - 若 RN 侧能把原始 query 返回中的: - `feature.layer.id` - `feature.sourceLayer` 完整保留传入解释器 - 则仍优先使用原始 layer 信息 - 当前属性推断仅作为: - 丢 layer 信息时的兜底恢复机制 ## 2026-04-10 可见区域 pickup 分组与精确点查方案 ### 1. 本轮问题 - 用户反馈一条实际 pickup 结果: - 当前画面上肉眼最明显的是紫色斜线渔业/渔具区域 - 但 pickup 返回成了附近的 `beacon` - 这说明当前问题不是对象分类本身,而是: - 可查询 render layer 分组不合理 - 查询流程过于偏向“小框补捞点对象” ### 2. 根因判断 - 当前规则字典把: - `fishery-areas` 这类明显可见的业务面层放进了 `ignore` - 同时前端文档里只建议: - 先查 `primary` 点层 - 再查 `info` 层 - 结果就是: - 用户点在渔网斜线面上 - query 仍可能从小范围框内捞到附近灯标点 - 于是出现“看起来像渔网,却返回灯标”的误判 ### 3. 本轮修正 - 已在: - `src/pbf/navsea-pickup-rules.v1.json` 中新增: - `render_layer_groups.area` - 当前纳入的典型可见区域层包括: - `navigation-hazard-polygons` - `fishery-areas` - `anchorage-areas` - `facility-zones` - `submerged-structures` - `bridge-area` - 同时把这些层从 `ignore` 口径中移出 ### 4. 当前推荐查询流程更新 - 前端不应再只做“小框查主对象点层” - 当前推荐改为: 1. 先做精确点查: - `area + primary + info` 2. 若精确点查未命中,再做小范围补查: - `primary + info` 3. 最后再回落到: - `context` ### 5. 当前文档更新 - 已同步更新: - `NavSea_Native_Pickup_ReactNative_MapLibre_实现说明.md` - `NavSea_物体统一判定_点击查询_审计设计.md` - 当前文档里已明确: - 可见区域层属于正式 pickup 入口 - `queryRenderedFeaturesAtPoint` 应先于小框补查 ### 6. 附加调整 - 已补: - `display_name_overrides.beacon = 标柱` - 避免无名称时标题直接显示生硬英文: - `Beacon` ### 7. 当前结论 - 对海图 pickup,不能只偏向“小点符号” - 只要用户肉眼明确看到的是: - 渔网斜线面 - 锚地区 - 危险区面 - 桥区 这类可见业务区域 - 就应优先让这些区域对象进入 pickup 主候选 ## 2026-04-10 同分候选按点击距离优先 ### 1. 本轮问题 - 用户继续反馈: - pickup 返回的对象类型看起来对 - 但返回的中心经纬度与实际点击附近图标相差很远 - 当前样例中出现的是: - 同一小框内命中了多个 `beacon` - 它们分数完全相同 - 解释器按原始返回顺序取了第一个 ### 2. 根因判断 - 当前问题不是 icon 自身做了大位移 - `nav-marks` 图标层核对结果: - 没有 `icon-offset` - 真正问题是: - 多个同分点对象同时命中时 - 解释器缺少“离点击点最近优先”的 tie-break ### 3. 本轮修复 - 已在: - `src/pbf/navsea-pickup-interpreter.ts` - `src/pbf/navsea-pickup-interpreter.js` 中新增: - `click_lnglat` 可选输入 - 解释器现在会: 1. 读取点击经纬度 2. 计算点对象与点击点的球面距离 3. 当两个候选 `score` 相同时,优先选距离更近者 ### 4. 前端接入要求 - RN 前端在调用: - `interpretRenderedFeatures` 时,应同步传入: - `click_lnglat` - 否则对于同分候选,解释器仍只能退回到原始返回顺序 ### 5. 本轮验证结果 - 已用两条同分 `beacon` 样本做本地验证 - 当点击点位于第二个对象上时: - 解释器已能正确优先返回更近的 `fid` - 测试结果显示: - 最近对象 `distance_m = 0` - 远处对象约 `764.5m` - 返回对象已切换为最近者 ## 2026-04-10 pickup 独立测试页 ### 1. 本轮目标 - 用户明确要求提供一个独立 `pickup test` URL - 用于直接排查: - exact point 命中 - bbox 命中 - 解释器 primary / candidates - 点击点与返回对象点之间的距离 ### 2. 本轮新增文件 - 新增: - `src/pbf/navsea-pickup-test-karatsu-20nm.html` ### 3. 页面特性 - 使用: - `style.navsea-delivery-karatsu-20nm-final.json` - `pbf-delivery-karatsu-20nm-final` - 页面会同时展示: - `exact point` 原始命中 - `bbox` 原始命中 - 解释器最终 `primary` - `candidates` - 页面会在地图上画出: - 点击点 - 返回对象点 - 二者之间的连线 ### 4. 相关部署 - 已部署页面: - `/mnt/sda1/www/newpec/navsea-pickup-test-karatsu-20nm.html` - 已同步部署依赖: - `/mnt/sda1/www/newpec/domain/navsea-pickup-interpreter.js` - `/mnt/sda1/www/newpec/domain/navsea-pickup-rules.v1.json` ### 5. 当前访问 URL - `http://192.168.200.184/newpec/navsea-pickup-test-karatsu-20nm.html` ### 6. 本轮校验 - 已通过: - `node --check src/pbf/navsea-pickup-interpreter.js` - 已确认部署文件存在: - HTML - 规则字典 JSON - JS 解释器 ### 7. 页面增强 - 已追加调试能力: - `BBox` 半径切换 - 屏幕上的 `BBox` 可视框 - 未过滤 query 命中面板 - 已补顶部摘要: - `Exact` 数量 - `BBox` 数量 - `Raw` 数量 - `Raw render layer` - 现在能更快区分两类问题: - 当前 `render_layer_groups` 漏层 - 点击点/半径本身没命中任何 rendered feature ## 2026-04-10 危险区面层白名单漏层修复 ### 1. 本轮定位结果 - 用户在 pickup test 页点击某危险区可见区域后,顶部摘要显示: - `Exact = 0` - `BBox = 0` - `Raw > 0` - Raw 命中层明确包括: - `hazard-polygons` - `anchor-danger-outline` - `bathymetry-support` - `sea-area-fill` ### 2. 结论 - 当前问题不是点偏 - 也不是没有 rendered feature - 真正根因是: - `hazard-polygons` 没有被纳入 `render_layer_groups.area` - 该层在 style 中对应: - `source-layer = anchor_caution_hazard_area` ### 3. 本轮修复 - 已在: - `src/pbf/navsea-pickup-rules.v1.json` 的 `render_layer_groups.area` 中补入: - `hazard-polygons` - 已同步重新部署: - `/mnt/sda1/www/newpec/domain/navsea-pickup-rules.v1.json` ### 4. 当前意义 - 这次结果进一步验证: - pickup test 页的 `Raw` 摘要是有效的 - 它能很快区分“白名单漏层”和“点击点没打到对象”两类问题 ## 2026-04-10 区域面与附近点图标的优先级修正 ### 1. 本轮用户反馈 - 在同一位置存在两个对象: - `fish_reef` 鱼礁点图标 - `anchor_caution_hazard_area` 投锚注意危险区域面 - 用户预期是: - 点击鱼图标附近时,应优先返回鱼礁 - 不应被禁锚/危险区域面抢走 ### 2. 本轮判断 - 单纯做“exact 命中的区域面优先”不符合海图使用直觉 - 更合理的口径是: - 若 `exact` 命中的是区域/次级对象 - 但小框补查又命中了 nearby `primary` 点对象 - 则优先返回该点对象 ### 3. 本轮修复 - 已在 `pickup test` 页中补入: - `exact secondary` 与 `bbox primary` 的优先级切换 - 当前口径变为: - `exact primary` 仍优先 - `exact area/secondary` 不再压过 nearby `primary` 点图标 ### 4. 同步补充 - 已为规则字典补入: - `navigation_hazard_area` - `anchor_caution_hazard_area` 两个 area layer 规则 - 避免未来点到这些区域面时仍只显示: - `unknown` ### 5. 当前意义 - pickup 现在更接近海图使用直觉: - 小而明确的点图标优先于大范围的区域面 - 但区域面在附近没有更具体点对象时,仍可被正常选中 ## 2026-04-10 pickup 展示字段命名修正 ### 1. 本轮问题 - 用户指出: - `chinese_semantic` 这个字段名不对 - 当前 PBF 原始数据并没有中文语义字段 ### 2. 本轮结论 - 这个判断是对的 - 当前 pickup 里的该字段不是 PBF 原始字段 - 它只是规则字典中的本地展示标签 - 因此不应继续命名为: - `chinese_semantic` ### 3. 本轮修复 - 已把 pickup 相关资产统一改为: - `semantic_label` - 已更新: - `src/pbf/navsea-pickup-rules.v1.json` - `src/pbf/navsea-pickup-interpreter.js` - `src/pbf/navsea-pickup-interpreter.ts` ### 4. 当前说明 - `semantic_label` 现在表示: - pickup 规则字典里的本地展示标签 - 它不表示: - PBF 原始字段 - NewPEC 官方字段 - 原始日文字段 ### 5. 同步部署 - 已重新部署: - `/mnt/sda1/www/newpec/domain/navsea-pickup-interpreter.js` - `/mnt/sda1/www/newpec/domain/navsea-pickup-rules.v1.json` ## 2026-04-10 空白水域点击回退到深度上下文 ### 1. 本轮用户要求 - 用户明确指出: - 对这类点击,应该返回该区域的水深 - 也就是: - 不应只返回 `未命中对象` - 应进入 `context` 口径 ### 2. 本轮实现 - 已在: - `src/pbf/navsea-pickup-test-karatsu-20nm.html` 中新增: - `Depth Context` 面板 - 当前最小实现逻辑: 1. 若对象 pickup 未命中 2. 则查询附近可见深度相关层: - `bathymetry-depth-labels` - `depth-contour-labels` - `depth-contours-major-labels` - `depth-contours` - `depth-contours-major` 3. 返回距离点击点最近的深度数字/等深线标签 ### 3. 当前说明 - 这不是“真实底模插值” - 当前只是: - 基于海图当前可见表达 - 返回最近的深度上下文 - 但它已经比单纯的: - `未命中对象` 更符合海图使用逻辑 ### 4. 当前部署 - 已重新部署: - `/mnt/sda1/www/newpec/navsea-pickup-test-karatsu-20nm.html` ## 2026-04-11 海底地形与钓鱼判读文档整理 ### 1. 本轮用户需求 - 用户希望把当前 `NavSea PBF` 里和海底情况相关的辅助信息整理成一份中文 `md` - 重点不是抽象讨论,而是回答: - 当前 PBF 里哪些层和海底形态有关 - 能否看出“槽、脊、坎、坑、突起” - 对钓鱼到底有什么帮助 ### 2. 本轮新增文档 - 已新增: - [`NavSea_海底地形解读_钓鱼参考.md`](/root/sourceserver/pbf/NavSea_海底地形解读_钓鱼参考.md) ### 3. 本轮收口结论 - 当前 `NavSea PBF` 没有一个现成字段直接把海底形态定义成: - 槽 - 脊 - 坎 - 坑 - 但已经具备足够的图面表达,可以基于: - `depth_contour` - `depth_contour_overview` - `bathymetry_line` - `seabed_text_point` - `submerged_reef_area` 等层去做判读 ### 4. 本轮补充说明 - 文档中已额外整理当前 PBF 可直接消费的相关字段: - `least_depth_m` - `depth_value_m` - `chart_label_text` - `canonical_object_type` - `class_code` - 并明确说明: - `seabed_line` 目前应理解为“海底线表达” - 不能直接等同于“只有海底电缆” ### 5. 当前意义 - 这份文档可以直接作为: - 前端做空白水域深度上下文和地形提示的说明依据 - 后续做钓鱼结构提示时的规则输入说明 ## 2026-04-11 pickup test 页新增海底地形解读函数与面板 ### 1. 本轮用户要求 - 用户希望按当前已经确认的设计思想: - 做一个“海底地形解读”函数 - 再做一个对应显示 panel - 目标是把当前图面可见的海底结构解释直接放进 pickup test 页,便于前端和业务一起看结果 ### 2. 本轮实现 - 已在: - [`src/pbf/navsea-pickup-test-karatsu-20nm.html`](/root/sourceserver/pbf/src/pbf/navsea-pickup-test-karatsu-20nm.html) 中新增: - `buildTerrainInterpretation(event, depthContext)` - “当前海底地形解读” panel ### 3. 当前函数口径 - 当前实现仍然是规则版解释器 - 它不做: - 底模插值 - 正式地貌分类确权 - 它只基于当前可见图面去综合判读: - `depth-contours` - `depth-contours-major` - `depth-contour-labels` - `bathymetry-support` - `bottom-material-labels` - `submerged-structures` - `fishery-areas` 等图层 ### 4. 当前输出内容 - panel 当前会显示: - 主判断 - 结构提示 - 深度跨度 - 底质 - 附近结构 - 可信度 - JSON 输出里会保留: - `primary_judgement` - `local_depth_range_m` - `contour_density` - `seabed_material` - `nearby_structures` - `hints` ### 5. 当前判读原则 - 典型输出是: - `疑似明显坡折/陡坡` - `疑似缓到中等坡折` - `疑似槽/沟一侧或较深落差带` - `疑似脊/隆起一侧或浅高点边缘` - `局部地形相对平缓` - `疑似底质变化带` - `礁体边缘结构位` - 所有文案都明确保持为: - `疑似` - `当前图面判读` 不冒充“系统已确认地貌对象” ### 6. 本轮部署 - 已重新部署: - `/mnt/sda1/www/newpec/navsea-pickup-test-karatsu-20nm.html` - 页面版本已更新为: - `pickup-test-r2-20260411-1028` ## 2026-04-11 pickup 结果改为面向普通钓鱼人的简明解释 ### 1. 本轮用户要求 - 用户进一步明确: - 如果点击的是露出海面或海面上的具体对象 - 例如灯塔、渔网、标识、暗礁等 - 就直接返回这个具体东西 - 如果点击的是海底相关信息 - 就返回水深 - 物体名(有的话) - 海底形状的简单解读 - 并强调: - 文案要简单明了 - 不要堆太多普通钓鱼人不熟悉的专业术语 ### 2. 本轮实现 - 已在: - [`src/pbf/navsea-pickup-test-karatsu-20nm.html`](/root/sourceserver/pbf/src/pbf/navsea-pickup-test-karatsu-20nm.html) 中新增: - `buildFriendlyClickInterpretation(primary, depthContext, terrainResult)` - 并把原来偏调试口径的“当前海底地形解读” panel 改成: - “当前点击解读” ### 3. 当前页面口径 - 当前点击结果会先分成两类: - `海面/露出物` - `海底信息` - 判断逻辑大致是: - 航标、灯塔、可见渔具区、可见设施等 - 优先按具体物体解释 - 等深线、底质、海底线、潜礁、海底危险物等 - 优先按海底信息解释 ### 4. 当前海底解读文案 - 当前海底解读不再直接甩: - `坡折` - `槽` - `脊` 这类专业词给终端用户自己消化 - 而是改成更口语化的话术,例如: - `这里水底起伏比较明显,像一道坎。` - `这里像水底一条沟的边上。` - `这里像水底一个小包或小凸起边上。` - `这里水底看起来比较平。` - `这附近像礁边,鱼容易沿边活动。` ### 5. 当前 panel 显示项 - 新 panel 当前显示: - 结果类型 - 主显示 - 当前水深 - 物体名 - 水底情况 - 补充提示 - 同时保留 JSON: - 上层友好解释结果 - 底层 `terrain_debug` 调试结构 ### 6. 本轮部署 - 已重新部署: - `/mnt/sda1/www/newpec/navsea-pickup-test-karatsu-20nm.html` - 页面版本已更新为: - `pickup-test-r3-20260411-1056` ## 2026-04-11 “附近”口径改为真实米制范围 ### 1. 本轮问题 - 用户指出: - 如果“附近”直接按 `px` 半径算 - 那么它会和 `zoom` 强相关 - 放大时实际范围变小 - 缩小时实际范围变大 - 这不适合做正式业务口径 ### 2. 本轮结论 - 这个判断是对的 - `px` 半径只适合调试 query 手感 - 不适合定义: - `100 米内算附近` 这种稳定业务规则 ### 3. 本轮修复 - 已在: - [`src/pbf/navsea-pickup-test-karatsu-20nm.html`](/root/sourceserver/pbf/src/pbf/navsea-pickup-test-karatsu-20nm.html) 中新增: - `screenRadiusForMeters(lngLat, meters, minPixels)` - 当前实现改为: 1. 先把点击点附近 `100m` 换算成当前 zoom 下对应的屏幕半径 2. 用这个半径做 `queryRenderedFeatures` 3. 再用真实 `distance_m` 二次过滤 4. 只有 `distance_m <= 100` 的对象,才会进入: - `nearby_structures` - `附近有什么` ### 4. 当前意义 - 现在“附近”已经不再是: - 模糊的像素范围 - 而是: - 稳定的真实距离口径 - 即使缩放变化: - `附近 = 100 米内` 这个业务语义不变 ### 5. 本轮部署 - 已重新部署: - `/mnt/sda1/www/newpec/navsea-pickup-test-karatsu-20nm.html` ## 2026-04-16 style 生成错误清理 ### 1. 本轮判定口径 - 用户明确要求,若 style 中出现以下内容,一律视为生成错误: - `background-color: #f5f1e6` 或其他浅色底 - `raster-opacity < 1` - `raster-saturation < 0` - 为低 zoom 单独增加 `wash / fog / skin / overview overlay` ### 2. 本轮已清理内容 - 已把命中的 style 统一修正为: - `background-color = rgba(255,255,255,1)` - `raster-opacity = 1` - `raster-saturation = 0` - 已移除各类 `depth_contour_overview` 低 zoom 概略叠层 - 已同步处理仓库内和 `/mnt/sda1/www/newpec/domain` 下当前仍在使用或仍可能被引用的生成 style ### 3. 本轮已修正文件 - 仓库内: - `src/pbf/style.navsea-delivery-full.json` - `src/pbf/style.navsea-delivery-karatsu-10nm.json` - `src/pbf/style.navsea-delivery-karatsu-20nm-final.json` - `src/pbf/style.navsea-delivery-kyushu.json` - `src/pbf/style.navsea-engineering-karatsu-10nm.json` - `src/pbf/style.navsea-v2.json` - `src/pbf/style.karatsu-10nm-v2.json` - `src/pbf/style.navsea-redesign.json` - `src/pbf/style.navsea-semantic-only.json` - 已部署目录: - `/mnt/sda1/www/newpec/domain/style.navsea-delivery-full.json` - `/mnt/sda1/www/newpec/domain/style.navsea-delivery-karatsu-10nm.json` - `/mnt/sda1/www/newpec/domain/style.navsea-delivery-karatsu-20nm-final.json` - `/mnt/sda1/www/newpec/domain/style.navsea-delivery-kyushu.json` - `/mnt/sda1/www/newpec/domain/style.compare-delivery-karatsu-10nm.json` - `/mnt/sda1/www/newpec/domain/style.domain-karatsu-10nm.json` - `/mnt/sda1/www/newpec/domain/style.domain-land-sea-karatsu-10nm.json` - `/mnt/sda1/www/newpec/domain/style.domain-legacy-compatible-karatsu-10nm.json` ### 4. 复核结果 - 已对以下目录做规则复扫: - `src/pbf/style*.json` - `/mnt/sda1/www/newpec/domain/style*.json` - 当前复扫结果: - `TOTAL 0` - 表示上述目录中已不存在本轮定义的四类 style 生成错误 ### 5. 下一步 1. 若后续还要继续做 style 生成链路治理,应把同样规则前移到生成脚本/模板层 2. 在你确认后,再继续处理 sprite 语义 key 重命名与裁剪 ## 2026-04-16 BASIS=T 命名建议整理 ### 1. 本轮目标 - 用户已在 sprite 审计 Excel 中对部分 `new_sprite_key` 人工填写了: - `basis = T` - 本轮任务是把这批人工命名再收敛一遍,整理成可审核的正式 key 建议表 ### 2. 本轮输入 - 基础 Excel: - `tasks/pbf/NavSea_Sprite_Audit_newpec_style_with_pbf_2026-04-16.xlsx` - 过滤范围: - `used` sheet - `basis = T` ### 3. 本轮输出 - CSV: - `tasks/pbf/NavSea_Sprite_Basis_T_建议修正表_2026-04-16.csv` - Markdown: - `tasks/pbf/NavSea_Sprite_Basis_T_建议修正表_2026-04-16.md` ### 4. 当前结论 - 共整理: - `33` 条 - 当前最主要的问题集中在: - 空格 / 连字符未统一 - `fille / varian / easte / sourth` 等拼写问题 - `bang / tu_b / t_object` 这类临时 token 语义不够稳定 - 当前建议表中已保留: - 原写法 - 建议正式 key - 简短原因 ### 5. 下一步 1. 由用户审核这份 `BASIS=T` 建议修正表 2. 用户确认后,再批量回写: - sprite key 对照表 - sprite json / png - style / pbf 语义 key ## 2026-04-16 全国人工审计对比页 ### 1. 本轮目标 - 用户要求两件事: - 明确说明接下来如何审计当前这套 `pbf / style / png` - 提供一张可直接人工对比 `newpec` 的页面 ### 2. 本轮新增页面 - 仓库源码: - `src/pbf/navsea-compare-full-audit.html` - 已部署页面: - `/mnt/sda1/www/newpec/navsea-compare-full-audit.html` - 访问地址: - `http://192.168.200.184/newpec/navsea-compare-full-audit.html` ### 3. 页面口径 - 左侧固定: - 原始 `style.json` - 原始 `newpec` 瓦片 - 右侧固定: - `style.navsea-delivery-full.json` - `/pbf-delivery-full-20260415` - 当前 `newpec/sprite/sprite` - 页面版本: - `full-audit-r1-20260416-1548` ### 4. 本轮新增文档 - 审计口径文档: - `tasks/pbf/NavSea_全国_PBF_Style_Sprite_人工审计口径_2026-04-16.md` ### 5. 当前说明 - 本轮没有改动主 `20nm compare` 基线页 - 采用单独新增全国人工审计页的方式,避免影响现有视觉基线 - 当前新页已保留: - 双屏联动 - 点击取数 - HTML / Style / PBF / Sprite 版本提示 ### 6. 下一步 1. 用户在新页面上做人工审计 2. 按具体差异把问题归类到: - `PBF` - `style` - `sprite` 3. 再进入正式的 sprite key 重命名与未使用 png 清理 ## 2026-04-16 全国语义版 sprite / style 生成 ### 1. 本轮目标 - 在用户确认 `BASIS=T` 建议表后,开始生成一版可直接人工审计的: - 语义版 sprite atlas - 语义版 style - 语义版全国 PBF 目录 ### 2. 本轮新增文件 - 生成脚本: - `build_semantic_delivery_assets.py` - 语义 key 对照表: - `src/pbf/semantic_sprite_key_map_2026-04-16.json` - 语义版 style: - `src/pbf/style.navsea-delivery-full-semantic.json` - `/mnt/sda1/www/newpec/domain/style.navsea-delivery-full-semantic.json` ### 3. 本轮新增 sprite 输出 - 输出目录: - `/mnt/sda1/www/newpec/sprite-semantic` - 已生成: - `sprite.json` - `sprite.png` - `sprite@2x.json` - `sprite@2x.png` ### 4. 当前 sprite 口径 - 当前语义版 atlas 已只保留“使用中 sprite 图块”的图像打包 - 为了让语义版 style 在旧值 / 新值混用阶段也能正常显示: - `sprite-semantic/*.json` 中同时保留: - 新语义 key - 与其共用同一图块坐标的旧 key alias - 因此当前阶段: - 图像 atlas 已做裁剪 - key 已可双兼容过渡 ### 5. 当前语义版全国 PBF 目录 - 已建立新目录: - `/home/wwwroot/pbf-delivery-full-semantic-20260416` - 当前做法: - 先基于 `20260415` 全国 delivery 做整树硬链接复制 - 再只重写命中旧 sprite key 的候选瓦片 - 候选瓦片量级已确认约: - `4370` ### 6. 当前状态说明 - 本轮已完成并可直接使用的部分: - 语义版 sprite - 语义版 style - 全国人工审计 compare 页已切到语义版 style / sprite / PBF 路径 - 本轮尚未在本次交互内完整收口的部分: - 全国 `PBF` 的属性级语义 key 全量重写尚未全部跑完 - 因此当前语义版 PBF 目录虽然路径已建立、瓦片已可访问,但其中大部分瓦片暂仍保留原始旧 key 属性值 - 由于语义版 sprite atlas 当前保留了旧 key alias: - 页面渲染仍可正常工作 - 可以先开始人工视觉审计 ### 7. 当前 compare 页 - 页面: - `src/pbf/navsea-compare-full-audit.html` - `/mnt/sda1/www/newpec/navsea-compare-full-audit.html` - 当前版本: - `full-audit-r2-20260416-1504` - 右侧当前指向: - `style.navsea-delivery-full-semantic.json` - `/pbf-delivery-full-semantic-20260416` - `/newpec/sprite-semantic/sprite` ### 8. 下一步 1. 继续完成全国语义版 PBF 的属性级重写 2. 在重写完成后,抽样验证: - `chart_icon_image` - `chart_fill_pattern` 是否已从旧 key 变为新语义 key 3. 再决定是否移除语义 sprite atlas 中的旧 key alias ## 2026-04-16 tide 点位缺失定位 ### 1. 现象 - 用户在全国 compare 页指出: - 左侧原始版能看到 `tide` 点位 - 右侧 delivery 缺失 ### 2. 本轮定位结果 - 该对象并不来自 `newpec` 主 PBF 的原始 layer 映射 - 原始 `newpec/style.json` 另有一条独立 source: - `tide` - `https://tile.mapple-on.jp/tide-mvt/{z}/{x}/{y}.pbf?ver=20251001` - 原始图层: - `#d#tide` - `source = tide` - `source-layer = tide` - `icon-image = tidespot-daytime` - 因此右侧缺失的根因不是: - builder 漏接 raw layer - 而是: - `style.navsea-delivery-full*.json` 没有把 `tide` 外部 source 一并挂入 ### 3. 本轮修复 - 已在以下 style 中补入: - `tide` vector source - `tide-spots` symbol layer - 已修文件: - `src/pbf/style.navsea-delivery-full.json` - `src/pbf/style.navsea-delivery-full-semantic.json` - 已同步部署: - `/mnt/sda1/www/newpec/domain/style.navsea-delivery-full.json` - `/mnt/sda1/www/newpec/domain/style.navsea-delivery-full-semantic.json` ### 4. 当前结论 - 这类点位不应继续追到 `navsea_tile_builder.py` 的 raw layer 接入 - 正确处理方式是: - 在 delivery style 中保留原始 `tide-mvt` 外部 source - 让右侧 style 与左侧原始版保持同一条潮流点位数据源 ## 2026-04-16 sprite key 语义化迁移任务草案 ### 1. 本轮背景 - 用户提出希望把当前: - `PBF` - `sprite.json` - sprite 资源引用 统一改成“有语义的 key”,而不是继续使用: - `symbol-daytime-410` - `symbol-daytime-301` 这类编号式命名。 - 当前先不直接改代码,先出可审核的 task 文档。 ### 2. 本轮确认的方向 - 迁移目标应当是: - `PBF` 输出语义图标 key - style 直接消费语义 key - `sprite.json` 使用语义 key - 其中: - `sprite.png` 本身不是命名载体 - 真正承载名字的是 `sprite.json` - `sprite.png` 需要做的是按新 key 重新打包索引 ### 3. 本轮已完成的资料核对 - 已复核全国候选 style: - [`src/pbf/style.navsea-delivery-full.json`](/root/sourceserver/pbf/src/pbf/style.navsea-delivery-full.json) - 已复核当前全国候选 PBF: - `/home/wwwroot/pbf-delivery-full-20260415` - 已复核线上 sprite 索引: - `/mnt/sda1/www/newpec/sprite/sprite@2x.json` - 已复核 builder 里当前图标派生逻辑: - [`navsea_tile_builder.py`](/root/sourceserver/pbf/navsea_tile_builder.py) ### 4. 本轮新增输出 - 已新增 task 草案: - [`tasks/pbf/NavSea_Sprite_语义_Key_迁移任务_2026-04-16.md`](/root/sourceserver/pbf/tasks/pbf/NavSea_Sprite_语义_Key_迁移任务_2026-04-16.md) ### 5. 当前草案内容 - 文档中已给出: - 第一版迁移目标 - 命名原则 - 当前全国候选已用 key 的对照表 - `pattern` 类资源的第一版对照 - 高确认度 / 待确认项 - 当前特意把两类内容分开: - 已能直接落成语义 key 的对象 - 仍需保留变体编号尾巴的对象 ### 6. 当前下一步 - 先等用户审核: - 对照表命名是否认可 - 哪些 key 需要改名 - 哪些变体需要先做图样人工核对 - 待用户确认后,再决定是否进入: - style / builder / sprite.json 的正式迁移实现 ## 2026-04-16 sprite key 使用计数 CSV ### 1. 本轮需求 - 用户要求基于当前线上: - `/mnt/sda1/www/newpec/sprite/sprite@2x.json` 输出一个 CSV,列为: - `old_sprite_key` - `new_sprite_key` - `count` - 其中要求: - 以 `sprite.json` 的 key 为基表 - 统计当前全国候选 PBF 中实际出现次数 - `PBF` 中没有用到的图标不填写 `new_sprite_key` ### 2. 本轮统计口径 - 当前使用的 PBF 目录: - `/home/wwwroot/pbf-delivery-full-20260415` - 当前统计方式: - 不逐条做 feature 级 decode - 直接扫描 `PBF` 原始字节中的 sprite key ASCII 字符串 - 只对: - `sprite@2x.json` 中存在的 key 做计数 - 该口径适合回答: - 哪些 sprite key 当前确实进入了全国候选 PBF - 大致进入了多少次 ### 3. 本轮新增输出 - 已生成: - [`tasks/pbf/NavSea_Sprite_Key_Usage_2026-04-16.csv`](/root/sourceserver/pbf/tasks/pbf/NavSea_Sprite_Key_Usage_2026-04-16.csv) ### 4. 当前结果摘要 - `sprite@2x.json` 总 key 数: - `476` - 当前全国候选 PBF 中实际命中的 key 数: - `23` - 当前计数最高的几个 key: - `symbol-daytime-428 = 3322` - `symbol-daytime-301 = 2830` - `symbol-daytime-303 = 1581` - `symbol-daytime-405 = 1286` - `symbol-daytime-310 = 927` - `fill-daytime-428 = 899` - `symbol-daytime-320 = 810` ### 5. 当前说明 - 这份 CSV 主要用于帮助用户先看: - 哪些旧 sprite key 目前真的在用 - 哪些 key 值得优先进入语义化迁移 - 当前未在 PBF 中出现的 key: - `new_sprite_key` 留空 ## 2026-04-16 sprite 审计口径修正 ### 1. 本轮发现 - 用户指出: - `arc-daytime-04022307` 这类灯弧资源虽然在上一份 CSV 中是 `0`,但在 style 里能看到相关灯弧资源引用。 - 这说明上一份 CSV 的统计口径只适合回答: - `PBF` 中有没有直接出现这个 sprite key - 但不适合回答: - 当前 style 是否真的在使用该资源 ### 2. 本轮口径修正 - 新增一份更适合审计和删图判断的联合 CSV: - 同时统计 `style` 直接引用次数 - 和 `PBF` 中出现次数 - 当前使用的 style 基线: - [`src/pbf/style.navsea-delivery-full.json`](/root/sourceserver/pbf/src/pbf/style.navsea-delivery-full.json) - 当前使用的 PBF 基线: - `/home/wwwroot/pbf-delivery-full-20260415` - 当前输出字段: - `old_sprite_key` - `used_in_style` - `used_in_pbf` - `usage_note` - `new_sprite_key` ### 3. 本轮新增输出 - 已生成: - [`tasks/pbf/NavSea_Sprite_Audit_2026-04-16.csv`](/root/sourceserver/pbf/tasks/pbf/NavSea_Sprite_Audit_2026-04-16.csv) ### 4. 当前结果摘要 - `sprite.json` 总 key 数: - `476` - 当前 style 直接引用到的 key 数: - `76` - 当前 PBF 中出现过的 key 数: - `23` - 当前 style / PBF 任一侧命中的总 key 数: - `81` ### 5. 当前验证到的关键结论 - 灯弧资源不是“没用”,而是典型的: - `style_only` - 当前全国候选 style 里实际命中的灯弧 key 包括: - `arc-daytime-04027289` - `arc-daytime-m1` - `arc-daytime-m2` - `arc-daytime-m3` - 而: - `arc-daytime-04022307` 当前只在 `sprite@2x.json` 中存在 - 目前没有在当前全国候选 style 中命中 ### 6. 当前用途 - 这份联合 CSV 更适合服务用户当前三个目标: - 审计当前哪些资源真的在用 - 判断哪些 PNG 图块可以考虑删除 - 识别哪些仍在使用的 key 需要继续语义化迁移 ## 2026-04-16 sprite 审计 CSV 重排与图样标记 ### 1. 本轮需求 - 用户要求把联合审计 CSV 重新生成一次: - 当前完全没有命中的 key 放到最下面 - 通过看图识别出的语义 key 需要做标记 ### 2. 本轮处理 - 已重写: - [`tasks/pbf/NavSea_Sprite_Audit_2026-04-16.csv`](/root/sourceserver/pbf/tasks/pbf/NavSea_Sprite_Audit_2026-04-16.csv) - 当前排序规则: - 先放 `style` 或 `PBF` 任一侧命中的 key - 完全未命中的 `unused_in_current_full` 放到文件尾部 - 已命中部分再按: - `used_in_style + used_in_pbf` 总量降序 - 同总量下按 key 名排序 ### 3. 图样识别标记规则 - 对当前主要依赖 sprite 图样外观推断语义的 key: - 在 `new_sprite_key` 后追加: - `[img]` - 当前已这样标记的包括: - `symbol-daytime-720 -> anchorage_designated [img]` - `symbol-daytime-721 -> restriction_general [img]` - `symbol-daytime-724 -> anchoring_prohibited [img]` ### 4. 当前结果说明 - 经过这次重排后: - CSV 顶部更适合直接做“当前在用资源”审计 - CSV 底部更适合直接看“候选可删资源” ## 2026-04-16 sprite 审计 Excel 输出 ### 1. 本轮需求 - 用户要求把各个 sprite 图标直接放进 Excel 文件中,便于人工审核。 ### 2. 本轮输出 - 已生成: - [`tasks/pbf/NavSea_Sprite_Audit_2026-04-16.xlsx`](/root/sourceserver/pbf/tasks/pbf/NavSea_Sprite_Audit_2026-04-16.xlsx) ### 3. 当前 Excel 内容 - `summary` sheet: - 统计口径说明 - style / PBF / sprite 基线 - `used` sheet: - 当前在 style 或 PBF 中命中的 key - 含图标预览 - `unused` sheet: - 当前全国候选下完全未命中的 key - 含图标预览 ### 4. 当前生成结果 - Excel 已嵌入 sprite 预览图: - `476` 张 - 当前文件大小约: - `2.1M` ### 5. 当前用途 - 这份 Excel 适合直接用于: - 看图核语义 - 审核哪些 key 仍在使用 - 判断哪些资源可进入删图候选 ## 2026-04-16 sprite 审计 Excel 兼容版 ### 1. 本轮问题 - 用户反馈原始: - [`tasks/pbf/NavSea_Sprite_Audit_2026-04-16.xlsx`](/root/sourceserver/pbf/tasks/pbf/NavSea_Sprite_Audit_2026-04-16.xlsx) 无法打开。 ### 2. 本轮确认 - 已核实原始 Excel 并非空壳: - 内含 `476` 张嵌入图片 - 本机 `LibreOffice` 可正常读取与转换 - 初步判断: - 更可能是用户侧表格客户端对“大量嵌入图片 + 单工作簿”兼容性较差 ### 3. 本轮新增输出 - 已新增兼容版: - [`tasks/pbf/NavSea_Sprite_Audit_2026-04-16_compat.xlsx`](/root/sourceserver/pbf/tasks/pbf/NavSea_Sprite_Audit_2026-04-16_compat.xlsx) ### 4. 兼容版处理方式 - 缩小预览图尺寸 - 拆成多个 sheet: - `used_1` - `used_2` - `unused_1` - `unused_2` - 保留 `summary` 页说明 ### 5. 当前结果 - 原始版大小约: - `2.1M` - 兼容版大小约: - `605K` - 兼容版也已用本机 `LibreOffice` 验证可读 ## 2026-04-16 Mapple 手册对位版 sprite 审计 ### 1. 本轮输入来源 - 用户提供官方手册页: - `https://info.mapple-on.jp/newpecs/manual/1-15_inlink.html` - 已进一步解析确认: - 该页实际加载的是 `guide115_01` 到 `guide115_11` 的 JPG 凡例页 - 关键符号对位页主要是: - `guide115_01` - `guide115_02` - `guide115_03` - `guide115_04` - `guide115_07_20260120` - `guide115_08` ### 2. 本轮新增输出 - 已生成手册对位版 CSV: - [`tasks/pbf/NavSea_Sprite_Audit_2026-04-16_manual.csv`](/root/sourceserver/pbf/tasks/pbf/NavSea_Sprite_Audit_2026-04-16_manual.csv) - 已生成手册对位版 Excel: - [`tasks/pbf/NavSea_Sprite_Audit_2026-04-16_manual.xlsx`](/root/sourceserver/pbf/tasks/pbf/NavSea_Sprite_Audit_2026-04-16_manual.xlsx) ### 3. 本轮新增字段 - 手册对位版相较原审计表,新增: - `manual_label_ja` - `basis` - `source_page` 含义: - `manual_label_ja` - 来自 Mapple 凡例页的日文名称 - `basis` - `manual` - `manual?` - `style` - `source_page` - 对应凡例页编号 ### 4. 本轮关键纠偏 - 按手册口径确认后,当前若干 key 的语义与现有 builder fallback 并不完全一致。 - 当前已先把手册语义写入对位版表,不在本轮直接改代码。 - 代表性条目包括: - `symbol-daytime-719 -> 検疫錨地` - `symbol-daytime-720 -> 錨泊(指定)地` - `symbol-daytime-721 -> 制限区域・航路横断等禁止区域・航泊禁止区域(共通)` - `symbol-daytime-724 -> 錨泊禁止区域` - `symbol-daytime-428 -> 魚礁` - `symbol-daytime-429 -> 魚礁(危険なもの)` ### 5. 当前用途 - 手册对位版更适合: - 用官方凡例口径审核 sprite 命名 - 识别当前 style / builder 中的语义偏差 - 作为下一步 key 语义化迁移的依据 ## 2026-04-16 改用 newpec/style.json 重做 sprite 审计表 ### 1. 本轮原因 - 用户指出此前按仓库内生成的 style 做图标预览,结果看起来可能有问题。 - 已进一步确认: - `/mnt/sda1/www/newpec/style.json` 声明的 sprite 不是本机 `newpec/sprite/...` - 而是官方远端: - `https://tile.mapple-on.jp/newpec-symbols-20251001/sprite` ### 2. 本轮调整 - 当前改为直接使用: - style 基线: - `/mnt/sda1/www/newpec/style.json` - sprite 基线: - `https://tile.mapple-on.jp/newpec-symbols-20251001/sprite@2x.json` - `https://tile.mapple-on.jp/newpec-symbols-20251001/sprite@2x.png` ### 3. 本轮新增输出 - 已生成 CSV: - [`tasks/pbf/NavSea_Sprite_Audit_newpec_style_2026-04-16.csv`](/root/sourceserver/pbf/tasks/pbf/NavSea_Sprite_Audit_newpec_style_2026-04-16.csv) - 已生成 Excel: - [`tasks/pbf/NavSea_Sprite_Audit_newpec_style_2026-04-16.xlsx`](/root/sourceserver/pbf/tasks/pbf/NavSea_Sprite_Audit_newpec_style_2026-04-16.xlsx) ### 4. 当前结果 - 当前 `newpec/style.json` 直接命中的 sprite key 数: - `120` - 当前未命中的 key 数: - `356` - 新表中的图标预览已统一改为: - 与 `newpec/style.json` 声明一致的官方 sprite 图集 ### 5. 当前用途 - 这份新表更适合直接回答: - `newpec/style.json` 当前到底用了哪些 sprite key - 对应图标在官方 sprite 图集中长什么样 ## 2026-04-16 newpec style + PBF 双列版 sprite 审计 ### 1. 本轮补充原因 - 用户指出上一版: - `NavSea_Sprite_Audit_newpec_style_2026-04-16.*` 只有 `style` 使用列,没有把 `PBF` 使用列一并列出。 ### 2. 本轮新增输出 - 已补生成 CSV: - [`tasks/pbf/NavSea_Sprite_Audit_newpec_style_with_pbf_2026-04-16.csv`](/root/sourceserver/pbf/tasks/pbf/NavSea_Sprite_Audit_newpec_style_with_pbf_2026-04-16.csv) - 已补生成 Excel: - [`tasks/pbf/NavSea_Sprite_Audit_newpec_style_with_pbf_2026-04-16.xlsx`](/root/sourceserver/pbf/tasks/pbf/NavSea_Sprite_Audit_newpec_style_with_pbf_2026-04-16.xlsx) ### 3. 当前统计口径 - style 基线: - `/mnt/sda1/www/newpec/style.json` - sprite 基线: - `https://tile.mapple-on.jp/newpec-symbols-20251001/sprite` - PBF 基线: - `/home/wwwroot/pbf-delivery-full-20260415` ### 4. 当前结果摘要 - `used_in_newpec_style` 命中的 key 数: - `120` - `used_in_pbf` 命中的 key 数: - `23` - 两侧任一侧命中的 key 数: - `120` ### 5. 当前用途 - 这份双列版适合直接回答: - 哪些 key 仅 style 在用 - 哪些 key 同时进了 style 和 PBF - 哪些 key 当前完全没有命中 ## 2026-04-12 15:51 红点对位测试页 ### 1. 背景 - 用户提供了一组 native 点击参数: - `gps = 130.12021422800144, 33.564027696216417` - `screen_point = 872.12158203125, 265.0388488769531` - `camera.center = 130.09748008398487, 33.56207182800527` - `camera.zoom = 13.35437870025635` - 当前目标不是继续改 pickup 逻辑,而是先做一个最小对位页: - 在同一套 `Karatsu 20nm final` 图面上 - 把这个 GPS 点直接画成红点 - 方便用户亲自点击这个点,观察 web pickup 命中情况 ### 2. 本轮新增页面 - 新增文件: - `/root/sourceserver/pbf/src/pbf/navsea-click-target-karatsu-20nm.html` - 页面特性: - 使用 `style.navsea-delivery-karatsu-20nm-final.json` - 使用 `pbf-delivery-karatsu-20nm-final` - 相机固定到用户提供的 native `center/zoom` - 目标 GPS 固定绘制为一个红色圆点 - 页面左上角额外展示: - 目标经纬度 - 相机中心 - 缩放级别 - native 屏幕点 ### 3. 部署 - 已部署到: - `/mnt/sda1/www/newpec/navsea-click-target-karatsu-20nm.html` - 可访问 URL: - `http://192.168.200.184/newpec/navsea-click-target-karatsu-20nm.html` ### 4. 用途说明 - 该页面是“位置对位工具页”,不是 pickup 主测试页 - 主要用途: - 先确认 native 给出的 GPS 点在 web 图面上的真实位置 - 再让用户直接点这个红点,观察是否能稳定命中目标对象 - 用于后续继续排查: - native `queryRenderedFeaturesAtPoint` - native `queryRenderedFeaturesInRect` - web `queryRenderedFeatures` 的差异 ### 5. 本轮增强 - 已继续增强红点对位页: - 点击地图后,页面右侧直接显示三组查询结果 - 分别为: - `Exact Point 命中 fid` - `BBox 命中 fid` - `Raw 命中 fid` - 当前每组结果都会输出: - 命中数量 - `fid` 数组 - 简化后的 feature 摘要 - 同时也会在浏览器 `console.log` 打印同样内容,便于和 native 日志逐条对照 ### 6. 当前版本 - 红点对位页当前版本: - `click-target-r2-20260412-1558` ## 2026-04-12 16:09 红点对位页切换第二组 native 参数 ### 1. 本轮目的 - 用户提供了第二组 native 点击参数,要求继续使用同一个红点对位页做对照 - 本轮没有改 pickup 判定逻辑,只替换测试输入参数 ### 2. 本轮更新 - 页面: - `/root/sourceserver/pbf/src/pbf/navsea-click-target-karatsu-20nm.html` - 已切换为以下参数: - `gps = 130.11327934763205, 33.55533344042364` - `camera.center = 130.11779893907284, 33.55552020187967` - `camera.zoom = 15.158083915710451` - `screen_point = 447.72021484375, 467.4805908203125` - `projected_click_point = 298.4801330566406, 311.6537170410156` ### 3. 页面补充 - 左侧信息面板已补充: - `投影屏幕点` - 这样可以同时对照: - native 事件里的 `screen_point` - native 相机投影出来的 `projected_click_point` ### 4. 当前版本 - 红点对位页当前版本: - `click-target-r3-20260412-1608` ## 2026-04-11 建筑物/地标点 pickup 主入口补全 ### 1. 本轮问题 - 用户继续指出: - 当前点击逻辑还是明显偏海底 - 对建筑物的注意不够 ### 2. 本轮根因 - 当前规则虽然已经把: - `land-area` - `land-structures-area` 等面/线层拉回正式 pickup - 但真正用于可见建筑/地标点表达的: - `landmark-points` - `landmark-point-fallback` 之前没有进入 `primary` - 这会导致: - 用户眼前看见了建筑/地标点 - 但 pickup 主入口没有优先命中它 - 页面仍容易滑回海底解释 ### 3. 本轮修复 - 已更新: - [`src/pbf/navsea-pickup-rules.v1.json`](/root/sourceserver/pbf/src/pbf/navsea-pickup-rules.v1.json) - 具体补入: - `landmark-points` - `landmark-point-fallback` 到 `render_layer_groups.primary` - 并把: - `coast-structures-area` 也正式补入 `render_layer_groups.area` ### 4. 当前意义 - 现在可见建筑/地标点不再只是: - style 上画出来 - 但 pickup 不关注 - 而是已经进入正式主点击入口 - 页面在建筑物附近点击时,应更容易优先返回: - 建筑物 / 地标 / 防波堤 / 栈桥 而不是海底兜底 ### 5. 本轮部署 - 已重新部署: - `/mnt/sda1/www/newpec/domain/navsea-pickup-rules.v1.json` - `/mnt/sda1/www/newpec/navsea-pickup-test-karatsu-20nm.html` ## 2026-04-11 当前 pickup 测试页状态确认 ### 1. 当前用户反馈 - 用户确认: - `现在看起来很好` ### 2. 当前已达到的状态 - 当前 `pickup test` 页已经基本收口到用户可接受状态 - 页面当前能较稳定地区分: - 海面上/露出水面的具体对象 - 海底信息解释 - 对用户可见的: - 航标 - 灯标 - 渔具/鱼礁 - 危险物 - 陆地 - 建筑物 - 地标点 - 防波堤/栈桥等岸上或岸边结构 已经比前几轮更容易返回正确对象,而不是错误滑入海底兜底 ### 3. 当前海底解释口径 - 当前海底解释已具备: - `当前水深` - `物体名(有的话)` - `简单水底情况` - `判断理由` - 并已统一为: - `100 米` 近邻证据口径 - 当前文案也已收敛到偏普通钓鱼人可理解的表达,不再直接把专业术语甩给终端用户 ### 4. 当前可作为后续实现基线 - 当前页面: - `http://192.168.200.184/newpec/navsea-pickup-test-karatsu-20nm.html` 已可作为后续前端实现 pickup 行为的测试基线 - 当前规则字典与页面逻辑可继续作为: - RN 前端落地参考 - 后续解释器抽离的基础版本 ## 2026-04-11 新增 React + MapLibre 迁移用 Codex 指令文档 ### 1. 本轮用户需求 - 用户希望把当前 `pickup` 的“当前点击解读”逻辑迁移到: - `React + MapLibre (NavSea)` - 并要求: - 提供一份中文 `md` - 这份文档要能直接作为 `Codex` 执行指令使用 ### 2. 本轮新增文档 - 已新增: - [`Codex_指令_NavSea_Pickup_当前点击解读_迁移到_React_MapLibre.md`](/root/sourceserver/pbf/Codex_指令_NavSea_Pickup_当前点击解读_迁移到_React_MapLibre.md) ### 3. 当前文档内容 - 这份指令文档已明确写清: - 目标行为 - 当前唯一参考来源文件 - 主键与图层口径 - `100 米` 附近口径 - `exact + bbox` 双阶段查询 - 当前点击解读的两种模式 - `海面/露出物` - `海底信息` - 必须保留的 `判断理由` - 不要做的事 - 产出要求 - 验收标准 ### 4. 当前意义 - 现在不仅已有: - pickup test 页 - pickup 规则字典 - pickup 解释器 - 也已经补上一份: - 可直接交给前端或另一个 Codex 执行的中文任务书 ## 2026-04-11 新增可直接复制给 Codex 的纯 Prompt 版 ### 1. 本轮用户需求 - 用户希望在已有详细 `md` 指令之外,再补一份: - 可以直接复制到聊天框 - 更短 - 更像真正执行口令 的版本 ### 2. 本轮新增文档 - 已新增: - [`Codex_Prompt_版_NavSea_Pickup_当前点击解读_迁移.md`](/root/sourceserver/pbf/Codex_Prompt_版_NavSea_Pickup_当前点击解读_迁移.md) ### 3. 当前文档作用 - 这份文档比详细任务书更短 - 但仍保留了关键约束: - 必须阅读的参考文件 - `海面/露出物` 与 `海底信息` 两种模式 - `100 米` 附近口径 - `exact + bbox` 双阶段查询 - `判断理由` - 建筑物/地标不能被海底解释吞掉 - 验收标准 ## 2026-04-11 pickup test 页补入 MapLibre 调用参数 console.log ### 1. 本轮用户要求 - 用户明确要求: - 在 web 的 `console.log` 里 - 把调用 MapLibre 的函数参数都显示出来 - 并补充说明: - 这里就是要改 `pickup test` 的 html ### 2. 本轮实现 - 已在: - [`src/pbf/navsea-pickup-test-karatsu-20nm.html`](/root/sourceserver/pbf/src/pbf/navsea-pickup-test-karatsu-20nm.html) 中新增: - `logMapLibreCall(method, payload)` ### 3. 当前已记录的 MapLibre 调用 - 当前页面会在控制台输出这些调用参数: - `new maplibregl.Map` - `map.addSource` - `map.addLayer` - `source.setData` - `map.project` - `map.queryRenderedFeatures` - `map.addControl` - `map.jumpTo` - `map.setStyle` - `map.easeTo` ### 4. 当前作用 - 现在浏览器控制台里可以直接看到: - 每次点击到底传给了哪些 `queryRenderedFeatures` 参数 - `100m` 是怎么换算成屏幕半径的 - `style` 重载、地图初始化、回到默认视角时具体传了什么 - 便于前端后续把同样的调用迁移到: - `React + MapLibre` ### 5. 本轮部署 - 已重新部署: - `/mnt/sda1/www/newpec/navsea-pickup-test-karatsu-20nm.html` - 页面版本已更新为: - `pickup-test-r6-20260411-1216` - 页面版本已更新为: - `pickup-test-r4-20260411-1105` ## 2026-04-11 陆地与建筑物点击误落入海底解释修复 ### 1. 本轮问题 - 用户反馈: - 陆地点击错了 - 建筑物点击也错了 - 实际现象是: - 用户点击了清晰可见的陆地或陆上构造物 - 页面却返回了: - `海底信息` - 或海底地形解释兜底 ### 2. 本轮根因 - 当前规则字典里: - `land-area` - `land-structures-area` 仍然被放在 `ignore` - 导致这些可见对象没有进入正式 pickup 白名单 - 页面对象未命中后,就错误掉入: - `depth context` - `terrain interpretation` 的兜底路径 ### 3. 本轮修复 - 已更新: - [`src/pbf/navsea-pickup-rules.v1.json`](/root/sourceserver/pbf/src/pbf/navsea-pickup-rules.v1.json) - 具体调整为: - 把 - `land-area` - `land-structures-area` - `land-structures-line` - `coast-structures-line` 从 `ignore` 调整为正式可点 `area` - 并补了显示名覆盖: - `land_area -> 陆地` - `building -> 建筑物` - `breakwater -> 防波堤` - `floating_facility_pier -> 浮动设施/栈桥` ### 4. 同步补强 - 已更新 pickup test 页逻辑: - 新增 `shouldPreferBBoxPrimary(exactPrimary, bboxPrimary)` - 当前规则变为: - 对危险区这类 broad area,仍允许 nearby primary 抢回 - 但对: - `land_area` - `onshore_structure_area` - `onshore_structure_line` - `bridge_structure` 这类可见陆地/构造物,不再被 bbox 里的 nearby primary 轻易抢走 ### 5. 本轮部署 - 已重新部署: - `/mnt/sda1/www/newpec/domain/navsea-pickup-rules.v1.json` - `/mnt/sda1/www/newpec/navsea-pickup-test-karatsu-20nm.html` ## 2026-04-11 pickup 面板新增“判断理由” ### 1. 本轮用户要求 - 用户指出: - 同样一类图面,有时会显示“像一道坎” - 有时会显示“变化但不特别强” - 希望页面直接显示: - 这次判断到底依据了什么 ### 2. 本轮实现 - 已在: - [`src/pbf/navsea-pickup-test-karatsu-20nm.html`](/root/sourceserver/pbf/src/pbf/navsea-pickup-test-karatsu-20nm.html) 的“当前点击解读” panel 中新增: - `判断理由` - 并新增: - `buildDecisionReasonText(terrainResult)` ### 3. 当前展示内容 - 现在海底信息解释会额外显示: - `100米内深度大约 Xm 到 Ym,跨度 Zm` - `附近共有 N 条等深线,海底辅助线 M 条` - `附近结构` - `附近底质` - 对海面/露出物点击,也会明确显示: - `当前点击已直接命中可见对象,所以不再按海底规则兜底解释。` ### 4. 本轮部署 - 已重新部署: - `/mnt/sda1/www/newpec/navsea-pickup-test-karatsu-20nm.html` - 页面版本已更新为: - `pickup-test-r5-20260411-1126` ## 2026-04-11 海底判断证据口径统一 ### 1. 本轮问题 - 用户通过截图指出一个关键矛盾: - `当前水深` 显示为 `20m` - 但 `判断理由` 却写成: - `100米内深度大约 25m 到 25m,跨度 0m` - 同时还给出了: - `这里水底看起来比较平` - 这说明当前页面里: - `当前水深` - `海底形状判断` 还不是完全使用同一套证据 ### 2. 本轮根因 - `当前水深` 原先使用的是一套较宽松的可见深度 query - `地形判断` 使用的是另一套 `100m` 近邻样本 - 再加上“平缓”规则之前会被少量 `bathymetry-support` 误触发 - 于是就会出现: - 水深看起来是 20m - 但理由统计只剩 25m 辅助线样本 - 最终误说成“比较平” ### 3. 本轮修复 - 已把 `buildDepthContext(event)` 改为同样使用: - `NEARBY_DISTANCE_M = 100` - 当前 `当前水深` 和 `附近/地形判断` 已统一到同一个 `100m` 口径 - 同时收紧了“平缓”判定: - 只有真正存在足够的等深线/标签证据时,才允许说: - `这里水底看起来比较平` - 如果只是少量 `bathymetry-support` 被扫到,当前会改成: - `当前位置只有少量海底辅助线证据,暂不判断明显坎沟。` ### 4. 当前新增说明 - `terrain_interpretation.contour_density` 里已补入: - `contour_evidence` - `判断理由` 里现在会优先显示: - `当前水深取最近可见深度,约 Xm` - `100米内样本深度大约 Ym 到 Zm,跨度 Wm` - `附近共有 N 条等深线,深度标签 K 个,海底辅助线 M 条` ### 5. 本轮部署 - 已重新部署: - `/mnt/sda1/www/newpec/navsea-pickup-test-karatsu-20nm.html`