从数组中删除标记后更新标记簇

Posted

技术标签:

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

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

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

然后我在屏幕上绘制 current_markers。

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

那么如何更新markerclusterer呢?

是否可以将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 地图插件而感到困惑。 我收到一条错误消息,提示“对象没有可拖动的方法” 这个插件:google-maps-utility-library-v3.googlecode.com/svn/trunk/… 好吧,和我一样。循环 _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

【讨论】:

更新链接:googlemaps.github.io/js-markerclustererplus/classes/…【参考方案4】:

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

markerCluster.removeMarkers(markers);

【讨论】:

【参考方案5】:

你可以这样管理。

    创建空白集群变量

    var _markerCluster;

    在我们的变量上存储集群对象。

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

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

【讨论】:

以上是关于从数组中删除标记后更新标记簇的主要内容,如果未能解决你的问题,请参考以下文章

移动地图时,在谷歌地图中更新Ajax Json数组中的标记

从Swift数组中的选定复选标记中删除字符串

如何从GoogleMapsAPI中的静态数组中删除特定标记

删除先前的标记并在更新的 lat lng 中添加标记

从嵌套的谷歌地图标记数组中获取标记位置

传单地图双标问题