10

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

4

9 回答 9

15

vectorlayer.refresh({force:true}); 试试这个。

于 2012-07-23T10:17:25.300 回答
6

redraw()您应该在图层而不是地图上调用方法 -this.vector.redraw()

于 2012-04-27T08:57:55.160 回答
3

我在这篇文章中找到了答案。OpenLayers 集群重新计算

基本上,我需要设置集群策略,然后是“recluster”。工作一种享受。

于 2012-07-24T15:37:05.337 回答
2

之前的答案都没有对我有用。我阅读了 Open Layers 3 API 并找到了 ol.layer.Vector.changed(),这对我有帮助。像这样使用:vectorLayer.changed()

于 2015-12-28T12:24:07.180 回答
2

对于开放层 3

vectorlayer.getSource().refresh()
于 2020-06-04T12:18:30.767 回答
1

由于这个文件,我解决了同样的问题:CenteredCluster.js,我在<script src="... /OpenLayers.js"></script>. 我从这个例子中捕获了文件:http: //jorix.github.io/OL-Ragbag/examples/sundials.html供参考:https ://github.com/jorix/OL-Ragbag

然后我不使用集群策略方法,而是使用文件的类,CenteredCluster,您可以使用 ZoomRange 选项设置来控制集群的行为(激活、停用、距离和阈值):

   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);
于 2014-08-15T16:06:04.930 回答
1

在 OL3 中通过调用 layer 的 source refresh() 方法来刷新它

layer.getSource().refresh()

于 2019-05-31T08:59:53.960 回答
1

要解决这个问题,只需使用 map.updateSize();

于 2019-09-11T10:23:30.157 回答
0

OL3.10.1 中,我这样做:

WMSLayer.getSource().updateParams({"time": Date.now()});
WFSLayer.clear();

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

关于这个功能有很多不同的信息,OL最大的问题是没有人定义一个OL可以工作的版本:)

希望这会对某人有所帮助!

于 2015-10-17T21:53:00.283 回答