三、osmdroid离线地图瓦片使用

osmdroid离线地图瓦片使用

本文档定义了在没有网络连接时使用osmdroid。

支持的离线数据格式

osmdroid支持多种不同类型的离线缓存瓦片。

  • sqlite数据库(osmdroid推荐)
  • osmdroid ZIP
  • MBTiles
  • FEMF
  • GeoPackage(开发中)

创建离线缓存瓦片

你有多种不同的选择。

OSM Map Tile Packager ( OSM地图瓦片打包器)

osmdroid提供了OSM Map Tile Packager,用于下载并存储瓦片以供离线使用。详见readme.md。

Mobile Atlas Creator (MOBAC,移动地图创建器)

MOBAC是最早的用于支持大量地地图源输入并输出多种数据格式的工具,而且是开源的。

通常的流程:

  1. 创建新的、osmd所支持类型的atlas
  2. 选择地图源
  3. 选择一个你想要的区域及你要求的缩放等级
  4. 点击“Add Selection”
  5. 点击“Create Atlas”
  6. 一旦完成,复制atlas文件(.sqlite .zip等)到你的运行设备的/sdcard/osmdroid/目录下
  7. 告诉你的osmdroid不要使用网络连接并设置该地图挖填源

Maperitive.net

Maperitive支持从OSM数据API生成瓦片图像,并作为MOBAC替换物(已经被openstreetmap.org屏蔽)。

在设备中使用osmdroid的Cache Manager(> version 5.2 )

缓存管理者提供了对已下载的瓦片缓存的程序化连接。也可以用于穿件瓦片缓存。这里有两个关键点:

  • cache of downloaded tiles 是osmdroid从在线瓦片资源下载的已过期的瓦片缓存。默认的过期是指在线瓦片资源离线两周以上。Cache大小受限于使用者设备存储空间的允许。这两个设置都可以通过OpenStreetMapTileProvideConstants(版本 < 5.6,5.6及更新的版本使用Configuration.getInstance()结构)来变更和重写。
  • Tile Archives 是永久性存储,从来不会过期。这适合离线使用者的需求,但您必须注意在线瓦片源使用权限。许多在线瓦片源禁止创建永久性的瓦片存储。请仔细查看使用者权限。

Cache Manager可以执行一系列任务:

  • 下载限定范围和zoom水平的所有瓦片
  • 下载横穿点集的和确定zoom水平的所有瓦片
  • 清除一定范围、zoom等级、瓦片源的所有瓦片
  • 清除一定点集范围的所有瓦片
Cache Manager实例

实例应用源

  • 从文件系统缓存导入新的sqlite based cache
  • 清除所有的cache
  • 清除特殊的瓦片源
  • 创建瓦片archive
  • cache一定范围的瓦片
关于瓦片源名称的重点

当下载地图源使用MOBAC和使用下面两种格式中的一种

  • osmdroid SQLite
  • osmdroid ZIP

在两种情况中,地图源名称被编码为database或zip文件格式,并被唯一保存(每个缓存多于一个瓦片源)。因此你在请求离线瓦片时告诉你的osmdroid瓦片源的名称。

@Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    map = (MapView) findViewById(R.id.map);
    map.setTileSource(new XYTileSource("YOUR MAP SOURCE", 0, 18, 256, ".jpg", new String[] {}));
    //....
    map.setUseDataConnection(false); //optional, but a good way to prevent loading from the network and test your zip loading. 
    IMapController mapController = map.getController();
    mapController.setZoom(_A ZOOM LEVEL YOU HAVE IN YOUR ZIP_);
    GeoPoint startPoint = new GeoPoint(_POSITION SOMEWHERE INSIDE YOUR MAP_);
    mapController.setCenter(startPoint);
}
Gotchas

MOBAC对一次性下载的瓦片数有限制,这可以通过修改源码来改变。

当瓦片特别多时,MOBAC可能占用太多的内存。至少在V1.8到至少V1.9.x,算法导致内存中会尽量的缓存数据,知道占满JVM ceiling,然后快速插入数据库。虽然这使数据尽可能快的插入数据库,但也可能导致稳定性的问题。

OSMBonusPack

OSMBonusPack是osmdroid的一个插件型android library,能够用于下载和缓存地图瓦片。详见Cache Manager。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值