Hi,

I found a solution for this problem, so if anyone ever needs it:

I have to say that i use only the zoom-in and zoom-out buttons for which i
created a panel like in http://openlayers.org/dev/examples/panel.html

I am changing the trigger-behaviour of my zoom-in button to check whether my
base layer is at its maximum zoom level and then change the base layer to
another layer with more zoom levels

--------------------------------------------------------------------------------------------------------
//variable to save the zoom plus one, assigned in the zoomend event
var zoomplus=0;
map.events.register('zoomend',this, function(){zoomplus=map.getZoom()+1;});
var panel = new OpenLayers.Control.Panel();     //in my case i am using a panel
and showing only the zoomin and zoomout button
panel.addControls([ 
        new OpenLayers.Control.ZoomIn({
                        title:'Zoom in',
                        //overwrite default trigger
                        trigger: function(){
                                 //osm is my layer with max zoom level: 18, 
image is with max
zoom level: 20
                                 if
(this.map.baseLayer==osm_tms&&zoomplus==19){this.map.setBaseLayer(this.map.getLayersByName("image")[0]);}
                                  this.map.zoomIn();
                                    }
                        }),
        new OpenLayers.Control.ZoomOut({title:"Zoom out"}) 
]); 
map.addControl(panel);

--------------------------------------------------------------------------------------------------------

To get this behaviour also on double click and mousewheel you have  to add
the if also the Navigation-Control:

--------------------------------------------------------------------------------------------------------
map.addControl(new OpenLayers.Control.Navigation({
                defaultDblClick: function (evt) {
                if
(this.map.baseLayer==osm&&zoomplus==19){this.map.setBaseLayer(this.map.getLayersByName("image")[0]);}
                var newCenter = this.map.getLonLatFromViewPortPx( evt.xy ); 
                this.map.setCenter(newCenter, this.map.zoom + 1);
        },
        wheelChange: function(evt, deltaZ) {
                if
(this.map.baseLayer==osm&&zoomplus==19){this.map.setBaseLayer(this.map.getLayersByName("image")[0]);}
                var currentZoom = this.map.getZoom();
                var newZoom = this.map.getZoom() + Math.round(deltaZ);
                newZoom = Math.max(newZoom, 0);
                newZoom = Math.min(newZoom, this.map.getNumZoomLevels());
                if (newZoom === currentZoom) {
                    return;
                }
                var size    = this.map.getSize();
                var deltaX  = size.w/2 - evt.xy.x;
                var deltaY  = evt.xy.y - size.h/2;
                var newRes  = this.map.baseLayer.getResolutionForZoom(newZoom);
                var zoomPoint = this.map.getLonLatFromPixel(evt.xy);
                var newCenter = new OpenLayers.LonLat(
                                    zoomPoint.lon + deltaX * newRes,
                                    zoomPoint.lat + deltaY * newRes );
                this.map.setCenter( newCenter, newZoom );
            }
        }));

--------------------------------------------------------------------------------------------------------

Cheers
Benjamin

--
View this message in context: 
http://osgeo-org.1560.n6.nabble.com/Change-layer-on-max-zoom-level-tp3918789p4356682.html
Sent from the OpenLayers Users mailing list archive at Nabble.com.
_______________________________________________
Users mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/openlayers-users

Reply via email to