更新标记集群

时间:2011-05-17 14:42:12

标签: javascript google-maps maps markerclusterer

我设置了谷歌地图,其中包含通过JSON Feed提供的标记。由于涉及大量标记(超过600个),我使用了markerclusterer v3来加快速度。一切正常,直到我尝试通过选项按钮更改显示的标记。我将此功能分配给单选按钮:

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

这将阻止标记在地图上显示,并且对于实际的Google标记工作正常。但是,我似乎无法找到如何更新页面加载时创建的集群。

2 个答案:

答案 0 :(得分:6)

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

在标记上使用setMap(null)函数不会从markerClusterer中取消注册,要取消注册,您可以使用removeMarkers(marker, opt_nodraw)removeMarkers(markers, opt_nodraw)函数。根据我的经验,这些是昂贵的操作。将opt_nodraw函数设置为true将强制不重绘,这将改善性能。

您可以先删除一堆标记,opt_nodraw设置为true,然后手动设置为resetViewport(); redraw();

答案 1 :(得分:1)

我遇到了同样的问题,从我能说的是阅读源代码......你不能。

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

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

    }

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

您无法直接编辑群集,但可以使用addMarker / removeMarker向markerCarkter对象添加和删除标记,然后将其从群集中删除并重绘。