2017-03-09 4 views
0

클러스터링을 구현하고 있습니다. 항목을 클릭하면보기에 가운데에 놓고 해당 핀에 정보창을 표시하는 목록이 있습니다. 만약 핀이 현재 클러스터되어 있다면, 클러스터는 평균 위치이므로 infobox는 잠재적 인 위치에서 벗어나게 될 것입니다.빙지도 (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 또는 아래로 O (N) (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