【问题标题】:Updating markerclusters更新标记集群
【发布时间】:2011-05-17 14:42:12
【问题描述】:

我有一个谷歌地图,上面有通过 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;
}

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

【问题讨论】:

    标签: javascript google-maps maps markerclusterer


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

      • 感谢@Dve,它成功了!我想我是从头到尾地看待问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      • 2012-03-13
      • 1970-01-01
      相关资源
      最近更新 更多