【问题标题】:update markercluster after removing markers from array从数组中删除标记后更新标记簇
【发布时间】:2012-01-04 00:22:06
【问题描述】:

我目前正在使用带有 jquery ui 地图的 markercluster 插件。

我有两个数组,一个是所有标记(称为标记),另一个是匹配搜索条件的标记(称为 current_markers)。这些是从第一个数组中筛选出来的。

然后我在屏幕上绘制 current_markers。

然而,我发现 markerclusterer 库并未根据此更改进行更新。

那么如何更新markerclusterer呢?

是否可以将markerclusterer分配给变量并调用更新函数?

【问题讨论】:

    标签: javascript jquery google-maps markerclusterer


    【解决方案1】:

    是的,你可以。

    创建地图

    假设您已经创建了类似这样的 MarkerClusterer 对象:

    var center = new google.maps.LatLng(10, 20);
    var map = new google.maps.Map(document.getElementById('map'), { zoom: 6, center: center, mapTypeId: google.maps.MapTypeId.ROADMAP });
    var markerClusterer = new MarkerClusterer(map);
    

    添加标记

    您可以向它添加多个标记,如下所示:

    var markers = []
    var marker = new google.maps.Marker({position: center});
    markers.push(marker);
    markerClusterer.addMarkers(markers);
    

    请注意,这里我只添加了一个。

    删除所有标记

    然后您可以使用 clearMarkers 清除所有标记,如下所示:

    markerClusterer.clearMarkers();
    markers = [];
    

    请注意,为了整洁,我还在这里取消了标记数组。

    文档

    所有可用方法的完整文档可在此处获得:

    https://googlemaps.github.io/js-marker-clusterer/docs/reference.html

    更新链接:https://googlemaps.github.io/js-markerclustererplus/classes/markerclusterer.html#clearmarkers

    这是一个合理且相对完整的API。

    【讨论】:

    • 很好的答案,因为您不仅解决了 OP,而且还展示了与标记管理相关的完整过程,与集群构建无关
    • 谢谢@hubsonbropa,你说得真好。
    • 链接已失效,很难找到最新信息,这绝对有帮助!
    • 谢谢。 markerClusterer.clearMarkers();是更好的选择。
    【解决方案2】:

    您应该将标记对象存储在 var 中,然后按以下方式取消设置地图:

    var markerCluster = new MarkerClusterer(map, markers);
    /// ... later on
    markerCluster.setMap(null);
    

    完成此操作后,您可以使用新标记初始化 new MarkerClusterer

    更新

    因为您使用的是 google maps ui 插件,所以这里有一些额外的代码。我什至在reset_markercluster 类的按钮上添加了一个点击,当然这只是为了展示如何使用它来调用地图

    var _map, _markerCluster;
    
    $(function() {
      $('#map_canvas').gmap().bind('init', function(event, map) { 
        _map = map; // at this point you can call _map whenever you need to call the map
    
        // build up your markers here ...
    
        _markerCluster = new MarkerClusterer(_map, markers);  // you could also use map instead of _map here cause it's still present in this function
      });
    
      $("button.reset_markercluster").click(function(e) {
        e.preventDefault();
        _markerCluster.setMap(null);  // remove's the previous added markerCluster
    
        // rebuild you markers here ...
    
        _markerCluster = new MarkerClusterer(_map, newMarkers);
    
      });
    });
    

    【讨论】:

    • 在构造函数 map, markers 中,或者您也可以使用 setMap() 进行设置
    • 好的,那么在这种情况下如何将地图设置为变量?我主要是因为 jquery ui 地图插件而感到困惑。
    • 我收到一条错误消息,提示“对象没有可拖动的方法”
    • 好吧,和我一样。循环 _clusterer 中的标记是否有办法查找标记是否已聚类?
    【解决方案3】:

    最好使用您的 markerCluster 对象中的 clearMarkers() 方法:

    http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/docs/reference.html 更新参考:https://googlemaps.github.io/js-markerclustererplus/classes/markerclusterer.html#clearmarkers

    【解决方案4】:

    marker-clusterer-plus 有一个removeMarkers 方法:

    markerCluster.removeMarkers(markers);
    

    【讨论】:

      【解决方案5】:

      你可以这样管理。

      1. 创建空白集群变量

        var _markerCluster;
      2. 在我们的变量上存储集群对象。

        _markerCluster = new MarkerClusterer(地图,标记,{ imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m', });

      1. 当您删除标记时,您需要编写以下代码。
      尝试{ _markerCluster.clearMarkers(); }捕捉(e){ }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-27
        • 2019-06-10
        • 2014-07-09
        • 2018-04-25
        • 2012-10-23
        • 2014-05-24
        相关资源
        最近更新 更多