390 lines
8.0 KiB
Markdown
390 lines
8.0 KiB
Markdown
# 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
|
||
```
|