PointTrack.js
4.6 KB
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/* Copyright (c) 2006-2011 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.TARGET_NODE>} or
* {<OpenLayers.Layer.PointTrack.SOURCE_NODE>} optional. If the lines
* should get the data/attributes from one of the two points it is
* composed of, which one should it be?
*/
dataFrom: null,
/**
* APIProperty:
* styleFrom - {<OpenLayers.Layer.PointTrack.TARGET_NODE>} or
* {<OpenLayers.Layer.PointTrack.SOURCE_NODE>} optional. If the lines
* should get the style from one of the two points it is composed of,
* which one should it be?
*/
styleFrom: 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>)}
* options - {Object}
*
* Supported options:
* silent - {Boolean} true to suppress (before)feature(s)added events
*/
addNodes: function(pointFeatures, options) {
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 style = (this.styleFrom != null) ?
(pointFeatures[i+this.styleFrom].style) :
null;
var line = new OpenLayers.Geometry.LineString([startPoint,
endPoint]);
lines[i-1] = new OpenLayers.Feature.Vector(line, attributes,
style);
}
startPoint = endPoint;
}
this.addFeatures(lines, options);
},
CLASS_NAME: "OpenLayers.Layer.PointTrack"
});
/**
* Constant: OpenLayers.Layer.PointTrack.SOURCE_NODE
* {Number} value for <OpenLayers.Layer.PointTrack.dataFrom> and
* <OpenLayers.Layer.PointTrack.styleFrom>
*/
OpenLayers.Layer.PointTrack.SOURCE_NODE = -1;
/**
* Constant: OpenLayers.Layer.PointTrack.TARGET_NODE
* {Number} value for <OpenLayers.Layer.PointTrack.dataFrom> and
* <OpenLayers.Layer.PointTrack.styleFrom>
*/
OpenLayers.Layer.PointTrack.TARGET_NODE = 0;
/**
* Constant: OpenLayers.Layer.PointTrack.dataFrom
* {Object} with the following keys - *deprecated*
* - 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};