1

mbtiles使用 Tippecanoe 生成了一个带有 just-zg--drop-densest-as-neededas 额外参数的文件。我将文件上传到 Mapbox Studio,一切正常,无论是在 Studio 中还是在通过移动应用程序加载图块时。

然后,我在 Go 中使用非常基本的 HTTP 服务器尝试了自行托管磁贴的运气。切片从 SQLite 转移到 PostgreSQL 数据库(原因是 Go + PSQL 是应用程序的现有堆栈)。

出于某种原因,功能会根据缩放级别进行移动。在第 1 级,应该在美国的数据在南极,在缩放级别 2 时,它在智利海岸附近,等等。唯一正常工作的是 0 级,因为只有一个图块。

我检查了 Mapbox 在旧金山时为缩放级别 11 请求的图块:第 327 列,第 791 行。.mbtiles文件中不存在此行/列组合的图块,尽管那里有数据。

除了使用 z/x/y 在数据库中查找 mbtile 之外,还有其他事情要做吗?或者也许是在应用程序端配置的东西?

服务器代码:

row := db.QueryRow(`
    SELECT tile_data FROM tiles
    WHERE
        zoom_level = $1
        AND tile_column = $2
        AND tile_row = $3
    `,
    z, x, y,
)

在安卓上:

map.addSource(
        VectorSource(
                "tiles",
                TileSet("2.2.0", "http://my.local.server:4000/tiles/{z}/{x}/{y}.mvt?key=2448A697EACDDC41432AAD9A1833E")
        )
)

我尝试设置VectorSource'scenterboundsmbtiles元数据中找到,但它没有改变任何东西。

4

1 回答 1

4

所以我查看了现有的服务器实现,结果发现偏移是因为 mbtiles 以 TMS 格式存储,其中 Y 坐标被翻转。所以我们只需要将 Y 从 XYZ 格式转换为正确的图块:

来自 Mapbox 自己的Node 实现

// Flip Y coordinate because MBTiles files are TMS.
y = (1 << z) - 1 - y;

1 << z是给定缩放级别的行数,或者是 z 的 2 次方。

有关 XYZ 与 TMS 的更多信息也可以在这里找到。

于 2017-10-19T19:53:23.933 回答