我有一个使用 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);
}
答案 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
。