我使用Tippecanoe生成了一个mbtiles
文件,只有-zg
和--drop-densest-as-needed
作为额外参数。我将文件上传到Mapbox Studio,一切都运行良好,无论是在Studio中还是在通过移动应用程序加载图块时。
然后我尝试使用Go中非常基本的HTTP服务器自行托管磁贴。 Tile从SQLite转移到PostgreSQL数据库(原因是Go + PSQL是应用程序的现有堆栈)。
由于某种原因,功能会根据缩放级别而移动。在1级,应该在美国的数据是在南极,在缩放级别2,它在智利海岸附近等。唯一正常工作的是0级,因为那里&#39 ;只有一块瓷砖。
我检查了Mapbox在旧金山时请求的缩放级别为11:第327行,第791行。.mbtiles
文件中此行/列组合不存在任何图块,尽管那里有数据
除了使用z / x / y在数据库中查找之外,还有其他事情需要对mbtiles进行吗?或者也许可以在应用程序端配置?
服务器代码:
row := db.QueryRow(`
SELECT tile_data FROM tiles
WHERE
zoom_level = $1
AND tile_column = $2
AND tile_row = $3
`,
z, x, y,
)
在Android上:
map.addSource(
VectorSource(
"tiles",
TileSet("2.2.0", "http://my.local.server:4000/tiles/{z}/{x}/{y}.mvt?key=2448A697EACDDC41432AAD9A1833E")
)
)
我尝试设置VectorSource
元数据中找到的center
bounds
和mbtiles
,但它没有改变任何内容。
答案 0 :(得分:3)
所以我查看了现有的服务器实现,结果证明偏移是因为mbtiles以TMS格式存储,其中Y坐标被翻转。因此,我们只需要从XYZ格式转换Y以获得正确的图块:
来自Mapbox自己的Node implementation:
// Flip Y coordinate because MBTiles files are TMS.
y = (1 << z) - 1 - y;
1 << z
是给定缩放级别的行数,或者是z的幂的两行。
有关XYZ vs TMS的更多信息,请访问here。