ThinkGeo.com    |     Documentation    |     Premium Support

OpenLayers.Control.LayerSwitcher Client-Side

I am trying to dynamically display/hide an imagery overlay based on the map zoomlevel.  It try the code below, it would work on IE 7 but not for other browsers. Is there another way to dynamically show/hide the overlayswitcher option on the client-side. 


function ShowAerial(iZoomLevel) {

        var map = Map1.GetOpenLayersMap();

        if (map) {

            var controls = map.getControlsByClass('OpenLayers.Control.LayerSwitcher');

            if (controls[0]) {

                for (var iIndex = 0; iIndex < controls[0].layerStates.length; iIndex++) {

                    if (controls[0].baseLayers[iIndex].layer.name == 'Hybrid') {

                        controls[0].baseLayers[iIndex].inputElem.style.display = (map.getZoom() >= iZoomLevel) ? 'block' : 'none' ;

                      controls[0].baseLayers[iIndex].labelSpan.style.display = (map.getZoom() >= iZoomLevel) ? 'block' : 'None';                        

                        break;

                    }

                }               

            }

        }

    }


 


 


 



Hi Ttd,



I did not change your code, but here is a way for you, please see the two lines of code which have commends. function ShowAerial(){
    var map = Map1.GetOpenLayersMap();
    var controls = map.getControlsByClass('OpenLayers.Control.LayerSwitcher');
    if(controls.length > 0){
        var overSwitcher = controls[0];
        var layer = map.getLayer("Hybrid");
       
        // this property makes whether display or not in the overlay switcher.
        layer.displayInLayerSwitcher = false;
       
        // OpenLayers need to check the name, and Id of the layer, if it's not changed, it won't redraw
        // So here I changed the name of it to raise the redraw function.
        layer.name = "Yahoo1";
        overSwitcher.redraw();
    }
}



Any questions please let me know.



Thanks,

Howard



This works!!! Thank you, I didn’t know you have to change the layer name to fire the redraw() event.

Ttd, 
  
 That’s what I didn’t know neither before; I checked OpenLayers’ library then I just know. I think they can make the checking looser. 
  
 Thanks for reporting and if you have any queries please let me know. 
  
 Thanks, 
 Howard