在OSMDroid中缓存特定地图瓦片的下载

10

我目前正在参与一个学校项目,尝试学习下载OSM地图瓦片到手机本地内存/缓存的技术,以便用户可以在离线状态下查看地图。

这将通过提供特定位置来完成,从该位置开始,在特定半径/距离内的地图瓦片将在有网络连接时下载到手机内存中以供离线显示。

然而,我对OSMDroid的API有些困惑。 从我的理解来看,相关的类是:

如有错误,请指正。

此外,在我认为是提供者的MapTileBase中,getMapTile返回 android.graphics.drawable.Drawable

这个Drawable类是否与离线地图显示的概念相关?

希望有人能向我解释地图被调用下载到手机内存的确切位置,以及如何编辑地图以显示诸如路线、标记等接口元素。


1
可能是下载osmdroid地图的重复问题。 - StackExchange What The Heck
2个回答

1

我没有确切的答案,因为你想要缓存离线地图在MapView尚未导航到的区域。内置的缓存支持是存在的,但不完全符合你的需求。

如果你计划进行缓存而不仅仅提供自己的离线地图瓦片,那么你需要在线下载能力。我建议你看一下MapTileDownloader,或许试着实现自己的版本。MapTileDownloader.TileLoader.loadTile() 方法接受一个MapTileRequestState参数,当需要地图瓦片时,MapTileProviderArray就会调用它。

如果你能够复制现有的MapTileDownloader的TileLoader功能,你可能可以向请求的状态注入自己相对应的MapTileRequestState或者直接的MapTile。例如,获取名为MapTileRequestState的TileLoader,检查它,找出如何构造新的MapTileRequestState/MapTile以表示当前视图范围之外的瓦片。不过这并不容易,因为你需要处理不同的缩放级别,并且根据缩放级别不同,半径应该更小等等。比如,缩放级别较低的18将具有比较高10级别更大的瓦片半径。

个人最近正在尝试100%离线工作,所以我没有任何示例代码可供帮助。尽管已经过了几个月,祝你好运。


2
无论如何,感谢您的输入 =)我通过下载特定的MapTiles并将它们压缩在手机上以进行离线显示来解决了这个问题。我设法让下载工作在一个缩放级别上正常运行,但在多个缩放级别上又出现了问题此处 - lyk
真可惜。我最近刚刚成功使用离线瓦片在一个由activity_main.xml构建的OSMDroid MapView上,而不是通常的onCreate()构造函数。这是链接:http://stackoverflow.com/questions/13894267/how-to-add-a-sliding-drawer-a-mapview-view-thats-created-programmatically - dubmojo

0

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