# 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 当前语义流水线的正式数据库输出。