3.8 KiB
3.8 KiB
全国 full / semantic 高 extent 几何错移根因报告
1. 结论
- 当前全国
full / semantic中反复出现的“大块空白 / 岛礁附近整块打穿 / 右侧大片缺失”问题 - 根因不是
style改图标本身 - 真正根因是:
- 某条会重写
PBF的生产链路 - 在处理原始
extent = 1048576的高精度 tile 时 - 用了
4096口径重编码几何
- 某条会重写
- 结果会把 tile 的几何整体错移,尤其是
Y坐标整张 tile 下移一个:1048576 - 4096 = 1044480量级的偏移
2. 证据
2.1 生产坏 tile 的数值签名
- 代表坏 tile:
/tmp/navsea_hotspot_rebuild/backup_full/12/3526/1643.pbf/tmp/navsea_hotspot_rebuild/backup_semantic/12/3526/1643.pbf
- 对比 source tile:
/home/wwwroot/newpec/exported_auto/tile.mapple-on.jp__newpec-mvt-20260106__z___x___y_.pbf/tiles/12/3526/1643.pbf
- source 正常 overflow:
20480
- 坏 tile overflow:
1064960
2.2 复现实验
- 已直接拿 source tile 做重编码实验
- 当把原始
extent = 1048576tile 重新编码时,故意把 layerextent改成4096 - 可以稳定复现出与生产坏 tile 一模一样的几何签名:
overflow = 1064960
- 这说明:
- 当前线上坏 tile 不是随机损坏
- 而是非常明确的“高 extent tile 被按 4096 口径重编码”的产物
2.3 热点备份审计结果
- 对修前热点 full 备份:
- 对修前热点 semantic 备份:
- 结果:
backup_full:154张里有42张命中该签名backup_semantic:154张里有43张命中该签名
3. 为什么会让人误以为是“改图标导致的”
- 图标 / style 变更本身不会把海底等深线、海岸线、陆域几何整块打空
- 但“图标改名 / 属性改写”这类需求往往会触发:
decode pbf改属性encode pbf这条重写链
- 一旦这条链在高 extent tile 上没有保回原始 extent
- 几何就会被整体写坏
- 所以用户看到“像是改 style 图标之后坏了”
- 现象上是对的
- 但根因不是 style
- 而是“被图标/属性变更触发的 PBF 重编码链”出了错
4. 本轮代码修复
4.1 已新增重编码守卫
用途:
- 统一保存原 layer
extent - 重编码后立即和 source tile 做几何签名比对
- 一旦出现:
- overflow 异常增大
- 或命中
1048576 -> 4096错重编码签名 直接报错,不允许静默产出坏 tile
4.2 已新增根因审计脚本
用途:
- 审计目标目录里是否存在:
- 高 extent tile 被按 4096 口径错重编码 的几何签名
4.3 已加固语义版 PBF 重写链
当前要求:
- decode 时显式带出原始 layer extent
- encode 时必须按原 layer extent 写回
- 每张被重写的 tile 写完后立即做几何守卫校验
5. 当前对线上问题的影响
- 热点 AOI 中已修过的 tile:
- 已通过重建替换为当前正确几何
- 但全国目录里仍可能存在更多尚未重建的历史坏 tile
- 因此要“彻底解决”全国问题,最终仍需要:
- 用当前受保护的生产链路重建全国
full - 再基于新的 full 重建
semantic - 并在部署前跑一轮
extent shift audit
- 用当前受保护的生产链路重建全国