我有一张地图最初标记加载来自数据库,然后我有一个基于时间的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));
}
}
如何在添加新标记之前删除现有标记。
答案 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);
}
}