gpt4 book ai didi

javascript - 使用bbox策略强制刷新openlayers 5.3集群源码

转载 作者:行者123 更新时间:2023-12-01 00:44:23 25 4
gpt4 key购买 nike

我正在将 OpenLayers 用于我们的 javascript map 应用程序。有一个cluster层,它具有自定义loader函数(这意味着数据是通过此函数从数据库加载的),并且行为设置为bbox>,这意味着每次用户移动 map 时都会刷新图层。

let vectorSource = new sourceVector({
strategy: bbox,
loader: function(extent, resolution, projection) {
Log.warn("refresh attempt");

// other long code that is not important and works well
}
});

let clusterSource = new Cluster({
distance: 25,
source: vectorSource
});

但是,我遇到的情况是底层数据被用户更改,我需要手动刷新 map 。

我尝试了很多我发现的方法,例如:

clusterSource.refresh(); // does nothing
layer.set('visible', false); 
layer.set('visible', true); // does nothing
map.removeLayer(layer);
map.addLayer(layer); // does nothing
clusterSource.clear(true); // removes all items from the map but does not call loader function to load them again
clusterSource.loadedExtentsRtree_.clear(); // does nothing

到目前为止,唯一有效的方法是将 map 移到其他地方然后返回:

let originalCenter = [
map.getView().getCenter()[0],
map.getView().getCenter()[1]
];

let newCenter = [
map.getView().getCenter()[0] + 50,
map.getView().getCenter()[1] + 50
];

setTimeout(() => {
map.getView().animate({
center: newCenter,
duration: 0
});
setTimeout(() => {
map.getView().animate({
center: originalCenter,
duration: 0
});
}, 10);
}, 10);

但这当然会导致 map 闪烁,我想避免这种情况。对于这个问题是否有一些真正有效的隐藏解决方案?我只是想强制集群层调用定义的加载器函数,但没想到会出现这样的问题。

感谢您的任何提示,Vojtech

最佳答案

感谢迈克的建议,我找到了解决方案。

解决办法如下(关键是使用簇源内部的vectorSource):

clusterSource.getSource().clear();

关于javascript - 使用bbox策略强制刷新openlayers 5.3集群源码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57509392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com