更改baselayer时,如何在传单中启用/禁用叠加?

时间:2016-05-18 12:21:14

标签: javascript leaflet

我创建了一个房间的互动地图。在有空间计划的房屋地图上突出显示。计划照亮房间。 В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);
});

3 个答案:

答案 0 :(得分:0)

Leaflet提供了一个baselayerchange event,你可以听到它提供你想要的东西。用作map.on('baselayerchange', function(layer) { //do overlay changes });

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

答案 1 :(得分:0)

执行layerControl.addOverlay(buildingsOverlay,"buildings");之后添加其他内容:

map.addLayer(buildingsOverlay);

答案 2 :(得分:0)

_update()的layerControl方法将更新图层控件,并选择/检查叠加层(如果叠加层已添加到地图中)。

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();
    }
});