图层按钮始终处于活动状态,添加 2 个图层时,图例将保留第 1 层

Button for layers are always in active state, legend persists for 1st layer when 2 layers are added

本文关键字:图层 保留 按钮 添加 活动状态      更新时间:2023-09-26

我有一个地图框和瓦磨机图层问题:

在这里查看我的代码:http://bl.ocks.org/marishaf/3cc9bfbeb412c1120e93

图层

按钮看起来始终处于"活动"模式,尽管它们仍然加载和卸载图层。

每个图层都会加载图例(公共土地图层和分区图层存在图例),但如果同时加载这两个图层,然后尝试移除这两个图层,则图例将在加载的第一个图层中保留。

图例还会保留工具提示。例如,如果首先加载带有图例的图层(仅当按此顺序加载图层时才会发生),然后加载带有工具提示的图层(例如点源污染),然后将鼠标悬停在某个点上以调用工具提示,然后尝试删除带有图例的图层,则图例将保留。

  1. 在onclick函数之前删除"link.className = 'active';"。
  2. 将"if (map.hasLayer(layer))"语句更改为与"else"语句更相似("layer"而不是"thelayer",并且只有一个"className"更改)。

片段:

link.href = '#';
// remove line that was here
link.innerHTML = name;

link.onclick = function(e) {
    e.preventDefault();
    e.stopPropagation();
    if (map.hasLayer(layer)) {
        map.removeLayer(layer);
        map.removeLayer(gridlayer);
        // you had "thelayer", but it should be "layer":
        map.legendControl.removeLegend(layer.getTileJSON().legend);
        // change two lines that were here to the following:
        this.className = '';
    } else {
        map.addLayer(layer);
        map.addLayer(gridlayer);
        this.className = 'active';
        map.legendControl.addLegend(layer.getTileJSON().legend);
    }
       thelayer = layer;  
};

很抱歉解释混乱,但您同时问了两个问题,这是我能想到的最干净的回答方式。