我试图在MapboxGL映射中删除这个question后面的标记,但是它不起作用,它抛出:
var marker = new mapboxgl.Marker().addTo(map);
marker.remove();
TypeError: e is undefined
我的工作流程是抛出一个javascript函数来删除标记并添加新标记,如下:
geojson.features = new\_features; /\* here code to remove!! \*/ HERE CODE TO REMOVE! /\* add markers to map \*/ geojson.features.forEach(function(marker) { // create a HTML element for each feature var el = document.createElement('div'); el.className = 'marker'; // make a marker for each feature and add it to the map var new\_marker = new mapboxgl.Marker(el) .setLngLat(marker.geometry.coordinates) .setPopup(new mapboxgl.Popup({offset: 25}) // add popups .setHTML('<h3>' + marker.properties.title + '</h3><p>' + marker.properties.description + '</p>')) .addTo(map); }); 在我的最后一次尝试中尝试用它来删除,但是它不能很好地工作(工作流更新随机标记):/*删除标记*/ var标记=document.getElementsByClassName(‘标记’);用于(i = 0;i< markers.length;i++) { var标记=标记;marker.remove();}
更新
我试过建议的解决方案,但没有用.:
let markers = [];
geojson.features.forEach((feature) => {
let marker = new mapboxgl.Marker().setLngLat(feature.geometry.coordinates).addTo(map);
markers.push(marker);
});
// clear markers array
markers.forEach((marker) => marker.remove())
geojson.features = features;
geojson.features.forEach(function(marker) {
// create a HTML element for each feature
var el = document.createElement('div');
el.className = 'marker';
//el.setAttribute("longitude",marker.geometry.coordinates[0].toString());
//el.setAttribute("latitude",marker.geometry.coordinates[1].toString());
// make a marker for each feature and add it to the map
var new_marker = new mapboxgl.Marker(el)
.setLngLat(marker.geometry.coordinates)
.setPopup(new mapboxgl.Popup({offset: 25}) // add popups
.setHTML('<h3>' + marker.properties.title + '</h3><p>' + marker.properties.description + '</p>'))
.addTo(map);
});
发布于 2019-04-11 13:50:04
发生此错误是因为您需要指定标记的坐标:
let marker = new mapboxgl.Marker().setLngLat([30.5, 50.5]).addTo(map);
之后,您可以删除标记:
marker.remove();
在这种情况下,可以将所有标记保存到数组中,然后删除每个标记:
var markers = [];
function drawMarkers(features){
clearMarkers();
features.forEach((feature) => {
let marker = new mapboxgl.Marker()
.setLngLat(feature.geometry.coordinates)
.setPopup(new mapboxgl.Popup()
.setHTML(`<h3>${feature.properties.title}</h3><p>${feature.properties.description}</p>`))
.addTo(map);
markers.push(marker)
});
}
function clearMarkers(){
markers.forEach((marker) => marker.remove());
markers = [];
}
drawMarkers(<YOUR FEAUTURES>);
https://stackoverflow.com/questions/55633717
复制相似问题