Openlayers 3 OpenLayers:如何检测地图视图是否已完全加载?
我正在使用OpenLayers 3实现地图导出功能 但有一个问题:我们无法确定地图视图是否已完全加载,或者是否缺少一些分幅 似乎没有这样的API或事件。最接近的是tileloadstart-tileloadend对。但是OpenLayers异步加载磁贴,并且在磁贴实际加载之前,不会触发tileloadstart—也就是说,在磁贴队列中排队的磁贴在实际加载之前不会触发事件Openlayers 3 OpenLayers:如何检测地图视图是否已完全加载?,openlayers-3,Openlayers 3,我正在使用OpenLayers 3实现地图导出功能 但有一个问题:我们无法确定地图视图是否已完全加载,或者是否缺少一些分幅 似乎没有这样的API或事件。最接近的是tileloadstart-tileloadend对。但是OpenLayers异步加载磁贴,并且在磁贴实际加载之前,不会触发tileloadstart—也就是说,在磁贴队列中排队的磁贴在实际加载之前不会触发事件 Hot我可以检测地图视图是否已完全加载吗?基本上,为了确保地图上的所有内容都已渲染,您需要侦听地图上每个图层的loadend事
Hot我可以检测地图视图是否已完全加载吗?基本上,为了确保地图上的所有内容都已渲染,您需要侦听地图上每个图层的loadend事件。对于wms和wfs层,这是很清楚的,我想你知道怎么做。
对于平铺层,请检查此示例postrender事件似乎可以实现此功能,如下所示:
map.once('postrender', function(event) {
doyourmagic();
});
至少在OpenLayers 3.8.2中可用。关于这个问题有很好的答案。我最终成功地实现了导出功能。下面是粗略的解释
ol.source.on()
在ol.source
上注册tileloadstart
,tileloaderror
事件处理程序,并开始管理磁贴加载计数ol.Map.once()
在ol.Map
上注册postcompose
事件处理程序ol.Map.renderSync()
。这将触发磁贴加载,因此从现在起,如果没有磁贴加载,则意味着所有磁贴都已加载postcompose
事件处理程序上,使用event.context.canvas.toDataURL()
从event.context
捕获映射内容,并使用event.frameState.postRenderFunctions.push()
(有点不太正常)tileload*
事件处理程序管理)。如果计数不为零,则放弃捕获的内容。否则,捕获就完成了tileloadend
和tileloaderror
上,如果磁贴加载计数变为零,请从上面的步骤3重试,OpenLayers提供了一个
rendercomplete
事件,该事件可能很方便。tileload*事件不适用于此问题。由于tile队列管理器异步地对tile进行队列加载,因此,如果没有加载tile,则不一定意味着加载了所有tile。代码示例非常好。请记住,每次贴图移动时都会触发该示例。如果像此示例一样使用一次
,则只会触发一次,而map.on('postrender')…
将在贴图移动时触发,直到使用un