OpenLayers:如何在更改矢量图层后刷新地图

时间:2012-04-27 07:49:03

标签: openlayers

在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()但这没有帮助。有什么想法吗?

9 个答案:

答案 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();

两个图层(WMSWFS)都会成功刷新。

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()