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