More trip planner testing with colors
[busui.git] / labs / openlayers / lib / OpenLayers / Layer / TMS.js
blob:a/labs/openlayers/lib/OpenLayers/Layer/TMS.js -> blob:b/labs/openlayers/lib/OpenLayers/Layer/TMS.js
  /* 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"
  });