从markerClusterer中删除标记符号

12

我正在尝试创建一个交互式地图,其中的聚类需要在用户勾选复选框时显示,并在取消勾选复选框时移除。 到目前为止,一切都运行良好,聚类工作正常,但我注意到了一个奇怪的行为,我无法解释和修复:每次我取消勾选复选框并再次勾选它时,聚类中显示的数字会增加该区域中标记的数量(因此当我执行“clearMarkers”时,它似乎从未被重置为零)。

以下是涉及到的函数代码:

//Display or remove PREDICTED accident's markers.
function toDisplayPredictedAccidents ()
{
    //If the checkbox is checked : Display all the PREDICTED accident's markers.
    if(checkBoxPredicted.checked == true)
    {
        for (i = 0; i < predictedAccidentArray.length; i++) 
        {  
            marker = new google.maps.Marker
            ({
                position: new google.maps.LatLng(predictedAccidentArray[i][1], predictedAccidentArray[i][2]),
                icon : iconPredicted
            });
            markersPredicted.push(marker); //Put the created marker in an array.


           //Create the pop-up when we click on the marker.
           google.maps.event.addListener(marker, 'click', (function(marker, i)
           {
              return function() 
              {
                  infowindow.setContent(predictedAccidentArray[i][0]);
                  infowindow.open(map, marker);
              }
           })(marker, i));
        }
        markerClusterPredicted = new MarkerClusterer(map, markersPredicted);
    }
    else
    {
        clearPredictedMarkers();
        markerClusterPredicted.clearMarkers();

    }
}

//clearMarkers and setAllMap are related and aim to REMOVE all the PREDICTED accident's markers.
function clearPredictedMarkers() {
  setAllMapPredicted(null, markersPredicted);
}

function setAllMapPredicted(map, markersArray) 
{
  for (var i = 0; i < markersArray.length; i++) 
  {
     markersPredicted[i].setMap(map);
  }
}

有人知道如何修复这种行为吗?:)


你没有从 markersPredicted 中删除标记,而只是将它们从地图上分离。因此,下次你将相同的标记放入数组并显示它们全部。 - Anto Jurković
好的,那么你能指导我一个从数组中删除它们的方法或技巧吗?(我尝试在数组的所有元素上执行setMap(null),但似乎没有任何作用) - Zoé de Moffarts
3个回答

34

这里是给那些正在网络上寻找实际答案的人(因为这个问题很老):

var markerCluster = new MarkerClusterer(map, markers);

markerCluster.clearMarkers();

这将删除标记群集中的所有标记。

您可以在这里找到所有信息:https://googlemaps.github.io/js-marker-clusterer/docs/reference.html¨

更新于2020年10月11日

js-marker-clusterer已经移动,旧仓库不再维护。 相反,您应该使用https://github.com/googlemaps/v3-utility-library

更新于2022年1月13日

我认为链接可能需要再次更新。 我找到了两个仓库,但我不知道有什么区别:

https://github.com/googlemaps/js-markerclustererplus

https://github.com/googlemaps/js-markerclusterer

这里是文档:https://googlemaps.github.io/js-markerclusterer/


7
markerCluster.remove(myMarker);

如果您有要删除的标记列表,只需执行以下操作:
for (var i = 0; i < markers.length; i++) {
  markerCluster.removeMarker(markers[i]);
}

7
文档中写明了 "markerCluster.removeMarker()" https://googlemaps.github.io/js-marker-clusterer/docs/reference.html - tempranova
我按照@tempranova的建议编辑了答案。如果这是一个错误,请随时回滚。 - Christian Vincenzo Traina

0

setAllMapPredicted(null,markersPredicted)之后,只需清空您的markersPredicted数组,就像这样

function clearPredictedMarkers() {
  setAllMapPredicted(null, markersPredicted);
  markersPredicted = [];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接