feat: add Kyushu semantic icon test delivery

This commit is contained in:
OpenAI Codex
2026-08-06 17:44:22 +08:00
parent 35d713993f
commit e52328b3f5
18 changed files with 10763 additions and 0 deletions

View File

@@ -0,0 +1,16 @@
[
{
"id": "hakata_kyushu_icon_v1",
"label": "博多港九州语义图标测试",
"center": [130.335, 33.6385],
"radius_nm": 10,
"zoom_levels": [10, 12]
},
{
"id": "karatsu_kyushu_icon_v1",
"label": "唐津九州语义图标测试",
"center": [129.9697, 33.4425],
"radius_nm": 5,
"zoom_levels": [10, 12]
}
]

View File

@@ -0,0 +1,156 @@
# NavSea 语义图标替换表-v1
状态:设计稿,尚未写入 PBF、style 或 sprite。
基线:
- PBF`/home/wwwroot/pbf-delivery-full-20260418-rebuild`
- style`src/pbf/style.navsea-delivery-full-semantic-extentfix.json`
- sprite`/mnt/sda1/www/newpec/sprite-semantic/sprite`
## 1. 统一规则
PBF、style 和 `sprite.json` 使用同一个短语 ID。PBF 中建议使用:
```text
icon_id普通点状图标
arc_id灯弧图标
```
`class_code` 继续保留用于对象追溯,但不再被 style 用来拼接图标名称。
颜色缩写:
| 缩写 | 含义 |
|---|---|
| `G` | 绿色 |
| `R` | 红色 |
| `Y` | 黄色 |
| `W` | 白色 |
| `B` | 蓝色 |
| `YW` | 黄/白组合 |
## 2. 灯弧
| 当前 key | 新 ID | 条件/含义 |
|---|---|---|
| `arc-daytime-m1` | `arc_G` | 绿色闭合灯弧 |
| `arc-daytime-m2` | `arc_R` | 红色闭合灯弧 |
| `arc-daytime-m3` | `arc_YW` | 黄/白闭合灯弧 |
| `arc-daytime-04027289` | `arc_open_YW` | `coastal_lighthouse_over_15m``light_sector_mode=sector` |
普通灯弧按 `light_color_code` 选择 `arc_G``arc_R``arc_YW`;扇弧条件优先级最高。
## 3. 航标、灯塔、浮标
| 当前 key | 新 ID | 含义 |
|---|---|---|
| `symbol-daytime-300` | `lt_cst` | 沿岸灯台 |
| `symbol-daytime-301` | `lt_hbr` | 港湾灯台 |
| `symbol-daytime-302` | `lt_bkw` | 防波堤灯台 |
| `symbol-daytime-303` | `lt_min` | 小型灯 |
| `symbol-daytime-30500001` | `lt_lead_a` | 导标变体 A |
| `symbol-daytime-30500002` | `lt_lead_b` | 导标变体 B |
| `symbol-daytime-30500003` | `lt_lead_c` | 导标变体 C |
| `symbol-daytime-30700001` | `lt_up_G` | 绿色上向灯 |
| `symbol-daytime-30700002` | `lt_up_R` | 红色上向灯 |
| `symbol-daytime-30700003` | `mk_lead_c` | 导标变体 |
| `symbol-daytime-308` | `mk_lead_v` | 导标变体 |
| `symbol-daytime-310` | `lt_bcn` | 灯标 |
| `symbol-daytime-320` | `bu_lit` | 灯浮标 |
| `symbol-daytime-321` | `bu_gen` | 普通浮标 |
| `symbol-daytime-323` | `bu_pil` | 圆柱/柱型浮标 |
| `symbol-daytime-325` | `bu_can` | 圆筒型浮标 |
| `symbol-daytime-327` | `bu_lat` | 桁架型浮标 |
| `symbol-daytime-335359` | `mk_vais` | V-AIS 航标 |
| `symbol-daytime-719` | `an_quar` | 检疫锚地 |
现有 style 中的别名也统一归并:
| 当前 key | 新 ID |
|---|---|
| `harbor_lighthouse` | `lt_hbr` |
| `breakwater_lighthouse` | `lt_bkw` |
## 4. 危险物与鱼礁
| 当前 class_code / key | 新 ID | 含义 |
|---|---|---|
| `401``402``403` / `symbol-daytime-401` | `hz_rock_awash` | 水上岩、干出岩、洗岩组 |
| `404` / `symbol-daytime-404` | `hz_rock_sub` | 暗岩 |
| `405` / `symbol-daytime-405` | `hz_danger_clear` | 扫海后的危险物 |
| `409` / `symbol-daytime-409` | `hz_danger_iso` | 孤立危险物 |
| `410` / `symbol-daytime-410` | `hz_wreck_hull` | 船体露出沉船 |
| `412` / `symbol-daytime-412` | `hz_wreck_sub` | 危险全沉没船 |
| `413``415` / `symbol-daytime-413` | `hz_wreck_survey` | 测量/调查后的沉船 |
| `420` / `symbol-daytime-420` | `hz_foul` | 险恶物 |
| `421` / `symbol-daytime-421` | `hz_sandwave` | 沙波 |
| `422` / `symbol-daytime-422` | `hz_overfall` | 急潮、波纹、激潮 |
| `424` / `symbol-daytime-424` | `hz_whirl` | 渦流 |
| `425` / `symbol-daytime-425` | `hz_seaweed` | 海草 |
| `427` / `symbol-daytime-427` | `hz_obst` | 障碍物 |
| `428` / `symbol-daytime-428` | `hz_reef` | 鱼礁 |
| `429` / `symbol-daytime-429` | `hz_reef_danger` | 危险鱼礁 |
| `431` / `symbol-daytime-431` | `hz_tower` | 塔、橹、测台 |
| `432` / `symbol-daytime-432` | `hz_pile` | 墩柱、桩、杭 |
| `433` / `symbol-daytime-433` | `hz_dolphin` | 系缆墩 |
| `434` / `symbol-daytime-434` | `hz_outfall` | 海底设施、排水口、取水口 |
## 5. 陆上地标
这些图标由 `onshore_structure_point``class_code` 生成,必须在重建 PBF 时直接写入 `icon_id`,不能继续由 style 动态拼接编号。
| class_code | canonical_object_type | 新 ID |
|---:|---|---|
| 640 | `chimney` | `lm_chim` |
| 650 | `tower_yagura_windmill` | `lm_twr` |
| 660 | `maritime_office` | `lm_mar` |
| 661 | `fishing_cooperative` | `lm_fish` |
| 662 | `customs_office` | `lm_cus` |
| 680 | 陆上显著物(观览车等) | `lm_prom` |
| 681 | `mountain_top` | `lm_mtn` |
| 682 | 管制信号所 | `lm_ctrl` |
| 698 | `other_landmark_monument` | `lm_mon` |
## 6. 当前 PBF 中的直接图标值
当前全国 Full PBF 实际出现的 `chart_icon_image` 值,均应落入本表:
```text
symbol-daytime-301
symbol-daytime-303
symbol-daytime-30500001
symbol-daytime-30500002
symbol-daytime-30500003
symbol-daytime-30700003
symbol-daytime-308
symbol-daytime-310
symbol-daytime-320
symbol-daytime-321
symbol-daytime-323
symbol-daytime-325
symbol-daytime-327
symbol-daytime-335359
symbol-daytime-405
symbol-daytime-410
symbol-daytime-412
symbol-daytime-413
symbol-daytime-428
symbol-daytime-429
symbol-daytime-719
```
其中 `symbol-daytime-719` 当前语义建议为:
```text
an_quar = quarantine anchorage
```
## 7. 实施约束
- 本表确认后,统一重建全部 Full PBF不在现有 PBF 上做局部替换。
- style 的 `icon-image` 统一读取 `icon_id``arc_id`,删除 `class_code` 拼接逻辑。
- sprite JSON key 与新 ID 完全一致。
- `class_code`、FID 和 source-layer 继续保留,用于反向追溯和对象审计。
- `symbol-daytime-*``arc-daytime-*` 只允许出现在转换审计日志或历史映射表中,不能出现在正式 PBF、正式 style 和正式 sprite JSON 中。
- `symbol-daytime-662` 对应 `lm_cus`,需要补上海关图标素材。

View File

@@ -0,0 +1,224 @@
{
"version": "semantic-icon-v1",
"baseline": "full-semantic-extentfix",
"fields": {
"point_icon": "icon_id",
"light_arc": "arc_id",
"legacy_point_icon": "chart_icon_image"
},
"color_codes": {
"green": "G",
"red": "R",
"yellow": "Y",
"white": "W",
"blue": "B",
"yellow_white": "YW"
},
"sprite_key_map": {
"symbol-daytime-300": "lt_cst",
"symbol-daytime-301": "lt_hbr",
"symbol-daytime-302": "lt_bkw",
"symbol-daytime-303": "lt_min",
"symbol-daytime-30500001": "lt_lead_a",
"symbol-daytime-30500002": "lt_lead_b",
"symbol-daytime-30500003": "lt_lead_c",
"symbol-daytime-30700001": "lt_up_G",
"symbol-daytime-30700002": "lt_up_R",
"symbol-daytime-30700003": "mk_lead_c",
"symbol-daytime-308": "mk_lead_v",
"symbol-daytime-310": "lt_bcn",
"symbol-daytime-320": "bu_lit",
"symbol-daytime-321": "bu_gen",
"symbol-daytime-323": "bu_pil",
"symbol-daytime-325": "bu_can",
"symbol-daytime-327": "bu_lat",
"symbol-daytime-335359": "mk_vais",
"symbol-daytime-401": "hz_rock_awash",
"symbol-daytime-404": "hz_rock_sub",
"symbol-daytime-405": "hz_danger_clear",
"symbol-daytime-409": "hz_danger_iso",
"symbol-daytime-410": "hz_wreck_hull",
"symbol-daytime-412": "hz_wreck_sub",
"symbol-daytime-413": "hz_wreck_survey",
"symbol-daytime-420": "hz_foul",
"symbol-daytime-421": "hz_sandwave",
"symbol-daytime-422": "hz_overfall",
"symbol-daytime-424": "hz_whirl",
"symbol-daytime-425": "hz_seaweed",
"symbol-daytime-427": "hz_obst",
"symbol-daytime-428": "hz_reef",
"symbol-daytime-429": "hz_reef_danger",
"symbol-daytime-431": "hz_tower",
"symbol-daytime-432": "hz_pile",
"symbol-daytime-433": "hz_dolphin",
"symbol-daytime-434": "hz_outfall",
"symbol-daytime-640": "lm_chim",
"symbol-daytime-650": "lm_twr",
"symbol-daytime-660": "lm_mar",
"symbol-daytime-661": "lm_fish",
"symbol-daytime-662": "lm_cus",
"symbol-daytime-680": "lm_prom",
"symbol-daytime-681": "lm_mtn",
"symbol-daytime-682": "lm_ctrl",
"symbol-daytime-698": "lm_mon",
"symbol-daytime-719": "an_quar",
"symbol-daytime-720": "an_desig",
"symbol-daytime-721": "an_restrict",
"symbol-daytime-724": "an_no_anchor",
"symbol-daytime-505": "fac_port",
"symbol-daytime-520": "fac_fishport",
"symbol-daytime-530": "fac_marina",
"symbol-daytime-540": "fac_fisherina",
"symbol-daytime-550": "fac_seastation",
"harbor_lighthouse": "lt_hbr",
"breakwater_lighthouse": "lt_bkw",
"coastal_lighthouse": "lt_cst",
"light_minor": "lt_min",
"leading_light_variant_30500001": "lt_lead_a",
"leading_light_variantt_30500001": "lt_lead_a",
"leading_light_variant_30500002": "lt_lead_b",
"leading_light_variantt_30500002": "lt_lead_b",
"leading_light_variant_30500003": "lt_lead_c",
"leading_light_variantt_30500003": "lt_lead_c",
"leading_mark_variant_30700003": "mk_lead_c",
"leading_mark_variantt_30700003": "mk_lead_c",
"leading_mark_variant_308": "mk_lead_v",
"leading_mark_variantt_308": "mk_lead_v",
"light_beacon": "lt_bcn",
"buoy_light": "bu_lit",
"buoy_generic": "bu_gen",
"buoy_pillar": "bu_pil",
"buoy_can": "bu_can",
"buoy_lattice": "bu_lat",
"nav_mark_vais": "mk_vais",
"pilot_station": "fac_pilot",
"tidespot-daytime": "tide_spot",
"light-daytime-1": "fl_G",
"light-daytime-2": "fl_R",
"light-daytime-3": "fl_YW",
"arc-daytime-04027289": "arc_open_YW",
"arc-daytime-m1": "arc_G",
"arc-daytime-m2": "arc_R",
"arc-daytime-m3": "arc_YW",
"rock_exposed_drying_awash_group": "hz_rock_awash",
"sunken_rock": "hz_rock_sub",
"cleared_danger_object": "hz_danger_clear",
"isolated_danger": "hz_danger_iso",
"wreck_hull_exposed": "hz_wreck_hull",
"wreck_fully_submerged_dangerous": "hz_wreck_sub",
"wreck_surveyed": "hz_wreck_survey",
"foul_ground": "hz_foul",
"sand_wave": "hz_sandwave",
"tide_rips_overfalls": "hz_overfall",
"eddy_whirlpool": "hz_whirl",
"seaweed": "hz_seaweed",
"obstruction": "hz_obst",
"fish_reef": "hz_reef",
"fish_reef_dangerous": "hz_reef_danger",
"tower_yagura_observation_platform": "hz_tower",
"bollard_pile_stake": "hz_pile",
"dolphin_structure": "hz_dolphin",
"subsea_installation_outfall_intake": "hz_outfall",
"anchorage_quarantine": "an_quar",
"anchorage_designated": "an_desig",
"restriction_area_group": "an_restrict",
"anchoring_prohibited": "an_no_anchor",
"port_general_small_harbor_group": "fac_port",
"fishing_port": "fac_fishport",
"marina": "fac_marina",
"fisherina": "fac_fisherina",
"sea_station_umi_no_eki": "fac_seastation"
},
"hazard_class_map": {
"401": "hz_rock_awash",
"402": "hz_rock_awash",
"403": "hz_rock_awash",
"404": "hz_rock_sub",
"405": "hz_danger_clear",
"409": "hz_danger_iso",
"410": "hz_wreck_hull",
"412": "hz_wreck_sub",
"413": "hz_wreck_survey",
"415": "hz_wreck_survey",
"420": "hz_foul",
"421": "hz_sandwave",
"422": "hz_overfall",
"424": "hz_whirl",
"425": "hz_seaweed",
"427": "hz_obst",
"428": "hz_reef",
"429": "hz_reef_danger",
"431": "hz_tower",
"432": "hz_pile",
"433": "hz_dolphin",
"434": "hz_outfall"
},
"landmark_class_map": {
"640": "lm_chim",
"650": "lm_twr",
"660": "lm_mar",
"661": "lm_fish",
"662": "lm_cus",
"680": "lm_prom",
"681": "lm_mtn",
"682": "lm_ctrl",
"698": "lm_mon"
},
"anchorage_class_map": {
"719": "an_quar",
"720": "an_desig",
"721": "an_restrict",
"722": "an_restrict",
"723": "an_restrict",
"724": "an_no_anchor"
},
"facility_class_map": {
"505": "fac_port",
"510": "fac_port",
"520": "fac_fishport",
"530": "fac_marina",
"540": "fac_fisherina",
"550": "fac_seastation"
},
"display_code_map": {
"30300000": "lt_min",
"30300002": "lt_min",
"30300004": "lt_min",
"30500001": "lt_lead_a",
"30500002": "lt_lead_b",
"30500003": "lt_lead_c",
"30500004": "lt_lead_c",
"30500010": "lt_lead_c",
"30600000": "lt_min",
"30600001": "lt_min",
"30600002": "lt_min",
"30600003": "lt_min",
"30600004": "lt_min",
"30600006": "lt_min",
"30700000": "mk_lead_c",
"30700001": "lt_up_G",
"30700002": "lt_up_R",
"30700003": "mk_lead_c",
"30700004": "mk_lead_c",
"30700007": "mk_lead_c",
"30800000": "mk_lead_v",
"30900000": "lt_lead_c",
"30900002": "lt_lead_b",
"30900004": "lt_lead_c",
"30900009": "lt_lead_c",
"30900011": "lt_lead_c"
},
"arc_rules": {
"sector": "arc_open_YW",
"green": "arc_G",
"red": "arc_R",
"other": "arc_YW"
},
"fallbacks": {
"lm_cus": {
"source_sprite_key": "symbol-daytime-660",
"status": "temporary_visual_fallback",
"reason": "当前 sprite 没有 symbol-daytime-662 原图"
}
}
}