Files
CM95/docs/CM95_全球计划暂停与Japan_PBF_Canonical归一化缺口修复上下文_v2.md

9.7 KiB
Raw Blame History

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 删除”。

原因包括:

  1. 不同 native scale 可能使用不同 feature/FID 表达同一现实对象;
  2. S-52 fallback 对象可能存在于另一个 source-layer;
  3. canonical Style 没有消费 fallback layer;
  4. 类型和位置可能因不同 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 之前至少需要:

  1. Japan canonical completeness audit 完成;
  2. 安全相关 S52_FALLBACK 分类完成;
  3. canonical mapping/composite 规则冻结;
  4. 同 Zoom S-52 vs canonical 重要对象覆盖通过;
  5. 不产生 duplicate navigation mark;
  6. stable FID 不破坏;
  7. Pickup / ChartDanger 所需字段完整;
  8. Japan 多区域抽样通过;
  9. NavSea 真机回归通过;
  10. 再单独判断是否仍有真正 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