我目前正在研究一个学校项目,我正在尝试学习将OSM Map Tiles下载到手机的本地内存/缓存中的技术,以便用户能够在离线。
这是通过提供特定位置来完成的,并且在距离位置的特定半径/距离之内的地图图块将被下载到电话内存中(在线连接时)以进行离线显示。
但是,我在理解osmdroid的API方面有一些麻烦。从我的理解中,似乎所涉及的课程是:
- maptilebase
- mapdownloader
- ifilesystemcache
如果我误会了,请纠正我。
另外,在maptilebase(我认为是提供商)中,getmaptile返回android.graphics.drabable.drabable.drawable。
这个可绘制的类甚至与离线映射显示的概念有关?
希望有人可以在要求下载到手机的内存中的确切地图上启发我,以及我们如何编辑地图以显示界面项目,例如路由,引脚,等等。
我没有完全答案,因为您正在寻找一种在MapView尚未导航的区域之外缓存的方法。内置的缓存支持在那里,但不完全是您想做的。
如果您打算缓存,而不仅仅是提供自己的离线地图瓷砖,则需要在线下载功能。我会看一下Maptiledownloader,也许尝试实现自己的版本。maptiledownloader.tileloader.loadtile()方法采用一个Maptilerequeststate,我相信需要在需要地图瓷砖时调用Maptileproviderarray。
如果您可以复制现有的Maptiledownloader的TileLoDADER功能,则可能可以将自己的相对Maptilerequeststate或直接的Maptile注入所要求的Maptilerequeststate或直接上升。例如以称为MapTilereQuestState的TileLoader,进行检查,弄清楚如何构建代表当前视图之外瓷砖的新的Maptilerequeststate/Maptile。不过,这并不容易,因为您必须处理不同的变焦级别,并且根据变焦级别,半径应该较小,等等...较低的缩放水平的瓷砖半径较大更高的10。
我个人最近正在尝试100%离线工作,因此我没有任何示例代码可以提供帮助。好运,即使已经有几个月了。
首先,向右转到源https://github.com/osmdroid/osmdroid
有一些Wiki文章将有所帮助,尤其是离线地图瓷砖文章。简而言之,使用MOBAC或OSMDROID提供的工具。OSMBONUSPACK还具有在设备上执行相同任务的工具。
实际上使用此类下载地图图块https://github.com/osmdroid/osmdroid/blob/master/osmdroid-andsrc/src/main/java/java/org/osmdroid/tileprovider/mmodules/maptiledownownloader.java