-1

kmlファイルからインポートされたベクターレイヤーを表示するページがあります(基本的に日時計の例のように)。固定戦略のみを使用する場合と、固定戦略とCLUSTER戦略の両方を同時に使用する場合の両方で、完全に機能します。

ハイブリッドディスプレイを作成したいのですが、たとえば、 「1つの機能のクラスタ」はKMLファイルに含まれている元のカスタムアイコン<Style><IconStyle><Icon><href>img/arrowRed.pngで表示されます。

現在、クラスター戦略を使用している場合、デフォルトのアイコン(黄色のディスク)を使用して1(機能)のクラスターが表示されます。

標準のOpenLayersではないプラグインやライブラリは使用したくありません。 助言がありますか?

クラスターを使用する元のJavaScriptコードの一部の下(クラスター戦略宣言を削除するnew OpenLayers.Strategy.Cluster()と、カスタムアイコンが正常に表示されます):

var urlKMLClient = 'KMLClientsAll.kml'; 
var layerKMLClient = new OpenLayers.Layer.Vector("Clients", {
        strategies: [new OpenLayers.Strategy.Fixed(), new OpenLayers.Strategy.Cluster(), refresh],
        protocol: new OpenLayers.Protocol.HTTP({
            url: urlKMLClient,
            format: new OpenLayers.Format.KML({
                extractStyles: true, 
                extractAttributes: true,
                maxDepth: 2
            })
        })
    }); 

クラスターなし

以下のクライアントカスタムアイコン(緑色のマーカー)がデフォルトのアイコン(黄色のディスク)をクラスター化する方法を参照してください。

クラスター付き

4

2 に答える 2

3

使用:new OpenLayers.Strategy.Cluster({threshold:2})これにより、クラスター内にない孤立したポイントが許可されます。

(GISフォーラムの同じ質問での回答の繰り返しです)

于 2013-03-10T13:49:37.123 に答える
0

このGISの質問で解決策を見つけました:

クラスター戦略を MORE THAN 1 に変更します。上記のコードは次のようになります。

var clusterStrategy = new OpenLayers.Strategy.Cluster({ distance: 35, threshold: 2 });
var urlKMLClient = 'KMLClientsAll.kml'; 
var layerKMLClient = new OpenLayers.Layer.Vector("Clients", {
        strategies: [new OpenLayers.Strategy.Fixed(), clusterStrategy, refresh],
        protocol: new OpenLayers.Protocol.HTTP({
            url: urlKMLClient,
            format: new OpenLayers.Format.KML({
                extractStyles: true, 
                extractAttributes: true,
                maxDepth: 2
            })
        })
    }); 
于 2013-03-08T22:01:36.913 に答える