MBTiles入门必读:10个核心概念与术语完整清单
【免费下载链接】mbtiles-specspecification documents for the MBTiles tileset format项目地址: https://gitcode.com/gh_mirrors/mb/mbtiles-spec
MBTiles 是一种在 SQLite 数据库中存储瓦片地图数据的开放规范,也是离线地图领域最流行的文件格式之一。一个 MBTiles 文件(官方术语为 tileset,即瓦片数据集)本质是一个 .mbtiles 数据库文件,把成千上万张地图瓦片、元数据与交互信息打包在一起,方便拷贝、传输与离线使用。无论你是 GIS 新手、前端地图开发者,还是想给 App 添加离线地图功能,理解这些核心概念都能事半功倍。本文用 10 个核心概念加一张术语速查表,带你快速入门 MBTiles 格式。
MBTiles 是什么?先看三个关键认知
在逐个拆解概念之前,先建立三个最基础的认知:
- 📦一个 MBTiles 文件 = 一个瓦片数据集(tileset),官方规范见仓库内最新文档
1.3/spec.md。 - 🗃️MBTiles 本质是一个 SQLite 数据库,用标准的数据库表组织瓦片数据。
- 🗺️里面装的是"可直接显示的瓦片",而非原始矢量数据(这与 GeoJSON、Spatialite 有本质区别)。
💡 MBTiles 是一个"最小规范":它只规定数据如何被读取,不限制内部如何压缩与优化,因此各家实现可以在内部自由发挥,只要对外满足规范即可。
概念 1:Tileset(瓦片数据集)—— MBTiles 文件的本体
Tileset 是官方对 MBTiles 文件的称呼,意为"瓦片数据集"。一个 MBTiles 文件恰好代表一个瓦片数据集,并可以附带交互网格数据(如 UTFGrid)。如果你的项目包含多个图层(或地图),通常的做法是把它们拆分为多个 MBTiles 文件,各文件互不干扰。
概念 2:SQLite 数据库—— MBTiles 的容器格式
MBTiles 的物理形态就是一个 SQLite 数据库文件,硬性要求有三点:
- SQLite 版本必须为 3.0.0 或更高;
- 只允许使用 SQLite 核心特性,不得依赖任何扩展;
- 可以使用 SQLite 官方为 MBTiles 分配的 magic number,便于程序快速识别文件类型。
一个合规的 MBTiles 数据库至少包含两张表:
metadata(必需):元数据键值对表;tiles(必需):瓦片数据表;grids/grid_data(可选):UTFGrid 交互数据表。
规范还允许用"视图(view)"来模拟表结构,所以两个实现内部存储细节可以完全不同,但对外都满足同一套接口。
概念 3:地图瓦片(Tile)—— 一张一张的小方块
地图瓦片就是把整幅地图按 256×256 像素切成的无数小方块,不同缩放级别下的瓦片组合起来,就形成了"瓦片金字塔":级别越高,瓦片数量越多、细节越丰富。MBTiles 的tiles表中,tile_data列存放的就是每张瓦片的二进制数据(blob),可能是图片,也可能是矢量瓦片数据。
概念 4:瓦片坐标(zoom_level / tile_column / tile_row)—— 每张瓦片的"身份证"
tiles表用三个整数字段唯一定位一张瓦片:
zoom_level:缩放级别;tile_column:列号(X);tile_row:行号(Y)。
这套坐标遵循 TMS(Tile Map Service)规范,并且强制使用 global-mercator(即 Spherical Mercator)投影剖面。需要特别注意的是,TMS 的行号 Y 轴与 Web 地图常见的 "XYZ" 坐标系是反向的。例如 URL 中常见的瓦片 11/327/791,在 MBTiles 中应存为zoom_level=11, tile_column=327, tile_row=1256,因为 1256 = 2¹¹ − 1 − 791。这是新手最容易踩的坑之一!🕳️
概念 5:metadata 元数据表—— 瓦片数据集的"户口本"
metadata表是 MBTiles 的信息中心,采用最简单的键值对结构:只有name和value两列(均为 text 类型,且必须用 UTF-8 编码),建表语句仅一行CREATE TABLE metadata (name text, value text);。在 1.3 规范中:
| 类型 | 键 | 说明 |
|---|---|---|
| 必需 | name | 数据集名称 |
| 必需 | format | 瓦片格式(pbf/jpg/png/webp 等) |
| 建议 | bounds | 覆盖范围(经纬度) |
| 建议 | center | 默认视角(经度,纬度,级别) |
| 建议 | minzoom/maxzoom | 缩放级别上下限 |
| 可选 | attribution | 版权与数据来源说明 |
| 可选 | description/type/version | 描述、类型、数据集版本 |
概念 6:format 字段—— 瓦片数据的"血型"
format决定了瓦片数据的编码格式,是读取工具选择解码方式的关键依据。在最新 1.3 规范中,允许的取值包括:
| format | 含义 |
|---|---|
png/jpg | 栅格瓦片(传统图片格式) |
webp | 栅格瓦片(WebP 格式) |
pbf | gzip 压缩的 Mapbox Vector Tile 矢量瓦片 |
| 其他 | 任意合法的 IETF media type |
早期版本(1.0/1.1/1.2)只支持png和jpg,矢量瓦片支持是 1.3 才加入的重要变化。
概念 7:bounds 与 center—— 地图的范围与默认视角
bounds:描述瓦片数据集覆盖的最大范围,使用 WGS 84 经纬度,格式为 OpenLayers 的left,bottom,right,top。例如全球(不含两极)为-180.0,-85,180,85。center:描述地图打开时的默认视角,格式为经度,纬度,缩放级别,例如-122.1906,37.7599,11(旧金山)。
这两个键能帮助地图客户端快速定位与渲染,新建数据集时建议务必填上。
概念 8:minzoom 与 maxzoom—— 缩放级别的上下限
minzoom和maxzoom分别表示数据集提供瓦片的最低与最高缩放级别,客户端据此判断"哪些级别可以请求"。值得一提的是,未来版本的规范计划把bounds、minzoom、maxzoom都升级为必需键,所以现在建数据集时最好一次性写全,避免将来不兼容。
概念 9:PBF 矢量瓦片—— 1.3 时代的矢量革命
1.3 规范的最大亮点是正式支持矢量瓦片。当format为pbf时,瓦片数据是 gzip 压缩的 Mapbox Vector Tile 数据,同时metadata表中必须包含一个json键,用来描述瓦片内的图层结构:
vector_layers:图层清单,包含每个图层的id、fields(字段名与类型:Number / Boolean / String),以及可选的description、minzoom、maxzoom;tilestats:可选的图层统计信息,含属性示例值与数值范围,便于前端做样式匹配。
矢量瓦片的优势是体积小、可动态样式化,是目前 Web 地图的主流方案。🚀
概念 10:UTFGrid 交互网格—— 让瓦片"可点击"
UTFGrid 是让静态瓦片具备交互能力的轻量方案,例如鼠标悬停显示地名。从 1.2 起,UTFGrid 从 MBTiles 中独立为配套规范(仓库中1.1/utfgrid.md仍保留完整说明与示例)。在 MBTiles 数据库中,它对应两张可选表:
grids:存放 gzip 压缩的 UTFGrid 数据;grid_data:存放 key 到 JSON 对象的映射。
UTFGrid 的核心思想是用一长串字符代替逐像素存储信息,把 256×256 瓦片的交互数据压缩到极小体积(gzip 后通常不足 2KB),非常适合浏览器场景。服务端还可通过layer.json(formatter 格式化函数、legend 图例)与*.grid.json端点提供交互数据,详见1.1/interaction.md。
附:MBTiles 术语速查表
| 术语 | 一句话解释 |
|---|---|
| Tileset | MBTiles 文件,即一个瓦片数据集 |
| Tile | 256×256 的地图瓦片 |
| SQLite | MBTiles 的容器数据库 |
| TMS | 瓦片地图服务规范,MBTiles 坐标遵循它 |
| XYZ | 常见瓦片 URL 坐标系,Y 轴与 TMS 相反 |
| Spherical Mercator | 球形墨卡托投影,MBTiles 唯一支持的投影 |
| WGS 84 | 经纬度坐标系统,bounds/center 使用它 |
| blob | SQLite 的二进制类型,存放瓦片原始数据 |
| gzip | 压缩格式,pbf 与 grids 数据使用 |
| overlay / baselayer | 叠加层 / 底图层 |
| magic number | SQLite 官方为 MBTiles 分配的文件标识 |
快速了解:MBTiles 版本演进
想读透规范,建议按版本顺序阅读仓库中的规格文档:
| 版本 | 关键变化 | 文档 |
|---|---|---|
| 1.0 | 基础版本,metadata 含 name/type/version/description | 1.0/spec.md |
| 1.1 | format 升级为必需键,bounds 建议提供,加入 UTFGrid 交互 | 1.1/spec.md、1.1/utfgrid.md |
| 1.2 | UTFGrid 独立成规范 | 1.2/spec.md |
| 1.3 | 支持矢量瓦片(pbf),修订 metadata | 1.3/spec.md |
版本变更记录可查看CHANGELOG.md,交互细节可参考1.1/interaction.md与示例文件1.1/demo.json。
常见问题(FAQ)
MBTiles 是什么?MBTiles 是一种把瓦片地图数据存进 SQLite 数据库的开放规范,文件后缀通常为.mbtiles,一个文件就是一个完整的瓦片数据集。
MBTiles 能存什么?可以存栅格瓦片(png/jpg/webp)、矢量瓦片(pbf)以及 UTFGrid 交互数据。
如何查看 MBTiles 文件内容?因为它就是 SQLite 数据库,用任意 SQLite 工具(如 sqlite3 命令行或数据库管理软件)即可直接打开,查看metadata、tiles等表的结构与数据。
MBTiles 与在线瓦片服务有什么区别?在线瓦片服务按需返回单张瓦片,而 MBTiles 把整组瓦片打包在一个文件里,天然适合离线地图、内网分发与数据交换。
结语
至此,MBTiles 的 10 个核心概念与常见术语你已经全部掌握:从 SQLite 容器、瓦片坐标,到 metadata 元数据、PBF 矢量瓦片和 UTFGrid 交互,这套知识足以支撑你读懂任何一份 MBTiles 数据集。下一步,建议打开仓库中的1.3/spec.md对照本文逐条验证,再找个真实的.mbtiles文件用 SQLite 工具"解剖"一遍,入门就是水到渠成的事。祝你玩得开心!🎉
【免费下载链接】mbtiles-specspecification documents for the MBTiles tileset format项目地址: https://gitcode.com/gh_mirrors/mb/mbtiles-spec
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考