我正在寻找一种方法来阅读我的离线 MBtiles 并在运行时根据纬度和经度找到边界框。我不想硬编码边界框。我希望能够从 MBTiles 文件中读取并根据左上角和右下角的 lat 和 long 值找出中心。它假设地图是矩形的(这是一个很好的假设)。这是简单的三角中点计算。
MapView.getBoundingBox
这仅返回屏幕上显示的地图边界框。我需要读取整个离线 .Mbtiles 地图文件的边界框。
另外,我将如何在运行时读取 .mbtiles 文件的最大缩放和最小缩放?
我正在寻找一种方法来阅读我的离线 MBtiles 并在运行时根据纬度和经度找到边界框。我不想硬编码边界框。我希望能够从 MBTiles 文件中读取并根据左上角和右下角的 lat 和 long 值找出中心。它假设地图是矩形的(这是一个很好的假设)。这是简单的三角中点计算。
MapView.getBoundingBox
这仅返回屏幕上显示的地图边界框。我需要读取整个离线 .Mbtiles 地图文件的边界框。
另外,我将如何在运行时读取 .mbtiles 文件的最大缩放和最小缩放?
AFAIK,MBTiles 只是一个具有不同扩展名的 Sqlite 数据库。这意味着您可以进行一些查询,例如
select max(z) from tiles;
//最大缩放级别
select min(z) from tiles;
//最小缩放级别
获得边界有点棘手,因为您必须从 X、Y 坐标系转换为纬度/经度(这就是您想要的,对吗?)
运行上面相同的查询以获取最小/最大 X 和 Y 值。然后运行 OSM wiki 上发布的算法之一,例如这个 http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Tile_bounding_box 以转换回 Lat/Lon。
我很确定这已经在 OsmDroid 中实现了,所以你只需要一个函数调用。