Javascript 更新markerclusters

Javascript 更新markerclusters,javascript,google-maps,maps,markerclusterer,Javascript,Google Maps,Maps,Markerclusterer,我有一个谷歌地图,上面有通过JSON提要提供的标记。由于涉及到大量的标记(超过600个),我使用MarkerClustererV3来加快速度。在我尝试更改通过选项按钮显示的标记之前,一切正常。我将此功能分配给单选按钮: function activities(markerarray,mapused,actType) { for(i in markerarray) { if(markerarray[i].activity[actType] == null) {

我有一个谷歌地图,上面有通过JSON提要提供的标记。由于涉及到大量的标记(超过600个),我使用MarkerClustererV3来加快速度。在我尝试更改通过选项按钮显示的标记之前,一切正常。我将此功能分配给单选按钮:

function activities(markerarray,mapused,actType) {
    for(i in markerarray) {
        if(markerarray[i].activity[actType] == null) {
            markerarray[i].setMap(null);
    }
        else {
            markerarray[i].setMap(mapused);
    }
}
return markerarray;
}

这将阻止标记显示在地图上,并且对于实际的谷歌标记效果良好。但是,我似乎无法找到如何更新加载页面时创建的群集。

我也遇到了同样的问题,从阅读源代码中可以看出。。。你不能

我将背景中的所有项目缓存为单个标记,并在需要时过滤它们

    displayItems: function(infilter){
        this.markerCluster.clearMarkers();
        var matches = infilter.matches(this.markers);
        this.markerCluster.addMarkers(matches);

    }
this.markers是我的标记缓存,this.markerCluster是我的markerCluster对象-两者都是全局的


您不能直接编辑群集,但可以使用addMarker/removeMarker向markerCluster对象添加和删除标记,这将从群集中删除标记并重新绘制。

要更新群集,应首先调用
resetViewport()方法隐藏它,而不是使用
重画()重新计算群集的方法

对标记使用setMap(null)函数不会将其从markerClusterer注销,要注销,可以使用
removeMarkers(marker,opt_nodraw)
removeMarkers(markers,opt_nodraw)
函数。根据我的经验,这些都是昂贵的操作。将
opt_nodraw
函数设置为
true
将强制不重新绘制,这将提高性能


您可以首先删除一组标记,将
opt_nodraw
设置为
true
并设置为
resetViewport()
重画()稍后手动执行。

谢谢@Dve,它成功了!我想我是在背对背地考虑这个问题。