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 クラスターの再計算

基本的に、クラスター戦略を設定してから「再クラスター化」する必要があります。御馳走を働きます。

于 2012-07-24T15:37:05.337 に答える
2

以前の答えはどれもうまくいきませんでした。Open Layers 3 API を読んだところ、 ol.layer.Vector.changed()が見つかりました。次のように使用しますvectorLayer.changed()

于 2015-12-28T12:24:07.180 に答える
1

このファイルのおかげで同じ問題を解決しました: 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);
于 2014-08-15T16:06:04.930 に答える
0

OL3.10.1 では:

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

両方のレイヤー (WMSおよびWFS) が正常に更新されます。

この機能に関して非常に多くの異なる情報がOLあり、最大の問題は、何かが動作するバージョンを誰も定義していないOLことです:)

うまくいけば、これは誰かを助けるでしょう!

于 2015-10-17T21:53:00.283 に答える