简体   繁体   English

OL3:强制重绘图层

[英]OL3: force redraw layer

i am currently upgrading OpenLayers client version 2.13.1 with the new version of OpenLayers, OL3. 我目前正在使用新版本的OpenLayers,OL3升级OpenLayers客户端版本2.13.1。 My setup consist of Mapserver as a WMS mapping server and previously mentioned OpenLayers client. 我的设置包括Mapserver作为WMS映射服务器和之前提到的OpenLayers客户端。

In old system I made support for user interaction in the way that if a user click on some part of map, the mapfile gets generated again, and as a result I force to redraw layer to get some part of map colored. 在旧系统中,我支持用户交互,如果用户点击地图的某个部分,则会再次生成mapfile,因此我强制重绘图层以使地图的某些部分着色。 Example of the code in the OL2 version: OL2版本中的代码示例:

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

I want to get the same functionality in OL3, but there is no redraw function. 我想在OL3中获得相同的功能,但没有重绘功能。 I found two functions that are useful, but there is additional things to do in order to get the same functionality: - layer.getSource().updateParams(params); 我找到了两个有用的函数,但是为了获得相同的功能还有其他的事情要做: - layer.getSource()。updateParams(params); and - map.render(); 和 - map.render();

I also created a little bit more complicated example, in which I get code to working, but the requests for getting WMS tiles contains additional parameter as a key to get requests unique. 我还创建了一个更复杂的示例,其中我获得了代码,但是获取WMS切片的请求包含额外的参数作为获取请求唯一的关键。 The example code is above: 示例代码如上:

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

Ok, That is the situation, all I want to ask is if there is any function available, that can force layers to be redrawn, without adding aditional parameter in the WMS requests? 好的,就是这种情况,我想问的是,是否有任何可用的功能,可以强制重绘图层,而不在WMS请求中添加aditional参数? AFAIK the "problem" is that browser cache images, and if the request is the same, that was before, browser shows old images again. AFAIK的“问题”是浏览器缓存图像,如果请求是相同的,那么之前,浏览器会再次显示旧图像。

Thanks for any help. 谢谢你的帮助。

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

yourLayerSource.dispatchChangeEvent(); 

none of the above worked for me, i also tried everything together: 以上都没有为我工作,我也一起尝试了一切:

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

Nothing happens,no redraw, no network requests (either cached or not)... The documentation is really bad about that. 没有任何事情发生,没有重绘,没有网络请求(缓存或不缓存)......文档真的很糟糕。 I've tried to check in the source code for the event thrown when panning but is kinda impossible to understand... 我试图检查源代码中的平移时抛出的事件,但有点无法理解......

EDIT: I manage to make it work! 编辑:我设法让它工作!

$(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