【问题标题】:Switching between two overlays in leaflet.js在leaflet.js 中的两个叠加层之间切换
【发布时间】:2018-10-31 15:44:32
【问题描述】:

如果选择了某个地图(如果在 LayerControl 中打开了 layerX,layer1 将被 layer2 替换,并且当(Tile )layerX 不再被选中,再次用 layer1 替换 layer2),所以我在 overlayadd 和 overlayremove 上有监听器(

map.on('overlayadd', function(layer){if(layer.name === "layerX"){
    layers_on = !!map.hasLayer(layer1);
    layer1.remove();
    layer_selector.removeLayer(layer1);
    if(layers_on){map.addLayer(layer2);
    layer_selector.addOverlay(layer2, "layer2");
}});
map.on('overlayremove', function(layer){if(layer.name === "layerX"){
    layers_on = !!map.hasLayer(layer2);
    layer2.remove();
    layer_selector.removeLayer(layer2);
    if(layers_on){map.addLayer(layer1);}
    layer_selector.addOverlay(layer1, "layer1");
}});

打开 LayerX 时代码工作正常,但是当我在打开 layer2 的情况下删除它时,它实际上并没有删除它,只是在 layer_control 中替换它并在其顶部添加 layer1

简单地说,我需要在 LayerControl 中动态显示两个地图之一,如果 LayerX 在则显示 Layer1 在其他情况下显示 Layer2。 (并且图层本身是可选的)

【问题讨论】:

  • 也许有趣的是,当您使用 map.eachLayer 读取所有图层时,该图层不再出现而且它可能与渲染透明图层有关,因为图层 1 和 2 都是透明的

标签: javascript leaflet


【解决方案1】:

实例化一个L.Control.Layers,并将您的两个L.TileLayer.WMSs 添加为该控件中的“基础层”。

名称可能具有欺骗性:它的意思是,对于给定的L.Control.Layers,作为“基础层”传递的层是互斥的。它们不需要是主题基础层,您可以拥有多个L.Control.Layers,每个L.Layers 中都包含一组互斥的L.Layers。

【讨论】:

  • 虽然这样的工作,它只是不一样的功能。代码的重点是让两个实际的 wmts 地图相互叠加,因为一个只覆盖捷克共和国。然后 layer1 和 layer2 - 虽然是独占的 - 有相同的地图,一个只是另一个的负面,关键是这个覆盖只有一个按钮
  • 它们也是可选的,L.Control.Layers 的基础层部分不允许
  • 如果要点是有一个按钮,那么请编辑您的问题以反映这一点。您所写的问题不会限制用户界面。
  • 希望现在描述得更好,我认为问题不一定出在代码本身(可能有更好的解决方案但我想不出),但是虽然代码基本上是两种方式都一样,即使我调用 layer2.remove();
猜你喜欢
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多