gpx_track 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fa9f853406843a0cde03333879fbf1af4572cbe5
4
- data.tar.gz: a2015d8bafd5bb029f6af731657ad5274112c3f7
3
+ metadata.gz: d47aea20143f27cbd7ad88244d1c64a2d05316f7
4
+ data.tar.gz: de1a1003bbe17086ba9d82e5f14147ff48c7a962
5
5
  SHA512:
6
- metadata.gz: 9d772909f9896f1ba4a24ba0df340d59c1816a3cb9bd42a00423f2cc5aa9f9665dc68b8cb9fffa5f79644365f35fbe1a0a0244c2b5f8578c060777f637e2d9a5
7
- data.tar.gz: 0008564066046f99ee8f0e23f98e904cae286b76f0bb9d8088fb4c914eedc52cdad119680b24803e1cb99b2df25e075f21cb47fce82a84db42ae9552142681e4
6
+ metadata.gz: 6a2548e0c4444ac6d17804624647e84b4eef1e1f624894ef85493cbf544fcb6d1a76a6e1c0022e5a06fac3893a3d9865d4429b12505861a7b0ed9cb52c7cc7cd
7
+ data.tar.gz: 0c1454faffd3e4b08edb2dab88d7a623075435059ec26922542286a2ed9afbc85dbcaefa3bae29e7d740f932cee74545725af0a74a5ec95d7c73f8a3268acad5
data/.gitignore CHANGED
@@ -16,6 +16,5 @@ test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
18
 
19
-
20
19
  #OSX
21
20
  .DS_Store
@@ -1 +1 @@
1
- ruby-2.0.0-p247
1
+ 2.0.0-p247
data/.simplecov CHANGED
@@ -1,4 +1,5 @@
1
1
  SimpleCov.minimum_coverage 90
2
2
  SimpleCov.start do
3
3
  add_filter "/spec/"
4
- end
4
+ add_filter ".bundle"
5
+ end
data/README.md CHANGED
@@ -26,11 +26,14 @@ Or install it yourself as:
26
26
 
27
27
  gpx.points_count # get count of track points
28
28
 
29
- gpx.times.last[:t] # get track length
29
+ gpx.duration # get track duration [s]
30
+ gpx.length # get track length [km]
31
+
32
+ gpx.times[n][:t] # get time delta for n-th and n-1-th track point
30
33
  gpx.times[n][:dt] # get time delta for n-th and n-1-th track point
31
34
 
32
- gpx.distance[n][:s] # get distance between track start and n-th track point
33
- gpx.distance[n][:ds] # get distance delta for track n-th and n-1-th track point
35
+ gpx.distances[n][:s] # get distance between track start and n-th track point
36
+ gpx.distances[n][:ds] # get distance delta for track n-th and n-1-th track point
34
37
 
35
38
  gpx.max_speed # get max value from all partial speeds (ds/dt)
36
39
  gpx.average_speed # get average speed for track
@@ -38,7 +41,7 @@ Or install it yourself as:
38
41
  gpx.speeds # get partial speeds
39
42
 
40
43
  gpx.start_date # date when track begins
41
- gpx.end_date # date when track ends
44
+ gpx.end_date # date when track ends
42
45
 
43
46
  ## Contributing
44
47
 
@@ -18,10 +18,10 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
+ spec.add_dependency "nokogiri"
22
+
21
23
  spec.add_development_dependency "bundler", "~> 1.3"
22
24
  spec.add_development_dependency "rake"
23
25
  spec.add_development_dependency "rspec"
24
26
  spec.add_development_dependency "simplecov"
25
-
26
- spec.add_dependency "nokogiri"
27
27
  end
@@ -1,7 +1,8 @@
1
1
  module GPX
2
-
3
- # Exception occurs when file opened by GPX class is in other format or not exists
2
+
3
+ # Exception occurs when file opened by GPX class
4
+ # is in other format or not exists
4
5
  class GPXInvalidFileException < Exception
5
6
  end
6
-
7
+
7
8
  end
@@ -2,8 +2,9 @@ require 'time'
2
2
  require 'nokogiri'
3
3
 
4
4
  module GPX
5
-
6
- # Class is responsible for parsing GPX files and calculate track statistics
5
+
6
+ # Class is responsible for parsing GPX files
7
+ # and calculate track statistics
7
8
  class GPX
8
9
  attr_reader :points_count,
9
10
  :points,
@@ -14,25 +15,25 @@ module GPX
14
15
  :max_speed,
15
16
  :start_date,
16
17
  :end_date
17
-
18
+
18
19
  def points_count
19
20
  (@points) ? @points.count : 0
20
21
  end
21
-
22
+
22
23
  def start_date
23
24
  @dates.first
24
25
  end
25
-
26
+
26
27
  def end_date
27
28
  @dates.last
28
29
  end
29
-
30
+
30
31
  def speeds
31
32
  unless @speeds
32
33
  @speeds = self.distances.zip(self.times).collect do |dist,time|
33
34
  dt = time[:dt]
34
35
  unless dt == 0
35
- next dist[:ds]/dt*3600
36
+ next dist[:ds]/dt*3600
36
37
  else
37
38
  next 0
38
39
  end
@@ -40,14 +41,14 @@ module GPX
40
41
  end
41
42
  @speeds
42
43
  end
43
-
44
+
44
45
  def max_speed
45
46
  unless @max_speed
46
47
  @max_speed = self.speeds.sort_by{|speed| speed}.last
47
48
  end
48
49
  @max_speed
49
50
  end
50
-
51
+
51
52
  def average_speed
52
53
  unless @average_speed
53
54
  @average_speed = 0
@@ -56,33 +57,39 @@ module GPX
56
57
  end
57
58
  @average_speed
58
59
  end
59
-
60
+
60
61
  def times
61
62
  calculate_times unless @times
62
63
  @times
63
64
  end
64
-
65
+
66
+ def duration
67
+ self.times.last[:t]
68
+ end
69
+
65
70
  def distances
66
71
  calculate_distances unless @distances
67
72
  @distances
68
73
  end
69
-
74
+
75
+ def length
76
+ self.distances.last[:s]
77
+ end
78
+
70
79
  def initialize(path)
71
80
  @doc = nil
72
-
81
+
73
82
  begin
74
83
  path = open(path)
75
84
  doc = Nokogiri::XML(path)
76
85
  rescue
77
86
  raise GPXInvalidFileException
78
87
  end
79
-
80
- # raise GPXInvalidFileException if doc.children.empty?
81
-
88
+
82
89
  @points = []
83
90
  @dates = []
84
-
85
- doc.search('trkpt').map do |el|
91
+
92
+ doc.search('trkpt').map do |el|
86
93
  @dates.push Time.parse(el.at('time').text)
87
94
  @points.push GeoPoint.new(
88
95
  latitude: el['lat'].to_f,
@@ -91,9 +98,9 @@ module GPX
91
98
  )
92
99
  end
93
100
  end
94
-
101
+
95
102
  private
96
-
103
+
97
104
  def calculate_times
98
105
  @times = [ { dt: 0.0, t: 0.0 } ]
99
106
  @dates.each_cons(2) do |date|
@@ -104,18 +111,18 @@ module GPX
104
111
  @times.push time
105
112
  end
106
113
  end
107
-
114
+
108
115
  def calculate_distances
109
116
  @distances = [ {ds: 0.0, s: 0.0} ]
110
117
  @points.each_cons(2) do |point|
111
- distance = {
118
+ distance = {
112
119
  ds: difference = Haversine.distance(point[0], point[1]),
113
120
  s: difference + @distances.last[:s]
114
121
  }
115
122
  @distances.push distance
116
123
  end
117
124
  end
118
-
125
+
119
126
  end
120
-
127
+
121
128
  end
@@ -1,31 +1,32 @@
1
1
  module GPX
2
-
2
+
3
3
  # Class is responsible for calculating distance between two geo points (it considers point height)
4
4
  class Haversine
5
5
  RADIAN_PER_DEGREE = Math::PI/180.0
6
6
  EARTH_RADIUS = 6371.00079
7
-
7
+
8
8
  def self.distance(first_point, second_point)
9
9
  first_latitude_rad = first_point.latitude.to_f * RADIAN_PER_DEGREE
10
10
  second_latitude_rad = second_point.latitude.to_f * RADIAN_PER_DEGREE
11
-
11
+
12
12
  delta_longitude = (second_point.longitude.to_f - first_point.longitude.to_f) * RADIAN_PER_DEGREE
13
13
  delta_latitude = (second_point.latitude.to_f - first_point.latitude.to_f) * RADIAN_PER_DEGREE
14
-
14
+
15
15
  elevation = (first_point.elevation.to_f / 1000.0 - second_point.elevation.to_f / 1000.0).abs
16
-
17
- triangulate(EARTH_RADIUS * calculate_distance(first_latitude_rad, second_latitude_rad, delta_latitude, delta_longitude), elevation)
16
+
17
+ distance = calculate_distance(first_latitude_rad, second_latitude_rad, delta_latitude, delta_longitude)
18
+ triangulate(EARTH_RADIUS * distance, elevation)
18
19
  end
19
-
20
+
20
21
  private
21
22
  def self.calculate_distance(first_latitude_rad, second_latitude_rad, delta_latitude, delta_longitude)
22
23
  coefficient = (Math::sin(delta_latitude/2.0)**2.0) +
23
24
  Math::cos(first_latitude_rad) * Math::cos(second_latitude_rad) * (Math::sin(delta_longitude/2.0)**2.0)
24
-
25
+
25
26
  2.0 * Math::atan2(Math::sqrt(coefficient), Math::sqrt(1.0-coefficient))
26
27
  end
27
-
28
- def self.triangulate (distance, height)
28
+
29
+ def self.triangulate (distance, height)
29
30
  Math::sqrt(distance**2 + height**2)
30
31
  end
31
32
  end
@@ -1,3 +1,3 @@
1
1
  module GPX
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -1,78 +1,84 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe GPX do
4
-
4
+
5
5
  describe "file with one point" do
6
6
  before do
7
7
  @gpx = GPX::GPX.new 'spec/assets/one_point.gpx'
8
8
  end
9
-
9
+
10
10
  subject { @gpx }
11
-
11
+
12
12
  it { should respond_to :points }
13
13
  it { should_not respond_to :points= }
14
-
14
+
15
15
  it { should respond_to :points_count }
16
16
  it { should_not respond_to :points_count= }
17
-
17
+
18
18
  it { should_not respond_to :elevations }
19
19
  it { should_not respond_to :elevations= }
20
-
20
+
21
21
  it { should respond_to :times }
22
22
  it { should_not respond_to :times= }
23
-
23
+
24
+ it { should respond_to :duration }
25
+ it { should_not respond_to :duration= }
26
+
24
27
  it { should respond_to :speeds }
25
28
  it { should_not respond_to :speeds= }
26
-
29
+
27
30
  it { should respond_to :distances }
28
31
  it { should_not respond_to :distances= }
29
-
32
+
33
+ it { should respond_to :length }
34
+ it { should_not respond_to :length= }
35
+
30
36
  it { should_not respond_to :times_cumulated }
31
37
  it { should_not respond_to :times_cumulated= }
32
-
38
+
33
39
  it { should_not respond_to :distances_cumulated }
34
40
  it { should_not respond_to :distances_cumulated= }
35
-
41
+
36
42
  it { should respond_to :average_speed }
37
43
  it { should_not respond_to :average_speed= }
38
-
44
+
39
45
  it { should respond_to :max_speed }
40
46
  it { should_not respond_to :max_speed= }
41
-
47
+
42
48
  it { should respond_to :start_date }
43
49
  it { should_not respond_to :start_date= }
44
-
50
+
45
51
  it { should respond_to :end_date }
46
52
  it { should_not respond_to :end_date= }
47
-
53
+
48
54
  it "should return one point" do
49
55
  @gpx.points_count.should eq 1
50
56
  end
51
-
57
+
52
58
  it "should return point time" do
53
59
  @gpx.times.first[:dt].should eq 0
54
60
  end
55
-
61
+
56
62
  it "should return point cumulated time" do
57
63
  @gpx.times.first[:t].should eq 0
58
64
  end
59
-
65
+
60
66
  it "average speed should be zero" do
61
67
  @gpx.average_speed.should eq 0
62
68
  end
63
-
69
+
64
70
  it "max speed should be zero" do
65
71
  @gpx.max_speed.should eq 0
66
72
  end
67
-
73
+
68
74
  it "start date should not be nil" do
69
75
  @gpx.start_date.should_not eq nil
70
76
  end
71
-
77
+
72
78
  it "start date should equals end date" do
73
79
  @gpx.start_date.should eq @gpx.end_date
74
80
  end
75
-
81
+
76
82
  describe "should return one zero distance (because of one point)" do
77
83
  it "distances count should equals one" do
78
84
  @gpx.distances.count.should eq 1
@@ -84,7 +90,7 @@ describe GPX do
84
90
  @gpx.distances.first[:s].should eq 0
85
91
  end
86
92
  end
87
-
93
+
88
94
  describe "should return one zero speed (because of one point)" do
89
95
  it "speeds count should equals one" do
90
96
  @gpx.speeds.count.should eq 1
@@ -93,53 +99,53 @@ describe GPX do
93
99
  @gpx.speeds[0].should eq 0
94
100
  end
95
101
  end
96
-
102
+
97
103
  it "should have proper latitude" do
98
104
  @gpx.points.first.latitude.should eq 47.644548
99
105
  end
100
106
  end
101
-
107
+
102
108
  describe "file with more than one track point" do
103
109
  POINTS_COUNT = 6
104
-
110
+
105
111
  before do
106
112
  @gpx = GPX::GPX.new 'spec/assets/two_tracks.gpx'
107
113
  end
108
-
114
+
109
115
  subject { @gpx }
110
-
116
+
111
117
  it "should return all points in one array" do
112
118
  @gpx.points_count.should eq POINTS_COUNT
113
119
  end
114
-
120
+
115
121
  it "last point should not be nil" do
116
122
  @gpx.points.last.should_not eq nil
117
123
  end
118
-
124
+
119
125
  it "should return same count of distances elements as points" do
120
126
  @gpx.distances.count.should eq POINTS_COUNT
121
127
  end
122
-
128
+
123
129
  it "should return same count of speeds elements as points" do
124
130
  @gpx.speeds.count.should eq POINTS_COUNT
125
131
  end
126
-
132
+
127
133
  it "last point speed should not be nil" do
128
134
  @gpx.speeds.last.should_not eq nil
129
135
  end
130
-
136
+
131
137
  it "should return same count of time elements as points" do
132
138
  @gpx.times.count.should eq POINTS_COUNT
133
139
  end
134
-
140
+
135
141
  it "last point time should not be nil" do
136
142
  @gpx.times.last.should_not eq nil
137
143
  end
138
-
144
+
139
145
  it "last point cumulated time should be positive" do
140
146
  @gpx.times.last[:t].should > 0
141
147
  end
142
-
148
+
143
149
  it "last point distance should not be zero" do
144
150
  @gpx.distances.last[:ds].should_not eq 0
145
151
  end
@@ -147,39 +153,47 @@ describe GPX do
147
153
  it "last point cumulated distance should not be zero" do
148
154
  @gpx.distances.last[:s].should_not eq 0
149
155
  end
150
-
156
+
157
+ it "cumulated time should equals duration" do
158
+ @gpx.times.last[:t].should eq @gpx.duration
159
+ end
160
+
161
+ it "cumulated distance should equals track length" do
162
+ @gpx.distances.last[:s].should eq @gpx.length
163
+ end
164
+
151
165
  it "average speed should be positive" do
152
166
  @gpx.average_speed.should > 0
153
167
  end
154
-
168
+
155
169
  it "max speed should be positive" do
156
170
  @gpx.max_speed.should > 0
157
171
  end
158
-
172
+
159
173
  it "start date should not equals end date" do
160
174
  @gpx.start_date.should_not eq @gpx.end_date
161
175
  end
162
176
  end
163
-
177
+
164
178
  it "return exeption for non-existing file" do
165
179
  expect {
166
- gpx = GPX::GPX.new 'spec/assets/some_filt_that_not_exists_25363.gpx'
180
+ GPX::GPX.new 'spec/assets/some_filt_that_not_exists_25363.gpx'
167
181
  }.to raise_error( GPX::GPXInvalidFileException )
168
182
  end
169
-
183
+
170
184
  let(:wrong_file_type_gpx) {GPX::GPX.new 'spec/assets/blank.gif'}
171
185
  it "return no points for wrong file type" do
172
186
  wrong_file_type_gpx.points_count.should eq 0
173
187
  end
174
-
188
+
175
189
  let(:blank_file_gpx) {GPX::GPX.new 'spec/assets/blank.gpx'}
176
190
  it "return no points for blank file" do
177
191
  blank_file_gpx.points_count.should eq 0
178
192
  end
179
-
193
+
180
194
  it "should return zero points for file with no track point" do
181
195
  gpx = GPX::GPX.new 'spec/assets/empty.gpx'
182
196
  gpx.points_count.should eq(0)
183
197
  end
184
-
198
+
185
199
  end
@@ -5,26 +5,26 @@ PRECISION = 0.002 # 0.01%
5
5
  describe GPX::Haversine do
6
6
  def should_equals_distance_with_precision(checked_distance, real_distance)
7
7
  (checked_distance-real_distance).abs.should < real_distance * PRECISION
8
- end
9
-
8
+ end
9
+
10
10
  let(:zabrze) { GPX::GeoPoint.new(latitude: 50.3167, longitude: 18.7833, elevation: 0) }
11
11
  let(:katowice) { GPX::GeoPoint.new(latitude: 50.2667, longitude: 19.0167, elevation: 0) }
12
12
  let(:katowice_distance) { 17.47 }
13
-
13
+
14
14
  it "should return proper distance from Zabrze, PL to Katowice, PL" do
15
15
  distance = GPX::Haversine.distance(zabrze, katowice)
16
16
  should_equals_distance_with_precision(distance, katowice_distance)
17
17
  end
18
-
18
+
19
19
  it "should return proper distance from Katowice, PL to Zabrze, PL" do
20
20
  distance = GPX::Haversine.distance(katowice, zabrze)
21
21
  should_equals_distance_with_precision(distance, katowice_distance)
22
22
  end
23
-
23
+
24
24
  let(:tokyo) { GPX::GeoPoint.new(latitude: 35.6850, longitude: 139.7514, elevation: 0) }
25
25
  let(:london) { GPX::GeoPoint.new(latitude: 51.5000, longitude: -0.1167, elevation: 0) }
26
26
  let(:london_distance) { 9554.72 }
27
-
27
+
28
28
  it "should return proper distance from Tokyo, JP to London, GB" do
29
29
  distance = GPX::Haversine.distance(tokyo, london)
30
30
  should_equals_distance_with_precision(distance, london_distance)
@@ -37,17 +37,17 @@ describe GPX::Haversine do
37
37
  )
38
38
  should_equals_distance_with_precision(distance, 20038)
39
39
  end
40
-
40
+
41
41
  let(:same_point) { GPX::GeoPoint.new(latitude: 44.654, longitude: 44.654, elevation: 0) }
42
42
  it "should return 0 for same lat/lon" do
43
43
  distance = GPX::Haversine.distance(same_point,same_point)
44
44
  distance.should eq 0
45
45
  end
46
-
46
+
47
47
  let(:height) { GPX::GeoPoint.new(latitude: 44.654, longitude: 44.654, elevation: 1233.54) }
48
48
  it "should return proper height for same lat/lon" do
49
49
  distance = GPX::Haversine.distance(same_point, height)
50
50
  distance.should eq height.elevation/1000
51
51
  end
52
-
52
+
53
53
  end
@@ -1,4 +1,5 @@
1
1
  require 'simplecov'
2
+
2
3
  SimpleCov.start
3
4
 
4
- require 'gpx'
5
+ require 'gpx'
metadata CHANGED
@@ -1,83 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gpx_track
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dawid Dziurdzia
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-15 00:00:00.000000000 Z
11
+ date: 2013-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: nokogiri
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.3'
20
- type: :development
19
+ version: '0'
20
+ type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.3'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
28
+ name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '1.3'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '1.3'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rspec
42
+ name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: simplecov
56
+ name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: nokogiri
70
+ name: simplecov
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
- type: :runtime
76
+ type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  description: Provide GPX file parsing
@@ -87,10 +87,10 @@ executables: []
87
87
  extensions: []
88
88
  extra_rdoc_files: []
89
89
  files:
90
- - .gitignore
91
- - .ruby-gemset
92
- - .ruby-version
93
- - .simplecov
90
+ - ".gitignore"
91
+ - ".ruby-gemset"
92
+ - ".ruby-version"
93
+ - ".simplecov"
94
94
  - Gemfile
95
95
  - LICENSE.txt
96
96
  - README.md
@@ -121,17 +121,17 @@ require_paths:
121
121
  - lib
122
122
  required_ruby_version: !ruby/object:Gem::Requirement
123
123
  requirements:
124
- - - '>='
124
+ - - ">="
125
125
  - !ruby/object:Gem::Version
126
126
  version: '0'
127
127
  required_rubygems_version: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - '>='
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  requirements: []
133
133
  rubyforge_project:
134
- rubygems_version: 2.0.5
134
+ rubygems_version: 2.1.10
135
135
  signing_key:
136
136
  specification_version: 4
137
137
  summary: Provide GPX file parsing