在OSMDroid中下载特定的maptile到缓存

时间:2012-10-19 06:32:19

标签: android maps osmdroid offline-caching

我目前正在开展一个学校项目,我正在尝试学习将OSM地图图块下载到手机本地内存/缓存中的技术,以便用户在离线时能够查看地图。

这是通过提供特定位置来完成的,并且距离该位置特定半径/距离内的地图图块将被下载到手机存储器中(当有在线连接时)以进行离线显示。

但是,我在理解OSMDroid的API方面遇到了一些麻烦。根据我的理解,所涉及的课程似乎是:

如果我弄错了,请纠正我。

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

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

希望有人可以告诉我在哪里准确地将地图下载到手机的内存中,以及我们如何编辑地图以显示路线,别针等界面项目。

2 个答案:

答案 0 :(得分:1)

我没有准确的答案,因为您正在寻找一种在MapView尚未导航到的区域之外离线缓存的方法。内置的缓存支持就在那里,但不完全是你想要的。

如果您计划缓存而不仅仅提供自己的离线地图图块,那么您将需要在线下载功能。我会看看MapTileDownloader,也许会尝试实现自己的版本。 MapTileDownloader.TileLoader.loadTile()方法采用MapTileRequestState,我相信MapTileProviderArray在需要地图图块时调用。

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

就我个人而言,我最近正努力尝试100%离线工作,因此我没有任何示例代码可以提供帮助。祝好运好几个月。

答案 1 :(得分:0)

首先,走正确的源头 https://github.com/osmdroid/osmdroid

有一些wiki文章可以提供帮助,尤其是离线地图图块文章。简而言之,使用MOBAC或osmdroid提供的工具。 OSMBonuspack还有一个工具可以在设备上执行相同的任务。

实际上是使用此类下载地图图块 https://github.com/osmdroid/osmdroid/blob/master/osmdroid-android/src/main/java/org/osmdroid/tileprovider/modules/MapTileDownloader.java