feat: normalize CM93 objects for S-52 presentation

This commit is contained in:
OpenAI Codex
2026-09-17 14:56:19 +08:00
parent 089e7af6ee
commit c72310f35a
3 changed files with 451 additions and 4 deletions

View File

@@ -0,0 +1,120 @@
# CM95 S-52 全国对象规范化阶段报告 v1
## 1. 目标
本阶段沿 OpenCPN CM93 `CreateS57Obj()` 与 S-52 Presentation Lookup 流程,补齐 CM93 私有/扩展对象类到标准 S-57/S-52 Presentation 语义的规范化。
范围为 Dataset 1 日本数据。本阶段不重建正式 release,只进行全库只读审计、单 Tile 回归和 Presentation 映射实现。
## 2. 参考资源
- CM93 对象字典:`/root/sourceserver/cm95-data/CM93JAPAN/CM93OBJ.DIC`
- CM93 属性字典:`/root/sourceserver/cm95-data/CM93JAPAN/CM93ATTR.DIC`
- OpenCPN `chartsymbols.xml`
- OpenCPN `S52RAZDS.RLE`
- OpenCPN `cm93.cpp` 中的对象替代逻辑
- S-57 object class catalog 与 `attdecode.csv`
- 完整 3057 条 Presentation Lookup IR
## 3. 本阶段新增的主要规范化
- `ITDARE → DEPARE`
- `FSHHAV → FSHFAC`
- `BRTFAC → BERTHS`
- `TNKCON → SILTNK`
- `PRDINS → PRDARE`
- `ROADPT → ROADWY`
- `VEGARE → VEGATN`
- `SLTPAN → LNDRGN + CATLND=15`
- `TELPHC → CONVYR + CATCON=1`
- `DIFFUS → OBSTRN + CATOBS=3`
- `SLIPWY → SLCONS + CATSLC=13`
- `LNDSTS → SLCONS + CATSLC=11`
- `RMPARE → SLCONS + CATSLC=12`
- `DYKARE / DYKCRW → DYKCON`
- `SILBUI → SILTNK + CATSIL=1`
Landmark 类按 S-52 `LNDMRK + CATLMK` 规范化:
- `CHIMNY → CATLMK=3`
- `DSHAER → CATLMK=4`
- `FLGSTF → CATLMK=5`
- `FLASTK → CATLMK=6`
- `MSTCON → CATLMK=7`
- `WNDMIL → CATLMK=18`
- `WIMCON → CATLMK=19`
另外保留 OpenCPN Presentation Library 的扩展类大小写别名:
- `RIVBNK → rivbnk`
- `CANBNK → canbnk`
## 4. 全国审计结果
Dataset 1 共扫描 `1,282,431` 个 `chart_feature`。
最终 v7 审计:
- S-52 Lookup 命中:`1,246,817`
- 全对象表观命中率:`97.2229%`
- `unsupported_csp_counts = {}`
- 条件存在但属性不匹配:`0`
- no-candidate:`35,614`
其中几何可绘制对象总数为 `1,251,374`。
## 5. 不应计入普通 Presentation 缺口的对象
以下三类合计 `4,502` 个,不能作为“漏画”处理:
- `NATARE`:`1,516`,OpenCPN Presentation Library 明确为 `No data` 且 instruction 为空。
- `$COMPS`:`1,494`,属于制图罗盘辅助对象。
- `M_PROD`:`1,492`,属于生产信息元数据对象。
剔除上述对象后,需要普通 Presentation 的对象数为 `1,246,872`,其中已命中 `1,246,817`。
有效覆盖率:`99.9956%`。
剩余未安全规范化的普通地物仅 `55` 个。
## 6. 剩余 55 个语义复核项
- `TREPNT` Point:19
- `BUIREL` Area:13
- `TOWERS` Area:8
- `HILARE` Area:5
- `CEMTRY` Point/Area:7
- `RADDOM` Point:3
这些对象没有足够证据支持无损的一对一标准化。本阶段明确保留,不为追求数字上的 100% 而制造猜测映射。
后续如处理,应继续以 CM93 原始属性、S-57 类定义、S-52 Lookup 条件和 OpenCPN 实际行为共同确认。
## 7. 福冈湾回归
重新生成 `z12/3531/1641` v10 normalized PBF:
- Feature:`3293`
- Layer:`23`
- `hard_gate_unmapped = []`
- unresolved CSP:`0`
- `SOUNDG02 = 1881`
- `LIGHTS05 = 62`
- `OBSTRN04 = 19`
浏览器实际加载 `presentation_v10.html` 后进入 READY;灯火、灯弧、测深、危险物、岸线构造和原有主图层均正常。
浏览器唯一 404 为 `/favicon.ico`,与地图资源无关。
## 8. 结论
本阶段确认:CM95 当前主要 Presentation 缺口已经不再是大规模对象类未映射问题。
经过 CM93→S-57/S-52 对象规范化后,全国普通可绘制对象的有效 S-52 Lookup 覆盖率达到 `99.9956%`,且当前实际出现的 CSP 类型均已被 Resolver 支持。
下一阶段重点应从“补对象类”转向:
1. 对剩余 55 个小样本对象做语义复核;
2. 检查已命中 Lookup 的 `TE/TX/LC/AP` 是否全部被 MapLibre 后端完整执行;
3. 检查 Sprite/vector-only symbol 资源闭合;
4. 用 OpenCPN 对照图做视觉差异审计,而不是继续扩大类替换表。