12 KiB
CM95 全球计划暂停与 Japan PBF 低 Zoom 航标修复上下文 v1
1. 文档目的
本文用于把 NavSea 侧已经确认的事实、CM95 Japan PBF 暴露的问题,以及后续应由 CM95 项目承担的工作边界正式交接到 CM95 项目。
本文是上下文与状态交接文档,不是实现报告,也不代表 Japan PBF 修复已经完成。
后续 CM95/PBF 工作以 X220 上的实际仓库为唯一开发和生产事实源:
机器:X220
仓库:/root/sourceserver/cm95
CARBON7i 上曾做过的 PBF 实验只能作为调查线索,不作为正式实现、生产基线或最终结论。
2. 当前正式决定
2.1 全球 CM95 计划暂停
从现在开始:
Global CM95 Production = PAUSED
暂停原因:
Japan 区域已经确认存在与 Zoom 有关的助航对象保留缺陷。若在修复前继续扩展全球 PBF,很可能把同一生成缺陷复制到全球数据,之后产生大规模返工。
因此,在 Japan 修复、验证和冻结完成之前:
- 不继续扩大全球 CM95 生成范围;
- 不把当前 Japan 的 PBF scale/generalization 策略直接推广到全球;
- 不将当前 Japan 的低 Zoom 行为视为全球可接受基线。
2.2 Japan PBF 优先修复
当前 CM95 项目优先级改为:
Japan PBF correctness
→ Japan multi-region validation
→ Japan production freeze
→ 再评估 Global CM95 resume
3. NavSea 侧当前架构结论
NavSea 端已经重新收敛到以下架构:
CM95 PBF
↓
NavSea canonical source-layer / property contract
↓
NavSea canonical Style
↓
现有 1/2/3/4 挡
现有 Pickup
现有 ChartDangerAlarmSource
禁止继续走下面的方向:
CM95 raw S-52 Style
↓
让 NavSea 为 CM95 特别修改挡位 / Pickup / 报警
结论:
CM95 Provider 应负责把自己的数据生产为 NavSea 已定义好的 canonical Layer / property contract;NavSea 业务模块不应该理解 CM95 特有 Layer。
4. NavSea 真机已经验证通过的部分
测试机:
192.168.200.145
4.1 1/2/3/4 挡
已经实际验证:
3 → 2 → 1 → 4
均正常切换。
同时观察:
MapLibre resource cancel count = 0
ParseStyle error = 0
resourceUrl error = 0
说明当前挡位已经回到原 NavSea existing-layer visibility 热切换,不再通过重建整张 Style/MapView 实现。
4.2 Pickup
连续点击多个 CM95 航标,现有链路可以直接返回 NavSea 标准 Pickup 信息。
现有正式链路:
runNavSeaPickupJson
→ pickupInterpreter
→ CrossCursor
实际返回过:
- 小灯;
- 航路標識灯;
- red / green / white;
- omni;
- 距离与方位。
因此 Pickup 不需要增加 CM95 专用逻辑。
4.3 海图报警
现有 ChartDangerAlarmSource 仍使用 NavSea canonical render layer 和 canonical properties。
已经确认 CM95 canonical PBF 中存在相关:
- navigation_hazard_point;
- navigation_marks;
- baseline_area;
- facility / land / coast / structure 等标准 source-layer。
动态浅水报警 danger-depth-overlay 继续通过当前 Provider 的 analysisSourceId + baseline_area 生成。
CM95 的 baseline_area 已观察到标准深度分区,例如:
depth_zone_0-2m
depth_zone_0-5m
depth_zone_0-10m
depth_zone_2-5m
depth_zone_5-10m
depth_zone_10-20m
...
因此 ChartDangerAlarmSource 不应为了 CM95 改业务逻辑。
5. Canonical Style 已经排除为“丢灯”根因
在福冈湾真实 CM95 PBF 上做过逐对象检查。
对 PBF 中已经存在的灯类 navigation_marks feature,逐个执行 NavSea canonical Style 的灯标 filters。
结果:
unmatched = 0
也就是说:
只要 CM95 PBF 中已经存在该灯标,NavSea canonical Style 可以匹配并显示。
所以剩余的“低 Zoom 丢灯”问题发生在 Style 之前:
CM95 source
→ PBF Builder / scale selection / generalization / retention
→ PBF
→ NavSea canonical Style
当前不应继续通过修改 NavSea Style filter 来补偿。
6. 已确认的低 Zoom 现象
在固定福冈湾区域做过跨 Zoom 审计。
CM95 灯类对象在 Zoom 降低时存在明显减少。
特别是 z12 → z11:
- z12 中存在的一部分灯标在 z11 消失;
- 主要缺失对象中包含 minor_light;
- 使用空间匹配方式时,CM95 z12→z11 的保留率显著低于 Current NavSea。
曾观察到大致:
CM95 z12 → z11
50m 内保留率约 85%
100m 内保留率约 87%
而同类 Current NavSea 对照接近:
z12 → z11 ≈ 100%
因此 z11 已经可以明确视为 Japan PBF 的一个重点修复 Zoom。
z10 以下也存在更激进的数据缩减,但不应简单假设所有 z12 对象都必须无条件保留到全部低 Zoom;需要由 CM95 项目建立明确的安全对象 retention policy。
7. Current 与 CM95 原始数据并非完全一致
Current 与 CM95 是不同数据源。
已观察到类似差异:
Current: breakwater_lighthouse
CM95 附近对象: light_beacon
以及:
Current: harbor_lighthouse
CM95: coastal_lighthouse_over_15m
还存在几十米乃至更大的坐标差异。
因此禁止用以下方式修复:
距离很近
→ 认为是同一个对象
→ 自动把 CM95 类型改成 Current 类型
航标 canonical 分类必须依据 CM93/CM95 自身语义事实,例如:
- object class;
- relation/group;
- native scale;
- S-52 lookup;
- 原始 attributes;
- 已冻结的 mapping contract。
空间邻近只能用于审计和发现异常,不能作为生产语义改判依据。
8. CARBON7i 曾做过的调查线索
以下内容是在确认“X220 才是实际 CM95/PBF 工作机器”之前,在 CARBON7i 副本上做的实验。
这些内容只能作为 X220 调查线索,必须在 X220 当前真实代码、配置和数据上重新验证。不得直接复制实验代码。
8.1 一个强候选根因
CARBON7i 副本中的 Japan policy 曾显示类似:
z11:
50k
100k
200k
...
z12:
7.5k
20k
50k
100k
...
同时福冈区域数据库中大量 LIGHTS 存在于:
20k
50k
100k
...
由此得到一个需要在 X220 正式重新验证的强候选:
z12 会读取 20k LIGHTS
z11 从 50k 开始
→ 20k 独有灯标在 z11 被整体排除
8.2 不应把整个 z11 提升为 20k full detail
CARBON7i 的实验还显示,如果简单把整个 z11 scale ladder 改为包含 20k:
代表 tile 曾出现:
旧 z11:
约 3906 features
整个 z11 加入 20k:
约 6851 features
约增加 75%。
原因是 20k 中不仅有灯标,还包含大量:
- seabed text;
- area;
- line;
- label;
- 港区细节;
- 其他 feature。
因此不建议把整个 z11 直接升级为 20k/full detail。
8.3 值得在 X220 重新验证的设计方向
CARBON7i 实验曾验证一个更合理的方向:
为安全助航对象建立独立的 scale retention ladder,例如:
普通 z11 海图内容:
50k → 100k → 200k → ...
navigation_marks z11:
7.5k → 20k → 50k → 100k → ...
只针对助航组件,例如:
LIGHTS
BCNLAT
BCNSPP
BOYSPP
RTPBCN
TOWERS
_extgn
使用细尺度 quilt。
其他 source-layer 仍按正常 z11 ladder 生成。
CARBON7i 实验曾得到过以下结果:
单代表 tile:
z12 → z11 navigation_marks stable FID retention:
约 16.8% → 100%
总 feature:
3906 → 3933
PBF 体积:
约 +1%
非 navigation_marks layer count:
0 差异
福冈 12 张 z11 tile 实验曾得到:
z12 navigation_marks FID retention:
约 35.8% → 100%
非 navigation layer count 差异:
0
总 PBF 体积:
约 +1.1%
hard gate:
0
encoder drop:
0
这些只是实验线索。
正式 CM95 项目必须在 X220 当前实际 builder、policy、mapping、manifest、release 上重新实现和验证。
9. X220 当前事实源
后续开发机器:
X220
正式仓库:
/root/sourceserver/cm95
本文建立时观察到的分支:
main
本文建立前调查时观察到的 HEAD:
ed53864598f3059f524841fbe25dcd488fc1301a
注意:X220 当前 worktree 自身已经存在未提交修改。
因此后续任务必须:
- 先读当前实际 diff;
- 不覆盖现有未提交工作;
- 只做本任务相关最小修改;
- 不把无关文件一起提交;
- 以 X220 当前实际文件为准,不使用 CARBON7i 副本替代。
X220 中已经确认存在:
/root/sourceserver/cm95/config/pbf/
/root/sourceserver/cm95/src/cm95pbf/
/root/sourceserver/cm95/build/production/
/root/sourceserver/cm95/build/releases-s52-v2/
/root/sourceserver/cm95/scripts/
/root/sourceserver/cm95/tools/
并存在 Japan production plan:
build/production/cm95_s52_japan_production_plan_v1.json
10. CM95 项目后续正式工作
10.1 第一阶段:X220 重新确认根因
必须基于 X220 当前实际版本重新检查:
config/pbf/cm95_tile_policy_japan_full_detail_v1.yaml
src/cm95pbf/builder.py
src/cm95pbf/production.py
build/production/cm95_s52_japan_production_plan_v1.json
至少回答:
- z11 实际 scale ladder;
- z12 实际 scale ladder;
- LIGHTS / beacon / buoy 等助航对象的 native scale 分布;
- z12 中存在但 z11 消失的对象主要来自哪些 native scale;
- 20k LIGHTS 是否确实是主要来源;
- 当前 builder 是如何做 scale-region quilt 和 finer-scale coverage suppression 的。
10.2 不修改 importer
当前问题属于 PBF production 阶段。
除非出现新的直接证据,否则不要修改:
CM93 parser
geometry normalization
MySQL importer
raw source records
10.3 优先研究 navigation aid 独立 retention
优先方向:
navigation_marks 使用独立 scale ladder
而不是:
整个 z11 直接启用 20k/full detail
实现时应保持:
- stable FID 不变;
- composite relation 语义不变;
- 多 LIGHTS 合成逻辑不变;
- S-52 presentation 字段不退化;
- trace / report / hard gate 继续准确;
- 其他 source-layer 不被细尺度数据无意放大。
10.4 单 Tile A/B 验证
至少比较:
旧 z11
候选修复 z11
对应 z12 四个 child tiles
指标:
- navigation_marks stable FID retention;
- canonical_object_type 分布;
- 非 navigation layer feature count;
- PBF byte size;
- duplicate FID;
- hard gate;
- encoder drop;
- build report;
- trace consistency。
10.5 Japan 多区域抽样
正式冻结前至少抽样:
- 函馆;
- 仙台;
- 东京湾;
- 大阪湾;
- 广岛湾;
- 福冈;
- 唐津;
- 长崎;
- 那霸。
不能只凭福冈一片区域通过就宣布 Japan 修复完成。
10.6 Japan 全量重建
不要边全国构建边修改 policy。
应先冻结:
builder contract
Japan tile policy
mapping
audit tool
acceptance thresholds
然后再生成正式 Japan production plan 并全量构建。
11. Global CM95 恢复条件
Global CM95 不因为 Japan 局部修复通过就立即恢复。
建议至少满足:
- Japan z11 navigation aid retention 根因确认;
- Japan 修复实现完成;
- stable FID 不破坏;
- composite navigation aids 无重复;
- 非 navigation layer 无非预期变化;
- hard gate PASS;
- encoder drop = 0;
- PBF 体积增长在可接受范围;
- 多区域抽样通过;
- Japan 全量 production audit 通过;
- Japan release 完成;
- NavSea 真机低 Zoom 显示回归通过。
达到以上条件后,才允许讨论:
Global CM95 Production = RESUME
即使恢复全球计划,也应先把 Japan 修复抽象成 provider-neutral / production-safe contract,再逐区域扩大,不应直接把 Japan 特例硬编码到全球路径。
12. NavSea 项目边界
CM95 修复期间,NavSea 项目不要再修改以下模块来补偿 CM95 数据:
1/2/3/4 挡
Pickup
ChartDangerAlarmSource
CrossCursor
PbfLayerGroupConfig
MapLibre query compatibility
CM95 最终交付的 PBF 应满足现有 NavSea canonical Layer / property contract。
NavSea 只消费,不承担 CM95 PBF 数据补全和 zoom retention。
13. 当前状态摘要
NavSea CM95 canonical 接入:
基本通过
NavSea 1/2/3/4 挡:
真机通过
NavSea Pickup:
真机通过
NavSea ChartDanger contract:
已核对
Canonical Style filter 漏灯:
已排除
CM95 Japan z11 低 Zoom 航标保留:
已确认存在问题
Global CM95:
PAUSED
Japan PBF:
下一优先修复目标
实际工作机器:
X220
正式仓库:
/root/sourceserver/cm95