Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

MBTiles 验证

原始 MBTiles 规范不对 MBTiles 中瓦片数据的内容提供任何保证。mbtiles validate 假设了一些额外的约定并使用它们来确保瓦片数据的内容有效,执行多个验证步骤。如果文件无效,该命令将打印错误消息并以非零退出代码退出。

mbtiles validate src_file.mbtiles

SQLite 完整性检查

validate 命令将在文件上运行 PRAGMA integrity_check,如果结果不是 ok 将失败。 --integrity-check 标志可用于禁用此检查,或使用 full 值使其更彻底。默认为 quick。

模式检查

validate 命令将验证 tiles 表/视图是否存在,以及它是否具有预期的列和索引。 它还将验证 metadata 表/视图是否存在,以及它是否具有预期的列和索引。

按瓦片验证

如果 .mbtiles 文件使用 flat_with_hash 或 normalized 模式,validate 命令将验证 tile_data 列的 MD5 哈希是否与 tile_hash 或 tile_id 列匹配(取决于模式)。

由 tilelive-copy 等工具生成的典型规范化模式在 tile_id 列中使用 MD5 哈希。Martin 的 mbtiles 工具可以使用此哈希来验证每个瓦片的内容。 我们还定义了一个新的 flat-with-hash 模式,它将哈希和瓦片数据存储在同一个表中,允许在没有多表布局的情况下进行按瓦片验证。

按瓦片验证不适用于 flat 模式,将被跳过。

聚合内容验证

按瓦片验证将捕获单个瓦片损坏,但不会检测整体数据存储损坏,例如缺少瓦片、不应存在的瓦片或具有不正确 z/x/y 值的瓦片。为此,mbtiles 工具定义了一个名为 agg_tiles_hash 的新元数据值。

该值通过对 tiles 表/视图中所有行的组合值进行哈希计算,按 z、x、y 排序。该值使用以下 SQL 表达式计算,该表达式使用来自 sqlite-hashes crate 的自定义 md5_concat_hex 函数:

md5_concat_hex(
    CAST(zoom_level  AS TEXT),
    CAST(tile_column AS TEXT),
    CAST(tile_row    AS TEXT),
    tile_data)

如果没有行或全部为 NULL,则使用空字符串的哈希值。请注意,SQLite 允许在任何列中存储任何值类型,因此如果 tile_data 意外包含非 blob/text/null 值,验证将失败。

mbtiles 工具将在复制或验证 mbtiles 文件时计算 agg_tiles_hash 值。使用 --agg-hash update 强制更新该值,即使它不正确或不存在。