有没有办法让一个离线 Map ,而不需要第一次网络连接,以缓存一些 Map 数据?
首先我使用谷歌 Map ,但它似乎只缓存了一些瓷砖,如果你没有互联网连接,它不会在第一次启动时加载任何东西
之后我尝试了osmdroid,它足够接近谷歌 Map 逻辑,但我找不到一种方法来使用资产文件夹而不是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);
我在资产/ MapQuest / z / x / y.jpg上有我的瓷砖
奇怪的是,在那个链接中:https://github.com/osmdroid/osmdroid/wiki/Map-Sources它说:
Tile Source确定显示的图像集,例如Bing,Mapquest,Mapnik等 . 默认的Tile Provider,在(/ sdcard / osmdroid)中搜索以下的Tile Source,Assets,Offline zip / sqlite / etc,下载了瓷砖缓存(/ sdcard / osmdroid / tiles),最后是下载器 .
1 回答
是的你可以 . 两个策略
准备sqlite文件,就像在wiki中描述的那样,并将其放在资产中 . 当您的应用首次启动时,在重新创建/膨胀 Map 之前将数据库复制到/ sdcard / osmdroid /
将tile zip的内容存储在资产中 . 文件结构看起来像assets / TILESOURCENAME / Z / X / Y.extension . 使用这种机制,osmdroid droid应该使用默认的tile提供程序链找到它 .
注意:#1通常更快 .