将加载图层的可见性设置为 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');
}
}
所有层都是来自 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');
}
}