最近做了一个需求,需要将地图图层下载到手机作为离线地图,方便在没有网络的情况使用。
首先我们看下代码怎么实现
文件位置:/hybird/html/offlineMap.html
/**
* @param {string} zip 瓦片文件压缩包下载目录
* @param {string} unzip 瓦片文件压缩包解压后目录
*/
var zip = "_doc/MapExt/" + name + "_map.zip";
var unzip = "_doc/offlineMap/";
plus.zip.decompress(zip, unzip, ()=>{
//mui.toast("解压成功");
}, function(e) {
//mui.toast("解压失败,请重试或者重新下载离线包");
});
这里下载图层后,通过plus的解压API把瓦片文件解压到指定目录
注意:
这里我是运行在HBuilder基座上的!
这里我是运行在HBuilder基座上的!
这里我是运行在HBuilder基座上的!
首先我们来看下地图文件夹在手机文件管理器的位置
打开安卓的文件管理器
位置:Android/data/包名/apps/APPID/
可以看到
doc
和www
两个目录(以上这些文件在安装完毕,点击第一次启动的时候生成,如果你只是安装不点击打开目录是没有这些文件的)点开
doc
doc
MapExt
就是瓦片压缩包的文件offlineMap
就是瓦片压缩包解压后的图片我们再来看下openlayer怎么加载离线的地图
new ol.layer.Tile({
title: "离线地图",
baseLayer: true,
visible: false,
source: new ol.source.XYZ({
url: '../../../doc/offlineMap/{z}/{x}/{y}.jpg',
}),
})
代码文件位置
可以看到openlayer
其中
../../../
就相当于到了APPID目录,然后通过访问doc/offlineMap
拿到离线地图数据。在官方基座,我试过效果是没问题的,可以加载
但是每次到了自己打包的APP就无法加载离线地图了。
经过一番寻找
我在正式包的文件路径发现了端倪
正式包的APPID文件目录
看到没,WWW文件目录没有了,这样就会导致openlayer的相对路径失效,从而无法加载离线地图
那么解决的办法就是让WWW目录出来
我在dcloud问答看到了对应的解决的办法
通过设置来释放资源
"runmode": "liberate"(默认为normal)
释放的应用资源(html、js、css等web资源文件),在Android平台上释放资源后会加快页面加载速度。
同时也能解决以下问题:
- 5+ API中的plus.io.*能访问_www目录;
- 能解决某些Android版本无法通过href后带?传递参数;
- 能解决某些Android版本无法通过video标签直接引用视频文件
UNIAPP设置runmode
请参考5+API文档
设置完成后我们再看看APP的目录
WWW目录出现了
然后测试离线地图的下载就发现没问题了。
网友评论