[英]Openlayers 3 Replace a failed tile
我们正在运行开放层3.15。 有时我们会掉落或失败。 目前,它什么也没有显示(这可能会使我们的用户感到困惑),因此我们希望将其替换为显示“无数据”之类的图块。 我试过捡起事件并替换磁贴的来源,例如
source.on('tileloaderror', function(){
source.setUrl('./images/map/failureTile.png');
});
但是这样做的问题是,不是在一个图块上执行此操作,而是在整个图层上执行此操作,我们不希望这样做。
有谁知道我们如何仅针对失败的图块而不是整个图层执行此操作?
现在是2018年,但对于可能需要此服务的人来说。 在v5.3.0上测试
source.on('tileloaderror', function (event) {
var tileLoadFunction = function (imageTile, src) {
imageTile.getImage().src = './images/map/failureTile.png';
};
if (event.tile.tileLoadFunction_ != tileLoadFunction) {
event.tile.tileLoadFunction_ = tileLoadFunction;
event.tile.load();
}
});
此代码依赖于私有函数event.tile.tileLoadFunction_
被公开。
不幸的是,xnakos的答案在v5.3.0上不起作用,因为event.tile.getImage()
已由内部错误处理程序替换为1x1画布图像。
还应注意,直接更改event.tile.src_
似乎是一种选择,但由于缓存键或其他原因而无法使用。
未能加载的图块应具有不同的类(.olImageLoadError)。 您可以定义不显示这些项目的CSS规则。
.olImageLoadError {
display: none !important;
}
您可以尝试以下方法:
source.on('tileloaderror', function(event) {
event.tile.getImage().src = './images/map/failureTile.png';
});
您需要event
参数,该参数可以使失败的磁贴获取,以便您可以更改磁贴的图像。
警告:我使用tileloadend
而不是tileloaderror
测试了上面的代码,因为我的图块永远不会对我失败。 :)我使用Math.random()
来模拟失败率,并且某些随机图块被指定的图像替换。 我无法想到上述代码无法正常工作的原因。 如果您确认它有效,我将从我的答案中删除此警告。 我在OpenLayers 3.14.2和OSM源上对其进行了测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.