在添加新标记之前从地图中删除标记

时间:2017-09-18 12:30:18

标签: javascript php jquery google-maps

我有一张地图最初标记加载来自数据库,然后我有一个基于时间的Ajax请求,每隔1分钟就会再次获取记录。< / p>

以下是我使用setMapOnAll(null)的代码,Google maps Documentation但是它无效

success: function(data){
    var positions = [];
    $.each(data.riders, function(index, value) {
        positions.push({
            lat: value.rider_location.lat,
            lng: value.rider_location.lng,
            content: value.name,
            id : value.id
        });
    });
    map.setCenter({
      lat: parseInt(positions[0].lat),
      lng: parseInt(positions[0].lng)
    });
    var infowindow = new google.maps.InfoWindow();
    var marker,
    i;
    setMapOnAll(null); //Remove the existing markers
    while(positions.length){
        positions.pop().setMap(null);
    }
    for (i = 0; i < positions.length; i++) {
        marker = new google.maps.Marker({
            position: new google.maps.LatLng(positions[i].lat,positions[i].lng),
            map: map,
            id : positions[i].id,
          });
        google.maps.event.addListener(marker, 'click', (function (marker, i) {
        return function () {  
        }
      }) (marker, i));
    }
  }

如何在添加新标记之前删除现有标记。

2 个答案:

答案 0 :(得分:2)

方法marker.setMap(null)为google docs https://developers.google.com/maps/documentation/javascript/markers

你需要创建标记数组,然后通过调用方法marker.setMap(null)从循环中删除所有地图

var markers = []; 
    for (i = 0; i < positions.length; i++) {
        var marker = new google.maps.Marker({
            position: new google.maps.LatLng(positions[i].lat,positions[i].lng),
            map: map,
            id : positions[i].id,
          });

        markers.push(marker);
        google.maps.event.addListener(marker, 'click', (function (marker, i) {
            return function () {  
            }
        }) (marker, i));
    }

答案 1 :(得分:1)

您应该将此功能添加到您的代码中,并在添加新标记的位置调用它,然后添加新标记。这将删除以前的标记。

function setMapOnAll(map) {

  for (var i = 0; i < markers.length; i++) {

  markers[i].setMap(map);
  }
}