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

时间:2016-03-04 23:35:52

标签: android maps offline osmdroid

有没有办法让离线地图不需要第一次网络连接才能缓存一些地图数据?

首先我使用谷歌地图,但它似乎只缓存了一些瓷砖,如果没有互联网连接,它不会在第一次启动时加载任何东西

之后我尝试了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);

我在资产/ MapQuest / z / x / y.jpg

上有我的牌

奇怪的是,在那个链接中:https://github.com/osmdroid/osmdroid/wiki/Map-Sources它说:

  

“平铺源”确定显示的图像集,例如Bing,Mapquest,Mapnik等。默认的平铺提供程序,在下面搜索您的平铺源,资产,脱机zip / sqlite /等(/ sdcard / osmdroid) ),下载瓷砖缓存(/ sdcard / osmdroid / tiles),然后最后下载。

1 个答案:

答案 0 :(得分:0)

是的,你可以。两种策略

  1. 准备sqlite文件,就像在wiki中描述的那样,并将其放在资产中。当您的应用首次启动时,在重新创建/膨胀地图之前将数据库复制到/ sdcard / osmdroid /
  2. 将tile zip的内容存储在资源中。文件结构看起来像assets / TILESOURCENAME / Z / X / Y.extension。使用这种机制,osmdroid droid应该使用默认的tile提供者链来找到它。
  3. 注意:#1通常更快。