[OpenLayers-Users] switch Layers by resolution/zoom

crinolium wengerter at gmail.com
Mon Aug 25 07:32:44 EDT 2008


Hello List!

I have got a map of 4 layers and 4 resolutions. Each layer for one
resolution. But I've got a problem in switching between the layers by
zooming. It works for the resolutions 40, 16 and 8 but not for 4.There the
URL (f. e. http://localhost/uk500/400/.../ .png) isn't correct. It must be
http://localhost/tk50/400/.../.gif.

What I have to do to request with the right URL?

What's wrong with the code? Or is there another, better way to switch
between the layers than with setVisibility?

I hope, someone can help me.


Here is the code:

function get_url (bounds) {
       var res = this.map.getResolution();
       var x = bounds.left;
       var y = bounds.bottom;
       var z = res*100;

       var path = z + "/" + x + "/" + x + y + "." + this.type;
       var url = this.url;
       if (url instanceof Array) {
           url = this.selectUrl(path, url);
       }
       return url + path;
}

var options = {resolutions: [40,16,8,4],...};

var map = new OpenLayers.Map("map", options);

tms_uk500 = new OpenLayers.Layer.TMS("TMS
UK500","http://localhost/uk500/4000/", 'type':'png', 'getURL':get_url});
tms_tk50_16 = new OpenLayers.Layer.TMS("TMS TK50
16","http://localhost/tk50/", {'type':'gif', 'getURL':get_url});
tms_tk50_8 = new OpenLayers.Layer.TMS("TMS TK50 8","http://localhost/tk50/",
{'type':'gif', 'getURL':get_url});
tms_tk50_4 = new OpenLayers.Layer.TMS("TMS TK50 4","http://localhost/tk50/",
{'type':'gif', 'getURL':get_url});

map.addLayers([tms_uk500,tms_tk50_16,tms_tk50_8, tms_tk50_4]);

map.events.register("zoomend", map, function() {
       switch(map.getResolution()) {
          case 40:
                       tms_tk50_16.setVisibility(false);
                       tms_tk50_8.setVisibility(false);
                       tms_tk50_4.setVisibility(false);
                       tms_uk500.setVisibility(true);
          case 16:
                       tms_uk500.setVisibility(false);
                       tms_tk50_8.setVisibility(false);
                       tms_tk50_4.setVisibility(false);
                       tms_tk50_16.setVisibility(true);
          case 8:
                       tms_uk500.setVisibility(false);
                       tms_tk50_16.setVisibility(false);
                       tms_tk50_4.setVisibility(false);
                       tms_tk50_8.setVisibility(true);
          case 4:
                       tms_uk500.setVisibility(false);
                       tms_tk50_16.setVisibility(false);
                       tms_tk50_8.setVisibility(false);
                       tms_tk50_4.setVisibility(true);
}});

-- 
View this message in context: http://n2.nabble.com/switch-Layers-by-resolution-zoom-tp781199p781199.html
Sent from the OpenLayers Users mailing list archive at Nabble.com.




More information about the Users mailing list