gpx 0.8.1 → 0.8.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/lib/gpx/gpx_file.rb +8 -5
- data/lib/gpx/segment.rb +25 -8
- data/lib/gpx/track.rb +8 -1
- data/lib/gpx/version.rb +1 -1
- data/tests/gpx_file_test.rb +15 -0
- data/tests/gpx_files/one_segment_no_time.gpx +580 -0
- data/tests/gpx_files/one_track.gpx +2 -0
- data/tests/segment_test.rb +19 -0
- data/tests/track_point_test.rb +1 -1
- data/tests/track_test.rb +17 -10
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 73e06b9476bcb99bfba6431fca25891846a88941
|
4
|
+
data.tar.gz: c7b44986fbc47413feee9975f83a50ddd9100fa6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00368da47e1de3b6379ac55b758c403035de545f89ebb1040cd5af802c5351ae09615554ecdd4195d43ca240ed7e5e5912df0b66237b8f1a7b9d03360121e3db
|
7
|
+
data.tar.gz: 25fcae7c2c17bf40ad44b2f464baf4e1f682bcfdb58d4ca7ab6833b2cb154b2867caaecc7de9ae99d127f5ec3545df8b58bd130cd208d0a48ba75853d63f5867
|
data/CHANGELOG.md
CHANGED
data/lib/gpx/gpx_file.rb
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
#++
|
23
23
|
module GPX
|
24
24
|
class GPXFile < Base
|
25
|
-
attr_accessor :tracks, :routes, :waypoints, :bounds, :lowest_point, :highest_point, :duration, :ns, :time, :name, :version, :creator, :description
|
25
|
+
attr_accessor :tracks, :routes, :waypoints, :bounds, :lowest_point, :highest_point, :duration, :ns, :time, :name, :version, :creator, :description, :moving_duration
|
26
26
|
|
27
27
|
DEFAULT_CREATOR = "GPX RubyGem #{GPX::VERSION} -- http://dougfales.github.io/gpx/".freeze
|
28
28
|
|
@@ -127,15 +127,16 @@ module GPX
|
|
127
127
|
|
128
128
|
# Returns the average speed, in km/hr, meters/hr, or miles/hr, of this
|
129
129
|
# GPXFile. The calculation is based on the total distance divided by the
|
130
|
-
#
|
130
|
+
# sum of duration of all segments of all tracks
|
131
|
+
# (not taking into accounting pause time).
|
131
132
|
def average_speed(opts = { :units => 'kilometers' })
|
132
133
|
case opts[:units]
|
133
134
|
when /kilometers/i
|
134
|
-
return
|
135
|
+
return distance / (moving_duration/3600.0)
|
135
136
|
when /meters/i
|
136
|
-
return (
|
137
|
+
return (distance * 1000) / (moving_duration/3600.0)
|
137
138
|
when /miles/i
|
138
|
-
return (
|
139
|
+
return (distance * 0.62) / (moving_duration/3600.0)
|
139
140
|
end
|
140
141
|
end
|
141
142
|
|
@@ -187,6 +188,7 @@ module GPX
|
|
187
188
|
@highest_point = nil
|
188
189
|
@lowest_point = nil
|
189
190
|
@distance = 0.0
|
191
|
+
@moving_duration = 0.0
|
190
192
|
end
|
191
193
|
|
192
194
|
# Updates the meta data for this GPX file. Meta data includes the
|
@@ -198,6 +200,7 @@ module GPX
|
|
198
200
|
@highest_point = trk.highest_point if(@highest_point.nil? or (!trk.highest_point.nil? and trk.highest_point.elevation > @highest_point.elevation))
|
199
201
|
@bounds.add(trk.bounds) if get_bounds
|
200
202
|
@distance += trk.distance
|
203
|
+
@moving_duration += trk.moving_duration
|
201
204
|
end
|
202
205
|
|
203
206
|
# Serialize the current GPXFile to a gpx file named <filename>.
|
data/lib/gpx/segment.rb
CHANGED
@@ -27,7 +27,7 @@ module GPX
|
|
27
27
|
# latest points, distance, and bounds.
|
28
28
|
class Segment < Base
|
29
29
|
|
30
|
-
attr_reader :earliest_point, :latest_point, :bounds, :highest_point, :lowest_point, :distance
|
30
|
+
attr_reader :earliest_point, :latest_point, :bounds, :highest_point, :lowest_point, :distance, :duration
|
31
31
|
attr_accessor :points, :track
|
32
32
|
|
33
33
|
# If a XML::Node object is passed-in, this will initialize a new
|
@@ -41,6 +41,7 @@ module GPX
|
|
41
41
|
@highest_point = nil
|
42
42
|
@lowest_point = nil
|
43
43
|
@distance = 0.0
|
44
|
+
@duration = 0.0
|
44
45
|
@bounds = Bounds.new
|
45
46
|
if(opts[:element])
|
46
47
|
segment_element = opts[:element]
|
@@ -57,11 +58,16 @@ module GPX
|
|
57
58
|
# Tack on a point to this Segment. All meta-data will be updated.
|
58
59
|
def append_point(pt)
|
59
60
|
last_pt = @points[-1]
|
60
|
-
|
61
|
+
if pt.time
|
61
62
|
@earliest_point = pt if(@earliest_point.nil? or pt.time < @earliest_point.time)
|
62
63
|
@latest_point = pt if(@latest_point.nil? or pt.time > @latest_point.time)
|
64
|
+
else
|
65
|
+
# when no time information in data, we consider the points are ordered
|
66
|
+
@earliest_point = @points[0]
|
67
|
+
@latest_point = pt
|
63
68
|
end
|
64
|
-
|
69
|
+
|
70
|
+
if pt.elevation
|
65
71
|
@lowest_point = pt if(@lowest_point.nil? or pt.elevation < @lowest_point.elevation)
|
66
72
|
@highest_point = pt if(@highest_point.nil? or pt.elevation > @highest_point.elevation)
|
67
73
|
end
|
@@ -69,7 +75,10 @@ module GPX
|
|
69
75
|
@bounds.min_lon = pt.lon if pt.lon < @bounds.min_lon
|
70
76
|
@bounds.max_lat = pt.lat if pt.lat > @bounds.max_lat
|
71
77
|
@bounds.max_lon = pt.lon if pt.lon > @bounds.max_lon
|
72
|
-
|
78
|
+
if last_pt
|
79
|
+
@distance += haversine_distance(last_pt, pt)
|
80
|
+
@duration += pt.time - last_pt.time if pt.time and last_pt.time
|
81
|
+
end
|
73
82
|
@points << pt
|
74
83
|
end
|
75
84
|
|
@@ -181,7 +190,6 @@ module GPX
|
|
181
190
|
tmp_points.push tmp_point
|
182
191
|
end
|
183
192
|
last_pt = nil
|
184
|
-
@distance = 0
|
185
193
|
@points.clear
|
186
194
|
reset_meta_data
|
187
195
|
#now commit the averages back and recalculate the distances
|
@@ -232,20 +240,29 @@ module GPX
|
|
232
240
|
@highest_point = nil
|
233
241
|
@lowest_point = nil
|
234
242
|
@distance = 0.0
|
243
|
+
@duration = 0.0
|
235
244
|
@bounds = Bounds.new
|
236
245
|
end
|
237
246
|
|
238
247
|
def update_meta_data(pt, last_pt)
|
239
|
-
|
248
|
+
if pt.time
|
240
249
|
@earliest_point = pt if(@earliest_point.nil? or pt.time < @earliest_point.time)
|
241
250
|
@latest_point = pt if(@latest_point.nil? or pt.time > @latest_point.time)
|
251
|
+
else
|
252
|
+
# when no time information in data, we consider the points are ordered
|
253
|
+
@earliest_point = @points[0]
|
254
|
+
@latest_point = @points[-1]
|
242
255
|
end
|
243
|
-
|
256
|
+
|
257
|
+
if pt.elevation
|
244
258
|
@lowest_point = pt if(@lowest_point.nil? or pt.elevation < @lowest_point.elevation)
|
245
259
|
@highest_point = pt if(@highest_point.nil? or pt.elevation > @highest_point.elevation)
|
246
260
|
end
|
247
261
|
@bounds.add(pt)
|
248
|
-
|
262
|
+
if last_pt
|
263
|
+
@distance += haversine_distance(last_pt, pt)
|
264
|
+
@duration += pt.time - last_pt.time if pt.time and last_pt.time
|
265
|
+
end
|
249
266
|
end
|
250
267
|
|
251
268
|
end
|
data/lib/gpx/track.rb
CHANGED
@@ -28,7 +28,7 @@ module GPX
|
|
28
28
|
# array of the segments that copmrise it, but additionally each track holds
|
29
29
|
# a reference to all of its points as one big array called "points".
|
30
30
|
class Track < Base
|
31
|
-
attr_reader :points, :bounds, :lowest_point, :highest_point, :distance
|
31
|
+
attr_reader :points, :bounds, :lowest_point, :highest_point, :distance, :moving_duration, :comment, :description
|
32
32
|
attr_accessor :segments, :name, :gpx_file
|
33
33
|
|
34
34
|
# Initialize a track from a XML::Node, or, if no :element option is
|
@@ -41,6 +41,8 @@ module GPX
|
|
41
41
|
if(opts[:element])
|
42
42
|
trk_element = opts[:element]
|
43
43
|
@name = (trk_element.at("name").inner_text rescue "")
|
44
|
+
@comment = (trk_element.at('cmt').inner_text rescue '')
|
45
|
+
@description = (trk_element.at('desc').inner_text rescue '')
|
44
46
|
trk_element.search("trkseg").each do |seg_element|
|
45
47
|
seg = Segment.new(:element => seg_element, :track => self, :gpx_file => @gpx_file)
|
46
48
|
update_meta_data(seg)
|
@@ -105,9 +107,12 @@ module GPX
|
|
105
107
|
def to_s
|
106
108
|
result = "Track \n"
|
107
109
|
result << "\tName: #{name}\n"
|
110
|
+
result << "\tComment: #{comment}\n"
|
111
|
+
result << "\tDescription: #{description}\n"
|
108
112
|
result << "\tSize: #{points.size} points\n"
|
109
113
|
result << "\tSegments: #{segments.size} \n"
|
110
114
|
result << "\tDistance: #{distance} km\n"
|
115
|
+
result << "\tMoving duration: #{moving_duration} km\n"
|
111
116
|
result << "\tLowest Point: #{lowest_point.elevation} \n"
|
112
117
|
result << "\tHighest Point: #{highest_point.elevation}\n "
|
113
118
|
result << "\tBounds: #{bounds.to_s}"
|
@@ -128,6 +133,7 @@ module GPX
|
|
128
133
|
@highest_point = seg.highest_point if(@highest_point.nil? or seg.highest_point.elevation > @highest_point.elevation)
|
129
134
|
@bounds.add(seg.bounds)
|
130
135
|
@distance += seg.distance
|
136
|
+
@moving_duration += seg.duration
|
131
137
|
@points.concat(seg.points)
|
132
138
|
end
|
133
139
|
|
@@ -136,6 +142,7 @@ module GPX
|
|
136
142
|
@highest_point = nil
|
137
143
|
@lowest_point = nil
|
138
144
|
@distance = 0.0
|
145
|
+
@moving_duration = 0.0
|
139
146
|
@points = []
|
140
147
|
end
|
141
148
|
|
data/lib/gpx/version.rb
CHANGED
data/tests/gpx_file_test.rb
CHANGED
@@ -19,6 +19,11 @@ class GPXFileTest < Minitest::Test
|
|
19
19
|
assert_equal(38.791759, gpx_file.bounds.max_lat)
|
20
20
|
assert_equal(-109.447045, gpx_file.bounds.max_lon)
|
21
21
|
assert_equal('description of my GPX file with special char like &, <, >', gpx_file.description)
|
22
|
+
assert_equal('description of my GPX file with special char like &, <, >', gpx_file.description)
|
23
|
+
assert_equal(3.0724966849262554, gpx_file.distance)
|
24
|
+
assert_equal(15237.0, gpx_file.duration)
|
25
|
+
assert_equal(3036.0, gpx_file.moving_duration)
|
26
|
+
assert_equal(3.6432767014935834, gpx_file.average_speed)
|
22
27
|
end
|
23
28
|
|
24
29
|
def test_load_data_from_file
|
@@ -33,17 +38,27 @@ class GPXFileTest < Minitest::Test
|
|
33
38
|
assert_equal(38.791759, gpx_file.bounds.max_lat)
|
34
39
|
assert_equal(-109.447045, gpx_file.bounds.max_lon)
|
35
40
|
assert_equal('description of my GPX file with special char like &, <, >', gpx_file.description)
|
41
|
+
assert_equal(3.0724966849262554, gpx_file.distance)
|
42
|
+
assert_equal(15237.0, gpx_file.duration)
|
43
|
+
assert_equal(3036.0, gpx_file.moving_duration)
|
44
|
+
assert_equal(3.6432767014935834, gpx_file.average_speed)
|
36
45
|
end
|
37
46
|
|
38
47
|
def test_big_file
|
39
48
|
gpx_file = GPX::GPXFile.new(:gpx_file => BIG_FILE)
|
40
49
|
assert_equal(1, gpx_file.tracks.size)
|
41
50
|
assert_equal(7968, gpx_file.tracks.first.points.size)
|
51
|
+
assert_equal(105508.0, gpx_file.duration)
|
52
|
+
assert_equal(57645.0, gpx_file.moving_duration)
|
53
|
+
assert_in_delta(99.60738958686505, gpx_file.average_speed, 1e-13)
|
42
54
|
end
|
43
55
|
|
44
56
|
def test_with_or_with_elev
|
45
57
|
gpx_file = GPX::GPXFile.new(:gpx_file => WITH_OR_WITHOUT_ELEV_FILE)
|
46
58
|
assert_equal(2, gpx_file.tracks.size)
|
59
|
+
assert_equal(0, gpx_file.duration)
|
60
|
+
assert_equal(0, gpx_file.moving_duration)
|
61
|
+
assert(gpx_file.average_speed.nan?)
|
47
62
|
#assert_equal(7968, gpx_file.tracks.first.points.size)
|
48
63
|
end
|
49
64
|
|
@@ -0,0 +1,580 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<gpx xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/1" version="1.1" creator="Link2GPS - 2.0.2 - http://www.hiketech.com" xsi:schemaLocation="ttp://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
|
3
|
+
<metadata>
|
4
|
+
<name><![CDATA[rabbit_valley.gpx]]></name>
|
5
|
+
<bounds min_lat="39.173834" min_lon="-109.016604" max_lat="39.188747" max_lon="-108.999546"/>
|
6
|
+
</metadata>
|
7
|
+
<extensions/>
|
8
|
+
<trk>
|
9
|
+
<name><![CDATA[RABBIT U]]></name>
|
10
|
+
<trkseg>
|
11
|
+
<trkpt lat="39.185185" lon="-109.016433">
|
12
|
+
<ele>1334.447</ele>
|
13
|
+
</trkpt>
|
14
|
+
<trkpt lat="39.185143" lon="-109.016433">
|
15
|
+
<ele>1338.292</ele>
|
16
|
+
</trkpt>
|
17
|
+
<trkpt lat="39.185143" lon="-109.016433">
|
18
|
+
<ele>1344.061</ele>
|
19
|
+
</trkpt>
|
20
|
+
<trkpt lat="39.185143" lon="-109.016433">
|
21
|
+
<ele>1364.729</ele>
|
22
|
+
</trkpt>
|
23
|
+
<trkpt lat="39.185121" lon="-109.016433">
|
24
|
+
<ele>1371.938</ele>
|
25
|
+
</trkpt>
|
26
|
+
<trkpt lat="39.185121" lon="-109.016433">
|
27
|
+
<ele>1375.303</ele>
|
28
|
+
</trkpt>
|
29
|
+
<trkpt lat="39.185121" lon="-109.016433">
|
30
|
+
<ele>1389.723</ele>
|
31
|
+
</trkpt>
|
32
|
+
<trkpt lat="39.185121" lon="-109.016433">
|
33
|
+
<ele>1396.452</ele>
|
34
|
+
</trkpt>
|
35
|
+
<trkpt lat="39.185143" lon="-109.016433">
|
36
|
+
<ele>1400.778</ele>
|
37
|
+
</trkpt>
|
38
|
+
<trkpt lat="39.185143" lon="-109.016433">
|
39
|
+
<ele>1404.143</ele>
|
40
|
+
</trkpt>
|
41
|
+
<trkpt lat="39.185143" lon="-109.016433">
|
42
|
+
<ele>1410.391</ele>
|
43
|
+
</trkpt>
|
44
|
+
<trkpt lat="39.185143" lon="-109.016433">
|
45
|
+
<ele>1413.756</ele>
|
46
|
+
</trkpt>
|
47
|
+
<trkpt lat="39.185164" lon="-109.016454">
|
48
|
+
<ele>1414.237</ele>
|
49
|
+
</trkpt>
|
50
|
+
<trkpt lat="39.185271" lon="-109.016476">
|
51
|
+
<ele>1415.679</ele>
|
52
|
+
</trkpt>
|
53
|
+
<trkpt lat="39.185207" lon="-109.016497">
|
54
|
+
<ele>1415.679</ele>
|
55
|
+
</trkpt>
|
56
|
+
<trkpt lat="39.185228" lon="-109.016476">
|
57
|
+
<ele>1415.679</ele>
|
58
|
+
</trkpt>
|
59
|
+
<trkpt lat="39.185271" lon="-109.016519">
|
60
|
+
<ele>1415.198</ele>
|
61
|
+
</trkpt>
|
62
|
+
<trkpt lat="39.185228" lon="-109.016562">
|
63
|
+
<ele>1414.717</ele>
|
64
|
+
</trkpt>
|
65
|
+
<trkpt lat="39.185207" lon="-109.016476">
|
66
|
+
<ele>1415.679</ele>
|
67
|
+
</trkpt>
|
68
|
+
<trkpt lat="39.185185" lon="-109.016562">
|
69
|
+
<ele>1415.679</ele>
|
70
|
+
</trkpt>
|
71
|
+
<trkpt lat="39.185164" lon="-109.016562">
|
72
|
+
<ele>1415.679</ele>
|
73
|
+
</trkpt>
|
74
|
+
<trkpt lat="39.184735" lon="-109.016411">
|
75
|
+
<ele>1415.198</ele>
|
76
|
+
</trkpt>
|
77
|
+
<trkpt lat="39.184864" lon="-109.016368">
|
78
|
+
<ele>1415.679</ele>
|
79
|
+
</trkpt>
|
80
|
+
<trkpt lat="39.184928" lon="-109.016283">
|
81
|
+
<ele>1415.198</ele>
|
82
|
+
</trkpt>
|
83
|
+
<trkpt lat="39.185121" lon="-109.015746">
|
84
|
+
<ele>1416.159</ele>
|
85
|
+
</trkpt>
|
86
|
+
<trkpt lat="39.185357" lon="-109.015231">
|
87
|
+
<ele>1417.601</ele>
|
88
|
+
</trkpt>
|
89
|
+
<trkpt lat="39.185572" lon="-109.014802">
|
90
|
+
<ele>1417.601</ele>
|
91
|
+
</trkpt>
|
92
|
+
<trkpt lat="39.185593" lon="-109.014802">
|
93
|
+
<ele>1417.601</ele>
|
94
|
+
</trkpt>
|
95
|
+
<trkpt lat="39.185143" lon="-109.015725">
|
96
|
+
<ele>1417.601</ele>
|
97
|
+
</trkpt>
|
98
|
+
<trkpt lat="39.184928" lon="-109.016497">
|
99
|
+
<ele>1415.679</ele>
|
100
|
+
</trkpt>
|
101
|
+
<trkpt lat="39.185164" lon="-109.016540">
|
102
|
+
<ele>1416.159</ele>
|
103
|
+
</trkpt>
|
104
|
+
<trkpt lat="39.185164" lon="-109.016540">
|
105
|
+
<ele>1415.679</ele>
|
106
|
+
</trkpt>
|
107
|
+
<trkpt lat="39.185185" lon="-109.016540">
|
108
|
+
<ele>1413.756</ele>
|
109
|
+
</trkpt>
|
110
|
+
<trkpt lat="39.185164" lon="-109.016540">
|
111
|
+
<ele>1414.237</ele>
|
112
|
+
</trkpt>
|
113
|
+
<trkpt lat="39.185185" lon="-109.016497">
|
114
|
+
<ele>1414.237</ele>
|
115
|
+
</trkpt>
|
116
|
+
<trkpt lat="39.184992" lon="-109.016497">
|
117
|
+
<ele>1414.717</ele>
|
118
|
+
</trkpt>
|
119
|
+
<trkpt lat="39.184949" lon="-109.016283">
|
120
|
+
<ele>1415.198</ele>
|
121
|
+
</trkpt>
|
122
|
+
<trkpt lat="39.184992" lon="-109.016197">
|
123
|
+
<ele>1414.237</ele>
|
124
|
+
</trkpt>
|
125
|
+
<trkpt lat="39.185207" lon="-109.015596">
|
126
|
+
<ele>1418.082</ele>
|
127
|
+
</trkpt>
|
128
|
+
<trkpt lat="39.185593" lon="-109.014781">
|
129
|
+
<ele>1418.562</ele>
|
130
|
+
</trkpt>
|
131
|
+
<trkpt lat="39.185636" lon="-109.014652">
|
132
|
+
<ele>1417.121</ele>
|
133
|
+
</trkpt>
|
134
|
+
<trkpt lat="39.185593" lon="-109.014587">
|
135
|
+
<ele>1416.64</ele>
|
136
|
+
</trkpt>
|
137
|
+
<trkpt lat="39.185379" lon="-109.014523">
|
138
|
+
<ele>1419.043</ele>
|
139
|
+
</trkpt>
|
140
|
+
<trkpt lat="39.185078" lon="-109.014480">
|
141
|
+
<ele>1419.043</ele>
|
142
|
+
</trkpt>
|
143
|
+
<trkpt lat="39.184628" lon="-109.014266">
|
144
|
+
<ele>1416.159</ele>
|
145
|
+
</trkpt>
|
146
|
+
<trkpt lat="39.184155" lon="-109.013836">
|
147
|
+
<ele>1415.198</ele>
|
148
|
+
</trkpt>
|
149
|
+
<trkpt lat="39.183791" lon="-109.013665">
|
150
|
+
<ele>1414.717</ele>
|
151
|
+
</trkpt>
|
152
|
+
<trkpt lat="39.183018" lon="-109.013150">
|
153
|
+
<ele>1411.353</ele>
|
154
|
+
</trkpt>
|
155
|
+
<trkpt lat="39.182611" lon="-109.012806">
|
156
|
+
<ele>1409.911</ele>
|
157
|
+
</trkpt>
|
158
|
+
<trkpt lat="39.182053" lon="-109.012463">
|
159
|
+
<ele>1409.43</ele>
|
160
|
+
</trkpt>
|
161
|
+
<trkpt lat="39.181623" lon="-109.012463">
|
162
|
+
<ele>1408.469</ele>
|
163
|
+
</trkpt>
|
164
|
+
<trkpt lat="39.181173" lon="-109.012377">
|
165
|
+
<ele>1407.027</ele>
|
166
|
+
</trkpt>
|
167
|
+
<trkpt lat="39.180572" lon="-109.012098">
|
168
|
+
<ele>1403.662</ele>
|
169
|
+
</trkpt>
|
170
|
+
<trkpt lat="39.180572" lon="-109.012098">
|
171
|
+
<ele>1402.701</ele>
|
172
|
+
</trkpt>
|
173
|
+
<trkpt lat="39.180980" lon="-109.012270">
|
174
|
+
<ele>1406.065</ele>
|
175
|
+
</trkpt>
|
176
|
+
<trkpt lat="39.181516" lon="-109.012442">
|
177
|
+
<ele>1407.508</ele>
|
178
|
+
</trkpt>
|
179
|
+
<trkpt lat="39.181795" lon="-109.012420">
|
180
|
+
<ele>1408.469</ele>
|
181
|
+
</trkpt>
|
182
|
+
<trkpt lat="39.182010" lon="-109.012098">
|
183
|
+
<ele>1408.469</ele>
|
184
|
+
</trkpt>
|
185
|
+
<trkpt lat="39.182417" lon="-109.011734">
|
186
|
+
<ele>1409.43</ele>
|
187
|
+
</trkpt>
|
188
|
+
<trkpt lat="39.182675" lon="-109.011455">
|
189
|
+
<ele>1409.43</ele>
|
190
|
+
</trkpt>
|
191
|
+
<trkpt lat="39.183040" lon="-109.011133">
|
192
|
+
<ele>1411.353</ele>
|
193
|
+
</trkpt>
|
194
|
+
<trkpt lat="39.183340" lon="-109.010768">
|
195
|
+
<ele>1411.833</ele>
|
196
|
+
</trkpt>
|
197
|
+
<trkpt lat="39.183555" lon="-109.010468">
|
198
|
+
<ele>1412.314</ele>
|
199
|
+
</trkpt>
|
200
|
+
<trkpt lat="39.183576" lon="-109.010403">
|
201
|
+
<ele>1411.833</ele>
|
202
|
+
</trkpt>
|
203
|
+
<trkpt lat="39.183490" lon="-109.010253">
|
204
|
+
<ele>1412.314</ele>
|
205
|
+
</trkpt>
|
206
|
+
<trkpt lat="39.183040" lon="-109.010017">
|
207
|
+
<ele>1409.911</ele>
|
208
|
+
</trkpt>
|
209
|
+
<trkpt lat="39.182954" lon="-109.009759">
|
210
|
+
<ele>1410.391</ele>
|
211
|
+
</trkpt>
|
212
|
+
<trkpt lat="39.183104" lon="-109.009287">
|
213
|
+
<ele>1409.911</ele>
|
214
|
+
</trkpt>
|
215
|
+
<trkpt lat="39.183168" lon="-109.008901">
|
216
|
+
<ele>1408.469</ele>
|
217
|
+
</trkpt>
|
218
|
+
<trkpt lat="39.183104" lon="-109.008794">
|
219
|
+
<ele>1407.027</ele>
|
220
|
+
</trkpt>
|
221
|
+
<trkpt lat="39.182847" lon="-109.008622">
|
222
|
+
<ele>1408.469</ele>
|
223
|
+
</trkpt>
|
224
|
+
<trkpt lat="39.182568" lon="-109.008386">
|
225
|
+
<ele>1411.353</ele>
|
226
|
+
</trkpt>
|
227
|
+
<trkpt lat="39.182396" lon="-109.008107">
|
228
|
+
<ele>1411.353</ele>
|
229
|
+
</trkpt>
|
230
|
+
<trkpt lat="39.182181" lon="-109.007485">
|
231
|
+
<ele>1414.237</ele>
|
232
|
+
</trkpt>
|
233
|
+
<trkpt lat="39.181924" lon="-109.006777">
|
234
|
+
<ele>1416.159</ele>
|
235
|
+
</trkpt>
|
236
|
+
<trkpt lat="39.181602" lon="-109.005575">
|
237
|
+
<ele>1416.64</ele>
|
238
|
+
</trkpt>
|
239
|
+
<trkpt lat="39.181881" lon="-109.003923">
|
240
|
+
<ele>1419.524</ele>
|
241
|
+
</trkpt>
|
242
|
+
<trkpt lat="39.181924" lon="-109.003301">
|
243
|
+
<ele>1420.485</ele>
|
244
|
+
</trkpt>
|
245
|
+
<trkpt lat="39.181709" lon="-109.002807">
|
246
|
+
<ele>1421.447</ele>
|
247
|
+
</trkpt>
|
248
|
+
<trkpt lat="39.181387" lon="-109.002571">
|
249
|
+
<ele>1424.331</ele>
|
250
|
+
</trkpt>
|
251
|
+
<trkpt lat="39.180851" lon="-109.002357">
|
252
|
+
<ele>1425.772</ele>
|
253
|
+
</trkpt>
|
254
|
+
<trkpt lat="39.180465" lon="-109.002035">
|
255
|
+
<ele>1427.695</ele>
|
256
|
+
</trkpt>
|
257
|
+
<trkpt lat="39.180379" lon="-109.001606">
|
258
|
+
<ele>1428.656</ele>
|
259
|
+
</trkpt>
|
260
|
+
<trkpt lat="39.180207" lon="-109.001198">
|
261
|
+
<ele>1430.579</ele>
|
262
|
+
</trkpt>
|
263
|
+
<trkpt lat="39.180057" lon="-109.001133">
|
264
|
+
<ele>1429.137</ele>
|
265
|
+
</trkpt>
|
266
|
+
<trkpt lat="39.180100" lon="-109.001112">
|
267
|
+
<ele>1429.618</ele>
|
268
|
+
</trkpt>
|
269
|
+
<trkpt lat="39.180100" lon="-109.001133">
|
270
|
+
<ele>1428.176</ele>
|
271
|
+
</trkpt>
|
272
|
+
<trkpt lat="39.178984" lon="-109.001412">
|
273
|
+
<ele>1433.463</ele>
|
274
|
+
</trkpt>
|
275
|
+
<trkpt lat="39.178491" lon="-109.001348">
|
276
|
+
<ele>1433.944</ele>
|
277
|
+
</trkpt>
|
278
|
+
<trkpt lat="39.177632" lon="-109.001391">
|
279
|
+
<ele>1438.27</ele>
|
280
|
+
</trkpt>
|
281
|
+
<trkpt lat="39.177010" lon="-109.001498">
|
282
|
+
<ele>1445.479</ele>
|
283
|
+
</trkpt>
|
284
|
+
<trkpt lat="39.176774" lon="-109.001584">
|
285
|
+
<ele>1451.728</ele>
|
286
|
+
</trkpt>
|
287
|
+
<trkpt lat="39.176452" lon="-109.001520">
|
288
|
+
<ele>1454.132</ele>
|
289
|
+
</trkpt>
|
290
|
+
<trkpt lat="39.176345" lon="-109.001584">
|
291
|
+
<ele>1455.573</ele>
|
292
|
+
</trkpt>
|
293
|
+
<trkpt lat="39.176259" lon="-109.001820">
|
294
|
+
<ele>1457.015</ele>
|
295
|
+
</trkpt>
|
296
|
+
<trkpt lat="39.176152" lon="-109.001949">
|
297
|
+
<ele>1458.457</ele>
|
298
|
+
</trkpt>
|
299
|
+
<trkpt lat="39.175916" lon="-109.002013">
|
300
|
+
<ele>1461.341</ele>
|
301
|
+
</trkpt>
|
302
|
+
<trkpt lat="39.175766" lon="-109.001927">
|
303
|
+
<ele>1463.264</ele>
|
304
|
+
</trkpt>
|
305
|
+
<trkpt lat="39.175594" lon="-109.001863">
|
306
|
+
<ele>1467.109</ele>
|
307
|
+
</trkpt>
|
308
|
+
<trkpt lat="39.175422" lon="-109.001756">
|
309
|
+
<ele>1469.032</ele>
|
310
|
+
</trkpt>
|
311
|
+
<trkpt lat="39.175444" lon="-109.001756">
|
312
|
+
<ele>1469.032</ele>
|
313
|
+
</trkpt>
|
314
|
+
<trkpt lat="39.175379" lon="-109.001713">
|
315
|
+
<ele>1469.993</ele>
|
316
|
+
</trkpt>
|
317
|
+
<trkpt lat="39.175122" lon="-109.001455">
|
318
|
+
<ele>1471.916</ele>
|
319
|
+
</trkpt>
|
320
|
+
<trkpt lat="39.174886" lon="-109.001005">
|
321
|
+
<ele>1469.993</ele>
|
322
|
+
</trkpt>
|
323
|
+
<trkpt lat="39.174864" lon="-109.000769">
|
324
|
+
<ele>1468.551</ele>
|
325
|
+
</trkpt>
|
326
|
+
<trkpt lat="39.174650" lon="-109.000533">
|
327
|
+
<ele>1469.032</ele>
|
328
|
+
</trkpt>
|
329
|
+
<trkpt lat="39.174092" lon="-108.999996">
|
330
|
+
<ele>1474.319</ele>
|
331
|
+
</trkpt>
|
332
|
+
<trkpt lat="39.173985" lon="-108.999803">
|
333
|
+
<ele>1476.242</ele>
|
334
|
+
</trkpt>
|
335
|
+
<trkpt lat="39.173834" lon="-108.999546">
|
336
|
+
<ele>1480.087</ele>
|
337
|
+
</trkpt>
|
338
|
+
<trkpt lat="39.173834" lon="-108.999588">
|
339
|
+
<ele>1478.645</ele>
|
340
|
+
</trkpt>
|
341
|
+
<trkpt lat="39.173963" lon="-108.999760">
|
342
|
+
<ele>1478.164</ele>
|
343
|
+
</trkpt>
|
344
|
+
<trkpt lat="39.174092" lon="-108.999975">
|
345
|
+
<ele>1474.319</ele>
|
346
|
+
</trkpt>
|
347
|
+
<trkpt lat="39.174156" lon="-109.000061">
|
348
|
+
<ele>1472.396</ele>
|
349
|
+
</trkpt>
|
350
|
+
<trkpt lat="39.174178" lon="-109.000061">
|
351
|
+
<ele>1471.435</ele>
|
352
|
+
</trkpt>
|
353
|
+
<trkpt lat="39.174178" lon="-109.000103">
|
354
|
+
<ele>1471.916</ele>
|
355
|
+
</trkpt>
|
356
|
+
<trkpt lat="39.174178" lon="-109.000082">
|
357
|
+
<ele>1473.358</ele>
|
358
|
+
</trkpt>
|
359
|
+
<trkpt lat="39.174414" lon="-109.000275">
|
360
|
+
<ele>1470.955</ele>
|
361
|
+
</trkpt>
|
362
|
+
<trkpt lat="39.174500" lon="-109.000382">
|
363
|
+
<ele>1469.993</ele>
|
364
|
+
</trkpt>
|
365
|
+
<trkpt lat="39.174736" lon="-109.000576">
|
366
|
+
<ele>1468.071</ele>
|
367
|
+
</trkpt>
|
368
|
+
<trkpt lat="39.174864" lon="-109.000790">
|
369
|
+
<ele>1468.551</ele>
|
370
|
+
</trkpt>
|
371
|
+
<trkpt lat="39.174993" lon="-109.001155">
|
372
|
+
<ele>1471.435</ele>
|
373
|
+
</trkpt>
|
374
|
+
<trkpt lat="39.174950" lon="-109.001155">
|
375
|
+
<ele>1471.435</ele>
|
376
|
+
</trkpt>
|
377
|
+
<trkpt lat="39.174972" lon="-109.001155">
|
378
|
+
<ele>1468.071</ele>
|
379
|
+
</trkpt>
|
380
|
+
<trkpt lat="39.174972" lon="-109.001155">
|
381
|
+
<ele>1472.877</ele>
|
382
|
+
</trkpt>
|
383
|
+
<trkpt lat="39.174993" lon="-109.001176">
|
384
|
+
<ele>1469.513</ele>
|
385
|
+
</trkpt>
|
386
|
+
<trkpt lat="39.174993" lon="-109.001133">
|
387
|
+
<ele>1470.474</ele>
|
388
|
+
</trkpt>
|
389
|
+
<trkpt lat="39.174972" lon="-109.001176">
|
390
|
+
<ele>1471.435</ele>
|
391
|
+
</trkpt>
|
392
|
+
<trkpt lat="39.175208" lon="-109.001541">
|
393
|
+
<ele>1471.435</ele>
|
394
|
+
</trkpt>
|
395
|
+
<trkpt lat="39.175508" lon="-109.001799">
|
396
|
+
<ele>1468.551</ele>
|
397
|
+
</trkpt>
|
398
|
+
<trkpt lat="39.175680" lon="-109.001863">
|
399
|
+
<ele>1465.667</ele>
|
400
|
+
</trkpt>
|
401
|
+
<trkpt lat="39.175766" lon="-109.001949">
|
402
|
+
<ele>1462.302</ele>
|
403
|
+
</trkpt>
|
404
|
+
<trkpt lat="39.175894" lon="-109.002013">
|
405
|
+
<ele>1461.341</ele>
|
406
|
+
</trkpt>
|
407
|
+
<trkpt lat="39.176023" lon="-109.002035">
|
408
|
+
<ele>1459.899</ele>
|
409
|
+
</trkpt>
|
410
|
+
<trkpt lat="39.176280" lon="-109.001799">
|
411
|
+
<ele>1457.977</ele>
|
412
|
+
</trkpt>
|
413
|
+
<trkpt lat="39.176366" lon="-109.001606">
|
414
|
+
<ele>1456.054</ele>
|
415
|
+
</trkpt>
|
416
|
+
<trkpt lat="39.176431" lon="-109.001541">
|
417
|
+
<ele>1455.093</ele>
|
418
|
+
</trkpt>
|
419
|
+
<trkpt lat="39.176495" lon="-109.001520">
|
420
|
+
<ele>1453.651</ele>
|
421
|
+
</trkpt>
|
422
|
+
<trkpt lat="39.176838" lon="-109.001541">
|
423
|
+
<ele>1449.805</ele>
|
424
|
+
</trkpt>
|
425
|
+
<trkpt lat="39.176967" lon="-109.001498">
|
426
|
+
<ele>1446.921</ele>
|
427
|
+
</trkpt>
|
428
|
+
<trkpt lat="39.177954" lon="-109.001391">
|
429
|
+
<ele>1437.308</ele>
|
430
|
+
</trkpt>
|
431
|
+
<trkpt lat="39.178534" lon="-109.001369">
|
432
|
+
<ele>1435.385</ele>
|
433
|
+
</trkpt>
|
434
|
+
<trkpt lat="39.178941" lon="-109.001434">
|
435
|
+
<ele>1434.424</ele>
|
436
|
+
</trkpt>
|
437
|
+
<trkpt lat="39.180057" lon="-109.001176">
|
438
|
+
<ele>1432.021</ele>
|
439
|
+
</trkpt>
|
440
|
+
<trkpt lat="39.180207" lon="-109.001176">
|
441
|
+
<ele>1430.579</ele>
|
442
|
+
</trkpt>
|
443
|
+
<trkpt lat="39.180357" lon="-109.001412">
|
444
|
+
<ele>1429.618</ele>
|
445
|
+
</trkpt>
|
446
|
+
<trkpt lat="39.180443" lon="-109.001970">
|
447
|
+
<ele>1427.215</ele>
|
448
|
+
</trkpt>
|
449
|
+
<trkpt lat="39.180808" lon="-109.002335">
|
450
|
+
<ele>1425.772</ele>
|
451
|
+
</trkpt>
|
452
|
+
<trkpt lat="39.181001" lon="-109.002421">
|
453
|
+
<ele>1425.772</ele>
|
454
|
+
</trkpt>
|
455
|
+
<trkpt lat="39.181516" lon="-109.002678">
|
456
|
+
<ele>1423.369</ele>
|
457
|
+
</trkpt>
|
458
|
+
<trkpt lat="39.181881" lon="-109.003043">
|
459
|
+
<ele>1422.889</ele>
|
460
|
+
</trkpt>
|
461
|
+
<trkpt lat="39.181945" lon="-109.003515">
|
462
|
+
<ele>1420.966</ele>
|
463
|
+
</trkpt>
|
464
|
+
<trkpt lat="39.181902" lon="-109.004202">
|
465
|
+
<ele>1420.005</ele>
|
466
|
+
</trkpt>
|
467
|
+
<trkpt lat="39.181688" lon="-109.005189">
|
468
|
+
<ele>1416.64</ele>
|
469
|
+
</trkpt>
|
470
|
+
<trkpt lat="39.181623" lon="-109.005618">
|
471
|
+
<ele>1417.121</ele>
|
472
|
+
</trkpt>
|
473
|
+
<trkpt lat="39.181881" lon="-109.006648">
|
474
|
+
<ele>1416.64</ele>
|
475
|
+
</trkpt>
|
476
|
+
<trkpt lat="39.182224" lon="-109.007592">
|
477
|
+
<ele>1413.275</ele>
|
478
|
+
</trkpt>
|
479
|
+
<trkpt lat="39.182482" lon="-109.008279">
|
480
|
+
<ele>1413.275</ele>
|
481
|
+
</trkpt>
|
482
|
+
<trkpt lat="39.182739" lon="-109.008536">
|
483
|
+
<ele>1409.43</ele>
|
484
|
+
</trkpt>
|
485
|
+
<trkpt lat="39.183125" lon="-109.008794">
|
486
|
+
<ele>1408.469</ele>
|
487
|
+
</trkpt>
|
488
|
+
<trkpt lat="39.183190" lon="-109.009137">
|
489
|
+
<ele>1409.43</ele>
|
490
|
+
</trkpt>
|
491
|
+
<trkpt lat="39.182954" lon="-109.009953">
|
492
|
+
<ele>1409.43</ele>
|
493
|
+
</trkpt>
|
494
|
+
<trkpt lat="39.183147" lon="-109.010081">
|
495
|
+
<ele>1409.43</ele>
|
496
|
+
</trkpt>
|
497
|
+
<trkpt lat="39.183533" lon="-109.010210">
|
498
|
+
<ele>1412.314</ele>
|
499
|
+
</trkpt>
|
500
|
+
<trkpt lat="39.183555" lon="-109.009995">
|
501
|
+
<ele>1412.314</ele>
|
502
|
+
</trkpt>
|
503
|
+
<trkpt lat="39.183662" lon="-109.009867">
|
504
|
+
<ele>1411.353</ele>
|
505
|
+
</trkpt>
|
506
|
+
<trkpt lat="39.183683" lon="-109.009888">
|
507
|
+
<ele>1411.833</ele>
|
508
|
+
</trkpt>
|
509
|
+
<trkpt lat="39.183640" lon="-109.010146">
|
510
|
+
<ele>1412.795</ele>
|
511
|
+
</trkpt>
|
512
|
+
<trkpt lat="39.183726" lon="-109.010231">
|
513
|
+
<ele>1413.756</ele>
|
514
|
+
</trkpt>
|
515
|
+
<trkpt lat="39.183941" lon="-109.010210">
|
516
|
+
<ele>1414.717</ele>
|
517
|
+
</trkpt>
|
518
|
+
<trkpt lat="39.184821" lon="-109.009330">
|
519
|
+
<ele>1418.562</ele>
|
520
|
+
</trkpt>
|
521
|
+
<trkpt lat="39.185207" lon="-109.009094">
|
522
|
+
<ele>1420.005</ele>
|
523
|
+
</trkpt>
|
524
|
+
<trkpt lat="39.185593" lon="-109.009008">
|
525
|
+
<ele>1420.966</ele>
|
526
|
+
</trkpt>
|
527
|
+
<trkpt lat="39.185979" lon="-109.008815">
|
528
|
+
<ele>1420.005</ele>
|
529
|
+
</trkpt>
|
530
|
+
<trkpt lat="39.187181" lon="-109.008451">
|
531
|
+
<ele>1420.005</ele>
|
532
|
+
</trkpt>
|
533
|
+
<trkpt lat="39.187181" lon="-109.008536">
|
534
|
+
<ele>1421.447</ele>
|
535
|
+
</trkpt>
|
536
|
+
<trkpt lat="39.187353" lon="-109.008343">
|
537
|
+
<ele>1420.966</ele>
|
538
|
+
</trkpt>
|
539
|
+
<trkpt lat="39.187868" lon="-109.008129">
|
540
|
+
<ele>1421.447</ele>
|
541
|
+
</trkpt>
|
542
|
+
<trkpt lat="39.188468" lon="-109.007978">
|
543
|
+
<ele>1424.811</ele>
|
544
|
+
</trkpt>
|
545
|
+
<trkpt lat="39.188747" lon="-109.008000">
|
546
|
+
<ele>1426.253</ele>
|
547
|
+
</trkpt>
|
548
|
+
<trkpt lat="39.188683" lon="-109.008687">
|
549
|
+
<ele>1428.176</ele>
|
550
|
+
</trkpt>
|
551
|
+
<trkpt lat="39.188533" lon="-109.009759">
|
552
|
+
<ele>1424.811</ele>
|
553
|
+
</trkpt>
|
554
|
+
<trkpt lat="39.188018" lon="-109.010983">
|
555
|
+
<ele>1423.85</ele>
|
556
|
+
</trkpt>
|
557
|
+
<trkpt lat="39.187031" lon="-109.012635">
|
558
|
+
<ele>1420.485</ele>
|
559
|
+
</trkpt>
|
560
|
+
<trkpt lat="39.186172" lon="-109.013815">
|
561
|
+
<ele>1418.562</ele>
|
562
|
+
</trkpt>
|
563
|
+
<trkpt lat="39.185464" lon="-109.014995">
|
564
|
+
<ele>1416.64</ele>
|
565
|
+
</trkpt>
|
566
|
+
<trkpt lat="39.185014" lon="-109.016004">
|
567
|
+
<ele>1414.717</ele>
|
568
|
+
</trkpt>
|
569
|
+
<trkpt lat="39.184971" lon="-109.016604">
|
570
|
+
<ele>1414.717</ele>
|
571
|
+
</trkpt>
|
572
|
+
<trkpt lat="39.185057" lon="-109.016583">
|
573
|
+
<ele>1415.198</ele>
|
574
|
+
</trkpt>
|
575
|
+
<trkpt lat="39.185228" lon="-109.016540">
|
576
|
+
<ele>1413.756</ele>
|
577
|
+
</trkpt>
|
578
|
+
</trkseg>
|
579
|
+
</trk>
|
580
|
+
</gpx>
|
data/tests/segment_test.rb
CHANGED
@@ -5,6 +5,7 @@ require 'gpx'
|
|
5
5
|
|
6
6
|
class SegmentTest < Minitest::Test
|
7
7
|
ONE_SEGMENT = File.join(File.dirname(__FILE__), "gpx_files/one_segment.gpx")
|
8
|
+
ONE_SEGMENT_NO_TIME = File.join(File.dirname(__FILE__), "gpx_files/one_segment_no_time.gpx")
|
8
9
|
|
9
10
|
def setup
|
10
11
|
@gpx_file = GPX::GPXFile.new(:gpx_file => ONE_SEGMENT)
|
@@ -18,6 +19,19 @@ class SegmentTest < Minitest::Test
|
|
18
19
|
assert_equal(1334.447, @segment.lowest_point.elevation)
|
19
20
|
assert_equal(1480.087, @segment.highest_point.elevation)
|
20
21
|
assert_in_delta(6.98803359528853, @segment.distance, 0.001)
|
22
|
+
assert_equal(4466.0, @segment.duration)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_segment_read_no_time
|
26
|
+
gpx_file_no_time = GPX::GPXFile.new(:gpx_file => ONE_SEGMENT_NO_TIME)
|
27
|
+
segment_no_time = gpx_file_no_time.tracks.first.segments.first
|
28
|
+
assert_equal(189, segment_no_time.points.size)
|
29
|
+
assert_equal(1334.447, segment_no_time.earliest_point.elevation)
|
30
|
+
assert_equal(1413.756, segment_no_time.latest_point.elevation)
|
31
|
+
assert_equal(1334.447, segment_no_time.lowest_point.elevation)
|
32
|
+
assert_equal(1480.087, segment_no_time.highest_point.elevation)
|
33
|
+
assert_in_delta(6.98803359528853, segment_no_time.distance, 0.001)
|
34
|
+
assert_equal(0, segment_no_time.duration)
|
21
35
|
end
|
22
36
|
|
23
37
|
def test_segment_crop
|
@@ -37,6 +51,7 @@ class SegmentTest < Minitest::Test
|
|
37
51
|
assert_equal(-109.009995, @segment.bounds.min_lon)
|
38
52
|
assert_equal(39.187868, @segment.bounds.max_lat)
|
39
53
|
assert_equal(-108.999546, @segment.bounds.max_lon)
|
54
|
+
assert_equal(2711.0, @segment.duration)
|
40
55
|
end
|
41
56
|
|
42
57
|
def test_segment_delete
|
@@ -55,6 +70,7 @@ class SegmentTest < Minitest::Test
|
|
55
70
|
assert_equal(-109.016604, @segment.bounds.min_lon)
|
56
71
|
assert_equal(39.188747, @segment.bounds.max_lat)
|
57
72
|
assert_equal(-109.007978, @segment.bounds.max_lon)
|
73
|
+
assert_equal(4466.0, @segment.duration)
|
58
74
|
end
|
59
75
|
|
60
76
|
def test_segment_smooth
|
@@ -65,6 +81,7 @@ class SegmentTest < Minitest::Test
|
|
65
81
|
assert_equal(1342.58, @segment.lowest_point.elevation)
|
66
82
|
assert_equal(1479.09, @segment.highest_point.elevation)
|
67
83
|
assert_in_delta(6.458085658, @segment.distance, 0.001)
|
84
|
+
assert_equal(4466.0, @segment.duration)
|
68
85
|
end
|
69
86
|
|
70
87
|
def test_segment_smooth_offset
|
@@ -75,6 +92,7 @@ class SegmentTest < Minitest::Test
|
|
75
92
|
assert_equal(1334.447, @segment.lowest_point.elevation)
|
76
93
|
assert_equal(1480.087, @segment.highest_point.elevation)
|
77
94
|
assert_in_delta(6.900813095, @segment.distance, 0.001)
|
95
|
+
assert_equal(4466.0, @segment.duration)
|
78
96
|
end
|
79
97
|
|
80
98
|
def test_segment_smooth_absolute
|
@@ -85,6 +103,7 @@ class SegmentTest < Minitest::Test
|
|
85
103
|
assert_equal(1334.447, @segment.lowest_point.elevation)
|
86
104
|
assert_equal(1480.087, @segment.highest_point.elevation)
|
87
105
|
assert_in_delta(6.900813095, @segment.distance, 0.001)
|
106
|
+
assert_equal(4466.0, @segment.duration)
|
88
107
|
end
|
89
108
|
|
90
109
|
end
|
data/tests/track_point_test.rb
CHANGED
@@ -15,7 +15,7 @@ class TrackPointTest < Minitest::Test
|
|
15
15
|
|
16
16
|
def test_haversine_distance_from
|
17
17
|
distance = @point1.haversine_distance_from(@point2)
|
18
|
-
|
18
|
+
assert_in_delta(0.00197862991592239, distance, 1e-18)
|
19
19
|
end
|
20
20
|
|
21
21
|
def test_pythagorean_distance_from
|
data/tests/track_test.rb
CHANGED
@@ -11,6 +11,8 @@ class TrackTest < Minitest::Test
|
|
11
11
|
|
12
12
|
def test_track_read
|
13
13
|
assert_equal("ACTIVE LOG", @track.name)
|
14
|
+
assert_equal("Comment Log", @track.comment)
|
15
|
+
assert_equal("Description Log", @track.description)
|
14
16
|
assert_equal( 182, @track.points.size)
|
15
17
|
assert_equal(8, @track.segments.size)
|
16
18
|
assert_in_delta(3.07249668492626, @track.distance, 0.001)
|
@@ -20,6 +22,7 @@ class TrackTest < Minitest::Test
|
|
20
22
|
assert_equal(-109.606948, @track.bounds.min_lon)
|
21
23
|
assert_equal(38.791759, @track.bounds.max_lat)
|
22
24
|
assert_equal(-109.447045, @track.bounds.max_lon)
|
25
|
+
assert_equal(3036.0, @track.moving_duration)
|
23
26
|
end
|
24
27
|
|
25
28
|
def test_track_crop
|
@@ -30,6 +33,8 @@ class TrackTest < Minitest::Test
|
|
30
33
|
:max_lon => -109.450000)
|
31
34
|
@track.crop(area)
|
32
35
|
assert_equal("ACTIVE LOG", @track.name)
|
36
|
+
assert_equal("Comment Log", @track.comment)
|
37
|
+
assert_equal("Description Log", @track.description)
|
33
38
|
assert_equal( 111, @track.points.size)
|
34
39
|
assert_equal(4, @track.segments.size)
|
35
40
|
assert_in_delta(1.62136024923607, @track.distance, 0.001)
|
@@ -39,6 +44,7 @@ class TrackTest < Minitest::Test
|
|
39
44
|
assert_equal(-109.599781, @track.bounds.min_lon)
|
40
45
|
assert_equal(38.789527, @track.bounds.max_lat)
|
41
46
|
assert_equal(-109.594996, @track.bounds.max_lon)
|
47
|
+
assert_equal(1773.0, @track.moving_duration)
|
42
48
|
end
|
43
49
|
|
44
50
|
def test_track_delete
|
@@ -49,17 +55,18 @@ class TrackTest < Minitest::Test
|
|
49
55
|
:max_lon => -109.450000)
|
50
56
|
@track.delete_area(area)
|
51
57
|
|
58
|
+
assert_equal(1229.0, @track.moving_duration)
|
52
59
|
#puts @track
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
60
|
+
assert_equal("ACTIVE LOG", @track.name)
|
61
|
+
assert_equal(71, @track.points.size)
|
62
|
+
assert_equal(6, @track.segments.size)
|
63
|
+
assert_in_delta(1.197905851972874, @track.distance, 0.00000000001)
|
64
|
+
assert_equal(1267.155, @track.lowest_point.elevation)
|
65
|
+
assert_equal(1594.003, @track.highest_point.elevation)
|
66
|
+
assert_equal(38.681488, @track.bounds.min_lat)
|
67
|
+
assert_equal(-109.606948, @track.bounds.min_lon)
|
68
|
+
assert_equal(38.791759, @track.bounds.max_lat)
|
69
|
+
assert_equal(-109.447045, @track.bounds.max_lon)
|
63
70
|
end
|
64
71
|
|
65
72
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gpx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Guillaume Dott
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2015-08-
|
13
|
+
date: 2015-08-04 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rake
|
@@ -106,6 +106,7 @@ files:
|
|
106
106
|
- tests/gpx_files/gpx10.gpx
|
107
107
|
- tests/gpx_files/magellan_track.log
|
108
108
|
- tests/gpx_files/one_segment.gpx
|
109
|
+
- tests/gpx_files/one_segment_no_time.gpx
|
109
110
|
- tests/gpx_files/one_track.gpx
|
110
111
|
- tests/gpx_files/routes.gpx
|
111
112
|
- tests/gpx_files/tracks.gpx
|