On my map I have 3 overlay layers, all of which need to be mutually exclusives, i.e. can't be on (checked) at the same time. I thought of using events to trigger the overlays as the following in my index.html main file:
function init(){
var map, kml_1Layer, kml_2Layer, kml_3Layer;
...
kml_1Layer.events.register("visibilitychanged", this, layerChanged);
kml_2Layer.events.register("visibilitychanged", this, layerChanged);
kml_3Layer.events.register("visibilitychanged", this, layerChanged);
...
}
function layerChanged(layer) {
if (layer.object.visibility) {
switch (layer.object.name) {
case "kml_1Layer":
kml_2Layer.setVisibility(false);
kml_3Layer.setVisibility(false);
break;
case "kml_2Layer":
kml_1Layer.setVisibility(false);
kml_3Layer.setVisibility(false);
break;
case "kml_3Layer":
kml_1Layer.setVisibility(false);
kml_2Layer.setVisibility(false);
break;
}
}
}
You can see the web site here: http://genepoulin.net/geo/index.html
Obviously the events are not triggered.
What am I missing here?
UPDATED and Resolved…
Corrected code (I was wrongly naming the switch cases):
function init(){
var map, kml_1Layer, kml_2Layer, kml_3Layer;
...
kml_1Layer.events.register("visibilitychanged", kml_1Layer, layerChanged);
kml_2Layer.events.register("visibilitychanged", kml_2Layer, layerChanged);
kml_3Layer.events.register("visibilitychanged", kml_3Layer, layerChanged);
...
}
function layerChanged(layer) {
if (layer.object.visibility) {
switch (layer.object.name) {
case "*given label of layer1*":
kml_2Layer.setVisibility(false);
kml_3Layer.setVisibility(false);
break;
case "*given label of layer2*":
kml_1Layer.setVisibility(false);
kml_3Layer.setVisibility(false);
break;
case "*given label of layer3*":
kml_1Layer.setVisibility(false);
kml_2Layer.setVisibility(false);
break;
}
}
}
You can see the result on my page.
Best Answer
Hope it helps, I could not test it since out of office. This should be easier to maintain.