MapBox清除所有当前标记

Hom*_*ata 7 javascript mapbox mapbox-gl-js

我创建了一个MapBox实例:

var map = new mapboxgl.Map({
    container : 'map',
    style : 'mapbox://styles/mapbox/streets-v9'
});
Run Code Online (Sandbox Code Playgroud)

我需要清除所有标记,并尝试使用map.remove(marker)等每个标记,以及其他一些东西,但似乎没有任何效果.

是否有一个简单的函数调用来清除地图上的所有标记?

编辑:不同于如何从地图中删除所有图层和功能?因为我在控制台中得到"eachLayer不是一个公认的功能"(或类似的功能).

AIT*_*med 26

如果您添加了多个标记,并且想要清除地图上的所有标记,则必须遍历所有标记,并逐一删除它们,您将得到如下内容:

if (currentMarkers!==null) {
    for (var i = currentMarkers.length - 1; i >= 0; i--) {
      currentMarkers[i].remove();
    }
}
Run Code Online (Sandbox Code Playgroud)

考虑到thar var currentMarkers包含所有标记,您可以使用以下方法执行此操作:

oneMarker= new mapboxgl.Marker(currentMarkerDiv)
    .setLngLat(marker.geometry.coordinates)
    .addTo(mapboxMap);
    currentMarkers.push(oneMarker);
Run Code Online (Sandbox Code Playgroud)

其中 var currentMarkers是一个全局变量:

var currentMarkers=[];
Run Code Online (Sandbox Code Playgroud)

完整示例:

// markers saved here
var currentMarkers=[];

// tmp marker
var oneMarker= new mapboxgl.Marker(currentMarkerDiv)
    .setLngLat(marker.geometry.coordinates)
    .addTo(mapboxMap);

// save tmp marker into currentMarkers
currentMarkers.push(oneMarker);


// remove markers 
if (currentMarkers!==null) {
    for (var i = currentMarkers.length - 1; i >= 0; i--) {
      currentMarkers[i].remove();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这应该是与问题相关的最佳答案。 (4认同)

And*_*-lo 16

你看到了吗?https://www.mapbox.com/mapbox-gl-js/api/#marker#remove

而不是map.remove可能尝试marker.remove:

var marker = new mapboxgl.Marker().addTo(map);
marker.remove();
Run Code Online (Sandbox Code Playgroud)