Layer.TileCache, Layer.TMS: support a subset of server resolutions. r=tschaub (closes #1944)
git-svn-id: http://svn.openlayers.org/trunk/openlayers@8932 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -7,7 +7,9 @@
|
|||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var map, layer;
|
var map, layer;
|
||||||
function init(){
|
function init(){
|
||||||
map = new OpenLayers.Map( $('map'));
|
map = new OpenLayers.Map( $('map'), {
|
||||||
|
resolutions: [0.087890625, 0.0439453125, 0.02197265625, 0.010986328125]
|
||||||
|
});
|
||||||
layer = new OpenLayers.Layer.TileCache("TileCache Layer",
|
layer = new OpenLayers.Layer.TileCache("TileCache Layer",
|
||||||
["http://c0.labs.metacarta.com/wms-c/cache/",
|
["http://c0.labs.metacarta.com/wms-c/cache/",
|
||||||
"http://c1.labs.metacarta.com/wms-c/cache/",
|
"http://c1.labs.metacarta.com/wms-c/cache/",
|
||||||
@@ -16,8 +18,11 @@
|
|||||||
"http://c4.labs.metacarta.com/wms-c/cache/"],
|
"http://c4.labs.metacarta.com/wms-c/cache/"],
|
||||||
"basic",
|
"basic",
|
||||||
{
|
{
|
||||||
'format': 'image/png',
|
serverResolutions: [0.703125, 0.3515625, 0.17578125, 0.087890625,
|
||||||
maxResolution: 180/256 // same as the TileCache config
|
0.0439453125, 0.02197265625, 0.010986328125,
|
||||||
|
0.0054931640625, 0.00274658203125, 0.001373291015625,
|
||||||
|
0.0006866455078125, 0.00034332275390625, 0.000171661376953125,
|
||||||
|
0.0000858306884765625, 0.00004291534423828125, 0.000021457672119140625]
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
map.addLayer(layer);
|
map.addLayer(layer);
|
||||||
|
|||||||
@@ -34,6 +34,13 @@ OpenLayers.Layer.TMS = OpenLayers.Class(OpenLayers.Layer.Grid, {
|
|||||||
*/
|
*/
|
||||||
tileOrigin: null,
|
tileOrigin: null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* APIProperty: serverResolutions
|
||||||
|
* {Array} A list of all resolutions available on the server. Only set this
|
||||||
|
* property if the map resolutions differs from the server.
|
||||||
|
*/
|
||||||
|
serverResolutions: null,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor: OpenLayers.Layer.TMS
|
* Constructor: OpenLayers.Layer.TMS
|
||||||
*
|
*
|
||||||
@@ -98,7 +105,7 @@ OpenLayers.Layer.TMS = OpenLayers.Class(OpenLayers.Layer.Grid, {
|
|||||||
var res = this.map.getResolution();
|
var res = this.map.getResolution();
|
||||||
var x = Math.round((bounds.left - this.tileOrigin.lon) / (res * this.tileSize.w));
|
var x = Math.round((bounds.left - this.tileOrigin.lon) / (res * this.tileSize.w));
|
||||||
var y = Math.round((bounds.bottom - this.tileOrigin.lat) / (res * this.tileSize.h));
|
var y = Math.round((bounds.bottom - this.tileOrigin.lat) / (res * this.tileSize.h));
|
||||||
var z = this.map.getZoom();
|
var z = this.serverResolutions != null ? this.serverResolutions.indexOf(res) : this.map.getZoom();
|
||||||
var path = this.serviceVersion + "/" + this.layername + "/" + z + "/" + x + "/" + y + "." + this.type;
|
var path = this.serviceVersion + "/" + this.layername + "/" + z + "/" + x + "/" + y + "." + this.type;
|
||||||
var url = this.url;
|
var url = this.url;
|
||||||
if (url instanceof Array) {
|
if (url instanceof Array) {
|
||||||
|
|||||||
@@ -33,6 +33,13 @@ OpenLayers.Layer.TileCache = OpenLayers.Class(OpenLayers.Layer.Grid, {
|
|||||||
*/
|
*/
|
||||||
format: 'image/png',
|
format: 'image/png',
|
||||||
|
|
||||||
|
/**
|
||||||
|
* APIProperty: serverResolutions
|
||||||
|
* {Array} A list of all resolutions available on the server. Only set this
|
||||||
|
* property if the map resolutions differs from the server.
|
||||||
|
*/
|
||||||
|
serverResolutions: null,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor: OpenLayers.Layer.TileCache
|
* Constructor: OpenLayers.Layer.TileCache
|
||||||
* Create a new read only TileCache layer.
|
* Create a new read only TileCache layer.
|
||||||
@@ -98,7 +105,7 @@ OpenLayers.Layer.TileCache = OpenLayers.Class(OpenLayers.Layer.Grid, {
|
|||||||
var size = this.tileSize;
|
var size = this.tileSize;
|
||||||
var tileX = Math.round((bounds.left - bbox.left) / (res * size.w));
|
var tileX = Math.round((bounds.left - bbox.left) / (res * size.w));
|
||||||
var tileY = Math.round((bounds.bottom - bbox.bottom) / (res * size.h));
|
var tileY = Math.round((bounds.bottom - bbox.bottom) / (res * size.h));
|
||||||
var tileZ = this.map.zoom;
|
var tileZ = this.serverResolutions != null ? this.serverResolutions.indexOf(res) : this.map.getZoom();
|
||||||
/**
|
/**
|
||||||
* Zero-pad a positive integer.
|
* Zero-pad a positive integer.
|
||||||
* number - {Int}
|
* number - {Int}
|
||||||
|
|||||||
@@ -141,6 +141,28 @@
|
|||||||
m.destroy();
|
m.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function test_Layer_TMS_serverResolutions(t) {
|
||||||
|
t.plan(2);
|
||||||
|
|
||||||
|
var map = new OpenLayers.Map('map', {
|
||||||
|
resolutions: [13,11]
|
||||||
|
});
|
||||||
|
|
||||||
|
var layer = new OpenLayers.Layer.TMS('tc layer', '', options);
|
||||||
|
map.addLayer(layer);
|
||||||
|
map.setCenter(new OpenLayers.LonLat(0,0), 1);
|
||||||
|
|
||||||
|
var tileurl = layer.getURL(new OpenLayers.Bounds(0,0,0,0));
|
||||||
|
var level = parseInt(tileurl.split('/')[2]);
|
||||||
|
t.eq(map.getZoom(), level, "Tile zoom level is correct without serverResolutions");
|
||||||
|
|
||||||
|
layer.serverResolutions = [14,13,12,11,10];
|
||||||
|
tileurl = layer.getURL(new OpenLayers.Bounds(0,0,0,0));
|
||||||
|
level = parseInt(tileurl.split('/')[2]);
|
||||||
|
t.eq(layer.serverResolutions.indexOf(map.getResolution()), level, "Tile zoom level is correct with serverResolutions");
|
||||||
|
|
||||||
|
map.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
function test_Layer_TMS_setMap(t) {
|
function test_Layer_TMS_setMap(t) {
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
layer.destroy();
|
layer.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
function test__Layer_TileCache_clone(t) {
|
function test_Layer_TileCache_clone(t) {
|
||||||
t.plan(3);
|
t.plan(3);
|
||||||
|
|
||||||
var name = 'Test Layer';
|
var name = 'Test Layer';
|
||||||
@@ -141,6 +141,29 @@
|
|||||||
map.destroy();
|
map.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function test_Layer_TileCache_serverResolutions(t) {
|
||||||
|
t.plan(2);
|
||||||
|
|
||||||
|
var map = new OpenLayers.Map('map', {
|
||||||
|
resolutions: [13,11]
|
||||||
|
});
|
||||||
|
|
||||||
|
var layer = new OpenLayers.Layer.TileCache('tc layer', '', 'basic');
|
||||||
|
map.addLayer(layer);
|
||||||
|
map.setCenter(new OpenLayers.LonLat(0,0), 1);
|
||||||
|
|
||||||
|
var tileurl = layer.getURL(new OpenLayers.Bounds(0,0,0,0));
|
||||||
|
var level = parseInt(tileurl.split('/')[2]);
|
||||||
|
t.eq(map.getZoom(), level, "Tile zoom level is correct without serverResolutions");
|
||||||
|
|
||||||
|
layer.serverResolutions = [14,13,12,11,10];
|
||||||
|
tileurl = layer.getURL(new OpenLayers.Bounds(0,0,0,0));
|
||||||
|
level = parseInt(tileurl.split('/')[2]);
|
||||||
|
t.eq(layer.serverResolutions.indexOf(map.getResolution()), level, "Tile zoom level is correct with serverResolutions");
|
||||||
|
|
||||||
|
map.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
function test_Layer_TileCache_setMap(t) {
|
function test_Layer_TileCache_setMap(t) {
|
||||||
|
|
||||||
t.plan(3);
|
t.plan(3);
|
||||||
|
|||||||
Reference in New Issue
Block a user