Google Maps JavaScript API v3删除标记

Rus*_*ott 3 javascript jquery google-maps google-maps-api-3 google-maps-markers

我看了很多"相似"的问题,没有一个解决方案/答案似乎适合我,所以我们走了:我正在生成一个简单的谷歌地图,上面有一个标记"onload"我有一个菜单列表a有点像这样

<ul>
<li class="toggle" id="beaches">Item</li>
<li class="toggle" id="towns">Item</li>
<ul>
Run Code Online (Sandbox Code Playgroud)

点击时使用这些数组来标记填充地图

jQuery -

$(".toggle").click(function(){
setMarkers(map,$(this).attr('id'));
});

var beaches = [
['Beach 1',38.285827, 20.611038, 4],
['Beach 2', 38.304958,20.604515, 5],
['Beach 3',38.301691,20.597649, 3]
];

var towns = [
['Town 1',38.343003, 20.535679, 4],
['Town 2',38.339334,20.545807, 5]
];
Run Code Online (Sandbox Code Playgroud)

我的人口函数如下所示:

function setMarkers(map, locations) {
for (var i = 0; i < locations.length; i++) {
var newmarker = locations[i];
var myLatLng = new google.maps.LatLng(newmarker[1], newmarker[2]);
var marker = new google.maps.Marker({
position: myLatLng,
map: map,
title: newmarker[0],
zIndex: newmarker[3]
});
}
Run Code Online (Sandbox Code Playgroud)

但我需要/想要做的是在添加新标记之前先清除所有标记.建议请谢谢

Eng*_*eer 9

您需要存储标记,并要求setMap(null)从地图中删除每个标记.

你可以尝试这样的事情:

var setMarkers = (function() {
    var oldMarkers = null;
    return function(map, locations){
        //Clearing markers, if they exist
        if(oldMarkers && oldMarkers.length !== 0){
            for(var i = 0; i < oldMarkers.length; ++i){
                oldMarkers[i].setMap(null);
            }
        }
        //Adding new markers
        oldMarkers = [];
        for (var i = 0; i < locations.length; i++) {
            var newmarker = locations[i];
            var myLatLng = new google.maps.LatLng(newmarker[1], newmarker[2]);
            var marker = new google.maps.Marker({
               position: myLatLng,
               map: map,
               title: newmarker[0],
               zIndex: newmarker[3]
            });
            oldMarkers.push( marker );
        }
   };
})();
Run Code Online (Sandbox Code Playgroud)