传单无法清除图层和标记

leaflet can not clear layer and marker

我想从地图中删除所有标记并尝试使用 map.remove

删除标记

我正在使用 vue.js 和传单来显示地图 我有一个对象来记录 lng 和 lat

router_planning: [
    {
      car: [
        {
          name: "001",
          lat: 25.042474,
          lng: 121.513729,
        },
        {
          name: "002",
          lat: 24.982474,
          lng: 121.613729,
        },
        {
          name: "003",
          lat: 24.894474,
          lng: 121.623729,
        },
      ],
    },
    {
      car: [
        {
          name: "004",
          lat: 24.982474,
          lng: 121.513729,
        },
        {
          name: "005",
          lat: 24.882474,
          lng: 121.513729,
        },
        {
          name: "006",
          lat: 24.982474,
          lng: 121.713729,
        },
      ],
    },
  ],

和下面两个函数 initmap() //设置视图

initmap() {
  this.mapp = L.map("map");
  this.mapp.setView(
    [
      this.router_planning[0].car[0].lat,
      this.router_planning[0].car[0].lng,
    ],
    10
  ); 
  L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", {
    maxZoom: 13, 
    minZoom: 9,
  }).addTo(this.mapp);
},

make_map() //给出地图标记

make_map() {
  for (let i = 0; i < this.router_planning.length; i++) {
    for (let j = 0; j < this.router_planning[i].car.length; j++) {
      L.circleMarker(
        [
          this.router_planning[i].car[j].lat,
          this.router_planning[i].car[j].lng,
        ],
        {
          color: this.circle_marker[i],
          fillColor: this.circle_marker[i],
          fillOpacity: 1,
          radius: (i + 1) ** 2,
        }
      )
        .addTo(this.mapp)
        .bindTooltip(this.router_planning[i].car[j].name.toString(), {
          permanent: true,
        });

     
  }
},

我的网站应该像这样工作 首先 initmap() 然后 make_map()

我有一个按钮可以触发 make_map() 来更改纬度和经度

但旧标记并没有消失

我试过添加

this.mapp.remove() 到 make_map()
的顶部 我收到错误消息

Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'appendChild')

我已经尝试将它添加到 make_map 的顶部,没有出现错误

但没有清除标记

var container = L.DomUtil.get('map');
    container._leaflet_id = null;

我看了很多清除地图的文章,但还是没用 弄清楚为什么我无法清除或删除地图让我发疯

非常感谢

要从地图上删除所有标记,您必须先将它们存储在某个地方。
您可以将所有标记存储在一个数组中:

const markers = [];

const marker = L.circleMarker([...])
        .bindTooltip([...])
        .addTo(map);
markers.push(marker);

要删除它们,您需要调用:

for(let i = 0; i < markers.length; i++) {
    map.removeLayer(marker[i]);
}

但如果您不需要删除特定标记,还有更好的方法,使用 LayerGroup()
示例:

const layerGroup = new L.LayerGroup();

const marker = new L.marker([...]).addTo(layerGroup);

//after you've added all markers to layerGroup():
map.addLayer(layerGroup)

要删除所有标记,只需调用:map.removeLayer(layerGroup)