7

我目前正在使用新版本的 OpenLayers OL3 升级 OpenLayers 客户端版本 2.13.1。我的设置包括作为 WMS 映射服务器的 Mapserver 和前面提到的 OpenLayers 客户端。

在旧系统中,我支持用户交互,如果用户单击地图的某些部分,则地图文件会再次生成,因此我强制重绘图层以使地图的某些部分着色。OL2版本代码示例:

$.ajax({
  params: ...
  success: function (data) {
    if (data.success) {
      gisLayer.redraw(true);
    }
  }
});

我想在 OL3 中获得相同的功能,但没有重绘功能。我发现了两个有用的函数,但是为了获得相同的功能,还需要做一些额外的事情:- layer.getSource().updateParams(params); 和 - map.render();

我还创建了一个稍微复杂一点的示例,在该示例中我可以让代码正常工作,但是获取 WMS 切片的请求包含附加参数作为获取唯一请求的关键。示例代码如上:

var params = layer.getSource().getParams();
params.t = getUniqueParam();
layer.getSource().updateParams(params);

好的,就是这种情况,我只想问是否有任何可用的功能,可以强制重绘图层,而无需在 WMS 请求中添加额外的参数?AFAIK“问题”是浏览器缓存图像,如果请求相同,那是以前,浏览器再次显示旧图像。

谢谢你的帮助。

4

2 回答 2

5

你能检查一下这是否有用吗?

yourLayerSource.dispatchChangeEvent(); 
于 2014-06-10T11:30:05.657 回答
2

以上都不适合我,我也一起尝试了一切:

var params = yourLayer.getSource().getParams();
yourLayer.getSource().updateParams(params);
yourLayer.getSource().dispatchChangeEvent(); 
map.render();

什么都没有发生,没有重绘,没有网络请求(无论是否缓存)......文档对此真的很糟糕。我试图检查平移时抛出的事件的源代码,但有点无法理解......

编辑:我设法使它工作!

$(document).ready(function(){
    map.once("postcompose", function(){
        //start refreshing each 3 seconds
        window.setInterval(function(){
            // call your function here
            var params = yourLayer.getSource().getParams();
            params.t = new Date().getMilliseconds();
            yourLayer.getSource().updateParams(params); 
        }, 3000);
    });
});
于 2014-10-08T13:15:08.710 回答