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

时间:2015-07-31 02:27:11

标签: javascript jquery openlayers

所有图层都是来自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,但已选中的除外。

1 个答案:

答案 0 :(得分:0)

管理以解决这个问题,使用相同的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');
    }
}