MBTiles 是一种地图瓦片(Map Tiles)存储格式规范,由 Mapbox 创建并开源。它将地图瓦片数据打包存储在 SQLite 数据库中,使地图可以以单个文件的形式进行分发、存储和传输。
核心特点
| 特性 | 说明 |
|---|---|
| 格式 | SQLite 数据库(.mbtiles 扩展名) |
| 内容 | 存储 XYZ 或 TMS 坐标系的栅格/矢量瓦片(PNG/JPG/WebP/矢量PBF) |
| 元数据 | 包含边界框、中心点、最小/最大缩放级别等信息 |
| 单文件 | 整个区域地图打包为一个文件,便于管理和传输 |
| 压缩 | 支持 gzip 压缩,减少存储体积 |
主要用途
- 离线地图:无需网络连接即可显示地图
- 移动端优化:减少 HTTP 请求,直接从本地数据库读取瓦片
- 数据分发:将大量瓦片打包为单个文件,便于分享和部署
- 缓存机制:作为地图服务的本地缓存层
如何使用
1. 生成 MBTiles 文件
使用工具将地图数据源转换为 MBTiles:
bash
# 使用 tippecanoe(矢量瓦片)
tippecanoe -o output.mbtiles input.geojson
# 使用 gdal2mbtiles(栅格瓦片)
gdal2mbtiles input.tif output.mbtiles
# 使用 QGIS 插件(图形界面)
# 安装 QTiles 插件导出 MBTiles
2. 读取和使用
Web 应用(使用 Mapbox GL JS / Leaflet):
javascript
// Mapbox GL JS
map.addSource('offline-map', {
type: 'vector',
url: 'mbtiles://path/to/file.mbtiles'
});
// Leaflet(使用 leaflet.mbTiles 插件)
L.tileLayer.mbTiles('path/to/file.mbtiles', {
minZoom: 0,
maxZoom: 14
}).addTo(map);
移动端(Android/iOS):
- Android : 使用
MBTilesProvider配合地图 SDK(如 Mapbox、Google Maps) - iOS : 使用
MBTiles库或Mapbox MobileSDK 加载本地文件
服务端(TileServer):
bash
# 使用 tileserver-gl 快速搭建瓦片服务
docker run --rm -it -v $(pwd):/data -p 8080:80 maptiler/tileserver-gl
典型应用场景
| 场景 | 示例 |
|---|---|
| 野外作业 | 地质勘探、林业调查、户外徒步 App,在无信号区域使用离线地图 |
| 车载导航 | 车载系统预装城市地图 MBTiles,减少实时流量消耗 |
| 嵌入式设备 | 无人机地面站、船载导航系统,快速加载本地地图 |
| 数据发布 | 将历史地图、专题地图打包分发,用户无需配置复杂服务端 |
| 移动端 App | hikers、OruxMaps、Locus Map 等户外导航应用 |
| 离线GIS系统 | 政府内网、保密环境无法连接互联网时的地图解决方案 |
常用工具生态
- 生成 :
tippecanoe(矢量)、gdal2mbtiles、QGIS、TileMill - 查看 :
MBTiles Viewer、QGIS(直接拖入) - 服务 :
tileserver-gl、mbtileserver - 处理 :
mb-util(Python 工具集)、tilelive
一句话总结:MBTiles 是地图界的"便携包",把成千上万的地图小图片装进一个数据库文件,让离线地图像播放本地视频一样简单。