22

如何从地图中删除所有集群图标(集群标记)?尝试过以下建议:

Google Maps API v3:如何删除所有标记?

...但它没有奏效。

你能帮我实现吗?

先感谢您!

更新 (2010-11-23)

标记存储在数组中

var markersClust = Array();

...并添加(与php结合):

markersClust.push(marker_<?php echo $team["Team"]["id"]; ?>);

var markerClusterer = new MarkerClusterer(MyMap.map, markersClust, clusterOptions);

它工作正常。

但是,我无法将它们从地图中删除,它驱使我...

试图删除标记(我做到了)

for ( var i=0; i < markersClust.length; i++) {
    markersClust[i].setMap(null);
}
markersClust = []; 

但集群图标仍在地图上。

我也试过这样的事情:

markerClusterer.clearMarkers();

和喜欢

MyMap.preventDefault();
MyMap.stopPropagation();
MyMap.clearMarkers();

但是,同样,集群的图标仍然存在,在地图上。

我还需要做什么才能从我的地图中删除这些集群图标?请帮忙...

4

5 回答 5

50

这是正确的方法:

// Unset all markers
var i = 0, l = markers.length;
for (i; i<l; i++) {
    markers[i].setMap(null)
}
markers = [];

// Clears all clusters and markers from the clusterer.
markerClusterer.clearMarkers();

演示:http: //jsfiddle.net/HoffZ/gEzxx/

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

于 2013-03-26T12:02:41.193 回答
4

我也有同样的问题。我通过在初始化期间仅声明我的 MarkerClusterer 来修复它:

markerCluster = new MarkerClusterer(map);
于 2012-10-03T18:11:06.510 回答
0

遍历每个标记并将该标记的映射设置为空。这将从地图中删除标记。

于 2010-11-22T20:27:33.193 回答
0

这就是我所做的。我有很多标记,但是当我切换到热图时,我想删除所有标记和聚类器。当我创建标记时,我将它添加到全局标记数组

 markers.push(marker);

我这样定义集群

markerCluster = new MarkerClusterer(map, markers);
markerCluster.setIgnoreHidden(true);

当我单击按钮显示热图时

$.each(markers, function(k, v){
    v.setVisible(false);
});
markerCluster.repaint();

repaint()使用忽略隐藏调用时,它会隐藏所有群集图标。

于 2013-01-21T13:13:51.303 回答
0

基于并扩展 ITT 中的一些答案:

如果将 clustermarkerplus 初始化为整个页面加载的一部分,则 clustermarkerplus 的示例通常会显示如何使用它。

如果您在单页应用程序中使用该库并在边界更改时刷新标记,则声明New MarkerClusterer(map)将导致您不仅使集群保持不变,而且某些标记也可能保持不变,这可能是因为该库除了处理实际之外还优化了标记显示群集图标。

因此,在页面初始化期间,您应该创建一个MarkerClusterer对象。然后在更新期间,您应该执行单个标记为空的行为,而且还应清除MarkerClusterer对象。

new google.maps.Map()在您设置选项并创建全局变量的位置构建后调用的示例函数mapSet['facilityMarkerCluster']

const clusterFacilityMarkers = function () {
  const clusterOptions = {
    imagePath: "/static/js/dependencies/markerclustererplus/img/m",
    gridSize: 75,
    zoomOnClick: true,
    maxZoom: 8,
  };

  mapSet['facilityMarkerCluster'] = new MarkerClusterer(mapSet['map'], [], clusterOptions);
};

请注意,该声明使用了一个空的标记数组,因为您的添加标记的标记更新例程可能会在此之后运行,即使它是一个完整的页面重新加载。

在此更新例程中,在为您的地图添加标记部分期间(可能会在边界更改以及您正确清除各个标记后运行):

const addFacilityMarkers = function (resolve) {

// For loop over creation of your updated set of markers
            createFacilityMarker(facilitiesJson[key]);

// Update marker clusters

        // Clear the markercluster objects
        mapSet['facilityMarkerCluster'].clearMarkers();
        // Then add your array of markers to the markercluster object
                mapSet['facilityMarkerCluster'].addMarkers(mapSet['facilityMarkers']);
};
于 2020-06-15T17:03:17.833 回答