遇到的问题:
修改地图完成状态,修改完之后重新加载geoserver图层,但图层样式没有发生变化,没有发送geoserver请求,只有缩放、放大或移动才会重新加载,并且存在缓存,导致无法分辨修改前还是修改后。
原因:
openlayers在加载wms图层是会对图层进行缓存处理,所以地图没有发生变化时,移除、添加geoserver图层是不会发生变化。
修改前:
修改后:
解决办法:
openlayers提供了两个方法,一个是refresh()方法,对图层进行刷新重新加载,能够解决图层稳定在修改后,但如果地图没有移动缩放,还是会使用openlayers的wms缓存,一个是updateParams()方法,这个可以完美解决当前问题。
注:如果没有修改的参数,只是想重新请求加载geoserver,可以在加载图层的参数自定义一个参数time,存放时间戳,实现重新加载只需要updateParams()更新时间戳参数即可。
let wmslayer:any;
//图层参数
const completeLayer = {
id: 'completeLayer',
url,
opacity: 0.8,
params: {
...completeClass,
time: new Date().getTime(),
viewparams: `areaCode:${331124015};areaLevel:${3};year:2021-2022`
}
}
//添加图层
wmslayer = CMap.addWMSLayer(completeLayer);
//重新加载geoserver图层
wmslayer.getSource().updateParams({ "time": new Date().getTime() });