OSMdroid:如何从zip归档文件中加载离线地图 - MapTileFileArchiveProvider

3

我需要关于 OSMdroid 库的帮助。将地图存储在 SD 卡中作为 zip 文件非常有用。同时,可以解压缩地图并直接使用图像文件以加快渲染速度。

当磁贴被解压缩、具有 .tile 扩展名并且存储在 /sdcard/osmdroid/tiles/Mapnik/... 文件夹中时,我成功地从 SD 卡中加载了瓦片。

我使用 Mobile Atlas Creator 和 OSMAND 磁贴存储格式来创建我的地图。

我阅读了一些网络教程,称包含瓦片的 zip 文件存储在 /sdcard/osmdroid 中,然后离线地图将从该 zip 文件加载。但这对我不起作用。

  1. 有人设法使其工作吗?如果是,怎么做呢?

  2. 我需要实例化自己的 MapTileFileArchiveProvider 吗?如果需要,如何做到?有什么例子吗?


1
嘿,你能发两个简单的示例吗——一个用于存储地图,另一个用于检索吗? - ofirbt
1
你能提供样例代码吗 :) - M. Usman Khan
2个回答

7
您的ZIP文件中需要以以下形式呈现文件:

文件需符合以下格式:

Z/X/Y.png

如果你将Y.tile文件重命名为Y.png,将它们压缩成zip文件并放置在/sdcard/osmdroid/目录中,那么应该可以正常使用。

抱歉我之前回答得太匆忙了。我正在进行进一步的测试,等我有结果了会分享给你们的。 - epiGR
1
非常感谢。地图瓦片已经正确渲染。 如果有人感兴趣,可以使用Mobile Atlas Creator的OSMdroid ZIP格式来创建这样的压缩地图。 - epiGR
@user976933 - zip文件不是需要放在/sdcard/osmdroid/tiles目录下吗?我已经尝试过两个地方,但仍然无法显示地图。 - David Doria
@DavidDoria 你能解决这个问题吗?我卡在这里了。 - Arjun Issar
@epiGR,你能展示一下设置瓦片源的代码片段吗? - Arjun Issar
@ArjunIssar 抱歉,这是很久以前的事了。如果我当时解决了问题,我会立即回复的 :( - David Doria

0

针对用户976933的回答,需要进行更正或补充,zip文件还应包含瓦片源名称作为基本目录,所需的zip内部结构如下:

tilesourcename/Z/X/Y

加载瓦片的代码位于BitmapTileSourceBase中:

@Override
public String getTileRelativeFilenameString(final MapTile tile) {
    final StringBuilder sb = new StringBuilder();
    sb.append(pathBase());
    sb.append('/');
    sb.append(tile.getZoomLevel());
    sb.append('/');
    sb.append(tile.getX());
    sb.append('/');
    sb.append(tile.getY());
    sb.append(imageFilenameEnding());
    return sb.toString();
}

public String pathBase() {
    return mName;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接