# NavSea Object -> Render Mapping Table v2

版本：v2 Draft  
用途：定义对象语义到渲染语义的映射规则，作为 `taxonomy -> render_semantics` 的中间规范。

## 1 设计原则

- 先按 `canonical_object_type` 映射
- 再按几何类型和旧字段细化具体样式
- 样式层优先读取 `chart_*` 字段
- 旧字段只保留为细节兜底，不再作为主判定入口

## 2 输出字段

映射表的目标输出至少包括：

- `chart_render_type`
- `chart_symbol_family`
- `chart_symbol_code`
- `chart_line_style`
- `chart_fill_style`
- `chart_text_style`
- `chart_priority`
- `chart_label_text`
- `chart_label_subtext`
- `light_color_code`
- `light_character_code`
- `hazard_class`
- `hazard_severity`
- `area_usage_class`

## 3 首批强制覆盖对象

下表是建议优先落地的 v2 核心映射对象。

| canonical_family | canonical_object_type | geometry | chart_render_type | symbol_family | symbol_or_style | priority | legacy_detail_dependency |
| --- | --- | --- | --- | --- | --- | --- | --- |
| navigation_aid | 港湾灯台 | Point | symbol | navigation_light | `chart_symbol_code=lighthouse` | 900 | `灯色` `灯略記` `表示用番号` |
| navigation_aid | 灯柱 | Point | symbol | navigation_light | `chart_symbol_code=light_beacon` | 890 | `灯色` `灯略記` `形状分類番号` |
| navigation_aid | 灯浮標 | Point | symbol | navigation_light | `chart_symbol_code=light_buoy` | 880 | `灯色` `灯略記` `形状分類番号` |
| navigation_aid | AIS航标 | Point | symbol | navigation_light | `chart_symbol_code=vais` | 870 | `表示用番号` |
| navigation_aid | 浮標 | Point | symbol | navigation_mark | `chart_symbol_code=buoy` | 860 | `形状分類番号` `表示用番号` |
| navigation_aid | 立標 | Point | symbol | navigation_mark | `chart_symbol_code=beacon` | 860 | `形状分類番号` `表示用番号` |
| hazard | 暗岩 | Point | symbol | hazard | `chart_symbol_code=rock_awash` | 910 | `分類番号` |
| hazard | 岩礁 | Point | symbol | hazard | `chart_symbol_code=reef` | 900 | `分類番号` |
| hazard | 礁盘 | Polygon | fill | hazard | `chart_fill_style=reef_area` | 860 | `分類番号` |
| hazard | 魚礁 | Polygon | fill | hazard | `chart_fill_style=reef_area` | 850 | `分類番号` `表示用番号` |
| hazard | 沈船 | Point | symbol | hazard | `chart_symbol_code=wreck` | 905 | `分類番号` |
| hazard | 障害物 | Point | symbol | hazard | `chart_symbol_code=obstruction` | 895 | `分類番号` |
| hazard | 潜堤 | Line/Polygon | line/fill | hazard | `chart_line_style=submerged_reef` / `chart_fill_style=hazard_area` | 845 | `分類番号` |
| depth | 水深点 | Point | label | depth_mark | `chart_text_style=depth_text` | 700 | `水深値(m)` |
| depth | 水深区 | Polygon | fill | depth_zone | `chart_fill_style=depth_zone_*` | 650 | `分類番号` |
| depth | 等深线 | LineString | line | contour | `chart_line_style=contour_major_or_minor` | 640 | `表示用番号` |
| depth | 概略等深线 | LineString | line | contour | `chart_line_style=contour_overview` | 620 | `表示用番号` |
| boundary | 危険界 | LineString | line | boundary | `chart_line_style=hazard_boundary` | 800 | `分類番号` |
| boundary | 基本线 | LineString | line | boundary | `chart_line_style=baseline` | 780 | `分類番号` |
| boundary | 航路境界 | LineString | line | boundary | `chart_line_style=route_boundary` | 770 | `分類番号` |
| usage_area | 航路 | Polygon/LineString | fill/line | usage_area | `chart_fill_style=route_area` / `chart_line_style=route_axis` | 760 | `分類番号` |
| usage_area | 錨地 | Polygon | fill | usage_area | `chart_fill_style=anchorage_area` | 750 | `分類番号` |
| usage_area | 錨泊地 | Polygon | fill | usage_area | `chart_fill_style=anchorage_area` | 750 | `分類番号` |
| usage_area | 漁業区 | Polygon | fill | usage_area | `chart_fill_style=fishery_area` | 740 | `分類番号` |
| usage_area | パイロットステーション | Point | symbol | usage_area | `chart_symbol_code=pilot_station` | 735 | `表示用番号` |
| facility | 防波堤 | LineString/Polygon | line/fill | facility | `chart_line_style=breakwater` | 730 | `分類番号` |
| facility | 橋梁 | LineString | line | facility | `chart_line_style=bridge` | 725 | `高さ(m)` |
| facility | 海底电缆 | LineString | line | facility | `chart_line_style=subsea_cable` | 720 | `分類番号` |
| facility | 高さ制限 | Point/LineString | label/line | facility | `chart_text_style=clearance_label` | 715 | `高さ(m)` `高さ/深度(m)` |
| seabed | 底質 | Point | label | seabed | `chart_text_style=seabed_text` | 500 | `名称` |
| place | 海上地名 | Point | label | place | `chart_text_style=place_name_sea` | 450 | `日本語地名` `英文字地名` |
| place | 陆上地名 | Point | label | place | `chart_text_style=place_name_land` | 440 | `日本語地名` `英文字地名` |

## 4 细化规则

### 4.1 灯标对象

主映射依据：

- `canonical_object_type`

细化字段：

- `灯色 -> light_color_code`
- `灯略記 -> light_character_code` 与 `chart_label_subtext`
- `名称 -> chart_label_text`
- `表示用番号` / `形状分類番号` 决定具体 icon 变体

说明：

- 灯弧不必作为核心渲染对象单独保留
- 但 `明弧/分孤` 可以继续保留，用于特殊产品或工程校验

### 4.2 危险物

主映射依据：

- `canonical_object_type`

细化输出：

- `hazard_class`
- `hazard_severity`

建议：

- `暗岩`、`沈船` 默认 `hazard_severity >= major`
- `魚礁` 按区域危险对象处理，但允许叠加 `area_usage_class=fishery`

### 4.3 水深和等深线

建议：

- 水深点统一转成 `chart_render_type=label`
- 水深区统一转成 `chart_render_type=fill`
- 等深线和概略等深线统一转成 `chart_render_type=line`

细化：

- `表示用番号` 或原 line layer 类型决定 `contour_major` / `contour_minor` / `contour_overview`

### 4.4 边界和区域

建议：

- “区域本体”与“边界线”分别映射
- 航路、锚地、鱼业区优先落到 `usage_area`
- 基本线、危险界、航路境界优先落到 `boundary`

## 5 label 映射规则

| 对象类型 | chart_label_text | chart_label_subtext | chart_text_style |
| --- | --- | --- | --- |
| 港湾灯台 / 灯柱 / 灯浮標 | `名称` | `灯略記` | `light_label` |
| 水深点 | 格式化 `depth_value_m` | 空 | `depth_text` |
| 海上地名 | `日本語地名` 优先，其次 `英文字地名` | 空 | `place_name_sea` |
| 陆上地名 | `日本語地名` 优先，其次 `英文字地名` | 空 | `place_name_land` |
| 高さ制限 | 规范化高度文本 | 空 | `clearance_label` |

## 6 v2 映射必须输出的附加字段

除了图形类型本身，映射表还应尽量输出：

- `chart_priority`
- `chart_visibility_min`
- `chart_visibility_max`
- `chart_collision_group`

原因：

- 这些字段能把样式层里的很多散乱 zoom/filter 规则收回到数据侧

## 7 v2 当前缺口

相较 v1，本表仍需继续扩充以下对象：

- 导灯
- 灯船
- 信号所
- 制限区域
- 未测深区
- 干出区
- 海底管线
- 岸壁 / 栈桥 / 码头
- 海底线
- 水文现象对象

这些建议作为 v2.1 的扩展项。
