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 | /* Copyright (c) 2006-2007 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/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}; |