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

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

所有层都是来自 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);
    }
...

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

Cannot read property 'setVisibility' of undefined

总而言之,我想将所有已加载图层的可见性设置为 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');
    }
}