Files
CM95/docs/CM95到NavSea映射设计报告_v1.md

390 lines
8.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CM95 → NavSea PBF 映射设计报告 v1
日期:2026-09-03
状态:`PBF-02 / IMPLEMENTATION_DRAFT`
测试 AOI:`z10/914/385`
## 1. 本轮输入
CM95 MySQL AOI 审计:
```text
AOI Cells : 7
AOI Spatial Features : 3605
Object class/geom groups : 80
Attribute groups : 177
Feature samples : 600
```
现有 NavSea/NEWPEC 对照 PBF:
```text
z10 tiles : 1
z11 tiles : 4
z12 tiles : 16
total : 21
observed source-layers : 37
```
实际 extent:
```text
z10 : 4096
z11 : 4096
z12 : 1048576
```
因此 CM95 generator 不应把“所有 zoom 固定 extent=4096”当成既有生产事实。首版 generator 必须把 extent 作为显式策略,并在输出审计中记录实际值。
## 2. CM95 AOI 主要对象
当前 AOI 具备完整的安全对象闭环:
```text
WRECKS POINT : 480
DEPCNT LINE : 451
DEPARE AREA : 414
SBDARE POINT : 287
SLCONS LINE : 209
UWTROC POINT : 176
COALNE LINE : 171
LNDARE AREA : 159
SLCONS AREA : 119
LIGHTS POINT : 96
OBSTRN AREA : 70
ITDARE AREA : 69
```
同时存在 Beacon/Buoy、Bridge、overhead cable、submarine cable、pilot boarding、anchorage 等对象,可覆盖第一阶段 hard-gate。
## 3. 现有 NavSea PBF 实际契约
当前 21 张参考 PBF 中最主要的 source-layer:
```text
onshore_structure_line 12940
baseline_outline 2129
baseline_area 1146
bathymetry_line 1128
anchor_caution_hazard_point 897
depth_contour 821
hole_area 563
land_area 321
seabed_text_point 273
baseline_line 234
anchor_caution_hazard_area 172
anchor_caution_hazard_outline 172
onshore_structure_area 137
place_label_land 136
onshore_structure_point 124
```
当前 unified style 实际消费 37 个 NavSea source-layer。
参考 PBF 与 style 之间存在少量“PBF 有但当前 style 不消费”的历史层:
```text
depth_contour_overview
route_area
route_outline
```
因此 CM95 v1 不因为参考 PBF 中存在 `route_area` 就自动输出它。
例如 `FAIRWY` 首版保留在工程版,避免违反“只改 tile URL 即可使用当前 style”的目标。
## 4. 第一版映射覆盖
`cm95_to_navsea_v1.yaml` 已覆盖本 AOI 全部 80 个 `object_class + geometry_type` 组合。
映射状态(按组合数):
```text
MAPPED 33
ENGINEERING_ONLY 12
MAPPED_CONDITIONAL 11
REVIEW_STYLE_GAP 11
COMPOSITE 5
REVIEW_CONDITIONAL 4
ENGINEERING_COMPONENT 1
UNMAPPED_REVIEW 1
DERIVED_LABEL_ONLY 1
MAPPED_DERIVED_POINTS 1
```
可以直接进入映射/合成实现的 Feature 数:
```text
3239 / 3605 = 89.8%
```
其余对象没有静默丢弃,全部明确进入:
```text
REVIEW_CONDITIONAL
REVIEW_STYLE_GAP
ENGINEERING_ONLY
ENGINEERING_COMPONENT
UNMAPPED_REVIEW
```
正式 delivery 不会因为未映射而“假装成功”。
## 5. Hard-gate 映射
### DEPARE
```text
DEPARE AREA
→ baseline_area
→ DRVAL1 / DRVAL2
→ canonical depth range
→ chart_fill_style=depth_zone_*
```
原 polygon 不重建。
### DEPCNT
```text
DEPCNT LINE
→ depth_contour
VALDCO → least_depth_m
VALDCO → chart_label_text
```
### WRECKS
```text
WRECKS POINT
→ navigation_hazard_point
VALSOU present → wreck_surveyed
otherwise → wreck_submerged_dangerous
```
Area wreck 保持 area,不降级为 point,并额外派生 boundary 到 `navigation_hazard_outline`。
### UWTROC
```text
UWTROC POINT
→ navigation_hazard_point
WATLEV submerged → rock_submerged
WATLEV awash/drying → rock_awash
VALSOU → least_depth_m
```
必须保留水上/水下语义。
### OBSTRN
Point 与 Area 分开:
```text
POINT → navigation_hazard_point
AREA → navigation_hazard_area + derived outline
```
### FSHHAV
```text
FSHHAV POINT
→ anchor_caution_hazard_point
→ reef_fish
```
### BRIDGE / CBLOHD / TELPHC / PIPOHD
净空/架空安全对象使用现有:
```text
bridge_structure
clearance_limit_line
clearance_limit_point
```
存在 `VERCLR` 时才写净空数值;没有值时不伪造。
## 6. 助航对象必须合成,而不是简单逐对象输出
本轮最重要的新结论是:
CM93 中:
```text
LIGHTS
BCNLAT
BCNSPP
BOYSPP
RTPBCN
TOWERS
_extgn
```
可能是同一个现实助航标的多个对象组件。
AOI 样本已经观察到共享:
```text
cell_id + attributes._cm93_relation20_raw
```
并且共享 relation20 的样本坐标完全一致。
样本证据包括:
- cell `693` relation20 `2273` → `BCNLAT, LIGHTS`;坐标组数 `1`
- cell `693` relation20 `2272` → `BCNLAT, LIGHTS`;坐标组数 `1`
- cell `693` relation20 `2254` → `BCNLAT, LIGHTS`;坐标组数 `1`
- cell `693` relation20 `2266` → `LIGHTS, _extgn`;坐标组数 `1`
- cell `693` relation20 `2270` → `LIGHTS, _extgn`;坐标组数 `1`
- cell `693` relation20 `2276` → `LIGHTS, _extgn`;坐标组数 `1`
- cell `693` relation20 `2239` → `LIGHTS, TOWERS`;坐标组数 `1`
- cell `693` relation20 `2241` → `LIGHTS, TOWERS`;坐标组数 `1`
因此 CM95 PBF Adapter 第一版采用:
```text
primary composition key =
cell_id
+ _cm93_relation20_raw
```
而不是仅凭经纬度 proximity 合并。
规则:
1. relation20 相同且坐标一致 → 合成一个 `navigation_marks` Feature;
2. LIGHTS 的灯色、灯质、周期、高度、射程、扇区等属性并入基体;
3. Beacon/Buoy/Tower 提供主体 symbol 语义;
4. `_extgn` 只作为组件/trace,不单独 delivery;
5. relation20 缺失时才允许进入 fallback;
6. fallback 必须被审计标记,不能静默按邻近点合并。
在真正写 generator 前,需要用全 AOI 数据验证 relation20,而不是只依赖 600 条采样记录。
本包已经提供:
```text
tools/cm95_nav_aid_relation_audit_v1.py
```
## 7. Light 字段
本 AOI 实际出现的 CM93/S-57 `COLOUR` 值:
```text
1 → white
3 → red
4 → green
6 → yellow
```
首版只对当前实际出现值建立冻结映射;其它值先进入 mapping gap,不猜值。
`LIGHTS` 输出至少包括:
```text
light_color_code
chart_label_text
chart_label_subtext
chart_text_style
chart_text_color
light_sector_mode
chart_icon_image
```
灯略记由:
```text
LITCHR
SIGGRP
SIGPER
COLOUR
HEIGHT
VALNMR
```
组合生成。
## 8. Sounding
当前 AOI 有 `SOUNDG` Feature,并由 `chart_sounding_point` 保存多个真实 sounding points。
因为当前 style 没有独立 `sounding_point` source-layer,v1 采用:
```text
chart_sounding_point
→ derived point label
→ seabed_text_point
```
这是额外 render artifact,不修改/替换数据库里的原 sounding。
## 9. Stable identity
禁止把:
```text
chart_feature.id
```
当成长期 PBF identity。
v1 冻结 source identity:
```text
cm95:
dataset_id
+ source_relative_path
+ source_record_index
+ geometry_role
```
下一阶段 generator 会在此基础上建立稳定 FID manifest,再接现有 NavSea numeric feature-id 体系。
## 10. 当前尚未正式进入 delivery 的内容
主要包括:
```text
_texto 文本归属 land/sea/facility 尚需关联判断
BUISGL POINT 当前 style 表达不明确
行政边界类 当前 style 不需要
FAIRWY 参考 PBF 有 route_area,但当前 unified style 不消费
若干一般陆上点对象 不属于 hard-gate,后续补 symbol 映射
```
这些对象全部保留在工程 trace / `cm95_unmapped`,没有删除。
## 11. 下一步门禁
先执行 relation20 全 AOI 审计。
通过条件:
```text
LIGHTS relation20 可覆盖主要灯标
relation group 不出现明显坐标冲突
跨 Cell 不发生错误合并
无法合并的 LIGHTS 数量明确
```
通过后进入:
```text
PBF-03
CM95 MySQL → z10/914/385 单 tile generator
```
第一版 generator 将只实现当前已经冻结的映射,并同时输出:
```text
delivery PBF
engineering PBF / trace
cm95_unmapped report
FID audit
sprite closure audit
object preservation audit
```