Mapbox TipperCanoe生成的mbtiles中的坐标不正确
我使用Tippecanoe生成了一个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
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;