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

Posted

技术标签:

【中文标题】下载特定的地图以缓存在 OSMDroid 中【英文标题】:Downloading specific maptiles to cache in OSMDroid 【发布时间】:2012-10-09 17:37:17 【问题描述】:

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

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

但是,我在理解 OSMDroid 的 API 时遇到了一些小麻烦。据我了解,涉及的类似乎是:

MapTileBase MapDownloader IFilesystemCache

如果我错了,请纠正我。

此外,在 MapTileBase(我相信它是提供者)中,getMapTile 返回 android.graphics.drawable.Drawable。

这个Drawable类甚至与离线地图显示的概念有关吗?

希望有人能告诉我在哪里调用地图以将其下载到手机内存中,以及我们如何编辑地图以显示诸如路线、图钉等界面项目。

【问题讨论】:

Download maps for osmdroid的可能重复 【参考方案1】:

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

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

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

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

【讨论】:

仍然感谢您的输入 =) 我通过下载特定文件 MapTiles 解决了这个问题,并将它们压缩到手机中以供离线显示。我设法让下载适用于一个缩放级别,但再次遇到多个缩放级别的问题here 那太糟糕了。我最近也使用由 activity_main.xml 而不是通常的 onCreate() 构造函数构造的 OSMDroid MapView 使用离线磁贴:***.com/questions/13894267/…【参考方案2】:

首先,从源头开始 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

【讨论】:

以上是关于下载特定的地图以缓存在 OSMDroid 中的主要内容,如果未能解决你的问题,请参考以下文章

如何通过缓存制作离线地图(使用传单 OSM)?

如何在用户端下载 osmdroid 瓦片?

osmdroid - 显示更大的图块

如何使用 android 中的 OSM 数据为单个城市实现离线地理编码器?

当我触摸地图android Osm时如何关闭infoWindow

下载 osmdroid 的地图