datasette-tiles 作者:simonw

Star

Screenshot of simonw/datasette-tiles

README 源代码

datasette-tiles

PyPI Changelog Tests License

用于提供 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

配置 Leaflet 瓦片图层

以下 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

Retina 瓦片

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