Files
pbf/NavSea_Semantic_Pipeline.md
2026-03-17 19:48:15 +08:00

678 lines
16 KiB
Markdown
Raw Permalink 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.
# NavSea 语义重建流水线说明
## 1. 流水线概览
NavSea 当前的数据库流水线可以分成两段:
1. 上游导入段
将原始 PBF 拆入数据库,形成 `features``properties` 两张核心表。
2. 语义重建与校验段
在不修改现有渲染逻辑、不修改 `style.json`、不修改原始 PBF 结构的前提下,建立语义叠加层与校验层。
当前真实的流水线可概括为:
```text
原始 PBF
→ PBF 导入(外部前置步骤,结果进入 features / properties
→ 属性展开at_attributes
→ 语义投影feature_semantic
→ 对象类型候选生成object_type_candidates
→ 审计与统计object_catalog / object_type_stats / style_layers / tile_density
→ 规范对象规则canonical_object_rules / canonical_layer_rules
→ 语义叠加层构建pbf_relayer_candidates
→ 检测目录与渲染兼容层pbf_detection_catalog / pbf_render_compatibility
→ 语义校验classification / geometry / render / detection / spatial
→ 最终 NavSea 语义数据集(数据库中的已校验语义叠加结果)
```
需要明确一点:当前仓库中的脚本并不直接生成“新的 NavSea 矢量瓦片文件”。当前系统产出的是一套可重建、可审计、可校验的数据库语义数据集;下游若要生成新的 NavSea 矢量瓦片,应以这些表为输入继续执行后续生产步骤。
## 2. 分步流水线
### Step 00 - 原始 PBF 导入
目的
将原始 PBF 解析并导入数据库。
输入
原始 PBF 数据
输出
`features`
`properties`
说明
这一步是当前语义流水线的前置条件。当前仓库中没有提供这一步的导入脚本,但后续所有步骤都假定这两张表已存在。
### Step 01 - 提取 `at` 属性
目的
`properties` 表中 `k='at'` 的 JSON 属性展开成结构化键值表。
输入表
`properties`
输出表
`at_attributes`
脚本
`navsea_audit.py`
### Step 02 - 构建语义投影表
目的
把原始要素与已展开的属性汇总到单要素视角,形成后续语义分析使用的基础表。
输入表
`features`
`at_attributes`
输出表
`feature_semantic`
字段要点
`feature_id``z/x/y``vt_layer``geom_type``class_name``shape_name``layer_name`
脚本
`navsea_audit.py`
### Step 03 - 构建对象目录
目的
`feature_semantic` 聚合出对象目录,用于观察每类对象在不同来源层和几何类型上的分布。
输入表
`feature_semantic`
输出表
`object_catalog`
脚本
`navsea_audit.py`
### Step 04 - 生成对象类型候选
目的
为每个要素生成对象类型候选,优先级为:
```text
class_name > shape_name > vt_layer
```
输入表
`feature_semantic`
输出表
`object_type_candidates`
脚本
`navsea_audit.py`
### Step 05 - 构建对象类型统计
目的
统计每个对象类型与几何类型的分布,为规则生成和几何白名单提供依据。
输入表
`object_type_candidates`
输出表
`object_type_stats`
脚本
`navsea_audit.py`
### Step 06 - 构建样式层分析
目的
`style.json` 中抽取现有渲染层信息,并与对象候选做交叉比对,确认渲染轨仍可复用。
输入
`src/pbf/style.json`
`object_type_candidates`
输出表
`style_layers`
`style_mapping`
脚本
`navsea_audit.py`
### Step 07 - 构建密度与基础异常分析
目的
计算瓦片密度与审计阶段的几何异常,为后续语义校验提供分析输入。
输入表
`features`
`feature_semantic`
输出表
`tile_density`
`tile_layer_density`
`tile_density_top100`
`anomaly_navigation_geom`
`anomaly_reef_geom`
`geometry_consistency_audit`
说明
`geometry_consistency_audit` 是审计阶段保留下来的旧版几何分布快照,不是当前正式校验表。
脚本
`navsea_audit.py`
### Step 08 - 构建来源层规则
目的
基于现有 `source_layer`、样式绑定关系和语义密度,判断每个来源层属于:
```text
semantic_layer
container_layer
style_or_source_layer
```
输入表
`feature_semantic`
`style_layers`
输出表
`canonical_layer_rules`
脚本
`navsea_relayer.py`
### Step 09 - 构建规范对象规则
目的
为每个 `canonical_object_type` 固化规范对象规则,包括:
- `canonical_family`
- `classification_basis`
- `source_layer_scope`
- `allowed_geom_types`
- `preferred_geom_type`
输入表
`object_catalog`
`object_type_stats`
输出表
`canonical_object_rules`
补充输出表
`object_geometry_allowlist`
脚本
`navsea_relayer.py`
### Step 10 - 构建语义叠加层
目的
在保留现有渲染轨的前提下,为每个要素附加:
- 规范对象类型
- 规范对象族
- 检测键
- 语义键
- 渲染兼容层
输入表
`feature_semantic`
`object_type_candidates`
`canonical_layer_rules`
`canonical_object_rules`
输出表
`pbf_relayer_candidates`
脚本
`navsea_relayer.py`
### Step 11 - 构建语义统计与检测目录
目的
从语义叠加层生成两个下游核心视图:
1. 渲染兼容统计
用于确认 `render_layer` 与原有 `source_layer` 的数量关系
2. 检测目录
用于安全检测、对象检测和规则匹配
输入表
`pbf_relayer_candidates`
输出表
`pbf_source_object_stats`
`pbf_render_compatibility`
`pbf_detection_catalog`
脚本
`navsea_relayer.py`
### Step 12 - 运行分类校验
目的
确认每个 `canonical_object_type` 的映射是否稳定,是否存在未知对象、歧义映射或规则冲突。
输入表
`pbf_source_object_stats`
`canonical_object_rules`
输出表
`classification_validation`
脚本
`navsea_semantic_validation.py`
### Step 13 - 运行几何一致性校验
目的
确认每个规范对象的几何类型是否符合白名单与规则定义。
输入表
`pbf_detection_catalog`
`object_geometry_allowlist`
输出表
`geometry_consistency`
脚本
`navsea_semantic_validation.py`
### Step 14 - 运行渲染等价校验
目的
确认语义叠加层没有破坏现有 style 渲染轨。
输入表
`style_layers`
`features`
`pbf_render_compatibility`
输出表
`style_render_equivalence`
脚本
`navsea_semantic_validation.py`
### Step 15 - 运行检测目录完整性校验
目的
确认 `detection_key` 对象目录稳定且几何一致。
输入表
`pbf_detection_catalog`
`geometry_consistency`
输出表
`detection_catalog_integrity`
脚本
`navsea_semantic_validation.py`
### Step 16 - 运行空间密度诊断
目的
基于 `features` 直接计算的瓦片密度和分 zoom 阈值,识别空间热点瓦片。
输入表
`tile_density`
`tile_layer_density`
`features`
`pbf_relayer_candidates`
输出表
`spatial_anomalies`
规则要点
- `tile_density` 只允许来自 `features`
- 每个 zoom 单独计算阈值
- 跳过 `z=0`
- 支持 `DENSITY_STATISTICS_ERROR`
- 每个异常 tile 单独落一行
脚本
`navsea_semantic_validation.py`
### Step 17 - 生成总体验证结论
目的
把分类、几何、渲染、检测目录和空间诊断汇总成一条总状态。
输入表
`classification_validation`
`geometry_consistency`
`style_render_equivalence`
`detection_catalog_integrity`
`spatial_anomalies`
输出表
`semantic_validation_summary`
脚本
`navsea_semantic_validation.py`
## 3. 表依赖图
### 3.1 主干数据血缘
```text
原始 PBF
features + properties
at_attributes
feature_semantic
├─→ object_catalog
├─→ object_type_candidates
│ ↓
│ object_type_stats
└─→ style_layers ← style.json
object_catalog + object_type_stats
canonical_object_rules
object_geometry_allowlist
feature_semantic + style_layers
canonical_layer_rules
feature_semantic + object_type_candidates + canonical_layer_rules + canonical_object_rules
pbf_relayer_candidates
pbf_source_object_stats
├─→ pbf_render_compatibility
└─→ pbf_detection_catalog
```
### 3.2 并行校验血缘
```text
pbf_source_object_stats + canonical_object_rules
classification_validation
pbf_detection_catalog + object_geometry_allowlist
geometry_consistency
style_layers + features + pbf_render_compatibility
style_render_equivalence
pbf_detection_catalog + geometry_consistency
detection_catalog_integrity
features
tile_density + tile_layer_density
spatial_anomalies
classification_validation
geometry_consistency
style_render_equivalence
detection_catalog_integrity
spatial_anomalies
semantic_validation_summary
```
## 4. 表分类
下表按照当前数据库中的实际表进行分类。
| 表名 | 分类 | 说明 |
| --- | --- | --- |
| `features` | CORE TABLE | 原始要素主表,保存 `id``z/x/y``vt_layer``geom_type` |
| `properties` | CORE TABLE | 原始属性键值表 |
| `at_attributes` | SEMANTIC TABLE | `properties.k='at'` 的展开结果 |
| `feature_semantic` | SEMANTIC TABLE | 单要素语义投影表 |
| `object_type_candidates` | SEMANTIC TABLE | 对象类型候选表 |
| `object_catalog` | ANALYSIS TABLE | 对象目录与分布分析 |
| `object_type_stats` | ANALYSIS TABLE | 对象类型与几何统计 |
| `style_layers` | ANALYSIS TABLE | 从 `style.json` 提取的渲染层信息 |
| `style_mapping` | ANALYSIS TABLE | 样式层与对象候选的交叉映射 |
| `canonical_layer_rules` | SEMANTIC TABLE | 来源层规则表 |
| `canonical_object_rules` | SEMANTIC TABLE | 规范对象规则表 |
| `object_geometry_allowlist` | SEMANTIC TABLE | 对象几何白名单 |
| `pbf_relayer_candidates` | SEMANTIC TABLE | 语义叠加主表 |
| `pbf_source_object_stats` | ANALYSIS TABLE | 语义叠加聚合统计表 |
| `pbf_render_compatibility` | ANALYSIS TABLE | 渲染兼容统计表 |
| `pbf_detection_catalog` | SEMANTIC TABLE | 安全检测目录表 |
| `classification_validation` | VALIDATION TABLE | 分类稳定性校验表 |
| `geometry_consistency` | VALIDATION TABLE | 当前正式几何一致性校验表 |
| `geometry_consistency_audit` | ANALYSIS TABLE | 审计阶段保留的旧版几何快照 |
| `style_render_equivalence` | VALIDATION TABLE | 渲染等价校验表 |
| `detection_catalog_integrity` | VALIDATION TABLE | 检测目录完整性校验表 |
| `spatial_anomalies` | VALIDATION TABLE | 空间密度异常表 |
| `semantic_validation_summary` | VALIDATION TABLE | 整体验证摘要 |
| `tile_density` | ANALYSIS TABLE | 每瓦片 feature 数量 |
| `tile_layer_density` | ANALYSIS TABLE | 每瓦片、每来源层 feature 数量 |
| `tile_density_top100` | ANALYSIS TABLE | 最高密度瓦片 Top100 |
| `anomaly_navigation_geom` | ANALYSIS TABLE | 航标类几何异常审计 |
| `anomaly_reef_geom` | ANALYSIS TABLE | 鱼礁类几何异常审计 |
| `feature_flat` | TEMP TABLE | 当前数据库中的遗留/临时表,不在现行语义脚本主路径上 |
## 5. 官方执行顺序
当前建议的正式执行顺序如下:
1. 导入原始 PBF生成 `features``properties`
2. 运行 `navsea_audit.py`,构建基础语义表、分析表和密度表
3. 运行 `navsea_relayer.py`,生成规范规则与语义叠加层
4. 运行 `navsea_semantic_validation.py`,生成分类、几何、渲染、检测目录和空间校验结果
5. 读取 `semantic_validation_summary` 确认总体状态
6.`pbf_relayer_candidates` 为主表,结合 `features``properties``at_attributes` 产出下游 NavSea 数据集或矢量瓦片生产输入
## 6. 执行命令
### 6.1 构建基础语义与分析表
```bash
.venv/bin/python navsea_audit.py
```
作用
`features` / `properties` 出发,构建:
- `at_attributes`
- `feature_semantic`
- `object_catalog`
- `geometry_consistency_audit`
- `object_type_candidates`
- `object_type_stats`
- `style_layers`
- `style_mapping`
- `tile_density`
- `tile_layer_density`
- `tile_density_top100`
- 审计异常表
### 6.2 构建语义叠加层
```bash
.venv/bin/python navsea_relayer.py
```
作用
生成:
- `canonical_layer_rules`
- `canonical_object_rules`
- `object_geometry_allowlist`
- `pbf_relayer_candidates`
- `pbf_source_object_stats`
- `pbf_render_compatibility`
- `pbf_detection_catalog`
### 6.3 运行语义校验
```bash
.venv/bin/python navsea_semantic_validation.py
```
作用
生成:
- `classification_validation`
- `geometry_consistency`
- `style_render_equivalence`
- `detection_catalog_integrity`
- `spatial_anomalies`
- `semantic_validation_summary`
### 6.4 仅重建密度表
如果只需要更新空间密度与热点诊断,可以单独执行:
```bash
.venv/bin/python - <<'PY'
from navsea_audit import NavSeaAudit, DbConfig
NavSeaAudit(DbConfig()).build_tile_density()
PY
```
随后再执行:
```bash
.venv/bin/python navsea_semantic_validation.py
```
## 7. 最终输出数据集
### 7.1 当前系统中的“最终语义数据集”
当前系统中,最接近“最终 NavSea 语义要素表”的主表是:
`pbf_relayer_candidates`
它保存了:
- `feature_id`
- `z/x/y`
- `source_layer`
- `geom_type`
- `class_name`
- `shape_name`
- `layer_name`
- `object_type_source`
- `canonical_object_type`
- `semantic_granularity`
- `canonical_family`
- `classification_basis`
- `source_layer_scope`
- `semantic_key`
- `detection_key`
- `render_layer`
### 7.2 原始属性与语义属性的对应关系
`pbf_relayer_candidates` 本身并不保存原始全部属性值,因此最终语义数据集应按下述方式理解:
- 原始要素主键与瓦片定位来自 `features`
- 原始属性全集来自 `properties`
- 展开的 `at` 属性来自 `at_attributes`
- 语义投影属性来自 `feature_semantic`
- 规范对象分类来自 `pbf_relayer_candidates`
也就是说,当前 NavSea 最终语义数据集实际上是一个“主表 + 关联表”结构:
```text
主表:
pbf_relayer_candidates
关联恢复:
features → 原始要素标识、瓦片坐标、几何类型
properties → 原始属性键值
at_attributes → 展开的 at 属性
feature_semantic → class_name / shape_name / layer_name
```
### 7.3 关于 geometry 的说明
当前数据库 schema 中,`features` 表仅保存:
- `id`
- `z/x/y`
- `vt_layer`
- `geom_type`
它不保存完整坐标几何体字段。
因此,当前数据库中的“最终语义数据集”是面向语义重建、校验和下游生成的语义索引层,而不是一张带完整坐标几何的空间实体表。
### 7.4 下游生成 NavSea 数据的推荐入口
如果后续要生成 NavSea 下游数据或重新生成矢量瓦片,推荐以:
- `pbf_relayer_candidates` 作为语义主表
- `features` 作为原始要素锚点
- `properties` / `at_attributes` 作为原始属性源
共同构成生产输入。
## 8. 从零重建步骤
### 最小可复现步骤
1. 将原始 PBF 导入数据库,得到 `features``properties`
2. 执行 `navsea_audit.py`
3. 执行 `navsea_relayer.py`
4. 执行 `navsea_semantic_validation.py`
5. 检查 `semantic_validation_summary`
6. 若需要下游数据生产,则从 `pbf_relayer_candidates` 联合 `features``properties``at_attributes` 提取最终数据集
### 推荐的重建命令顺序
```bash
.venv/bin/python navsea_audit.py
.venv/bin/python navsea_relayer.py
.venv/bin/python navsea_semantic_validation.py
```
### 重建完成后的关键检查点
至少应检查以下表是否已刷新:
- `feature_semantic`
- `object_type_candidates`
- `canonical_object_rules`
- `canonical_layer_rules`
- `pbf_relayer_candidates`
- `pbf_detection_catalog`
- `classification_validation`
- `geometry_consistency`
- `style_render_equivalence`
- `detection_catalog_integrity`
- `spatial_anomalies`
- `semantic_validation_summary`
### 当前系统的审计终点
当前系统的“可审计终点”不是一个新的矢量瓦片文件,而是:
- 一套可复现的语义规则表
- 一套可复现的语义叠加主表
- 一套可重复执行的验证表
即:
```text
canonical_layer_rules
canonical_object_rules
pbf_relayer_candidates
pbf_detection_catalog
semantic_validation_summary
```
这套终点定义了 NavSea 当前语义流水线的正式数据库输出。