Mapbox TipperCanoe生成的mbtiles中的坐标不正确

Mapbox TipperCanoe生成的mbtiles中的坐标不正确,mapbox,mbtiles,tippecanoe,Mapbox,Mbtiles,Tippecanoe,我使用Tippecanoe生成了一个mbtiles文件,其中包含-zg和-drop-densest(根据需要)作为额外参数。我将文件上传到Mapbox Studio,无论是在Studio中还是通过移动应用程序加载瓷砖时,一切都很好 然后,我在Go中使用了一个非常基本的HTTP服务器,尝试了自我托管tiles。Tile已从SQLite传输到PostgreSQL数据库(原因是Go+PSQL是应用程序的现有堆栈) 由于某些原因,特征会根据缩放级别进行移动。在1级,应该在美国的数据在南极,在zoom 2

我使用Tippecanoe生成了一个
mbtiles
文件,其中包含
-zg
-drop-densest(根据需要)作为额外参数。我将文件上传到Mapbox Studio,无论是在Studio中还是通过移动应用程序加载瓷砖时,一切都很好

然后,我在Go中使用了一个非常基本的HTTP服务器,尝试了自我托管tiles。Tile已从SQLite传输到PostgreSQL数据库(原因是Go+PSQL是应用程序的现有堆栈)

由于某些原因,特征会根据缩放级别进行移动。在1级,应该在美国的数据在南极,在zoom 2级,它在智利海岸,等等。唯一正常工作的是0级,因为只有一块瓷砖

我检查了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
中心
边界
mbtiles
元数据中找到,但它没有改变任何东西。

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

从Mapbox自己的:

//翻转Y坐标,因为MBTILE文件是TMS。

y=(1所以我研究了现有的服务器实现,结果发现偏移量是因为MBTile存储在TMS格式中,其中y坐标被翻转。所以我们只需要将y从XYZ格式转换为正确的tile:

从Mapbox自己的:

//翻转Y坐标,因为MBTILE文件是TMS。
y=(1
// Flip Y coordinate because MBTiles files are TMS.
y = (1 << z) - 1 - y;