将加载层的可见性设置为false,除了Openlayers 2.x中选中的那个

Set Visibility of loaded layers to false except the checked one in Openlayers 2.x

本文关键字:Openlayers 除了 加载 可见性 设置 false      更新时间:2023-09-26

所有层均为来自GeoServer服务的WMS。我想设置图层的可见性,只有当它被选中时,它也在被选中时加载。

这是我的HTML标记:
...
<div class="radio">
    <label>
        <input type="radio" name="optionsRadios" id="2year" value="2year" onclick="toggleStatic(this);">2-Year Rainfall
    </label>
</div>
<div class="radio">
    <label>
        <input type="radio" name="optionsRadios" id="5year" value="5year" onclick="toggleStatic(this);">5-Year Rainfall
    </label>
</div>
...

我已经创建了一个函数,但是它不是很好,不能识别当前加载的层。

样品加载图:

$("#5year").one("click", function() {
    $(this).is(":checked");
    fiveCBR = new OpenLayers.Layer.WMS(
            "5-Year Flood Hazard Map CBR", "http://10.0.0.23:8080/geoserver/gwc/service/wms",
                {
                    srs: 'EPSG:32651',
                    layers: 'cite:evidensapp_cbrfiveyear',
                    format:'image/png8',
                    //gridSet: 'EPSG:4326',
                    transparent: true
                },
                //{'displayInLayerSwitcher':false},
                {
                    singleTile: false, 
                    isBaseLayer: false,
                    ratio: 1                    
                }           
         );
    map.addLayer(fiveCBR);
});

下面是设置图层可见性的函数:

function toggleStatic(e){
    if(e.value == '5year'){
        floodMapCBR.setVisibility(false);
        seniang2014.setVisibility(false);
        twoCBR.setVisibility(false);
        fiveCBR.setVisibility(e.checked);
        tenCBR.setVisibility(false);
        twentyfiveCBR.setVisibility(false);
        fiftyCBR.setVisibility(false);
        hundredCBR.setVisibility(false);
    }
...

问题是我无法识别哪些层已经加载,所以它返回一个错误:

无法读取未定义的属性'setVisibility'

总而言之,我想把所有加载的图层的可见性设置为false,除了选中的那个

设法弄清楚这一点,使用相同的HTML标记使用这些函数:

function toggleStatic(e) {
    var layers = map.getLayersByName(e.value);
    var mLayers = map.layers;
    for (var a = 0; a < mLayers.length; a++) {
        if(mLayers[a].CLASS_NAME == "OpenLayers.Layer.WMS"){
            var str =  mLayers[a].name;
            if(str == e.value){
                if(layers.length === 1) {
                    layers[0].setVisibility(true);
                }
            }
            else{
                hideLayer(str);
            }
        }
    }
}
function hideLayer(layerName) {
    var layers = map.getLayersByName(layerName);
    if(layers.length === 1) {
        layers[0].setVisibility(false);
    }
    else {
        console.log('Error');
    }
}