首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mapboxgl JS不移除标记

Mapboxgl JS不移除标记
EN

Stack Overflow用户
提问于 2019-04-11 13:30:16
回答 1查看 3.3K关注 0票数 2

我试图在MapboxGL映射中删除这个question后面的标记,但是它不起作用,它抛出:

代码语言:javascript
运行
复制
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();}

更新

我试过建议的解决方案,但没有用.:

代码语言:javascript
运行
复制
        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);
        });
EN

回答 1

Stack Overflow用户

发布于 2019-04-11 13:50:04

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

代码语言:javascript
运行
复制
let marker = new mapboxgl.Marker().setLngLat([30.5, 50.5]).addTo(map);

之后,您可以删除标记:

代码语言:javascript
运行
复制
marker.remove();

在这种情况下,可以将所有标记保存到数组中,然后删除每个标记:

代码语言:javascript
运行
复制
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>);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55633717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档