2017-03-09 5 views
0

クラスタリングの実装を検討しています。アイテムがクリックされたときに、そのアイテムをビューの中央に配置し、そのピンの情報ボックスをポップアップするリストがあります。ピンが現在クラスタリングされている場合は、クラスタが平均的な位置であるため、インフォボックスが潜在的に潜在的に外れて見えることになります。Bing Mapsノーマルピンがどのクラスタピンにあるかを知る方法

クラスターレイヤーからクラスター化されたピンだけを取得する方法はありますか?

は、私の解決策が見つかり

var PinYouAreMatching;//wherever you have this coming from 
var primitives = clusterLayer.getPrimitives(); 
for(var i = 0;i < primitives.length;i++) 
{ 
    if(primitives[i] instanceof Microsoft.Maps.ClusterPushpin) 
    { 
    var contained = primitives[i].containedPushpins; 
    for(var j = 0;j < contained.length;j++) 
    { 
     if(PinYouAreMatching === contained[j]) 
     { 
      //You found the cluster your pin is at eg. primitives[i]. 
     } 
    } 
    } 
} 

あなたはあなたの主なピンのクラスタへの参照を使用して、クラスタのプッシュピンのコールバックは、物事をスピードアップするときに組み合わせることができます。

function clusterCallBack(cluster) 
{ 
     var contained = primitives[i].containedPushpins; 
     for(var j = 0;j < contained.length;j++) 
     { 
      contained[j].metadata = { cluster: cluster }; 
     } 
} 

O(n^2)またはO(n)からO(n)またはO(1)までのいくつかの処理を高速化します。

答えて

0

イベントをクラスタ化されたプッシュピンに追加すると、イベントハンドラはクラスタ化されたプッシュピンを受け取り、その場所を使用してインフォボックスを表示できます。コードサンプルは次のとおりです。

clusterLayer = new Microsoft.Maps.ClusterLayer(pins, { 
    clusteredPinCallback: function(cluster){ 
     Microsoft.Maps.Events.addHandler(cluster, 'click', function(e){ 
      //This is how you get the location of the cluster. 
      var loc = e.target.getLocation(); 

      //Show your infobox here 
     }); 
    } 
}); 
+0

残念ながら、これはクラスタ化されたプッシュピンの位置からのクリックです。私は、地図に直接添付されていないメニュー項目からクリックが来るようにしたい。線形検索がうまくいくはずの項目が十分に少ないです。私は、現在のクラスター化されたすべてのピンをクラスターレイヤーから取得する方法は見当たりません。 – user2927848

+0

私はそれを理解して、プリミティブを通過するときにinstanceof Microsoft.Maps.ClusterPushpinを使用することができます。また、スピードアップのためにカスタムクラスタープッシュピンを作成するときに、ピンへの参照を追加します。ありがとうrbrundritt。 – user2927848

関連する問題