从地图中删除特定标记?

时间:2011-11-23 19:14:30

标签: javascript google-maps google-maps-api-3

我有一个带有一堆标记的Google地图。

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

目前我有一些可怕的,冗长的代码,涉及全局标记数组,每个标记添加为元数据的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 个答案:

答案 0 :(得分: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;
}