Files
openlayers/lib/OpenLayers/Layer/WorldWind.js
Tom Hughes 63fb2d4b04 Add an interception point to allow image URLs to be rewritten
Make all attempts to get a URL for an image go through a single
routine, OpenLayers.Util.getImageLocation, which is given the actual
image name.

This allows users to replace that routine with an enhanced version
which can rewrite the full URL, for example to go through the rails
asset pipeline when using OpenLayers with rails.
2011-12-31 12:19:10 +00:00

106 lines
2.9 KiB
JavaScript

/* Copyright (c) 2006-2011 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
*/
/**
* Class: OpenLayers.Layer.WorldWind
*
* Inherits from:
* - <OpenLayers.Layer.Grid>
*/
OpenLayers.Layer.WorldWind = OpenLayers.Class(OpenLayers.Layer.Grid, {
DEFAULT_PARAMS: {
},
/**
* APIProperty: isBaseLayer
* {Boolean} WorldWind layer is a base layer by default.
*/
isBaseLayer: true,
/**
* APIProperty: lzd
* {Float} LevelZeroTileSizeDegrees
*/
lzd: null,
/**
* APIProperty: zoomLevels
* {Integer} Number of zoom levels.
*/
zoomLevels: null,
/**
* Constructor: OpenLayers.Layer.WorldWind
*
* Parameters:
* name - {String} Name of Layer
* url - {String} Base URL
* lzd - {Float} Level zero tile size degrees
* zoomLevels - {Integer} number of zoom levels
* params - {Object} additional parameters
* options - {Object} additional options
*/
initialize: function(name, url, lzd, zoomLevels, params, options) {
this.lzd = lzd;
this.zoomLevels = zoomLevels;
var newArguments = [];
newArguments.push(name, url, params, options);
OpenLayers.Layer.Grid.prototype.initialize.apply(this, newArguments);
this.params = OpenLayers.Util.applyDefaults(
this.params, this.DEFAULT_PARAMS
);
},
/**
* Method: getZoom
* Convert map zoom to WW zoom.
*/
getZoom: function () {
var zoom = this.map.getZoom();
var extent = this.map.getMaxExtent();
zoom = zoom - Math.log(this.maxResolution / (this.lzd/512))/Math.log(2);
return zoom;
},
/**
* 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 zoom = this.getZoom();
var extent = this.map.getMaxExtent();
var deg = this.lzd/Math.pow(2,this.getZoom());
var x = Math.floor((bounds.left - extent.left)/deg);
var y = Math.floor((bounds.bottom - extent.bottom)/deg);
if (this.map.getResolution() <= (this.lzd/512)
&& this.getZoom() <= this.zoomLevels) {
return this.getFullRequestString(
{ L: zoom,
X: x,
Y: y
});
} else {
return OpenLayers.Util.getImageLocation("blank.gif");
}
},
CLASS_NAME: "OpenLayers.Layer.WorldWind"
});