传单:如何仅在一层上显示标记或图例?

Posted

技术标签:

【中文标题】传单:如何仅在一层上显示标记或图例?【英文标题】:Leaflet: how can I display a marker or legend only on one layer? 【发布时间】:2020-06-19 03:57:59 【问题描述】:

我制作了一张带有不同图层的传单地图,如下所示:

L.easyButton('<span class ="buttons">Example </span>', function (btn, map) 
    if (map.hasLayer(example1)) 
        map.removeLayer(example1);
    ;
    if (map.hasLayer(example2)) 
        map.removeLayer(example2);
    ;
    if (map.hasLayer(example3)) 
        map.removeLayer(drittpa2017zweit);
    
    map.addLayer(example4);
, 'FirstExample').addTo(map);

等等…… 我声明了一个图例,我只想在一个图层打开时使用它,现在它一直出现在我的脑海中,因为这个

legendwahlbeteiligung.addTo(map);

我尝试了在这里看到的所有内容,使其仅在一层上可见,但随后它们都消失了... 我使用的标记有同样的问题,我也只想在提到的图层之一上显示... 谁能告诉我如何使图例和标记仅在单击一层时出现?

【问题讨论】:

【参考方案1】:

要使标记myMarker 在图层example1 可见时出现,而在不可见时消失:

var myMarker = L.marker(...);

example1.on('add', function(e) 
   if (! map.hasLayer(myMarker)) 
       myMarker.addTo(map);
   
);

example1.on('remove', function(e) 
   if (map.hasLayer(myMarker)) 
       myMarker.removeFrom(map);
   
);

【讨论】:

谢谢!对于标记,这是可行的,但是如果我对图例执行相同操作,则一旦我选择了带有图例的图层,它就不会消失 对于控件,您可能应该跳过 if 条件并无条件地将其从映射中删除。由于控件不是层,我猜map.hasLayer 将不起作用。

以上是关于传单:如何仅在一层上显示标记或图例?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用传单和 jQuery Birdseye 在点击时突出显示标记

在一层上绘制多个 UIView

如何突出显示在我的传单地图(nuxt/vue)中单击了哪个标记

如何从地图外部与传单标记层进行交互?

无法正确显示传单图例

如何使用传单的map.eachLayer查找标记?