【问题标题】:How to hide and show MarkerClusterer in google maps如何在谷歌地图中隐藏和显示 MarkerCluster
【发布时间】:2013-01-31 09:49:26
【问题描述】:

当用户单击某些按钮时,我正在尝试隐藏/显示 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
}

我做了很多测试,但没有一个能满足我的要求。 有人能帮我吗?谢谢!

【问题讨论】:

  • 您需要隐藏/显示某些类别的标记,还是需要“去聚类”?
  • 我只需要隐藏/显示与它关联的按钮单击的类别的集群

标签: javascript google-maps-markers show-hide markerclusterer


【解决方案1】:

我整个上午都在为此苦苦挣扎,但幸运的是我找到了解决方案。

首先,确保你拥有最新的 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();

希望对你有帮助,问候

【讨论】:

  • 仅供参考...在 MarkerClusterer 的最新版本 1.2.0 中,该参数称为:'ignoreHiddenMarkers'
  • 它可以工作,但簇数计数器不更新,所以地图有点混乱。
  • 添加这一行: for (var i=0; i
  • 这行不通,你需要遍历 'markerCluster' 中的 'markers_' 数组,并将每个可见性设置为 false。
【解决方案2】:

我有同样的情况,这就是我的做法......希望它有所帮助

集群实例化

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);
}

这是一个用于测试http://jsfiddle.net/3s6qfzcy/的jsfiddle链接

【讨论】:

    【解决方案3】:

    例如,您可以:

    1. 定义按钮的点击处理程序;
    2. 使用函数 getMarkers() 获取所有标记并将结果保存到变量中 (var allMarkers = getMarkers());
    3. 创建另一个变量以添加/删除标记(var currentMarkers = allMarkers);
    4. 当您点击每个按钮时,您可以循环 currentMarkers 变量并使用函数 removeMarker(MARKER_TO_REMOVE) 或 addMarker(MARKER_TO_ADD, true)(true 是重新绘制地图);
    5. 在循环标记时,您可以访问它们的信息(执行 console.log(marker) 以查看我在说什么);

    有关更多信息,您可以在此处查看文档:https://googlemaps.github.io/js-marker-clusterer/docs/reference.html

    【讨论】:

    • 我喜欢你的解决方案...我创建了一个全局关联数组:每个键都是一个类别,每个值都是标记数组。所以在按钮点击我做: function showMaps(name,visible){ var tmp_cluster = clustersContainer[name]; if(visible){ tmp_cluster.addMarkers(map,globalMarkers[name],true); }else{ tmp_cluster.removeMarkers(map,globalMarkers[name],true); } 但不幸的是它不想显示它..
    猜你喜欢
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    相关资源
    最近更新 更多