2011-11-23 77 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