【问题标题】:Leaflet add/remove legends with layer selection带有图层选择的传单添加/删除图例
【发布时间】:2014-05-16 23:38:06
【问题描述】:

我是 Leaflet/JavaScript 的新手,一直在努力为图例获取地图,以便仅在从图层控件中选择特定图层时显示。我有三层,其中一层我想没有图例,另外两层有相应的图例。我遇到了一个示例,但无法使其工作:

// Add and remove legend from layers
  map.on('overlayadd', function (eventLayer) {
  // Switch to the Permafrost legend...
  if (eventLayer.name === 'Permafrost') {
    this.removeControl(legend1);
    legend2.addTo(this);
  } else { // Or switch to the treeline legend...
    this.removeControl(legend2);
    legend1.addTo(this);
}});

我用具体的例子创建了一个jsfiddle:

http://jsfiddle.net/gerlis/T8DHb/3/

任何指导将不胜感激。

【问题讨论】:

    标签: map leaflet layer legend


    【解决方案1】:

    您的代码只需要几处更改。工作小提琴: http://jsfiddle.net/T8DHb/8/

    当你改变基础层时,即使触发的不是'overlayadd',它是'baselayerchange':

    map.on('baselayerchange', function (eventLayer) {
    

    您应该只添加要为默认基础图层显示的图层。我添加了 PermaFrost。

    此外,您应该只在地图中添加您想要使用默认基础层的图例。

    【讨论】:

    • 我注意到您的解决方案需要选择多个图层才能使操作生效。我真正想要的是没有“卫星”的图例,“永久冻土”的图例2和“树线”的图例1。
    • 我尝试了一个嵌套条件语句:map.on('baselayerchange', function (eventLayer) { if (eventLayer.name === 'Permafrost') { map.removeControl(legend1); legend2.addTo(map); } else { if (eventLayer.name === 'Treeline'){ map.removeControl(legend2); legend1.addTo(map); } else {map.removeControl(legend1);map.removeControl(legend2);}});,但没有成功。
    • 好吧,我不知道你想要哪个图例和哪个图层。您必须双重选择基础图层的问题与您将所有三个基础图层添加到地图有关。我编辑了小提琴,因此默认情况下只有 PermaFrost 层被添加到地图中(没有别的):jsfiddle.net/T8DHb/8
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多