MapBox 清除所有当前标记
MapBox clear all current markers
我创建了一个 MapBox 实例:
var map = new mapboxgl.Map({
container : 'map',
style : 'mapbox://styles/mapbox/streets-v9'
});
我需要清除所有标记,并在每个标记上尝试了 map.remove(marker) 之类的操作,以及其他一些操作,但似乎没有任何效果。
是否有一个简单的函数调用来清除地图上的所有标记?
编辑:与 不同,因为我在控制台中得到 "eachLayer is not a recognised function"(或类似的)。
你看到了吗? https://www.mapbox.com/mapbox-gl-js/api/#marker#remove
而不是 map.remove 也许试试 marker.remove:
var marker = new mapboxgl.Marker().addTo(map);
marker.remove();
如果你添加了多个标记,并且你想清除地图上的所有标记,你必须遍历所有标记,然后一个一个地删除它们,你会得到这样的结果:
if (currentMarkers!==null) {
for (var i = currentMarkers.length - 1; i >= 0; i--) {
currentMarkers[i].remove();
}
}
考虑一下 var currentMarkers 包含所有标记,您可以使用类似 :
的方法来做到这一点
oneMarker= new mapboxgl.Marker(currentMarkerDiv)
.setLngLat(marker.geometry.coordinates)
.addTo(mapboxMap);
currentMarkers.push(oneMarker);
其中 var currentMarkers 是一个全局变量 :
var currentMarkers=[];
完整示例:
// 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();
}
}
如果您像这样添加标记(以便能够添加样式和自定义图像作为标记),那么您只需删除 class(不过我是通过 Jquery 完成的)。
添加 GeoJson 中的标记:
GeoJson.features.forEach(function(marker) {
var el = document.createElement('div');
el.className = 'marker';
new mapboxgl.Marker(el).setLngLat(marker.geometry.coordinates).addTo(map);
});
删除标记:
$( ".marker" ).remove();
您无法查询所有标记 - 没有黑客 - 删除,因此在添加它们时跟踪它们,以便以后迭代和删除。
let mapMarkers = []
// adding
const marker = new mapboxgl.Marker()
.setLngLat([0, 0])
.addTo(map)
mapMarkers.push(marker)
// removing
mapMarkers.forEach((marker) => marker.remove())
mapMarkers = []
我创建了一个 MapBox 实例:
var map = new mapboxgl.Map({
container : 'map',
style : 'mapbox://styles/mapbox/streets-v9'
});
我需要清除所有标记,并在每个标记上尝试了 map.remove(marker) 之类的操作,以及其他一些操作,但似乎没有任何效果。
是否有一个简单的函数调用来清除地图上的所有标记?
编辑:与
你看到了吗? https://www.mapbox.com/mapbox-gl-js/api/#marker#remove
而不是 map.remove 也许试试 marker.remove:
var marker = new mapboxgl.Marker().addTo(map);
marker.remove();
如果你添加了多个标记,并且你想清除地图上的所有标记,你必须遍历所有标记,然后一个一个地删除它们,你会得到这样的结果:
if (currentMarkers!==null) {
for (var i = currentMarkers.length - 1; i >= 0; i--) {
currentMarkers[i].remove();
}
}
考虑一下 var currentMarkers 包含所有标记,您可以使用类似 :
的方法来做到这一点oneMarker= new mapboxgl.Marker(currentMarkerDiv)
.setLngLat(marker.geometry.coordinates)
.addTo(mapboxMap);
currentMarkers.push(oneMarker);
其中 var currentMarkers 是一个全局变量 :
var currentMarkers=[];
完整示例:
// 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();
}
}
如果您像这样添加标记(以便能够添加样式和自定义图像作为标记),那么您只需删除 class(不过我是通过 Jquery 完成的)。
添加 GeoJson 中的标记:
GeoJson.features.forEach(function(marker) {
var el = document.createElement('div');
el.className = 'marker';
new mapboxgl.Marker(el).setLngLat(marker.geometry.coordinates).addTo(map);
});
删除标记:
$( ".marker" ).remove();
您无法查询所有标记 - 没有黑客 - 删除,因此在添加它们时跟踪它们,以便以后迭代和删除。
let mapMarkers = []
// adding
const marker = new mapboxgl.Marker()
.setLngLat([0, 0])
.addTo(map)
mapMarkers.push(marker)
// removing
mapMarkers.forEach((marker) => marker.remove())
mapMarkers = []