2011-11-23 74 views
0

我有一大堆标记的谷歌地图。从地图上删除特定的标记?

我在地图上逐个添加标记,并且需要在需要时逐个删除单个标记,并使用单个标识。

目前我有一些可怕的,冗长的代码,涉及标记的全局阵列,ID作为元数据添加到每一个标记,和用于查找所述阵列内的标记的位置的笨重方法,如下所示:

var markersArray = []; 
    function getPositionById(markerId, arr) { 
     for (var i = 0; i < arr.length; i++) { 
      if (arr[i].metadata.id === markerId) { 
        return i; 
      } 
     } 
     return null; 
    } 
    function removeMarker(markerId) { 
     var marker_position = getPositionById(markerId, markersArray); 
     if (marker_position !== null) { 
      markersArray[marker_position].setMap(null); 
      markersArray.splice(marker_position,1); 
     } 
    } 
    function setMarker(position, markerId) { 
     removeMarker(markerId); 
     var temp_marker = new google.maps.Marker({ 
      position: position 
     }); 
     temp_marker.setMap(map); 
     temp_marker.metadata = { id: markerId }; 
     markersArray.push(temp_marker); 
    } 

任何人都可以建议一个更优雅的方式来做到这一点?

回答

1

鉴于从Map中删除标记需要使用setMap(null),意味着您需要对该标记进行引用。

你在问题中提出的方式并不像你想象的那么可怕,但另一种方法是使用地图而不是数组(不确定地图是否是最好的术语,因为我们已经在使用谷歌地图地图),但是,使用地图会将您从getPositionById()函数中删除,当然,假设您的所有markerId都是唯一的。

你的代码看起来像这样。

var markers = {}; 

function removeMarker(markerId) { 
    if(markers[markerId]){ 
     markers[markerId].setMap(null); 
     delete markers[markerId]; 
    } 
} 
function setMarker(position, markerId) { 
    removeMarker(markerId); 
    var temp_marker = new google.maps.Marker({ 
     position: position 
    }); 
    temp_marker.setMap(map); 
    temp_marker.metadata = { id: markerId }; 
    markers[markerId] = temp_marker; 
} 
+0

这样比较好,谢谢! – Richard