
MBTiles快速上手如何用SQLite创建你的第一个瓦片数据集【免费下载链接】mbtiles-specspecification documents for the MBTiles tileset format项目地址: https://gitcode.com/gh_mirrors/mb/mbtiles-specMBTiles 是一种把瓦片地图数据存储进 SQLite 数据库的开源规范它能将成千上万张地图瓦片打包进单个.mbtiles文件实现即取即用、高效传输。本教程面向零基础新手不依赖复杂框架带你用最基础的 SQLite 命令从建表到写入数据快速创建属于自己的第一个 MBTiles 瓦片数据集。什么是MBTiles一文读懂瓦片数据集格式MBTiles 是社区维护的一套规范文档用于定义如何在 SQLite 数据库中组织瓦片地图数据。按照该规范生成的文件被称为瓦片数据集tileset通常以.mbtiles后缀保存。它的核心设计哲学是最小规范只规定数据必须能被怎样读取不限制内部如何压缩与优化。因此你甚至可以用视图View包装内部结构只要对外接口符合规范就能被各类地图引擎兼容。要点速览 一个.mbtiles文件 一个完整瓦片数据集️ 支持图片瓦片png/jpg/webp与矢量瓦片pbf 仅采用球面墨卡托Spherical Mercator投影 可附带 UTFGrid 交互数据可选最新规范文档位于1.3/spec.md另有1.0/spec.md、1.1/spec.md、1.2/spec.md等历史版本可供对照查阅。为什么选择MBTiles离线地图与单文件分发的核心优势单文件分发整个地图包就是一个数据库文件拷贝、上传、分享都极其方便离线可用不依赖网络请求特别适合内网、移动端与野外作业场景高效传输SQLite 天然支持按需读取配合索引可快速定位任意瓦片生态成熟Leaflet、MapLibre、QGIS 等主流地图工具均支持直接读取MBTiles文件结构解析metadata表与tiles表一个合规的 MBTiles 数据库至少包含两张表表名作用是否必需metadata以键值对存储瓦片数据集的元信息名称、格式、范围等✅ 必需tiles存储瓦片本身每行对应一张瓦片✅ 必需grids/grid_data存储 UTFGrid 交互数据⬜ 可选metadata表结构非常简单只有name和value两列CREATE TABLE metadata (name text, value text);tiles表则是四列结构通过三维坐标精确定位每一张瓦片CREATE TABLE tiles (zoom_level integer, tile_column integer, tile_row integer, tile_data blob);其中tile_data存放瓦片图片的原始二进制数据blob。建议为坐标建立唯一索引大幅提升查询性能CREATE UNIQUE INDEX tile_index on tiles (zoom_level, tile_column, tile_row);快速上手第一步创建MBTiles数据库如果你还没有安装 SQLite绝大多数 Linux / macOS 系统自带sqlite3命令行工具Windows 用户下载命令行版本即可。打开终端创建并初始化一个名为my_first_map.mbtiles的瓦片数据集sqlite3 my_first_map.mbtiles进入 SQLite 交互界面后依次执行上文的建表语句数据库文件便已就绪。完整创建流程写入元数据与瓦片数据第一步写入元数据。规范要求metadata表必须包含name与format两行INSERT INTO metadata VALUES (name, 我的第一张地图); INSERT INTO metadata VALUES (format, png);推荐同时写入bounds地图范围、center默认视图中心、minzoom/maxzoom缩放级别范围INSERT INTO metadata VALUES (bounds, -180.0,-85,180,85); INSERT INTO metadata VALUES (center, 116.397,39.908,10); INSERT INTO metadata VALUES (minzoom, 0); INSERT INTO metadata VALUES (maxzoom, 5);第二步写入瓦片数据。使用 SQLite 命令行内置的readfile()函数将一张 PNG 图片作为瓦片插入INSERT INTO tiles VALUES (0, 0, 0, readfile(tile_0_0_0.png));最后输入.quit退出。此时my_first_map.mbtiles已经是一个合法、可被地图引擎直接加载的瓦片数据集了 验证写入结果执行SELECT zoom_level, tile_column, tile_row, length(tile_data) FROM tiles;即可查看瓦片数量与数据大小。MBTiles坐标体系tile_row翻转换算技巧MBTiles 遵循 TMSTile Map Service规范强制使用 global-mercator 剖面。这里有一个新手最容易踩的坑TMS 的 Y 轴方向与网页地图常见的 XYZ 坐标相反。例如网页地图上常见的11/327/791这张瓦片在 MBTiles 中应存储为zoom_level 11, tile_column 327, tile_row 1256换算公式为tile_row 2^zoom - 1 - y即2^11 - 1 - 791 1256。记住这个小技巧导入导出瓦片时就不会把地图倒过来啦metadata元数据字段速查表字段含义级别name瓦片数据集的可读名称必须format瓦片格式png/jpg/webp/pbf必须bounds地图范围左,下,右,上如-180.0,-85,180,85建议center默认视图中心与缩放级别建议minzoom/maxzoom最低 / 最高缩放级别建议attribution数据来源署名HTML 字符串可选description内容描述可选typeoverlay或baselayer可选version瓦片数据集自身版本号可选若format为pbf矢量瓦片还需在metadata表中加入json行用 JSON 描述各图层及其字段类型。UTFGrid 交互数据的存储细节可参考1.1/utfgrid.md与1.1/interaction.md。MBTiles版本演进从1.0到1.31.0奠定基础规定两张核心表与 PNG/JPG 图片瓦片1.1新增必需的format行建议加入bounds1.2将 UTFGrid 交互规范拆分独立版本号同步1.3补充矢量瓦片pbf元数据说明调整metadata规则未来版本还将引入compression字段并把bounds、minzoom、maxzoom提升为必需项。常见问题FAQQMBTiles 和普通 SQLite 数据库有什么区别AMBTiles 是瓦片数据的存储规范只存放已渲染好的瓦片而非原始矢量数据但它本质上仍是一个标准 SQLite 文件任何 SQLite 工具都能打开。Q瓦片数量太多能用现成工具生成 MBTiles 吗A可以。mb-util、tippecanoe 等命令行工具能快速把瓦片目录或 GeoJSON 转换为 MBTiles适合大规模生产。Q一个文件里能放多张地图吗A规范规定一个 MBTiles 文件代表一个瓦片数据集多个图层建议拆分为多个文件。结语从建表到写入瓦片你已经掌握了创建 MBTiles 瓦片数据集的核心流程。这个格式看似简单背后却承载了离线地图、移动 GIS、数据分发等无数真实场景。快打开终端试试吧你的第一张离线地图已经在路上【免费下载链接】mbtiles-specspecification documents for the MBTiles tileset format项目地址: https://gitcode.com/gh_mirrors/mb/mbtiles-spec创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考