More trip planner testing with colors
[busui.git] / labs / openlayers / lib / OpenLayers / Layer / MultiMap.js
blob:a/labs/openlayers/lib/OpenLayers/Layer/MultiMap.js -> blob:b/labs/openlayers/lib/OpenLayers/Layer/MultiMap.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/EventPane.js
  * @requires OpenLayers/Layer/FixedZoomLevels.js
  */
   
  /**
  * Class: OpenLayers.Layer.MultiMap
  * Note that MultiMap does not fully support the sphericalMercator
  * option. See Ticket #953 for more details.
  *
  * Inherits from:
  * - <OpenLayers.Layer.EventPane>
  * - <OpenLayers.Layer.FixedZoomLevels>
  */
  OpenLayers.Layer.MultiMap = OpenLayers.Class(
  OpenLayers.Layer.EventPane, OpenLayers.Layer.FixedZoomLevels, {
   
  /**
  * Constant: MIN_ZOOM_LEVEL
  * {Integer} 1
  */
  MIN_ZOOM_LEVEL: 1,
   
  /**
  * Constant: MAX_ZOOM_LEVEL
  * {Integer} 17
  */
  MAX_ZOOM_LEVEL: 17,
   
  /**
  * Constant: RESOLUTIONS
  * {Array(Float)} Hardcode these resolutions so that they are more closely
  * tied with the standard wms projection
  */
  RESOLUTIONS: [
  9,
  1.40625,
  0.703125,
  0.3515625,
  0.17578125,
  0.087890625,
  0.0439453125,
  0.02197265625,
  0.010986328125,
  0.0054931640625,
  0.00274658203125,
  0.001373291015625,
  0.0006866455078125,
  0.00034332275390625,
  0.000171661376953125,
  0.0000858306884765625,
  0.00004291534423828125
  ],
   
  /**
  * APIProperty: type
  * {?}
  */
  type: null,
   
  /**
  * Constructor: OpenLayers.Layer.MultiMap
  *
  * Parameters:
  * name - {String}
  * options - {Object}
  */
  initialize: function(name, options) {
  OpenLayers.Layer.EventPane.prototype.initialize.apply(this, arguments);
  OpenLayers.Layer.FixedZoomLevels.prototype.initialize.apply(this,
  arguments);
  if (this.sphericalMercator) {
  OpenLayers.Util.extend(this, OpenLayers.Layer.SphericalMercator);
  this.initMercatorParameters();
  this.RESOLUTIONS.unshift(10);
  }
  },
   
  /**
  * Method: loadMapObject
  */
  loadMapObject:function() {
  try { //crash proofing
  this.mapObject = new MultimapViewer(this.div);
  } catch (e) { }
  },
   
  /**
  * APIMethod: getWarningHTML
  *
  * Returns:
  * {String} String with information on why layer is broken, how to get
  * it working.
  */
  getWarningHTML:function() {
  return OpenLayers.i18n(
  "getLayerWarning", {'layerType':"MM", 'layerLib':"MultiMap"}
  );
  },
   
   
   
  /************************************
  * *
  * MapObject Interface Controls *
  * *
  ************************************/
   
   
  // Get&Set Center, Zoom
   
  /**
  * APIMethod: setMapObjectCenter
  * Set the mapObject to the specified center and zoom
  *
  * Parameters:
  * center - {Object} MapObject LonLat format
  * zoom - {int} MapObject zoom format
  */
  setMapObjectCenter: function(center, zoom) {
  this.mapObject.goToPosition(center, zoom);
  },
   
  /**
  * APIMethod: getMapObjectCenter
  *
  * Returns:
  * {Object} The mapObject's current center in Map Object format
  */
  getMapObjectCenter: function() {
  return this.mapObject.getCurrentPosition();
  },
   
  /**
  * APIMethod: getMapObjectZoom
  *
  * Returns:
  * {Integer} The mapObject's current zoom, in Map Object format
  */
  getMapObjectZoom: function() {
  return this.mapObject.getZoomFactor();
  },
   
   
  // LonLat - Pixel Translation
   
  /**
  * APIMethod: getMapObjectLonLatFromMapObjectPixel
  *
  * Parameters:
  * moPixel - {Object} MapObject Pixel format
  *
  * Returns:
  * {Object} MapObject LonLat translated from MapObject Pixel
  */
  getMapObjectLonLatFromMapObjectPixel: function(moPixel) {
  moPixel.x = moPixel.x - (this.map.getSize().w/2);
  moPixel.y = moPixel.y - (this.map.getSize().h/2);
  return this.mapObject.getMapPositionAt(moPixel);
  },
   
  /**
  * APIMethod: getMapObjectPixelFromMapObjectLonLat
  *
  * Parameters:
  * moLonLat - {Object} MapObject LonLat format
  *
  * Returns:
  * {Object} MapObject Pixel transtlated from MapObject LonLat
  */
  getMapObjectPixelFromMapObjectLonLat: function(moLonLat) {
  return this.mapObject.geoPosToContainerPixels(moLonLat);
  },
   
   
  /************************************
  * *
  * MapObject Primitives *
  * *
  ************************************/
   
   
  // LonLat
   
  /**
  * APIMethod: getLongitudeFromMapObjectLonLat
  *
  * Parameters:
  * moLonLat - {Object} MapObject LonLat format
  *
  * Returns:
  * {Float} Longitude of the given MapObject LonLat
  */
  getLongitudeFromMapObjectLonLat: function(moLonLat) {
  return this.sphericalMercator ?
  this.forwardMercator(moLonLat.lon, moLonLat.lat).lon :
  moLonLat.lon;
  },
   
  /**
  * APIMethod: getLatitudeFromMapObjectLonLat
  *
  * Parameters:
  * moLonLat - {Object} MapObject LonLat format
  *
  * Returns:
  * {Float} Latitude of the given MapObject LonLat
  */
  getLatitudeFromMapObjectLonLat: function(moLonLat) {
  return this.sphericalMercator ?
  this.forwardMercator(moLonLat.lon, moLonLat.lat).lat :
  moLonLat.lat;
  },
   
  /**
  * APIMethod: getMapObjectLonLatFromLonLat
  *
  * Parameters:
  * lon - {Float}
  * lat - {Float}
  *
  * Returns:
  * {Object} MapObject LonLat built from lon and lat params
  */
  getMapObjectLonLatFromLonLat: function(lon, lat) {
  var mmLatLon;
  if(this.sphericalMercator) {
  var lonlat = this.inverseMercator(lon, lat);
  mmLatLon = new MMLatLon(lonlat.lat, lonlat.lon);
  } else {
  mmLatLon = new MMLatLon(lat, lon);
  }
  return mmLatLon;
  },
   
  // Pixel
   
  /**
  * APIMethod: getXFromMapObjectPixel
  *
  * Parameters:
  * moPixel - {Object} MapObject Pixel format
  *
  * Returns:
  * {Integer} X value of the MapObject Pixel
  */
  getXFromMapObjectPixel: function(moPixel) {
  return moPixel.x;
  },
   
  /**
  * APIMethod: getYFromMapObjectPixel
  *
  * Parameters:
  * moPixel - {Object} MapObject Pixel format
  *
  * Returns:
  * {Integer} Y value of the MapObject Pixel
  */
  getYFromMapObjectPixel: function(moPixel) {
  return moPixel.y;
  },
   
  /**
  * APIMethod: getMapObjectPixelFromXY
  *
  * Parameters:
  * x - {Integer}
  * y - {Integer}
  *
  * Returns:
  * {Object} MapObject Pixel from x and y parameters
  */
  getMapObjectPixelFromXY: function(x, y) {
  return new MMPoint(x, y);
  },
   
  CLASS_NAME: "OpenLayers.Layer.MultiMap"
  });