2017-06-20 87 views
1

我打电话API并在几秒钟间隔后绘制新标记。新标记被绘制出来,但旧标记仍然存在。我想在绘制新标记时清除旧标记。这是我的代码。Google map在绘制新标记时清除旧标记

var myMarkers = []; 
var i; 
var marker = new google.maps.Marker({ 
    position: new google.maps.LatLng(12.967086,77.746564), 
    map: map, 
});  
setInterval(function(){ 
     $.post(contextPath+"/api/getlocations", {} , function(data){ 
      var response = data; 
      var locations = response.locations; 
      var marker, i; 

      for (var i = myMarkers.length; i > 0; i--) { 
       myMarkers[i].setMap(null); 
      } 
      myMarkers = []; 
      for (i = 0; i < locations.length; i++) { 
       marker = new google.maps.Marker({ 
        position: new google.maps.LatLng(locations[i][1], locations[i][2]), 
        map: map 
       }); 

       google.maps.event.addListener(marker, 'click', (function(marker, i) { 
        return function() { 
         infowindow.open(map, marker); 
        } 
       })(marker, i)); 
       myMarkers.push(marker); 
      } 
     }); 
    }, 5000); 

*映射被初始化。

任何帮助将不胜感激。由于

+0

我不确定你想达到什么 - 听起来像一个“移动标记”。如果是这样,请将“var marker”移动到函数外部,然后先移除(...),然后放置marker.setMap(null),它应该起到“移动标记”的作用。 – jspassov

回答

1

宣布在窗口级别myMarkers用于管理标志收集

var myMarkers = []; 

之前创建的标记清除以前

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

    myMarkers.[i].setMap(null); 
} 
myMarkers = []; 

..

marker = new google.maps.Marker({ 
       position: new google.maps.LatLng(locations[i][1], locations[i][2]), 
       map: map 
      }); 

//添加在你标记集合

myMarkers.push(marker); 
+0

现在出现错误 - 未捕获TypeError:无法读取未定义的属性'setMap' – ireng

+0

我更新了代码,在setMap(null)..try ..的循环之后添加了清除myMarkers并让我知道 – scaisEdge

+0

同样的错误 - 未捕获TypeError :无法读取未定义的属性'setMap' – ireng