首页 文章

预先安装(在apk文件上)磁贴的Android离线 Map

提问于
浏览
0

有没有办法让一个离线 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 回答

  • 0

    是的你可以 . 两个策略

    • 准备sqlite文件,就像在wiki中描述的那样,并将其放在资产中 . 当您的应用首次启动时,在重新创建/膨胀 Map 之前将数据库复制到/ sdcard / osmdroid /

    • 将tile zip的内容存储在资产中 . 文件结构看起来像assets / TILESOURCENAME / Z / X / Y.extension . 使用这种机制,osmdroid droid应该使用默认的tile提供程序链找到它 .

    注意:#1通常更快 .

相关问题