【问题标题】:Remove legend on leaflet map删除传单地图上的图例
【发布时间】:2015-02-01 17:44:26
【问题描述】:

我设置了一张传单地图,用于在用户单击按钮时根据类别更改样式。

实时地图:http://maneesha.github.io/test_map.html

源码:https://github.com/maneesha/maneesha.github.io

每种风格都有一个图例。 我的问题是当单击另一个按钮(或再次单击该按钮)时,我无法让旧图例消失。因此,您每次单击时都会在地图上看到一个新的图例。

投入

map.removeControl(legend);

在点击功能不起作用并且 结果在 js 控制台中:

Uncaught TypeError: Cannot read property 'removeFrom' of undefined

有什么想法吗?

编辑:上面的存储库已更改。实时站点不再存在;源代码在https://github.com/maneesha/leaflet_map_with_styles_and_legends

【问题讨论】:

    标签: javascript gis leaflet


    【解决方案1】:

    您在change-gender 上的click 事件的处理函数中分配变量legend。如果您这样做,legend 将仅在该函数中可用。如果您在单击处理程序之前声明 var legend;,然后在单击处理程序中更改:var legend = L.control({position: 'topright'});legend = L.control({position: 'topright'}); 图例将在全局范围内可用,因此您可以从全局范围内的每个函数访问它。

    这行不通:

    document.getElementById('change-gender').addEventListener('click', function () {
        var genderLegend = L.control({'position': 'topright'}).addTo(map);
    });
    
    console.log(genderLegend) // returns undefined
    

    这将:

    var genderLegend;
    
    document.getElementById('change-gender').addEventListener('click', function () {
        genderLegend = L.control({'position': 'topright'}).addTo(map);
    });
    
    console.log(genderLegend) // returns the legend instance
    

    【讨论】:

    • 谢谢 - 我认为做到了。万一其他人偶然发现这个问题的另一件事:我将map.removeControl(legend); 放在legend.addTo(map) 之前,因此在创建新图例之前将删除所有现有图例。所以我不仅要初始化var legend;,而且实际上必须创建图例,以便删除一个。
    • 在声明变量时不必创建L.Control 实例。如果您不需要它,为什么要这样做?您可以简单地将map.removeControl(legend) 包装在if 语句中,该语句检查legend 是否是L.Control 的实际实例。例如:if (legend instanceof L.Control) { map.removeControl(legend); }
    • 你是对的 - 我先尝试过,但条件不太正确,所以我认为它不会起作用,但现在我做到了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-09
    • 2017-07-10
    • 2011-08-09
    • 1970-01-01
    • 2015-03-24
    相关资源
    最近更新 更多