Osmdroid API功能介绍4----地图缓存和下载
一,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);
三,下载离线数据
下载离线数据使用CacheManager
和CacheManager.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);
四,清除缓存
清除缓存一样是使用CacheManager
和CacheManager.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) {
}
});