9.7 KiB
CM95 全球计划暂停与 Japan PBF Canonical 归一化缺口修复上下文 v2
本文取代 v1 中关于“低 Zoom retention 是主因”的判断。
后续同 Zoom、同 Tile、同 Feature 审计已经证明:相当一部分 S-52 页面可见、NavSea canonical 页面不可见的对象,实际上仍存在于同一份 PBF 中,只是停留在 S-52 fallback source-layer,没有进入 NavSea canonical Layer Contract。
1. 当前决定
Global CM95 继续暂停:
Global CM95 Production = PAUSED
暂停决定继续有效,但原因修正为:
- Japan 正式 PBF 中仍存在大量 S-52 fallback 对象;
- 完整 S-52 Style 可以正常显示这些对象;
- NavSea canonical Style 不消费这些 fallback layer;
- 因此 CM95 → NavSea canonical normalization 尚未完整;
- 在该缺口修复并验证前,不应把当前规则扩展到全球。
当前 Japan 优先级:
确认 S-52 fallback → canonical 缺口
→ 完善 canonical mapping / composition
→ 同 Zoom S-52 vs canonical 对照
→ 多区域验证
→ NavSea 真机回归
→ 再判断是否仍有独立 Zoom retention 问题
2. 关键反证
用户提供的 Japan S-52 截图显示:
- 较大 Zoom 可见大量航标;
- 较小 Zoom 仍然可见大量航标、浮标、顶标、灯标和其他 S-52 符号。
对应 X220 compare server:
web/japan_compare_server.py
实际使用:
Release:
cm95-d1-62a85bd40d3a-ae61b8866e80
PBF:
build/releases-s52-v2/cm95-d1-62a85bd40d3a-ae61b8866e80/pbf/delivery
S-52 Style:
build/s52_style_compiler_japan_compare_v1/style.s52.json
因此不能再简单用“NavSea 低 Zoom 看不到”推导为“PBF 里没有”。
3. 同 Zoom / 同 Tile 审计
审计对象:
Tile:
11/1765/820
同一个 z11 tile 中,带 S-52 symbol code 或 light symbol code 的 feature 共:
374
其中:
navigation_marks:
77
这 77 个对象:
chart_icon_image: 77/77
canonical_object_type: 77/77
说明已经成功 canonical 化的 navigation_marks 本身基本正常。
4. 真正的缺口:s52_points
同一个 z11 tile 中:
s52_points 中带 S-52 symbol 的对象:
130
而 NavSea canonical Style 对:
source-layer = s52_points
的 Layer 数量为:
0
所以这些对象:
- S-52 Style 可以显示;
- NavSea canonical Style 根本不会显示。
这是“同一个 PBF、同一个 Zoom,S-52 页面对象更多”的直接原因之一。
5. s52_points 中的重要对象
该 z11 tile 的 130 个 s52_points symbol 中:
fishing_facility 72
s52_boylat 19
s52_topmar 18
s52_radrfl 14
s52_marcul 3
s52_boycar 2
s52_cgusta 1
s52_mstcon 1
常见 S-52 symbol code:
FSHHAV01
RADRFL03
TOPMAR33
TOPMAR22
TOPMAR13
TOPMAR05
TOPMAR01
BOYCON60
BOYCON61
BOYPIL60
BOYPIL61
BOYPIL68
BOYSPR60
BOYSPR61
MARCUL02
CGUSTA02
MSTCON04
特别是 BOYLAT、TOPMAR、BOYCAR、RADRFL,本身就是视觉上容易被理解为航标/浮标/顶标相关对象的类别。
6. Trace 已确认:不是被 Zoom 删除
正式 trace:
build/releases-s52-v2/
cm95-d1-62a85bd40d3a-ae61b8866e80/
reports/delivery/11/1765/820.trace.jsonl
BOYLAT 示例:
output_layer:
s52_points
native_scale:
50000
mapping_rule_id:
S52-FALLBACK-BOYLAT
mapping_status:
S52_FALLBACK
TOPMAR 示例:
output_layer:
s52_points
native_scale:
50000
mapping_rule_id:
S52-FALLBACK-TOPMAR
mapping_status:
S52_FALLBACK
RADRFL 示例:
output_layer:
s52_points
native_scale:
50000
mapping_rule_id:
S52-FALLBACK-RADRFL
mapping_status:
S52_FALLBACK
BOYCAR 示例:
output_layer:
s52_points
mapping_rule_id:
S52-FALLBACK-BOYCAR
mapping_status:
S52_FALLBACK
这些对象在 z11 中真实存在,而且 native_scale=50000。
所以至少这批对象与“z11 不读取 20k 数据”无关。
7. 正式 mapping 中没有对应 canonical 规则
当前:
config/mappings/cm95_to_navsea_v1.yaml
中没有以下正式 canonical mapping:
BOYLAT
TOPMAR
RADRFL
BOYCAR
MARCUL
CGUSTA
MSTCON
所以 Builder 在 mapping.resolve 找不到规则后进入 S-52 fallback 路径。
8. Builder 当前 fallback 行为
当前 Builder 中的 S-52 fallback 会把无 canonical mapping、但有 S-52 lookup 的对象写入:
POINT → s52_points
LINE → s52_lines
AREA → s52_areas
并设置:
canonical_object_type = s52_<object_class>
mapping_rule_id = S52-FALLBACK-<object_class>
mapping_status = S52_FALLBACK
例如:
BOYLAT → s52_points / s52_boylat
TOPMAR → s52_points / s52_topmar
RADRFL → s52_points / s52_radrfl
这保证完整 S-52 Style 不丢对象,但 NavSea canonical Style 不消费这些 layer,因此看不到。
9. 另一个例子:FSHHAV
正式 mapping 中 CM95-023:
CM95 class:
FSHHAV
target_source_layer:
s52_points
canonical_object_type:
fishing_facility
mapping_status:
MAPPED
style_fields:
空
同一个 z11 tile 中这类对象有 72 个。
它们通过:
s52_symbol_code = FSHHAV01
在 S-52 Style 中显示,但没有 chart_icon_image,因此 canonical Style 不显示。
所以问题不是 BOYLAT 的单一特例,而是更广泛的:
S-52 presentation layer
vs
NavSea canonical layer contract
边界不完整。
10. 对 v1 Zoom retention 判断的修正
v1 曾基于 z12→z11 stable FID / 空间匹配推断低 Zoom 有对象被裁掉。
现在确认,这种统计不能直接解释为“同一个现实对象被 Builder 删除”。
原因包括:
- 不同 native scale 可能使用不同 feature/FID 表达同一现实对象;
- S-52 fallback 对象可能存在于另一个 source-layer;
- canonical Style 没有消费 fallback layer;
- 类型和位置可能因不同 cell / native scale 发生变化。
因此:
跨 Zoom stable FID retention
只能作为审计指标
不能单独证明对象被删除
当前不要据此修改 Japan z11 scale ladder。
11. 当前最可能主根因
当前证据最强的主链路:
CM95 PBF 中存在正式 S-52 可显示对象
↓
部分对象只有 S-52 presentation semantics
↓
Builder 输出到 s52_points / s52_lines / s52_areas
↓
NavSea canonical Style 不消费这些 Layer
↓
NavSea 看起来“丢对象”
所以当前问题首先归类为:
CM95 → NavSea canonical normalization completeness
而不是:
PBF Zoom generalization
12. CM95 项目下一步
12.1 暂时不要先改 Zoom policy
当前不要因为 v1 的判断直接修改:
z11 scale ladder
20k retention
navigation aid retention ladder
必须先完成 canonical completeness audit。
12.2 建立同 Zoom completeness audit
对同一个 PBF tile:
完整 S-52 Style 可显示 feature
vs
NavSea canonical Style 可显示 feature
逐 feature 分类:
A. 已 canonical,能显示
B. 已 canonical,但 Style 漏匹配
C. S52_FALLBACK,无 canonical mapping
D. MAPPED,但仍只保留在 s52_points/s52_lines/s52_areas
E. 需要 composite/relation 后才应进入 canonical
F. 明确不应该进入 NavSea canonical
12.3 优先审计类别
至少:
BOYLAT
TOPMAR
BOYCAR
RADRFL
MARCUL
CGUSTA
MSTCON
FSHHAV
特别是:
BOYLAT
TOPMAR
BOYCAR
应检查是否应成为 canonical navigation_marks 的组成部分或独立标准对象。
不能简单把全部 s52_points 直接显示到 NavSea。
12.4 必须保持 composite 语义
当前 navigation_marks 中已经存在大量:
mapping_rule_id = CM95-NAV-COMPOSITE
mapping_status = COMPOSITE
所以 BOYLAT / TOPMAR 等是否独立输出,必须考虑:
- 是否已经被 composite 消费;
- relation20;
- 浮标 + 顶标组合;
- 灯 + 标体组合;
- 是否会重复显示;
- stable FID;
- S-52 presentation order。
13. 历史线索
仓库历史/实验 trace 中存在某些:
S52-FALLBACK-BOYLAT
S52-FALLBACK-TOPMAR
曾输出到:
navigation_marks
而当前正式 Japan release 同类对象输出到:
s52_points
这说明项目历史上可能已经尝试过相关整合逻辑。
CM95 项目可以调查这些历史实现及其放弃/调整原因,但不要直接恢复旧代码。
14. Global 暂停原因更新
Global CM95 继续暂停。
正式原因更新为:
Japan 正式 Release 已证明:
S-52 presentation coverage
大于
NavSea canonical coverage
也就是 canonical normalization 尚未完整。
恢复 Global 之前至少需要:
- Japan canonical completeness audit 完成;
- 安全相关 S52_FALLBACK 分类完成;
- canonical mapping/composite 规则冻结;
- 同 Zoom S-52 vs canonical 重要对象覆盖通过;
- 不产生 duplicate navigation mark;
- stable FID 不破坏;
- Pickup / ChartDanger 所需字段完整;
- Japan 多区域抽样通过;
- NavSea 真机回归通过;
- 再单独判断是否仍有真正 Zoom retention 问题。
15. NavSea 边界保持不变
NavSea 项目不要为了 CM95 修改:
1/2/3/4 挡
Pickup
ChartDangerAlarmSource
CrossCursor
PbfLayerGroupConfig
MapLibre query logic
正确方向:
CM95 项目完善 canonical PBF contract
→ NavSea 原逻辑直接消费
16. 当前结论摘要
Global CM95:
PAUSED
Japan PBF:
对象并非简单低 Zoom 消失
正式 z11 PBF:
存在大量 S-52 可显示对象
navigation_marks canonical:
已映射对象基本正常
主要缺口:
s52_points / s52_lines / s52_areas 中的
S52_FALLBACK / presentation-only 对象
没有进入 NavSea canonical contract
最优先任务:
同 Zoom canonical completeness audit
当前不要先做:
z11 scale ladder 修改
20k 全局下放
navigation aid retention policy