ThinkGeo.com    |     Documentation    |     Premium Support

How to control visibility of one overlay by changing visibility of overlay in Overlayswitcher?

Hi Thinkgeo,


How to control visibility of one overlay by changing visibility of  another (Markeroverlay) in Overlayswitcher?


Currently we have client side event called


 


OnClientBaseOverlayChanged on Overlayswitcher that is raised when base overlay changes.

 


The reason I am asking isbecause I have one Markeroverlay and one overlay (to contain label layers) . I only display Markeroverlay in the overlway switcher due to space constraint would like to turn off the label overlay when markeroverlay is made invisible.


Regards,


Anil


 


 


 


 


 


 




 


Anil,
 
It’s easy to implement. Here is the JavaScript code for reference. 
 
var OnMapCreated = function(map) {
            var labelLayer = map.getLayer('LabelOverlay');
            var markerLayer = map.getLayer('MarkerOverlay');
            map.events.register('changelayer',
            markerLayer,
            function() {
                if (markerLayer.visibility) {
                    map.addLayer(labelLayer);
                }
                else {
                    map.removeLayer(labelLayer, false);
                }
            });
        }
 
Thanks,
James

Hi James, 
  
 I have two sets of MarkerOverlay-LabelOverlay. If I register two methods both get called and eventually leads to JavaScript RemoveChild() error in opl_xxx.axd 
  
 If I were to use visibility property on labellayer, it does not work. 
  
 I don’t see ‘changelayer’ event in JavaScript API in OpenLayers. Where can I get good documentation? 
  
 Regards, 
 Anil

 


Hi Anil,
 
I think it’s incorrect to register two methods. Just one method is enough. You couldn't use visibility property directly. There is a method named setVisibility(bool) you can use.
 
Here is the code you can refer to:
 
            function() {
                if (markerLayer1.visibility) {
                    labelLayer1.setVisibility(true);
                }
                else {
                    labelLayer1.setVisibility(false);
                }
 
                if (markerLayer2.visibility) {
                    labelLayer2.setVisibility(true);
                }
                else {
                    labelLayer2.setVisibility(false);
                }
                
            }
 
You can get detailed documentation in this page.
dev.openlayers.org/releases/OpenLayers-2.10/doc/apidocs/files/OpenLayers/Layer-js.html
 
 
Thanks,
James