More trip planner testing with colors
[busui.git] / labs / openlayers / lib / OpenLayers / Layer / PointTrack.js
blob:a/labs/openlayers/lib/OpenLayers/Layer/PointTrack.js -> blob:b/labs/openlayers/lib/OpenLayers/Layer/PointTrack.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/Vector.js
  * @requires OpenLayers/Console.js
  */
   
  /**
  * Class: OpenLayers.Layer.PointTrack
  * Vector layer to display ordered point features as a line, creating one
  * LineString feature for each pair of two points.
  *
  * Inherits from:
  * - <OpenLayers.Layer.Vector>
  */
  OpenLayers.Layer.PointTrack = OpenLayers.Class(OpenLayers.Layer.Vector, {
   
  /**
  * APIProperty:
  * dataFrom - {<OpenLayers.Layer.PointTrack.dataFrom>} optional. If the
  * lines should get the data/attributes from one of the two
  * points, creating it, which one should it be?
  */
  dataFrom: null,
   
  /**
  * Constructor: OpenLayers.PointTrack
  * Constructor for a new OpenLayers.PointTrack instance.
  *
  * Parameters:
  * name - {String} name of the layer
  * options - {Object} Optional object with properties to tag onto the
  * instance.
  */
  initialize: function(name, options) {
  OpenLayers.Layer.Vector.prototype.initialize.apply(this, arguments);
  },
   
  /**
  * APIMethod: addNodes
  * Adds point features that will be used to create lines from, using point
  * pairs. The first point of a pair will be the source node, the second
  * will be the target node.
  *
  * Parameters:
  * pointFeatures - {Array(<OpenLayers.Feature>)}
  *
  */
  addNodes: function(pointFeatures) {
  if (pointFeatures.length < 2) {
  OpenLayers.Console.error(
  "At least two point features have to be added to create" +
  "a line from");
  return;
  }
   
  var lines = new Array(pointFeatures.length-1);
   
  var pointFeature, startPoint, endPoint;
  for(var i=0, len=pointFeatures.length; i<len; i++) {
  pointFeature = pointFeatures[i];
  endPoint = pointFeature.geometry;
   
  if (!endPoint) {
  var lonlat = pointFeature.lonlat;
  endPoint = new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat);
  } else if(endPoint.CLASS_NAME != "OpenLayers.Geometry.Point") {
  OpenLayers.Console.error(
  "Only features with point geometries are supported.");
  return;
  }
   
  if(i > 0) {
  var attributes = (this.dataFrom != null) ?
  (pointFeatures[i+this.dataFrom].data ||
  pointFeatures[i+this.dataFrom].attributes) :
  null;
  var line = new OpenLayers.Geometry.LineString([startPoint,
  endPoint]);
   
  lines[i-1] = new OpenLayers.Feature.Vector(line, attributes);
  }
   
  startPoint = endPoint;
  }
   
  this.addFeatures(lines);
  },
   
  CLASS_NAME: "OpenLayers.Layer.PointTrack"
  });
   
  /**
  * Constant: OpenLayers.Layer.PointTrack.dataFrom
  * {Object} with the following keys
  * - SOURCE_NODE: take data/attributes from the source node of the line
  * - TARGET_NODE: take data/attributes from the target node of the line
  */
  OpenLayers.Layer.PointTrack.dataFrom = {'SOURCE_NODE': -1, 'TARGET_NODE': 0};