我正在使用OpenLayers 3实现地图导出功能.
但是有一个问题:人们无法确定地图视图是否已完全加载或者是否缺少一些图块.
似乎没有这样的API或事件.最接近的是tileloadstart - tileloadend对.但OpenLayers异步加载切片,并且在切片实际加载之前,不会触发tileloadstart - 也就是说,在切片队列中排队的切片不会在实际加载之前触发该事件.
我可以检测到地图视图是否已完全加载?
postrender事件似乎可以解决问题,如下所示:
map.once('postrender', function(event) {
    doyourmagic();
});
至少可以从OpenLayers 3.8.2运行。有精细的回答有关于主题。
我最终成功实现了导出功能。下面是粗略的解释。
tileloadstart、tileloadend、tileloaderror事件处理程序,并开始管理 tile 加载计数。ol.sourceol.source.on()postcompose在ol.Mapusing上注册事件处理程序ol.Map.once()。ol.Map.renderSync()。这会触发瓦片加载,因此从现在开始如果没有瓦片加载,则意味着所有瓦片都已加载。postcompose事件处理程序上,event.context使用 using捕获地图内容event.context.canvas.toDataURL(),并使用event.frameState.postRenderFunctions.push()(有点hacky)注册后渲染函数。tileload*事件处理程序管理)。如果计数不为零,则放弃捕获的内容。否则,捕获完成。tileloadend和 上tileloaderror,如果图块加载计数变为零,则从上面的步骤 3 重试。| 归档时间: | 
 | 
| 查看次数: | 10223 次 | 
| 最近记录: |