繁体   English   中英

OL3:强制重绘图层

[英]OL3: force redraw layer

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

在旧系统中,我支持用户交互,如果用户点击地图的某个部分,则会再次生成mapfile,因此我强制重绘图层以使地图的某些部分着色。 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请求中添加aditional参数? AFAIK的“问题”是浏览器缓存图像,如果请求是相同的,那么之前,浏览器会再次显示旧图像。

谢谢你的帮助。

你能检查一下是否可以解决这个问题吗?

yourLayerSource.dispatchChangeEvent(); 

以上都没有为我工作,我也一起尝试了一切:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM