|
/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for |
|
* full list of contributors). Published under the Clear BSD license. |
|
* See http://svn.openlayers.org/trunk/openlayers/license.txt for the |
|
* full text of the license. */ |
|
|
|
|
|
/** |
|
* @requires OpenLayers/Layer/Grid.js |
|
* @requires OpenLayers/Tile/Image.js |
|
*/ |
|
|
|
/** |
|
* Class: OpenLayers.Layer.TMS |
|
* |
|
* Inherits from: |
|
* - <OpenLayers.Layer.Grid> |
|
*/ |
|
OpenLayers.Layer.TMS = OpenLayers.Class(OpenLayers.Layer.Grid, { |
|
|
|
/** |
|
* APIProperty: serviceVersion |
|
* {String} |
|
*/ |
|
serviceVersion: "1.0.0", |
|
|
|
/** |
|
* APIProperty: isBaseLayer |
|
* {Boolean} |
|
*/ |
|
isBaseLayer: true, |
|
|
|
/** |
|
* APIProperty: tileOrigin |
|
* {<OpenLayers.Pixel>} |
|
*/ |
|
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, |
|
|
|
/** |
|
* APIProperty: zoomOffset |
|
* {Number} If your cache has more zoom levels than you want to provide |
|
* access to with this layer, supply a zoomOffset. This zoom offset |
|
* is added to the current map zoom level to determine the level |
|
* for a requested tile. For example, if you supply a zoomOffset |
|
* of 3, when the map is at the zoom 0, tiles will be requested from |
|
* level 3 of your cache. Default is 0 (assumes cache level and map |
|
* zoom are equivalent). Using <zoomOffset> is an alternative to |
|
* setting <serverResolutions> if you only want to expose a subset |
|
* of the server resolutions. |
|
*/ |
|
zoomOffset: 0, |
|
|
|
/** |
|
* Constructor: OpenLayers.Layer.TMS |
|
* |
|
* Parameters: |
|
* name - {String} |
|
* url - {String} |
|
* options - {Object} Hashtable of extra options to tag onto the layer |
|
*/ |
|
initialize: function(name, url, options) { |
|
var newArguments = []; |
|
newArguments.push(name, url, {}, options); |
|
OpenLayers.Layer.Grid.prototype.initialize.apply(this, newArguments); |
|
}, |
|
|
|
/** |
|
* APIMethod:destroy |
|
*/ |
|
destroy: function() { |
|
// for now, nothing special to do here. |
|
OpenLayers.Layer.Grid.prototype.destroy.apply(this, arguments); |
|
}, |
|
|
|
|
|
/** |
|
* APIMethod: clone |
|
* |
|
* Parameters: |
|
* obj - {Object} |
|
* |
|
* Returns: |
|
* {<OpenLayers.Layer.TMS>} An exact clone of this <OpenLayers.Layer.TMS> |
|
*/ |
|
clone: function (obj) { |
|
|
|
if (obj == null) { |
|
obj = new OpenLayers.Layer.TMS(this.name, |
|
this.url, |
|
this.getOptions()); |
|
} |
|
|
|
//get all additions from superclasses |
|
obj = OpenLayers.Layer.Grid.prototype.clone.apply(this, [obj]); |
|
|
|
// copy/set any non-init, non-simple values here |
|
|
|
return obj; |
|
}, |
|
|
|
/** |
|
* Method: getURL |
|
* |
|
* Parameters: |
|
* bounds - {<OpenLayers.Bounds>} |
|
* |
|
* Returns: |
|
* {String} A string with the layer's url and parameters and also the |
|
* passed-in bounds and appropriate tile size specified as |
|
* parameters |
|
*/ |
|
getURL: function (bounds) { |
|
bounds = this.adjustBounds(bounds); |
|
var res = this.map.getResolution(); |
|
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 z = this.serverResolutions != null ? |
|
OpenLayers.Util.indexOf(this.serverResolutions, res) : |
|
this.map.getZoom() + this.zoomOffset; |
|
var path = this.serviceVersion + "/" + this.layername + "/" + z + "/" + x + "/" + y + "." + this.type; |
|
var url = this.url; |
|
if (url instanceof Array) { |
|
url = this.selectUrl(path, url); |
|
} |
|
return url + path; |
|
}, |
|
|
|
/** |
|
* Method: addTile |
|
* addTile creates a tile, initializes it, and adds it to the layer div. |
|
* |
|
* Parameters: |
|
* bounds - {<OpenLayers.Bounds>} |
|
* position - {<OpenLayers.Pixel>} |
|
* |
|
* Returns: |
|
* {<OpenLayers.Tile.Image>} The added OpenLayers.Tile.Image |
|
*/ |
|
addTile:function(bounds,position) { |
|
return new OpenLayers.Tile.Image(this, position, bounds, |
|
null, this.tileSize); |
|
}, |
|
|
|
/** |
|
* APIMethod: setMap |
|
* When the layer is added to a map, then we can fetch our origin |
|
* (if we don't have one.) |
|
* |
|
* Parameters: |
|
* map - {<OpenLayers.Map>} |
|
*/ |
|
setMap: function(map) { |
|
OpenLayers.Layer.Grid.prototype.setMap.apply(this, arguments); |
|
if (!this.tileOrigin) { |
|
this.tileOrigin = new OpenLayers.LonLat(this.map.maxExtent.left, |
|
this.map.maxExtent.bottom); |
|
} |
|
}, |
|
|
|
CLASS_NAME: "OpenLayers.Layer.TMS" |
|
}); |
|
|