12 KiB
12 KiB
NavSea 交付前审计规范
1. 目标
本规范用于约束 NavSea 在正式交付前的审计方式,确保:
- 交付版
pbf不依赖工程期映射字段即可完成渲染与点击说明 - 交付版 style 忠于旧版 style 的表现语义,而不是重新设计
- 不只是“对象还在”,还要确认“对象被正确解释并正确表现”
- 不会因为语义转译、样式改写或字段裁剪而引入航行风险
本规范既适用于当前 delivery pbf,也适用于后续拆分出的:
- 航海版
- 钓鱼版
2. 核心原则
2.1 旧版表现是基准
- 对航行安全相关对象,旧版
pbf + style.json是表现基准 - 新版 style 的职责是把旧版表现语义转译到新字段体系,不是重新设计
- 只有经过明确登记和批准的差异,才允许故意偏离旧版表现
2.2 审计重点是“解释与表现”
- 不能只审“对象有没有”
- 必须审“对象命中了哪些渲染层”
- 必须审“命中的渲染层是否保持了旧版相同的语义”
- 必须审“最终画面是否仍会让用户做出相同的安全判断”
2.3 安全对象从严,普通对象从宽
- 灯火、浮标、危险物、暗礁、潜堤、洗岩、露岩、浅水区、陆海边界、净空限制等属于硬门禁对象
- 地名、底质、一般说明文字等允许有限偏差,但不得影响安全判断
2.4 render-support 不得被强化成业务语义
P穴 -> hole_area这类支撑层必须忠于旧版支撑性表现- 不允许把辅助层画成会误导用户的实体语义对象
- 不允许把透明/挖空/弱表现对象画成陆地色、危险礁色或其他强语义实体色
3. 适用范围
本规范覆盖以下交付物:
pbfstyle json- 对比页面与公开部署版本
- 自动审计脚本生成的 Markdown / JSON 报告
本规范不替代工程期数据库审计。旧新字段映射、trace 和回查仍由数据库承担。
4. 术语
4.1 旧版基准
- 原始
pbf - 原始
style.json
4.2 候选交付版
- 待交付
pbf - 待交付 style
4.3 物体
- 同一个原始海图对象
- 审计时优先按 legacy
fid对齐 - 无
fid时,回退到geometry + 稳定旧属性
4.4 feature instance
- 同一物体在不同 tile / zoom 下的具体实例
- 渲染审计保留 tile 实例粒度,因为渲染具有 zoom 敏感性
4.5 render hit
- 某个 feature instance 在某个 style layer 上实际命中的一次渲染观察
- 观察类型分为:
filllineicontext
4.6 有效 render hit
- 不只是“命中了某层”
- 还要求该命中对最终画面有实际贡献
- 透明填充、零宽线、不可见 icon、空文本等不得被算作有效命中
4.7 场景窗口
- 固定中心点、固定缩放级、固定 viewport 的对比视窗
- 用于检查对象间叠压、标签碰撞、底色覆盖、整体安全感知
5. 用途分轨
5.1 航海版
目标:
- 保障航行安全
- 支撑通航判断、风险识别、航线设计和安全计算
特点:
- 用户视角大面积、粗线条
- 危险物和航标优先级最高
- 表现必须忠于旧版海图安全语义
5.2 钓鱼版
目标:
- 保障安全
- 强调地形、深度、底质和海里有什么
特点:
- 用户视角小面积、高细节
- 地形和深度优先级高于多数航海辅助对象
- 对安全对象仍从严,对非安全对象允许有选择地弱化
5.3 两版共用红线
- 安全对象不得缺失
- 不得出现“水上 / 水下 / 露出 / 干出”语义画反
- 不得把 render-support 层强化为危险误导源
- 不得缺失会影响判断的深度数字、净空数字、灯标关键信息
6. 审计分层
交付前审计必须按以下顺序执行。
6.1 第一层:Style 有效性门禁
检查内容:
- style JSON 语法合法
- MapLibre / Mapbox Style 规范校验通过
- source、sprite、glyph、tile URL 可达
- 公开部署页实际加载的是候选交付版 style,不是旧缓存或其他旧版本
不通过示例:
paint.fill-color表达式参数个数错误match分支标签类型错误- 公开页面仍引用旧 style 或旧 tile
6.2 第二层:对象存在性门禁
检查内容:
- 审计对象总量是否与旧版同量级
- 安全关键对象是否仍能在候选交付版中被对齐到
- 不允许因字段清理、layer 重命名、id 变更导致对象失联
允许差异:
- 工程追溯字段移除
- layer 名由旧日文名变为新语义名
不允许差异:
- 安全关键对象在交付版完全找不到
- 只能在数据库中回查到,但运行时对象不存在
6.3 第三层:物体级 render-hit 审计
这是主审计层。
对每个 feature instance,分别执行:
- 旧版
pbf + 旧版 style - 候选交付版
pbf + 候选交付版 style
并记录:
hit_count_oldhit_count_newhit_types_oldhit_types_new- 每个 hit 的 payload
- 颜色
- 图标名
- 线宽
- dash
- 文本值
- anchor
- pattern
- opacity
比较规则:
- 先比有效 hit 数
- 再比 hit 类型集合
- 最后比 hit payload
特别说明:
- 不能只比 hit 数量
- 命中数量一致但 icon / color / line width 语义不同,仍算不通过
- 透明 fill、零宽线、空文本等无效 hit 不得充数
6.4 第四层:Style 语义审计
这是物体级审计的强制子项。
必须回答:
- 陆海主判定是否与旧版一致
- 水上 / 水下 / 露出 / 干出语义是否与旧版一致
- 危险物、潜堤、暗礁、浅水区等是否被误画成普通背景
- render-support 层是否被错误强化为实体业务语义对象
- 点击能命中但地图上没显示关键数字/文字的情况是否存在
当前重点专项至少包括:
depth_numeric_missingclearance_numeric_missingsafety_icon_missingsupport_layer_strengthened_fill
6.5 第五层:场景窗口审计
render-hit 审计不能完全覆盖标签碰撞、遮挡、底色覆盖、叠压顺序等上下文问题,因此必须有场景窗口审计兜底。
每个候选交付版至少要有固定样区集,覆盖:
- 港口进出口
- 近岸浅水带
- 灯火和浮标密集区
- 暗礁 / 潜堤 / 危险障碍物密集区
- 等深线和深度数字复杂区
- 适合钓鱼的复杂海底地形区
每个样区必须固定:
- 中心经纬度
- 缩放级
- viewport 尺寸
- 左右对比截图
- 样区关注对象
场景窗口审计用于回答:
- 危险是否一眼可见
- 关键数字是否在可读位置出现
- 颜色和底色是否传达了正确语义
- 新旧整体判断是否一致
6.6 第六层:风险分级门禁
所有差异都必须分级。
建议最低分为:
P0: 会直接影响航行安全或错误通航判断P1: 会明显误导用户对危险或限制的识别P2: 有视觉差异,但不改变主要判断P3: 样式细节偏差或非关键缺失
P0 示例:
- 水下物画成陆地或露出
- 露出物画成水下
- 灯火、浮标、危险物主图标缺失
- 关键深度数字、净空数字缺失
- 陆海边界明显误画
通过条件:
P0必须为 0P1必须在批准阈值以下并有整改计划P2/P3允许暂存,但必须进入差异清单
6.7 第七层:公开部署一致性审计
必须确认:
- 本地 style 与公开 style 内容一致
- 本地 tile 与公开 tile 内容一致
- 对比页和单页加载的是候选交付版,而不是缓存或旧版本
公开页一旦与本地待交付版本不一致,交付前审计视为未完成。
7. 航海版与钓鱼版的通过标准
7.1 航海版硬门禁
以下对象不得缺失或画反:
- 灯台、灯標、灯浮標、灯立標、航路標識
- 危险障碍物、暗礁、洗岩、露岩、潜堤、沉船
- 陆地、岸线、浅水区、干潮帯、可通航边界
- 净空限制、高度限制、航路边界、锚地相关限制
- 水深数字、关键等深线、关键危险辅助注记
额外要求:
- 颜色、图标、线型必须忠于旧版安全语义
- 不允许为了“画面更好看”而改变危险对象的识别方式
7.2 钓鱼版硬门禁
以下对象必须优先正确:
- 水深数字
- 等深线
- 海底线与海底地形
- 底质
- 鱼礁、障碍物、沉船、潜堤、暗礁
- 近岸结构和小范围危险物
钓鱼版允许:
- 弱化部分纯航海辅助对象
- 用更强调地形的方式表现非安全信息
但仍不允许:
- 安全对象画反
- 缺失会导致挂底、碰撞、搁浅误判的对象
8. 漏洞与补洞办法
单纯“比每个物体 hit 了多少层”仍然有漏洞。本规范明确要求同时补上以下检查。
8.1 count 不等于等价
漏洞:
- 新旧都 hit 了 2 层,但其中一层图标或颜色语义不同
补洞:
- 必须比
type + payload,不能只比 count
8.2 命中不等于可见
漏洞:
- 透明 fill、零宽线、空文本也可能被算作命中
补洞:
- 审计统计必须区分“命中”与“有效命中”
8.3 单对象通过不等于整体安全
漏洞:
- 对象单独没问题,但放进场景后被遮挡、碰撞或底色误导
补洞:
- 固定样区做场景窗口审计
8.4 旧新版不一定层数一一对应
漏洞:
- 旧版
1 icon,新版可能拆成arc + symbol - 或旧版
fill + pattern,新版用等价组合表达
补洞:
- 审计允许“等价表达”,但必须登记等价规则
- 等价规则未经登记,不得自行解释为通过
8.5 航海版和钓鱼版不能用同一把尺子
漏洞:
- 同一条差异,对航海版是
P0,对钓鱼版可能是P2
补洞:
- 风险分级和通过阈值必须分轨维护
9. 审计输出要求
每次交付前至少输出以下内容:
- 一份 Markdown 审计报告
- 一份 JSON 审计明细
- 一份样区截图包
- 一份差异清单
- 一份例外清单
Markdown 报告至少包含:
- 审计范围
- 匹配口径
- 总体结果统计
- 主要问题层
- 标注专项问题
- Style 语义专项问题
P0/P1/P2/P3分布- 场景窗口结论
- 是否通过
JSON 明细至少包含:
- 物体标识
- tile 实例信息
- 旧版命中
- 新版命中
- 差异类型
- 风险等级
- 是否属于航海版硬门禁对象
- 是否属于钓鱼版硬门禁对象
10. 通过与不通过判定
交付版只有在同时满足以下条件时,才允许进入正式交付:
- Style 有效性门禁通过
- 对象存在性门禁通过
- 物体级 render-hit 主审计通过
- Style 语义审计通过
- 场景窗口审计通过
P0 = 0- 公开部署一致性审计通过
下列任一情况直接判定不通过:
- 安全对象完全失去渲染
- 安全对象出现语义画反
- render-support 层被画成强实体语义对象
- 关键深度数字、净空数字、灯标主注记缺失
- 公开部署版本与本地待交付版本不一致
11. 例外管理
若确有必要故意偏离旧版表现,必须登记:
- 对象类型
- 影响范围
- 偏离原因
- 新旧差异说明
- 风险等级
- 批准人
- 回滚方式
未登记例外一律按缺陷处理。
12. 当前脚本实现边界
当前 navsea_render_audit.py 已经覆盖:
- 物体级 render observation 对比
- 标注缺失专项
- Style 语义专项
- 按 tile instance 粒度输出 Markdown / JSON 报告
当前仍未完全自动化的部分:
- 场景窗口审计
- 部署一致性自动校验
- 航海版 / 钓鱼版双阈值硬门禁
- 已登记等价表达规则的自动判定
因此,在这些能力补齐前:
- 自动审计报告只能视为主证据
- 固定样区人工复核仍是强制步骤
13. 规范与现有文档关系
本规范是交付前的执行规范。
相关上位和配套文档:
NavSea_Chart_Domain_Model_v1.mdNavSea_Legacy_Field_Exit_Roadmap.mdNavSea_Original_vs_Delivery_Render_Audit_Karatsu_20nm.md
后续如航海版与钓鱼版正式拆分,应在本规范下再各自补一份专项验收细则。