在OL3中强制渲染ImageCanvas图层?

时间:2014-11-30 13:35:13

标签: javascript openlayers-3

我有一个使用 ImageCanvas 来源的图片图层。 我需要动态更改画布表面上的内容并让它们在图层上更改,但除非我通过缩放大幅更改范围,否则图层会忽略我对画布所做的任何更改。

有没有办法强制给定图层渲染?我尝试了 map.render() ,它在某些情况下有效,但在其他情况下无效

MapScholar.prototype.CreateCanvasLayer = function()                     
{        
    this.canvasLayer = new ol.layer.Image( {                                    
        source: new ol.source.ImageCanvas( {                                
            canvasFunction: function(extent, res, pixelRatio, size, proj) { 
                if (!this.canvas)                                       
                    this.canvas=document.createElement('canvas');       
                this.canvas.setAttribute('width', size[0]);             
                this.canvas.setAttribute('height', size[1]);            
                return this.canvas;                                     
                } 
            })
        });
    map.addLayer(this.canvasLayer);                                         
}

1 个答案:

答案 0 :(得分:2)

您可以通过在该来源上调用changed来表明某个来源发生了变化。在你的情况下:

this.canvasLayer.getSource().changed();

调用changed基本上会使ImageCanvas来源中的当前画布无效并触发change事件,这将导致重新渲染地图。

请注意,changed功能未标记为"稳定",因此将来可能会发生变化。您必须取消选中"仅限稳定" API文档中的复选框可以查看该功能。这是一个直接链接:http://openlayers.org/en/master/apidoc/ol.Observable.html?unstable=true

编辑:changed函数在v3.0.0版本中是名称dispatchChangeEvent。它是主分支中的changed