【问题标题】:Android offline maps with pre-installed (on apk file) tiles带有预安装(在 apk 文件上)图块的 Android 离线地图
【发布时间】:2016-06-18 21:28:15
【问题描述】:

有没有一种方法可以在不需要第一次网络连接的情况下使用离线地图来缓存一些地图数据?

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

之后我尝试了 osmdroid,它与谷歌地图逻辑足够接近,但我找不到将它与 assets 文件夹一起使用的方法,而不是与 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 它说:

Tile Source 决定了显示的图像集,例如 Bing、Mapquest、Mapnik 等。默认的 Tile Provider 会在以下内容中搜索您的 Tile Source、Assets、离线 zip/sqlite/etc 在 (/sdcard/osmdroid )、下载的切片缓存 (/sdcard/osmdroid/tiles),最后是下载器。

【问题讨论】:

  • 无需下载地图的全球解决方案?因此,您想将整个世界与您的应用程序捆绑在一起吗?该应用程序将非常庞大...如果您使用 OsmAnd 数据库,则需要 10-20 GB...
  • 我编辑了我的问题。很抱歉之前没有定义它
  • 否,但所有指令都会导致以下“将输出文件复制到 /sdcard/osmdroid/”。如果用户没有 SD 卡怎么办?

标签: android maps offline osmdroid


【解决方案1】:

是的,你可以。两种策略

  1. 按照 wiki 中的描述准备一个 sqlite 文件并将其放置在 assets 中。当您的应用首次启动时,在重新创建/膨胀地图之前将数据库复制到 /sdcard/osmdroid/
  2. 将平铺 zip 的内容存储在资产中。文件结构看起来像 assets/TILESOURCENAME/Z/X/Y.extension。使用这种机制,osmdroid droid 应该使用默认的 tile 提供程序链找到它。

注意:#1 通常更快。

【讨论】:

  • 我想避免依赖我提到的 sdcard 那么你认为使用第二种方法可以通过立即访问 assets 文件夹而不是复制到 sdcard 来解决我的问题吗?
  • 我正在使用 mapView.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE);正如您所建议的,以我的图块的位置为中心并以我的图块支持的缩放级别进行缩放。我在 assets/tiles/z/x/y 中有图块,但没有显示!
  • sdcard 在这种情况下并不是真正的 sdcard。
  • osmdroid 使用默认位置查找图块:Environment.getExternalStorageDirectory()+"/"+"osmdroid。您需要将图块放在那里。正如@Ifor 所说,并不一定意味着物理 SD 卡
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
  • 2011-11-29
相关资源
最近更新 更多