用于提供 MBTiles 地图瓦片的 Datasette 插件
在与 Datasette 相同的环境中安装此插件。
$ datasette install datasette-tiles
您可以在 https://datasette-tiles-demo.datasette.io/-/tiles 试用此插件
此插件会扫描所有连接到 Datasette 的数据库文件,以检查它们是否是有效的 MBTiles 数据库。
然后,它可以从这些数据库中提供瓦片,URL 如下:
/-/tiles/db-name/zoom/x/y.png
每个数据库的示例地图(演示该数据库配置的最小和最大缩放级别)可以在 /-/tiles/db-name
找到 - 也可以通过该数据库的表和数据库操作菜单访问此地图。
访问 /-/tiles
以获取附加的有效数据库的索引页。
您可以安装 datasette-basemap 插件,以获取一个 basemap
默认瓦片集,使用 OpenStreetMap 处理 0 到 6 的缩放级别。
在线地图中常用的瓦片坐标系有两种。第一种由 OpenStreetMap 和 Google Maps 使用,第二种来自一个名为 Tile Map Service(或 TMS)的规范。
这两种系统都使用三个组成部分:z/x/y
- 其中 z
是缩放级别,x
是列,y
是行。
区别在于 y
值的计数方式。OpenStreetMap 的 y=0 在顶部。TMS 的 y=0 在底部。
一个说明性示例:在缩放级别 2,地图被分为总共 16 个瓦片。OpenStreetMap 方案的编号如下:
0/0 1/0 2/0 3/0
0/1 1/1 2/1 3/1
0/2 1/2 2/2 3/2
0/3 1/3 2/3 3/3
TMS 方案如下所示:
0/3 1/3 2/3 3/3
0/2 1/2 2/2 3/2
0/1 1/1 2/1 3/1
0/0 1/0 2/0 3/0
datasette-tiles
可以使用这两种标准中的任何一种提供瓦片。对于 OpenStreetMap / Google Maps 的顶部 y=0 系统,请使用以下 URL:
/-/tiles/database-name/{z}/{x}/{y}.png
对于 TMS 的底部 y=0 系统,请使用此 URL:
/-/tiles-tms/database-name/{z}/{x}/{y}.png
以下 JavaScript 将配置一个 Leaflet TileLayer 以与此插件配合使用:
var tiles = leaflet.tileLayer("/-/tiles/basemap/{z}/{x}/{y}.png", {
minZoom: 0,
maxZoom: 6,
attribution: "\u00a9 OpenStreetMap contributors"
});
datasette-tiles
可以配置为从多个附加的 MBTiles 文件提供瓦片,按顺序搜索每个数据库以查找瓦片,如果找不到则回退到下一个数据库。
要查看此功能的演示,请访问 https://datasette-tiles-demo.datasette.io/-/tiles-stack 并缩放到日本。一旦达到缩放级别 6 和 7,它应该开始显示Stamen 的 Toner map 日本地图。
/-/tiles-stack/{z}/{x}/{y}.png
端点提供此功能。
如果您像这样启动 Datasette:
datasette world.mbtiles country.mbtiles city1.mbtiles city2.mbtiles
对 /-/tiles-stack
路径中的瓦片的任何请求将首先检查 city2
数据库,然后是 city1
,接着是 country
,最后是 world
。
如果您安装了 datasette-basemap 插件,它将被特殊处理:basemap
数据库将始终是最后一个检查瓦片的数据库。
您可以使用 tiles-stack-order
插件设置配置明确的顺序,而不是依赖于附加数据库的顺序。将以下内容添加到您的 metadata.json
文件中:
{
"plugins": {
"datasette-tiles": {
"tiles-stack-order": ["world", "country"]
}
}
}
然后您可以像这样运行 Datasette:
datasette -m metadata.json country.mbtiles world.mbtiles
此端点使用 OpenStreetMap / Google Maps 坐标系提供瓦片。要使用 TMS 坐标系加载瓦片,请改为使用此端点:
/-/tiles-stack-tms/{z}/{x}/{y}.png
datasette-tiles
支持 Retina(双倍分辨率)瓦片,前提是 MBTiles 数据库文件包含 512x512 的瓦片图像,而不是默认的 256x256。Leaflet 等 JavaScript 库将以固定的 256x256 尺寸提供这些瓦片,这将使它们在支持的操作系统上正确显示。
要在本地设置此插件,请先检出代码。然后创建一个新的虚拟环境:
cd datasette-tiles
python3 -mvenv venv
source venv/bin/activate
或者如果您正在使用 pipenv
:
pipenv shell
现在安装依赖项并运行测试:
pip install -e '.[test]'
要运行测试:
pytest