2013-12-10 80 views
11

我正在使用MarkerClusterer。當我在同一個點上有兩個或多個標記時,API只顯示1個標記 - 最上面的一個標記。但不知何故,我想顯示所有的標記,因爲每個將打開不同的彈出窗口。 我已經搜索發現幾個解決方案,但似乎沒有工作 任何人都有類似的問題,並會共享一個解決方案?同一地點有多個標記 - MarkerClusterer

+2

的[集成Spiderfier JS成markerClusterer V3爆炸多標誌物完全相同的經度/緯度]可能重複(http://stackoverflow.com/questions/9726920/integrating-spiderfier-js-into-markerclusterer -v3-explode-multi-markers-with) – geocodezip

+1

@geocodezip有沒有一種方法可以在不使用OverlappingMarkerSpiderfier的情況下工作,因爲它不能滿足需求。只用很小的空間顯示兩個標記就可以知道有兩個或更多的標記。謝謝。 – Grish

+0

當然有。只需編碼就可以做到這一點。或者改變輸入數據,以避免重複。 – geocodezip

回答

23

終於搞定了。這是所有那些還沒有找到解決方案的人。下面的代碼將抵消對同一位置的標記:

在你createMarker函數添加以下代碼:

//get array of markers currently in cluster 
var allMarkers = namespace.mapParams.mapMarkersArray; 

//final position for marker, could be updated if another marker already exists in same position 
var finalLatLng = latlng; 

//check to see if any of the existing markers match the latlng of the new marker 
if (allMarkers.length != 0) { 
    for (i=0; i < allMarkers.length; i++) { 
     var existingMarker = allMarkers[i]; 
     var pos = existingMarker.getPosition(); 

     //if a marker already exists in the same position as this marker 
     if (latlng.equals(pos)) { 
      //update the position of the coincident marker by applying a small multipler to its coordinates 
      var newLat = latlng.lat() + (Math.random() -.5)/1500;// * (Math.random() * (max - min) + min); 
      var newLng = latlng.lng() + (Math.random() -.5)/1500;// * (Math.random() * (max - min) + min); 
      finalLatLng = new google.maps.LatLng(newLat,newLng); 
     } 
    } 
} 

Refer this

現在更新與新的位置值每個標記您的google.maps.Marker對象 - finalLatLng

var marker = new google.maps.Marker({ 
    map: msf_namespace.mapParams.resultmap, 
    position: finalLatLng, 
    title: name, 
    icon: markericon 
}); 

//add each generated marker to mapMarkersArray 
namespace.mapParams.mapMarkersArray.push(marker); 
+2

我更喜歡你的方法而不是蜘蛛技巧,但是我想知道你正在使用多少標記,並且你是否注意到了放置的放慢速度? – ow3n

+0

目前約有百位,至今沒有性能問題 – Grish

+0

其作品適合我。 –

相關問題