Osmdroid API功能介绍4----地图缓存和下载

Osmdroid API功能介绍4----地图缓存和下载

http://osmdroid.github.io/osmdroid/

一,Osmdroid在线地图缓存地址

Osmdroid在加载在线地图的时候会在本地创建一个.db文件作为缓存的地址

 //设置Osmdroid的文件路径,需要在MapView初始化之前进行设置
 Configuration.getInstance().setOsmdroidBasePath(new File(path + "/osmdroid/tianditu/img/"));
 //设置Osmdroid的瓦片缓存路径
 Configuration.getInstance().setOsmdroidTileCache(new File(path + "/osmdroid/tianditu/img/"));

注意如果是存放到SD卡中,需要申请权限
缓存的路径:
在这里插入图片描述

二,Osmdroid内存缓存

设置要在MapView初始化之前进行

//设置初始内存缓存大小瓦片的多少,最少是3*3
Configuration.getInstance().setCacheMapTileCount((short)12);
//设置矢量覆盖物超出的缓存数量 
Configuration.getInstance().setCacheMapTileOvershoot((short)12);
三,下载离线数据

下载离线数据使用CacheManagerCacheManager.CacheManagerTask类。

//获取缓存的容量  默认是600L * 1024 * 1024 。会在Configuration初始化的时候根据缓存路径重新设置
CacheManager.cacheCapacity()
//获取当前已使用的缓存容量
CacheManager.currrentCacheUsage()
//获取当前正在下载的任务数量
CacheManager.getPendingJobs()
//结束所有的任务
CacheManager.cancelAllJobs()
//结束当前任务
CacheManager.CacheManagerTask.cancel(true)

下载离线数据,需要设置,开始结束缩放等级,范围。

//最小等级
int zoommin = zoom_min.getProgress();
//最大等级
int zoommax = zoom_max.getProgress();
//nesw 范围
BoundingBox bb = new BoundingBox(n, e, s, w);
//需要下载的数量
int tilecount = CacheManager.possibleTilesInArea(bb, zoommin, zoommax);

下载

 //this triggers the download
CacheManager.downloadAreaAsync(getActivity(), bb, zoommin, zoommax, new CacheManager.CacheManagerCallback() {
	@Override
	public void onTaskComplete() {
		Toast.makeText(getActivity(), "Download complete!", Toast.LENGTH_LONG).show();
		if (writer!=null)
			writer.onDetach();
	}

	@Override
	public void onTaskFailed(int errors) {
		Toast.makeText(getActivity(), "Download complete with " + errors + " errors", Toast.LENGTH_LONG).show();
		if (writer!=null)
			writer.onDetach();
	}

	@Override
	public void updateProgress(int progress, int currentZoomLevel, int zoomMin, int zoomMax) {
		//NOOP since we are using the build in UI
	}

	@Override
	public void downloadStarted() {
		//NOOP since we are using the build in UI
	}

	@Override
	public void setPossibleTilesInArea(int total) {
		//NOOP since we are using the build in UI
	}
});

默认是下载到在线地图的缓存路径中。
如果需要指定下载路径:

  String outputName = Environment.getExternalStorageDirectory().getAbsolutePath()
   + File.separator + "osmdroid" + File.separator + cache_output.getText().toString();
   SqliteArchiveTileWriter  writer=new SqliteArchiveTileWriter(outputName);
  CacheManager  mgr = new CacheManager(mMapView, writer);
四,清除缓存

清除缓存一样是使用CacheManagerCacheManager.CacheManagerTask类。

使用方式和下缓存类似:

   //this triggers the download
                    CacheManager.CacheManagerTask cacheManagerTask = mgr.cleanAreaAsync(getActivity(), bb, zoommin, zoommax);
                    cacheManagerTask.addCallback(new CacheManager.CacheManagerCallback() {
                        @Override
                        public void onTaskComplete() {
                            Toast.makeText(getActivity(), "Delete task done", Toast.LENGTH_SHORT).show();

                        }

                        @Override
                        public void updateProgress(int progress, int currentZoomLevel, int zoomMin, int zoomMax) {

                        }

                        @Override
                        public void downloadStarted() {

                        }

                        @Override
                        public void setPossibleTilesInArea(int total) {

                        }

                        @Override
                        public void onTaskFailed(int errors) {

                        }
                    });
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值