在谷歌地图API v2,如果我想删除所有的地图标记,我可以简单地做:

map.clearOverlays();

我如何做到这一点在谷歌地图API v3?

看看参考API,我不清楚。


当前回答

解决方法很简单。你可以使用方法:marker.setMap(map);。在这里,您定义大头针将出现在哪个映射上。

所以,如果你在这个方法中设置为null (marker.setMap(null);),大头针就会消失。


现在,你可以写一个函数女巫,而使所有的标记消失在你的地图。

您只需添加将您的大头针放入数组中并使用标记声明它们。Push (your_new pin)或以下代码为例:

// Adds a marker to the map and push to the array.
function addMarker(location) {
  var marker = new google.maps.Marker({
    position: location,
    map: map
  });
  markers.push(marker);
}

这是一个可以设置或消失映射中数组的所有标记的函数:

// Sets the map on all markers in the array.
  function setMapOnAll(map) {
    for (var i = 0; i < markers.length; i++) {
      markers[i].setMap(map);
    }
  }

为了消除所有的标记,你应该调用null函数:

// Removes the markers from the map, but keeps them in the array.
  function clearMarkers() {
    setMapOnAll(null);
  }

并且,删除和消失,你所有的标记,你应该重置你的标记数组像这样:

// Deletes all markers in the array by removing references to them.
  function deleteMarkers() {
    clearMarkers();
    markers = [];
  }

这是我的完整代码。这是我能化简的最简单的形式。 请注意,你可以用你的密钥谷歌API替换代码中的YOUR_API_KEY:

<!DOCTYPE html>
<html>
  <head>
  <title>Remove Markers</title>
  <style>
     /* Always set the map height explicitly to define the size of the div
     * element that contains the map. */
     #map {
       height: 100%;
       }
  </style>
</head>
<body>

<div id="map"></div>
<p>Click on the map to add markers.</p>
<script>

  // In the following example, markers appear when the user clicks on the map.
  // The markers are stored in an array.
  // The user can then click an option to hide, show or delete the markers.
  var map;
  var markers = [];

  function initMap() {
    var haightAshbury = {lat: 37.769, lng: -122.446};

    map = new google.maps.Map(document.getElementById('map'), {
      zoom: 12,
      center: haightAshbury,
      mapTypeId: 'terrain'
    });

    // This event listener will call addMarker() when the map is clicked.
    map.addListener('click', function(event) {
      addMarker(event.latLng);
    });

    // Adds a marker at the center of the map.
    addMarker(haightAshbury);
  }

   // Adds a marker to the map and push to the array.
  function addMarker(location) {
    var marker = new google.maps.Marker({
      position: location,
      map: map
    });
    markers.push(marker);
  }

  // Sets the map on all markers in the array.
  function setMapOnAll(map) {
    for (var i = 0; i < markers.length; i++) {
      markers[i].setMap(map);
    }
  }

  // Removes the markers from the map, but keeps them in the array.
  function clearMarkers() {
    setMapOnAll(null);
  }

  // Shows any markers currently in the array.
  function showMarkers() {
    setMapOnAll(map);
  }

  // Deletes all markers in the array by removing references to them.
  function deleteMarkers() {
    clearMarkers();
    markers = [];
  }

</script>
   <script async defer
    src="https://maps.googleapis.com/maps/api/js key=YOUR_API_KEY&callback=initMap">
   </script>
</body>
</html>

您可以咨询谷歌开发人员或完整的文档,也,谷歌开发人员网站。

其他回答

同样的问题。这段代码不再工作了。

我已经纠正了它,这样改变clearMarkers方法:

set_map(空) ---> setMap(空)

google.maps.Map.prototype.clearMarkers = function() {
    for(var i=0; i < this.markers.length; i++){
        this.markers[i].setMap(null);
    }
    this.markers = new Array();
};

文档已更新,包括关于主题的详细信息:https://developers.google.com/maps/documentation/javascript/markers#remove

下面来自Anon的效果很好,尽管在反复清除覆盖时有闪烁。

简单地做以下几点:

I.声明一个全局变量:

var markersArray = [];

2定义一个函数:

function clearOverlays() {
  if (markersArray) {
    for (i in markersArray) {
      markersArray[i].setMap(null);
    }
  }
}

3在调用以下函数之前,在'markerArray'中插入标记:

markersArray.push(marker);
google.maps.event.addListener(marker,"click",function(){});

IV.在任何需要的地方调用clearoverlay()函数。

就是这样! !

希望这对你有所帮助。

在两个答案中发布的“set_map”函数似乎不再在谷歌Maps v3 API中工作。

我想知道发生了什么事

更新:

似乎谷歌改变了他们的API,使“set_map”不是“setMap”。

http://code.google.com/apis/maps/documentation/v3/reference.html

在这里你可以找到一个如何删除标记的例子:

https://developers.google.com/maps/documentation/javascript/examples/marker-remove?hl=es

// Add a marker to the map and push to the array.
function addMarker(location) {
  var marker = new google.maps.Marker({
    position: location,
    map: map
  });
  markers.push(marker);
}

// Sets the map on all markers in the array.
function setAllMap(map) {
  for (var i = 0; i < markers.length; i++) {
    markers[i].setMap(map);
   }
}

// Removes the markers from the map, but keeps them in the array.
function clearMarkers() {
  setAllMap(null);
}

// Deletes all markers in the array by removing references to them.
function deleteMarkers() {
  clearMarkers();
  markers = [];
}

这是YingYang于2014年3月11日15:049在对用户原始问题的原始回复下发布的所有解决方案中最简单的一个

2.5年后,我在谷歌地图v3.18中使用了他的相同解决方案,它就像一个魅力

markersArray.push(newMarker) ;
while(markersArray.length) { markersArray.pop().setMap(null); }

// No need to clear the array after that.