1、获取移动设备的访问读取文件权限
2、下载离线地图瓦片到移动设备指定位置(注意:地图瓦片zip压缩包中要有跟压缩包名称一样的文件夹,比如:osmMapOffline.zip解压出来第一层需要是osmMapOffline,然后里面才是0,1,2...的地图瓦片文件夹)
3、访问指定位置的离线地图瓦片,以下:
implementation 'org.osmdroid:osmdroid-android:6.1.11'
<org.osmdroid.views.MapView
android:id="@+id/offlineMapView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
private void initMap(){
Configuration.getInstance().setUserAgentValue(BuildConfig.APPLICATION_ID);
//built in zoom controls
mMapView.setBuiltInZoomControls(true);
//needed for pinch zooms
mMapView.setMultiTouchControls(true);
//scales tiles to the current screen's DPI, helps with readability of labels
mMapView.setTilesScaledToDpi(true);
//初始化离线地图
mapViewOffline();
mMapView.setMaxZoomLevel(19.0);
mMapView.setMinZoomLevel(3.0);
//设置地图级别
mMapView.getController().setZoom(6.0);
}
myMapView为组件
public void mapViewOffline() {
//在线source
OnlineTileSourceBase tianDiTuImgTileSource = new OnlineTileSourceBase("Tian Di Tu Img", 1, 22, 256, "",
new String[]{"https://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8"}) {
@Override
public String getTileURLString(final long pMapTileIndex) {
return getBaseUrl() + "&X=" + MapTileIndex.getX(pMapTileIndex) + "&Y=" + MapTileIndex.getY(pMapTileIndex)
+ "&Z=" + MapTileIndex.getZoom(pMapTileIndex);
}
};
String filePath = "";//离线地图瓦片包位置
File zipFile = new File(filePath);
try {
OfflineTileProvider tileProvider = new OfflineTileProvider(new SimpleRegisterReceiver(getContext()), new File[]{zipFile });
myMapView.setTileProvider(tileProvider);
String source = "";
IArchiveFile[] archives = tileProvider.getArchives();
if (archives.length > 0) {
Set<String> tileSources = archives[0].getTileSources();
if (!tileSources.isEmpty()) {
source = tileSources.iterator().next();
myMapView.setTileSource(FileBasedTileSource.getSource(source));
} else {
//离线设置失败,则设置在线
myMapView.setTileSource(tianDiTuImgTileSource);
}
} else {
//离线设置失败,则设置在线
myMapView.setTileSource(tianDiTuImgTileSource);
}
myMapView.invalidate();
} catch (Exception ex) {
ex.printStackTrace();
}
}