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