我们有一些层利用ol.source.XYZ
来源。对于我们使用的加载策略ol.loadingstrategy.tile(new ol.tilegrid.createXYZ({}))
。在进行其他操作之前,我们需要确保所有图块已完全加载到地图视图中。
我们已经看过多篇与此相关的文章,但尚未找到 100% 的解决方案来为我们提供所需的解决方案。即使情况并非如此,逻辑也会返回 true。我们尝试使用tileloadstart、tileloadend、tileloaderror事件,如上图所示example页面但这似乎并不总是返回预期的结果。
GIS Stack Exchange 文章here看起来很有希望,因为我们可以将下面列出的代码与tileloadstart/tileloadend事件结合使用,但有许多函数调用只能在ol-debug.js而不是ol.js源代码。因此,下面粘贴的代码不适用于ol.js。此代码只是引用的 GIS Stack Exchange 文章的副本。
function calculateNumberOfTiles(tileSource) {
var tg = (tileSource.getTileGrid()) ? tileSource.getTileGrid(): ol.tilegrid.getForProjection(map.getView().getProjection()),
z = tg.getZForResolution(map.getView().getResolution()),
tileRange = tg.getTileRangeForExtentAndZ(map.getView().calculateExtent(map.getSize()), z),
xTiles = tileRange['maxX'] - tileRange['minX'] + 1,
yTiles = tileRange['maxY'] - tileRange['minY'] + 1;
return xTiles * yTiles;
}
我有两个问题,任何人都可以对我们可能缺少的内容提供任何其他想法吗?感谢您的帮助。
- 为什么当函数调用挂在 ol-debug.js 的原型上时,它们在 ol-debug.js 中可用,而在 ol.js 中则不可用tilegrid目的?
- 还有其他建议如何判断所有图块已完全加载到地图中吗?
加载事件
你的假设是正确的tileloadstart
源上的事件后面应该跟着一个tileloadend
or tileloaderror
对于相应的图块。正如链接的官方示例所示,可以使用它来跟踪加载图块的数量。
当发出的总和tileloadend
and tileloaderror
事件的数量等于tileloadstart
事件,没有正在进行加载。如果不是这种情况,您应该尝试制作一个可重现的示例,因为它可能是库中的错误。
然而,了解这些事件的含义很重要。这tileloadend
事件并不意味着该图块在地图上可见,而是意味着该图块已完成加载并且可用于渲染。图块的实际渲染将在调用事件处理程序后完成。因此,任何需要有关何时加载和渲染所有图块的信息的图块加载逻辑(例如在截取屏幕截图/创建打印时)都必须等到下一个postrender event.
你提到了 5-10 秒之间tileloadend
并且图块实际上出现在地图上,这太长了,无法与渲染相关(除非您执行一些非常奇怪的渲染回调)。
ol-debug.js 与 ol.js
与许多 JS 库一样,OpenLayers 代码在构建过程中进行了优化和最小化,以创建更小、更高效的构建。任何不属于 API 的类型或函数都将被缩小或删除。仅 ol.js 中可用的方法,并记录在openlayers.org,应该被使用,因为任何缩小的方法都可能改变每个构建。
ol-debug.js 是该库的非优化版本,旨在在调试或探索时使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)