从 markerClusterer 中删除标记

Posted

技术标签:

【中文标题】从 markerClusterer 中删除标记【英文标题】:Remove markers from markerClusterer 【发布时间】:2014-05-24 15:38:15 【问题描述】:

我正在尝试创建一个带有集群的交互式地图,当用户选中一个框时需要显示该地图,并在再次取消选中该框时将其删除。 到目前为止一切正常,集群正常工作,但我注意到一个我无法解释和修复的奇怪行为:每次我取消选中该框并再次选中它时,集群中显示的数字都会增加该区域中的标记数量(因此当我执行“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 中删除标记,只是将它们从地图中分离出来。所以,下次你将相同的标记放入数组中并显示它们。 好的,你能告诉我从数组中删除它们的方法或技术吗? (我尝试对数组上的所有元素执行 setMap(null),但这似乎根本没有做任何事情) 【参考方案1】:

仅适用于在互联网上搜索实际答案的任何人(因为这个问题非常古老):

var markerCluster = new MarkerClusterer(map, markers);

markerCluster.clearMarkers();

这将删除 markerCluster 中的所有标记。

一切都可以在这里找到:https://googlemaps.github.io/js-marker-clusterer/docs/reference.html¨

2020 年 11 月 10 日更新

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

13.1.2022 更新

我认为链接应该可能会再次更新。 我能够找到 2 个存储库,但我不知道有什么区别:

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

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

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

【讨论】:

【参考方案2】:
markerCluster.remove(myMarker);

如果您有要删除的标记列表,请执行此操作:

for (var i = 0; i < markers.length; i++) 
  markerCluster.removeMarker(markers[i]);

【讨论】:

文档状态“markerCluster.removeMarker()”googlemaps.github.io/js-marker-clusterer/docs/reference.html 我按照@tempranova 的建议编辑了答案。如果不是错误,请随时回滚【参考方案3】:

像这样在setAllMapPredicted(null,markersPredicted) 之后清空你的标记预测数组

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

【讨论】:

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

将自定义标记放在 markerclusterer

同一个地方有多个标记 - MarkerClusterer

Google map API:仅将 MarkerClusterer 应用于特定标记的类别

Google MAP API,对 MarkerClusterer 的限制

Google Maps api Detect使用markerclusterer点击标记[重复]

使用markerclusterer v3获取谷歌地图范围内的标记列表