gpx 0.8.1 → 0.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|