更新标记集群

Don*_*ell 5 javascript maps google-maps markerclusterer

我有一个谷歌地图设置与通过JSON提供提供的标记.由于涉及大量标记(超过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;
}
Run Code Online (Sandbox Code Playgroud)

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

小智 6

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

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

你可以先删除了一堆带标记的opt_nodraw设置为trueresetViewport(); redraw();稍后手动.


Dve*_*Dve 1

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

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

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

    }
Run Code Online (Sandbox Code Playgroud)

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

您无法直接编辑簇,但可以使用 addMarker/removeMarker 添加和删除标记到markerCluster 对象,这反过来会将它们从簇中删除并重新绘制。