有没有办法在不需要第一次网络连接的情况下拥有离线地图来缓存一些地图数据?
首先,我使用了谷歌地图,但似乎它只缓存了一些瓷砖,如果你没有互联网连接,它不会在第一次启动时加载任何东西
之后,我尝试了osmdroid,它足够接近谷歌地图逻辑,但我找不到将其与资产文件夹一起使用的方法,而不是与预装的sdk文件夹瓷砖一起使用。如果用户的平板电脑没有SD卡怎么办?我确实需要一个适用于任何平板电脑的全球解决方案。
我只需要一个国家的瓷砖,而不是整个世界!
这是我到目前为止的代码
MapView mapView = new MapView(this, 256); //constructor
mapView.setClickable(true);
mapView.setBuiltInZoomControls(true);
mapView.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE);
setContentView(mapView); //displaying the MapView
mapView.getController().setZoom(6); //set initial zoom-level, depends on your need
mapView.getController().setCenter(new GeoPoint(37.9513589,23.6474895)); //This point is in Enschede, Netherlands. You should select a point in your map or get it from user's location.
mapView.setUseDataConnection(false);
我的磁贴在 assets/MapQuest/z/x/y 上.jpg
奇怪的是,在该链接中:https://github.com/osmdroid/osmdroid/wiki/Map-Sources 它说:
磁贴源确定显示哪些图像集,例如必应、地图任务、地图尼克等。默认磁贴提供程序在以下位置搜索您的磁贴源、资产、脱机 zip/sqlite/etc 中的 (/sdcard/osmdroid)、下载的磁贴缓存(/sdcard/osmdroid/tiles),最后搜索下载器。
是的,你可以。两种策略
- 准备一个 sqlite 文件,就像 wiki 中描述的那样,并将其放在资产中。当您的应用首次启动时,在重新创建/膨胀地图之前,将数据库复制到/sdcard/osmdroid/
- 将磁贴压缩的内容存储在资产中。文件结构看起来像assets/TILESOURCENAME/Z/X/Y.extension。使用此机制,osmdroid 机器人应该使用默认的磁贴提供程序链找到它。
注意:#1 通常更快。