2013-02-15 211 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/