传单中如何在更改基层时启用/禁用覆盖层

How in leaflet enable/disable overlays when changes baselayer?

本文关键字:启用 覆盖 单中如      更新时间:2023-09-26

我创建了一个交互式房间地图。在有空间规划的房屋地图上突出显示。关于照亮房间的计划。Вy默认为开放式楼层平面图,启用了房间的叠加照明,禁用了叠加标记。此外,当您切换到一个地图时,您希望从由3层覆盖层组成的组中隐藏它们,并将它们从地图中删除。

    map.removeLayer(roomsOverlay);
    map.removeLayer(markersOverlay);
    map.removeLayer(bld2_1_lbls);
    layerControl.removeLayer(roomsOverlay);
    layerControl.removeLayer(markersOverlay);
    layerControl.removeLayer(bld2_1_lbls);

现在当你返回到建筑的平面图时,应该返回3个叠加

    layerControl.addOverlay(roomsOverlay,"Rooms");
    layerControl.addOverlay(markersOverlay,"markersOverlay");
    layerControl.addOverlay(bld2_1_lbls,"lab");

但是现在这些覆盖层被禁用了,如何在layercontrol中检查它们?当切换到地图覆盖处于活动状态时,也希望这样做。

演示:http://plnkr.co/edit/do27UnlRoWaEyqrs8VHe?p=preview

p.s.

map.on('baselayerchange', function(e) {
if (e.name=="cartoDBmap")
{/*some code*/
    map.removeLayer(roomsOverlay);  //if not remove they can be seen on Africa
    map.removeLayer(markersOverlay);
    map.removeLayer(bld2_1_lbls);
    layerControl.removeLayer(roomsOverlay);
    layerControl.removeLayer(markersOverlay);
    layerControl.removeLayer(bld2_1_lbls);
    layerControl.addOverlay(buildingsOverlay,"buildings"); //how make it checked on layercontrol?
}
else
{/*some code*/
    layerControl.addOverlay(roomsOverlay,"Rooms");  //how make it checked on layercontrol?
    layerControl.addOverlay(markersOverlay,"markersOverlay");
    layerControl.addOverlay(bld2_1_lbls,"lab");
    layerControl.removeLayer(buildingsOverlay);
    map.removeLayer(buildingsOverlay);
}
console.log(layerControl);
});

完成layerControl.addOverlay(buildingsOverlay,"buildings");后,添加一个附加的:

map.addLayer(buildingsOverlay);

传单提供了一个您可以收听的baselayerchange事件,它提供了您想要的内容。用作map.on('baselayerchange', function(layer) { //do overlay changes });

如果要查看地图是否存在特定图层,请在地图上使用hasLayer方法。

layerControl的

_update()方法将更新图层控件,并选择/检查是否将覆盖添加到地图中。

map.on('baselayerchange', function(e) {
    if (e.name=="cartoDBmap") {
        /*some code*/
        map.removeLayer(roomsOverlay);
        layerControl.removeLayer(roomsOverlay);
        layerControl._update();
    } else {
        map.addLayer(roomsOverlay);
        layerControl.addOverlay(roomsOverlay,"Rooms");
        layerControl._update();
    }
});