1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | /* Copyright (c) 2006-2008 MetaCarta, Inc., 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 * WorldWind layer is a base layer by default. */ isBaseLayer: true, /** * APIProperty: lzd * LevelZeroTileSizeDegrees */ lzd: null, /** * APIProperty: zoomLevels * 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 - {Int} 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: addTile * * 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); }, /** * 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.getImagesLocation() + "blank.gif"; } }, CLASS_NAME: "OpenLayers.Layer.WorldWind" }); |