OL3: 强制重绘图层

7

我正在将OpenLayers客户端版本2.13.1升级到新版本的OpenLayers,即OL3。我的设置包括将Mapserver作为WMS映射服务器和先前提到的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请求中添加额外参数?据我所知,“问题”在于浏览器会缓存图像,并且如果请求与之前相同,则浏览器会再次显示旧图像。

感谢任何帮助。

2个回答

5

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

yourLayerSource.dispatchChangeEvent(); 

3
在OL3.5中,我使用了source.dispatchEvent('change') - Alnitak

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);
    });
});

3
getParams() 不支持 3.0.0 版本。 - ProfNimrod
1
看起来 getParams 只支持 ol.source.ImageMapGuide、ol.source.ImageWMS 和 ol.source.TileWMS,或者至少这些是当前文档中找到的源。 - ProfNimrod
哦,对不起。我假设你使用ImageWMS或TileWMS,因为那些是我使用的图层(因为最初的讨论是关于WMS图层的)。你使用的是哪个图层? - N Dorigatti
发布 WMS 服务时,我们需要做些什么吗?比如添加额外的属性? - Abhijit Gujar
1
不,绝对不需要。上面的代码应该足够了(至少在当时可用的OL3版本中)来刷新图层。 - N Dorigatti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接