8.0 KiB
CM95 → NavSea PBF 映射设计报告 v1
日期:2026-09-03
状态:PBF-02 / IMPLEMENTATION_DRAFT
测试 AOI:z10/914/385
1. 本轮输入
CM95 MySQL AOI 审计:
AOI Cells : 7
AOI Spatial Features : 3605
Object class/geom groups : 80
Attribute groups : 177
Feature samples : 600
现有 NavSea/NEWPEC 对照 PBF:
z10 tiles : 1
z11 tiles : 4
z12 tiles : 16
total : 21
observed source-layers : 37
实际 extent:
z10 : 4096
z11 : 4096
z12 : 1048576
因此 CM95 generator 不应把“所有 zoom 固定 extent=4096”当成既有生产事实。首版 generator 必须把 extent 作为显式策略,并在输出审计中记录实际值。
2. CM95 AOI 主要对象
当前 AOI 具备完整的安全对象闭环:
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:
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 不消费”的历史层:
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 组合。
映射状态(按组合数):
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 数:
3239 / 3605 = 89.8%
其余对象没有静默丢弃,全部明确进入:
REVIEW_CONDITIONAL
REVIEW_STYLE_GAP
ENGINEERING_ONLY
ENGINEERING_COMPONENT
UNMAPPED_REVIEW
正式 delivery 不会因为未映射而“假装成功”。
5. Hard-gate 映射
DEPARE
DEPARE AREA
→ baseline_area
→ DRVAL1 / DRVAL2
→ canonical depth range
→ chart_fill_style=depth_zone_*
原 polygon 不重建。
DEPCNT
DEPCNT LINE
→ depth_contour
VALDCO → least_depth_m
VALDCO → chart_label_text
WRECKS
WRECKS POINT
→ navigation_hazard_point
VALSOU present → wreck_surveyed
otherwise → wreck_submerged_dangerous
Area wreck 保持 area,不降级为 point,并额外派生 boundary 到 navigation_hazard_outline。
UWTROC
UWTROC POINT
→ navigation_hazard_point
WATLEV submerged → rock_submerged
WATLEV awash/drying → rock_awash
VALSOU → least_depth_m
必须保留水上/水下语义。
OBSTRN
Point 与 Area 分开:
POINT → navigation_hazard_point
AREA → navigation_hazard_area + derived outline
FSHHAV
FSHHAV POINT
→ anchor_caution_hazard_point
→ reef_fish
BRIDGE / CBLOHD / TELPHC / PIPOHD
净空/架空安全对象使用现有:
bridge_structure
clearance_limit_line
clearance_limit_point
存在 VERCLR 时才写净空数值;没有值时不伪造。
6. 助航对象必须合成,而不是简单逐对象输出
本轮最重要的新结论是:
CM93 中:
LIGHTS
BCNLAT
BCNSPP
BOYSPP
RTPBCN
TOWERS
_extgn
可能是同一个现实助航标的多个对象组件。
AOI 样本已经观察到共享:
cell_id + attributes._cm93_relation20_raw
并且共享 relation20 的样本坐标完全一致。
样本证据包括:
- cell
693relation202273→BCNLAT, LIGHTS;坐标组数1 - cell
693relation202272→BCNLAT, LIGHTS;坐标组数1 - cell
693relation202254→BCNLAT, LIGHTS;坐标组数1 - cell
693relation202266→LIGHTS, _extgn;坐标组数1 - cell
693relation202270→LIGHTS, _extgn;坐标组数1 - cell
693relation202276→LIGHTS, _extgn;坐标组数1 - cell
693relation202239→LIGHTS, TOWERS;坐标组数1 - cell
693relation202241→LIGHTS, TOWERS;坐标组数1
因此 CM95 PBF Adapter 第一版采用:
primary composition key =
cell_id
+ _cm93_relation20_raw
而不是仅凭经纬度 proximity 合并。
规则:
- relation20 相同且坐标一致 → 合成一个
navigation_marksFeature; - LIGHTS 的灯色、灯质、周期、高度、射程、扇区等属性并入基体;
- Beacon/Buoy/Tower 提供主体 symbol 语义;
_extgn只作为组件/trace,不单独 delivery;- relation20 缺失时才允许进入 fallback;
- fallback 必须被审计标记,不能静默按邻近点合并。
在真正写 generator 前,需要用全 AOI 数据验证 relation20,而不是只依赖 600 条采样记录。
本包已经提供:
tools/cm95_nav_aid_relation_audit_v1.py
7. Light 字段
本 AOI 实际出现的 CM93/S-57 COLOUR 值:
1 → white
3 → red
4 → green
6 → yellow
首版只对当前实际出现值建立冻结映射;其它值先进入 mapping gap,不猜值。
LIGHTS 输出至少包括:
light_color_code
chart_label_text
chart_label_subtext
chart_text_style
chart_text_color
light_sector_mode
chart_icon_image
灯略记由:
LITCHR
SIGGRP
SIGPER
COLOUR
HEIGHT
VALNMR
组合生成。
8. Sounding
当前 AOI 有 SOUNDG Feature,并由 chart_sounding_point 保存多个真实 sounding points。
因为当前 style 没有独立 sounding_point source-layer,v1 采用:
chart_sounding_point
→ derived point label
→ seabed_text_point
这是额外 render artifact,不修改/替换数据库里的原 sounding。
9. Stable identity
禁止把:
chart_feature.id
当成长期 PBF identity。
v1 冻结 source identity:
cm95:
dataset_id
+ source_relative_path
+ source_record_index
+ geometry_role
下一阶段 generator 会在此基础上建立稳定 FID manifest,再接现有 NavSea numeric feature-id 体系。
10. 当前尚未正式进入 delivery 的内容
主要包括:
_texto 文本归属 land/sea/facility 尚需关联判断
BUISGL POINT 当前 style 表达不明确
行政边界类 当前 style 不需要
FAIRWY 参考 PBF 有 route_area,但当前 unified style 不消费
若干一般陆上点对象 不属于 hard-gate,后续补 symbol 映射
这些对象全部保留在工程 trace / cm95_unmapped,没有删除。
11. 下一步门禁
先执行 relation20 全 AOI 审计。
通过条件:
LIGHTS relation20 可覆盖主要灯标
relation group 不出现明显坐标冲突
跨 Cell 不发生错误合并
无法合并的 LIGHTS 数量明确
通过后进入:
PBF-03
CM95 MySQL → z10/914/385 单 tile generator
第一版 generator 将只实现当前已经冻结的映射,并同时输出:
delivery PBF
engineering PBF / trace
cm95_unmapped report
FID audit
sprite closure audit
object preservation audit