feat: add S-52 presentation rule engine

This commit is contained in:
OpenAI Codex
2026-09-17 07:43:22 +08:00
parent ef36ec3599
commit bbe006b3d6
8 changed files with 645 additions and 19 deletions

View File

@@ -0,0 +1,50 @@
# CM95 S-52 Presentation 引擎阶段报告 v1
日期:2026-09-17
## 本阶段完成
- 建立 `S-52 INST → Presentation Rule IR` 通用解释器。
- 按 OpenCPN `StringToRules/SCANFWRD` 容错语义解析历史 Presentation Library 数据。
- 支持 `SY/LS/LC/AC/AP/TX/TE/CS`,并预留 CSP 生成的 `CA/MP`。
- OpenCPN 当前 `chartsymbols.xml` 3057 条 Lookup 全量解析:3057/3057,失败 0。
- S52 Lookup 从 Point 扩展到 Point/Line/Area:Paper/Lines/Plain 或 Symbolized。
- 新增通用诊断 fallback layer:`s52_points/s52_lines/s52_areas`。
## 已落地 CSP
### DEPARE01 / DEPARE02
按 OpenCPN 行为生成区域显示规则;福冈湾 z12/3531/1641 实测:
- DEPARE/DRGARE:172 个。
- DEPVS:47。
- DEPMS:68。
- DEPMD:33。
- DEPDW:24。
- DRGARE 4 个同时得到 `AP(DRGARE01)` 与虚线边界。
### DEPCNT02
配置默认 safety contour=3m;数据不存在精确 3m contour 时,自动选择下一个更深的实际 contour。
福冈湾实测:
- DEPCNT:188 条。
- 5m 被选择为实际 safety contour。
- DEPSC(安全等深线,宽 2):91 条。
- DEPCN(普通等深线,宽 1):97 条。
## 福冈湾完整 S-52 覆盖
同一 z12 tile 共 3293 个输出 Feature,其中 1264 个已经取得 S-52 Lookup/Presentation 属性。
新增通用 fallback 中 `s52_points=42`、`s52_areas=4`;原有业务 layer 继续保留,不重复制造已有对象。
浏览器验证使用同一 PBF,已确认四级深度色、安全等深线、测深数字、底质缩写、地名和更多 S-52 航标实际渲染。
## 尚未完成
- LIGHTS05/LIGHTS06 的 `CA` 灯弧最终 renderer。
- SOUNDG02/SOUNDG03 的完整 S-52 sounding symbol 组合。
- SBDARE 底质长文本/组合格式。
- OBSTRN/WRECKS/UDWHAZ、RESARE/RESTRN、SLCONS/QUAPOS 等 CSP。
- 正式 `style.json` compiler;当前 Web 页面仍是诊断 Style。