Map 传单添加/删除带有图层选择的图例

Map 传单添加/删除带有图层选择的图例,map,leaflet,layer,legend,Map,Leaflet,Layer,Legend,我对传单/JavaScript不熟悉,一直在努力让图例只在从层控件中选择特定层时才显示地图。我有三层,其中一层我不希望有图例,另外两层有相应的图例。我遇到了一个例子,但未能成功: //添加和删除图层中的图例 map.on('overlayadd',函数(eventLayer){ //切换到永久冻土图例。。。 如果(eventLayer.name===‘永久冻土’){ 这是一种“移除控制”(legend1); legend2.增补(本); }否则{//或切换到树线图例。。。 这是一个“移除控制”(

我对传单/JavaScript不熟悉,一直在努力让图例只在从层控件中选择特定层时才显示地图。我有三层,其中一层我不希望有图例,另外两层有相应的图例。我遇到了一个例子,但未能成功:

//添加和删除图层中的图例
map.on('overlayadd',函数(eventLayer){
//切换到永久冻土图例。。。
如果(eventLayer.name===‘永久冻土’){
这是一种“移除控制”(legend1);
legend2.增补(本);
}否则{//或切换到树线图例。。。
这是一个“移除控制”(legend2);
legend1.添加(本);
}});
我创建了一个带有特定示例的JSFIDLE:


任何指导都将不胜感激。

您的代码只需要几处更改。工作小提琴:

更改基础层时,均匀激发的不是“叠加添加”,而是“基础层更改”:

map.on('baselayerchange', function (eventLayer) {
只应添加到要为默认基础图层显示的图层的贴图中。我加了永久冻土


此外,您应该只向地图中添加您希望与默认基础层一起使用的图例。

我注意到,您的解决方案需要选择多个层才能使操作生效。实际上,我希望没有“卫星”的图例,legend2带有“永久冻土”,legend1带有“树线”。我尝试了一个嵌套的条件语句:
map.on('baselayerchange',function(eventLayer){if(eventLayer.name=='permforost'){map.removeControl(legend1);legend2.addTo(map);}else{if(eventLayer.name=='Treeline'){map.removeControl(legend2);legend1.addTo(map);}else{map.removeControl(legend1);map.removeControl(legend2);})
这不起作用。好吧,我不知道你想要哪个图层的图例。你必须双击基础图层的问题在于你将所有三个基础图层都添加到地图中。我编辑了小提琴,以便默认情况下只将永久冻土图层添加到地图中(没有其他内容):