More trip planner testing with colors
[busui.git] / labs / openlayers / lib / OpenLayers / Control / Scale.js
blob:a/labs/openlayers/lib/OpenLayers/Control/Scale.js -> blob:b/labs/openlayers/lib/OpenLayers/Control/Scale.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/Control.js
  */
   
  /**
  * Class: OpenLayers.Control.Scale
  * The Scale control displays the current map scale as a ratio (e.g. Scale =
  * 1:1M). By default it is displayed in the lower right corner of the map.
  *
  * Inherits from:
  * - <OpenLayers.Control>
  */
  OpenLayers.Control.Scale = OpenLayers.Class(OpenLayers.Control, {
   
  /**
  * Parameter: element
  * {DOMElement}
  */
  element: null,
   
  /**
  * APIProperty: geodesic
  * {Boolean} Use geodesic measurement. Default is false. The recommended
  * setting for maps in EPSG:4326 is false, and true EPSG:900913. If set to
  * true, the scale will be calculated based on the horizontal size of the
  * pixel in the center of the map viewport.
  */
  geodesic: false,
   
  /**
  * Constructor: OpenLayers.Control.Scale
  *
  * Parameters:
  * element - {DOMElement}
  * options - {Object}
  */
  initialize: function(element, options) {
  OpenLayers.Control.prototype.initialize.apply(this, [options]);
  this.element = OpenLayers.Util.getElement(element);
  },
   
  /**
  * Method: draw
  *
  * Returns:
  * {DOMElement}
  */
  draw: function() {
  OpenLayers.Control.prototype.draw.apply(this, arguments);
  if (!this.element) {
  this.element = document.createElement("div");
  this.div.appendChild(this.element);
  }
  this.map.events.register( 'moveend', this, this.updateScale);
  this.updateScale();
  return this.div;
  },
   
  /**
  * Method: updateScale
  */
  updateScale: function() {
  var scale;
  if(this.geodesic === true) {
  var units = this.map.getUnits();
  if(!units) {
  return;
  }
  var inches = OpenLayers.INCHES_PER_UNIT;
  scale = (this.map.getGeodesicPixelSize().w || 0.000001) *
  inches["km"] * OpenLayers.DOTS_PER_INCH;
  } else {
  scale = this.map.getScale();
  }
   
  if (!scale) {
  return;
  }
   
  if (scale >= 9500 && scale <= 950000) {
  scale = Math.round(scale / 1000) + "K";
  } else if (scale >= 950000) {
  scale = Math.round(scale / 1000000) + "M";
  } else {
  scale = Math.round(scale);
  }
   
  this.element.innerHTML = OpenLayers.i18n("scale", {'scaleDenom':scale});
  },
   
  CLASS_NAME: "OpenLayers.Control.Scale"
  });