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