在OpenLayers中,我有一个群集策略来限制用户在地图上看到的功能/点数。但是,当用户完全放大时,我想关闭群集策略,以便显示所有功能。要做到这一点,我正在捕捉这样的缩放事件:
map.events.register("zoomend", this, function (e) {
if (map.getZoom() === this.mapMaxZoom) {
// Don't cluster at this level. No matter what.
this.vector.strategies[0].threshold = 1000;
console.log("setting the clustering strategy to 1000");
}
});
这种方法有效,但我没有看到应用新的群集 - 我必须再次缩小以查看群集更改为阈值1000(从而显示所有功能)。我需要一些方法来强制openlayers刷新。我试过调用map.redraw()但这没有帮助。有什么想法吗?
答案 0 :(得分:11)
vectorlayer.refresh({force:true});
试试这个。
答案 1 :(得分:5)
您应该在图层上调用redraw()
方法而不是地图 - this.vector.redraw()
答案 2 :(得分:2)
我在这篇文章中找到了答案。 OpenLayers Cluster Recalculate
基本上,我需要设置群集策略,然后“重新集群”。是一种享受。
答案 3 :(得分:0)
由于这个文件我解决了同样的问题:CenteredCluster.js,我在<script src="... /OpenLayers.js"></script>
之后加入。我从此示例中捕获了该文件:http://jorix.github.io/OL-Ragbag/examples/sundials.html以供参考:https://github.com/jorix/OL-Ragbag
然后我不使用集群策略方法,但是可以使用ZoomRange选项设置的文件类CenteredCluster来控制集群的行为(激活,停用,距离和阈值):
var centeredCluster = new OpenLayers.Strategy.CenteredCluster({
zoomSettings: [
{zoomRange: [0, 2], settings: {distance: 10}},
{zoomRange: [3, 4], settings: {distance: 10}},
// 5 normal clusters
{zoomRange: [6, 14], settings: {threshold: 2}},
{zoomRange: [15, 99], settings: {enabled: false}}
]
});
var urlKMLClient = 'features.kml';
var layerKMLClient = new OpenLayers.Layer.Vector("Clients", {
style : style,
strategies: [centeredCluster, new OpenLayers.Strategy.BBOX()],
protocol: new OpenLayers.Protocol.HTTP({
url: urlKMLClient,
format: new OpenLayers.Format.KML({
extractStyles: true,
extractAttributes: true,
maxDepth: 2
})
})
}
);
map.addLayer(layerKMLClient);
答案 4 :(得分:0)
在OL
3.10.1我做:
WMSLayer.getSource().updateParams({"time": Date.now()});
WFSLayer.clear();
两个图层(WMS
和WFS
)都会成功刷新。
OL
中有关于此功能的信息有很多,最大的问题是没有人定义OL
版本的某些东西可以运行:)
希望这对某人有帮助!
答案 5 :(得分:0)
以前的答案都没有对我有用。我阅读了Open Layers 3 API并找到了ol.layer.Vector.changed(),这对我有帮助。请使用:vectorLayer.changed()
。
答案 6 :(得分:0)
在OL3中,通过调用图层的源refresh()方法对其进行刷新
layer.getSource().refresh()
答案 7 :(得分:0)
要解决此问题,请使用
$ wget http://mirrors.kernel.org/ubuntu/pool/main/libi/libidn2/libidn2-0_2.0.4-1.1build2_amd64.deb
$ sudo dpkg -i libidn2-0_2.0.4-1.1build2_amd64.deb
$ sudo apt-mark hold libidn2-0
答案 8 :(得分:0)
对于openlayers 3
vectorlayer.getSource().refresh()