如何选择要在地图上显示的图层?

时间:2017-10-03 08:27:37

标签: leaflet openstreetmap mapbox layer

如果我在地图中添加了一系列图层,例如:

   for (i = 0; i < myoptionsArray.length; i++) {
        lyr = L.tileLayer.wms(url, {optionsArray[i]});
        layer.push(lyr);
        lyr.addTo(mymap);
        }

如何以编程方式选择要显示的图层[i]?我无法在传单文档中找到任何可用的功能...

2 个答案:

答案 0 :(得分:2)

创建图层时,将图层添加到featureGroup。一个好主意是为您的图层添加一个名称,以便在以下内容之后更简单:

var group = new L.featureGroup();
for (i = 0; i < myoptionsArray.length; i++) {
     lyr = L.tileLayer.wms(url, {optionsArray[i]});
     layer.push(lyr);
     layer.name = 'My_layer ...';
     lyr.addTo(group);
}
mymap.addLayer(group);

在这个例子中,对我来说,每次迭代都提供一个图层。您将它添加到您的组并等待循环结束将其添加到地图。

要显示或隐藏,您将需要此功能:

function showHideTile(tileToShowOrHide)
{
    group.eachLayer(function(layer) {
        layer.eachLayer(function(yourLayer) {
            //Do your test here
            if (yourLayer == tileToShowOrHide) {
                //To add the layer to your map
                map.addLayer(yourLayer);
            } else {
                //To remove the layer
                map.removeLayer(yourLayer);                
            }
            //You can also send an array to this function
            //With the layer name and what you want to do
            //Ex : tile1 hide
        })
    })
}

不是最好的方法,但它会给你一些开始的东西。

答案 1 :(得分:0)

我这样做了。

1-将图层加载到组中:

var group = new L.featureGroup();
for (i = 0; i < myoptionsArray.length; i++) {
     lyr = L.tileLayer.wms(url, {optionsArray[i]});
     layer.push(lyr);
     lyr.addTo(group);
}
mymap.addLayer(group);

2 - 然后我添加了一个函数来显示我需要的图层:

function showLayer(i) {
 layer[i].bringToFront();
}