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

jag*_*get 21 javascript jquery google-maps markerclusterer

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

我有两个数组,一个是所有标记(称为标记),另一个是与搜索条件匹配的标记(称为current_markers).这些是从第一个阵列中获得的.

然后我在屏幕上绘制current_markers.

然而,我发现markerclusterer库没有根据此更改进行更新.

那么如何更新markerclusterer呢?

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

sup*_*ary 49

是的你可以.

创建地图

假设您已经创建了这样的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);
Run Code Online (Sandbox Code Playgroud)

添加标记

你可以添加多个标记,如下所示:

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

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

删除所有标记

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

markerClusterer.clearMarkers();
markers = [];
Run Code Online (Sandbox Code Playgroud)

请注意,为了整洁,我还在这里取消了标记数组的设置.

文件

有关所有可用方法的完整文档,请访问:

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

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

  • 优秀的答案,因为您不仅解决了OP问题,而且还展示了与标记管理相关的完整过程,而与群集构造无关 (6认同)
  • 谢谢。markerClusterer.clearMarkers(); 是更好的选择。 (2认同)

Man*_*ijn 13

您应该将标记对象存储在var中,然后取消设置地图,如下所示:

var markerCluster = new MarkerClusterer(map, markers);
/// ... later on
markerCluster.setMap(null);
Run Code Online (Sandbox Code Playgroud)

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

更新

因为你正在使用谷歌地图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);

  });
});
Run Code Online (Sandbox Code Playgroud)