2013-02-15 210 views
6

我試圖隱藏/顯示markerClusterer當用戶點擊一些按鈕:如何隱藏和顯示谷歌地圖MarkerClusterer

這裏是我想要做的事:

map = new google.maps.Map(document.getElementById("mappa"),mapOptions); 
    var marker_tmp = []; 
    var markers_tmp = []; 
    $.each(json,function(index,value){ 
     var latLng = new google.maps.LatLng(value.lat,value.lng); 
     var marker = new google.maps.Marker({'position': latLng}); 
     if((value.candidato in markers_tmp)==false){ 
      markers_tmp[value.name]=[]; 
     } 
     markers_tmp[value.name].push(marker); 
    }); 
    for(var name in markers_tmp){ 
     markers[name]= new MarkerClusterer(map,markers_tmp[name]); 
    } 

創建多個markerClusterer每個都與一個特定的名字相關聯。

所以我有一些按鈕與這些特定的名稱相關聯,我需要隱藏/顯示與該按鈕相關的標記聚簇器。

/*This is the function associated to a button when it is clicked*/ 
function hide_show_cluster(name,visible){ 
    var tmp_cluster = markers[name]; 
    //call a function of markerClusterer (tmp_cluster) to hide/show it 
} 

我做了很多測試,但沒有人滿足我的要求。 有人可以幫我嗎?謝謝!

+0

你需要隱藏/顯示一些categorie標記,或者你需要「unclusterer」嗎? – 2013-02-15 12:33:10

+0

我只需要隱藏/顯示通過與它相關 – JackTurky 2013-02-15 12:47:15

回答

16

我整個上午這個一直在努力,但幸運的是我得到了一個解決方案。

首先,請確保您有最新MarkerClustererPlus版本https://github.com/googlemaps/js-marker-clusterer

那是很容易的,

在創建標記確保您

設置它的可見標誌設置爲false 。

和創建標記聚類器的時候做這種方式:

new MarkerClusterer(map, markers, { ignoreHidden: true }); 

,如果你想顯示聚類器只是這樣做:

for (var it in markers) { 
    markers[it].setVisible(true); 
} 

markerCluster.repaint(); 

隱藏集羣:

for (var it in markers) { 
    markers[it].setVisible(false); 
} 

markerCluster.repaint(); 

希望它有幫助,關心

+0

非常簡單的解決方案!非常感謝! :) – JackTurky 2013-07-16 23:39:26

+0

你非常歡迎!您可以將這些算法添加到markerclusterer的原型鏈中,因爲show/hide方法對我來說也更加清晰 – nicoabie 2013-07-17 16:13:10

1

可以,例如:

  1. 定義的按鈕單擊處理;
  2. 使用函數getMarkers()獲取所有標記並將結果保存到變量(var allMarkers = getMarkers());
  3. 創建另一個變量來添加/刪除標記(var currentMarkers = allMarkers);
  4. 當你點擊每個按鈕時,你可以循環currentMarkers變量並使用函數removeMarker(MARKER_TO_REMOVE)或addMarker(MARKER_TO_ADD,true)(真正的是重繪地圖);
  5. 當你循環的標記,你可以訪問他們的信息(做一個console.log(標記),看看我在說什麼);

欲瞭解更多信息,你可以在這裏看到的文檔:https://googlemaps.github.io/js-marker-clusterer/docs/reference.html

+0

按鈕我喜歡你的解決方案點擊categorie集羣...我創建了一個全球關聯數組:每個鍵是一個類別,每個值標記的陣列。所以在按鈕點擊我做:function showMaps(name,visible){ \t var tmp_cluster = clustersContainer [name]; \t如果(可見){ \t tmp_cluster.addMarkers(地圖,globalMarkers [名稱],TRUE); \t}否則{ \t tmp_cluster.removeMarkers(地圖,globalMarkers [名稱],TRUE); \t}但不幸的是它不想顯示它.. – JackTurky 2013-02-16 14:24:11

+0

你有沒有嘗試在de end調用函數redraw()? – 2013-02-18 09:56:35

0

我有同樣的情況,這是我怎麼做...希望它可以幫助

集羣實例化

let markerCluster = new MarkerClusterer(map, markers, { 
    imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m'}); 

隱藏集羣:

function hideMarkers() { 
    for (let i in markers) { 
     markers[i].setMap(null); 
    } 
    markerCluster.clearMarkers(); 
} 

,顯示集羣:

function showMarkers() { 
    for (let i in markers) { 
     markers[i].setMap(map); 
    } 
    markerCluster.addMarkers(markers); 
} 

這裏是一個鏈接的jsfiddle測試http://jsfiddle.net/3s6qfzcy/