javascript - Mapboxgl JS 不会删除标记

标签 javascript mapbox-gl-js

我正在尝试删除 MapboxGL map 中的标记,如下 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);
            });

In my last effort I tried this to remove with this but It doesn't work well (The workflow updates randomly markers):

            /* remove markers */
            var markers = document.getElementsByClassName('marker');
            for (i = 0; i < markers.length; i++) {
                var marker = markers[i];                    
                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);
        });

最佳答案

发生错误是因为您需要指定标记的坐标:

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>);

关于javascript - Mapboxgl JS 不会删除标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55633717/

相关文章:

javascript - Flux 是将异步数据获取到我的 React.JS View 的正确解决方案吗

javascript - 如何根据与给定点的距离获取边界框?

javascript - 通过 JavaScript 以编程方式更改 MapBox 标记的 OFFSET

javascript - 使用 JavaScript 根据对象的类别更改 Mapbox 标记的类

javascript - 通过 javascript 删除/重置 css 属性的正确方法是什么?

javascript - Easeljs Tweenlite 绕中心旋转

javascript - map 框js;隐藏和显示标签

react-native - 沿线移动标记、React native、Mapbox 或 react native map

javascript - 在无序列表中点击事件和动态创建的项目

javascript - 三个js孔没有渲染成形状