文章目录
一、vtpk文件存储到手机本地
1. 将vtpk文件放到assert文件夹中(也可以方法sdk中)
2. 通过代码将assert中的vtpk文件存储到/data/user/0/包名/files 中
二、GIS加载本地vtpk的方法
1. 引入库
implementation ‘com.esri.arcgisruntime:arcgis-android:100.9.0’
2. 方法
public void localMap(View view) {
String path =this.getFilesDir().getAbsolutePath()+"/"+"china.vtpk";
File file=new File(path);
if(!file.exists()){
Toast.makeText(view.getContext(),"离线地图不存在",Toast.LENGTH_SHORT).show();
}else{
VectorTileCache tileCache = new VectorTileCache(path);
tileCache.loadAsync();
tileCache.addLoadStatusChangedListener(new LoadStatusChangedListener() {
@Override
public void loadStatusChanged(LoadStatusChangedEvent loadStatusChangedEvent) {
LoadStatus loadStatus=loadStatusChangedEvent.getNewLoadStatus();
if(loadStatus==LoadStatus.LOADED){
//离线文件加载成功
ArcGISVectorTiledLayer localTiledLayer = new ArcGISVectorTiledLayer(tileCache);
localTiledLayer.setName("离线vtpk");
localTiledLayer.setVisible(true);
//此层的不透明度,需要是0.0-1.0范围内的值,1.0表示完全不透明
localTiledLayer.setOpacity(1.0f);
/***不显示Esri LOGO*/
mapView.setAttributionTextVisible(false);
Basemap basemap = new Basemap(localTiledLayer);
arcGISMap=new ArcGISMap(basemap);
mapView.setMap(arcGISMap);
}else if(loadStatus==LoadStatus.FAILED_TO_LOAD){
//离线文件加载失败
Toast.makeText(view.getContext(),"离线文件加载失败",Toast.LENGTH_LONG).show();
}
}
});
}
}
注意
1. 使用方法
String path =this.getApplicationContext().getFilesDir().getAbsolutePath()+"/"+“china.vtpk”;
时,尽管文件是存在的,但是这个文件离线加载不成功。必须使用this.getFilesDir().getAbsolutePath()+"/"+“china.vtpk”;才能成功加载。