gpx 1.0.0 → 1.1.1
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/.github/workflows/ruby.yml +37 -0
- data/.rubocop +1 -0
- data/.rubocop.yml +2 -5
- data/.ruby-version +1 -0
- data/.tool-versions +1 -0
- data/.travis.yml +4 -5
- data/CHANGELOG.md +14 -0
- data/Gemfile +2 -0
- data/README.md +21 -5
- data/Rakefile +7 -0
- data/UPGRADING.md +7 -0
- data/bin/gpx_distance +2 -0
- data/bin/gpx_smooth +5 -2
- data/gpx.gemspec +2 -2
- data/lib/gpx/bounds.rb +3 -0
- data/lib/gpx/geo_json.rb +199 -0
- data/lib/gpx/gpx.rb +2 -0
- data/lib/gpx/gpx_file.rb +53 -51
- data/lib/gpx/magellan_track_log.rb +3 -1
- data/lib/gpx/point.rb +5 -1
- data/lib/gpx/route.rb +4 -1
- data/lib/gpx/segment.rb +14 -9
- data/lib/gpx/track.rb +11 -4
- data/lib/gpx/track_point.rb +2 -0
- data/lib/gpx/version.rb +3 -1
- data/lib/gpx/waypoint.rb +3 -0
- data/lib/gpx.rb +3 -1
- data/tests/geojson_files/combined_data.json +68 -0
- data/tests/geojson_files/line_string_data.json +83 -0
- data/tests/geojson_files/multi_line_string_data.json +74 -0
- data/tests/geojson_files/multi_point_data.json +14 -0
- data/tests/geojson_files/point_data.json +22 -0
- data/tests/geojson_test.rb +92 -0
- data/tests/gpx10_test.rb +2 -0
- data/tests/gpx_file_test.rb +2 -0
- data/tests/gpx_files/one_segment_mixed_times.gpx +884 -0
- data/tests/gpx_files/routes_without_names.gpx +29 -0
- data/tests/magellan_test.rb +2 -0
- data/tests/output_test.rb +3 -1
- data/tests/route_test.rb +52 -0
- data/tests/segment_test.rb +13 -1
- data/tests/track_file_test.rb +3 -0
- data/tests/track_point_test.rb +2 -0
- data/tests/track_test.rb +2 -0
- data/tests/waypoint_test.rb +2 -0
- metadata +25 -9
@@ -0,0 +1,29 @@
|
|
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[routes.gpx]]></name>
|
5
|
+
<time>2006-01-02T08:55:34Z</time>
|
6
|
+
<bounds min_lat="39.989739" min_lon="-105.295285" max_lat="39.999840" max_lon="-105.214696"/>
|
7
|
+
</metadata>
|
8
|
+
<extensions/>
|
9
|
+
<rte>
|
10
|
+
<rtept lat="39.997298" lon="-105.292674">
|
11
|
+
<sym>Waypoint</sym>
|
12
|
+
<ele>1766.535</ele>
|
13
|
+
</rtept>
|
14
|
+
<rtept lat="39.995700" lon="-105.292805">
|
15
|
+
<sym>Waypoint</sym>
|
16
|
+
<ele>1854.735</ele>
|
17
|
+
</rtept>
|
18
|
+
<rtept lat="39.989739" lon="-105.295285">
|
19
|
+
<sym>Waypoint</sym>
|
20
|
+
<ele>2163.556</ele>
|
21
|
+
</rtept>
|
22
|
+
</rte>
|
23
|
+
<rte>
|
24
|
+
<rtept lat="39.999840" lon="-105.214696">
|
25
|
+
<sym>Waypoint</sym>
|
26
|
+
<ele>1612.965</ele>
|
27
|
+
</rtept>
|
28
|
+
</rte>
|
29
|
+
</gpx>
|
data/tests/magellan_test.rb
CHANGED
data/tests/output_test.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'minitest/autorun'
|
2
4
|
require 'fileutils'
|
3
5
|
require 'gpx'
|
@@ -109,5 +111,5 @@ class OutputTest < Minitest::Test
|
|
109
111
|
File.join(File.dirname(__FILE__), "output/#{test_name}.gpx")
|
110
112
|
end
|
111
113
|
|
112
|
-
THE_WORKS = "<?xml version=\"1.0\"?>\n<gpx xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://www.topografix.com/GPX/1/1\" version=\"1.1\" creator=\"GPX RubyGem #{GPX::VERSION} Copyright 2006-2009 Doug Fales -- http://gpx.rubyforge.org/\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd\">\n <metadata>\n <name>new_gpx_file_from_scratch.gpx</name>\n <time>%s</time>\n <bounds minlat=\"90.0\" minlon=\"180.0\" maxlat=\"-90.0\" maxlon=\"-180.0\"/>\n </metadata>\n <trk>\n <name/>\n <trkseg>\n <trkpt lat=\"40.036926\" lon=\"-105.253487\">\n <time>2005-12-31T22:01:24Z</time>\n <ele>1737.24</ele>\n </trkpt>\n <trkpt lat=\"40.036604\" lon=\"-105.253487\">\n <time>2005-12-31T22:02:01Z</time>\n <ele>1738.682</ele>\n </trkpt>\n <trkpt lat=\"40.036347\" lon=\"-105.25383\">\n <time>2005-12-31T22:02:08Z</time>\n <ele>1738.682</ele>\n </trkpt>\n <trkpt lat=\"40.035574\" lon=\"-105.254045\">\n <time>2005-12-31T22:02:20Z</time>\n <ele>1737.24</ele>\n </trkpt>\n <trkpt lat=\"40.035467\" lon=\"-105.254366\">\n <time>2005-12-31T22:02:29Z</time>\n <ele>1735.798</ele>\n </trkpt>\n <trkpt lat=\"40.035317\" lon=\"-105.254388\">\n <time>2005-12-31T22:02:33Z</time>\n <ele>1735.798</ele>\n </trkpt>\n <trkpt lat=\"40.035274\" lon=\"-105.254431\">\n <time>2005-12-31T22:02:49Z</time>\n <ele>1736.278</ele>\n </trkpt>\n <trkpt lat=\"40.035274\" lon=\"-105.254431\">\n <time>2005-12-31T22:02:54Z</time>\n <ele>1739.643</ele>\n </trkpt>\n <trkpt lat=\"40.035317\" lon=\"-105.254431\">\n <time>2005-12-31T22:05:08Z</time>\n <ele>1732.433</ele>\n </trkpt>\n <trkpt lat=\"40.035317\" lon=\"-105.254431\">\n <time>2005-12-31T22:05:09Z</time>\n <ele>1726.665</ele>\n </trkpt>\n </trkseg>\n </trk>\n <wpt lat=\"39.997298\" lon=\"-105.292674\">\n <name>GRG-CA</name>\n <sym>Waypoint</sym>\n <ele>1766.535</ele>\n </wpt>\n <wpt lat=\"33.33019\" lon=\"-111.94611\">\n <name>GRMPHX</name>\n <cmt>Hey here's a comment.</cmt>\n <desc>Somewhere in my backyard.</desc>\n <sym>Waypoint</sym>\n <fix>3d</fix>\n <sat>8</sat>\n <hdop>50.5</hdop>\n <vdop>6.8</vdop>\n <pdop>7.6</pdop>\n <ele>361.0981</ele>\n </wpt>\n <wpt lat=\"25.061783\" lon=\"121.640267\">\n <name>GRMTWN</name>\n <sym>Waypoint</sym>\n <ele>38.09766</ele>\n </wpt>\n <wpt lat=\"39.99984\" lon=\"-105.214696\">\n <name>SBDR</name>\n <sym>Waypoint</sym>\n <ele>1612.965</ele>\n </wpt>\n <wpt lat=\"39.989739\" lon=\"-105.295285\">\n <name>TO</name>\n <sym>Waypoint</sym>\n <ele>2163.556</ele>\n </wpt>\n <wpt lat=\"40.035301\" lon=\"-105.254443\">\n <name>VICS</name>\n <sym>Waypoint</sym>\n <ele>1535.34</ele>\n </wpt>\n <rte>\n <name/>\n <rtept lat=\"40.035467\" lon=\"-105.254366\">\n <time>2005-12-31T22:02:29Z</time>\n <ele>1735.798</ele>\n </rtept>\n <rtept lat=\"40.035317\" lon=\"-105.254388\">\n <time>2005-12-31T22:02:33Z</time>\n <ele>1735.798</ele>\n </rtept>\n <rtept lat=\"40.035274\" lon=\"-105.254431\">\n <time>2005-12-31T22:02:49Z</time>\n <ele>1736.278</ele>\n </rtept>\n </rte>\n</gpx>\n"
|
114
|
+
THE_WORKS = "<?xml version=\"1.0\"?>\n<gpx xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://www.topografix.com/GPX/1/1\" version=\"1.1\" creator=\"GPX RubyGem #{GPX::VERSION} Copyright 2006-2009 Doug Fales -- http://gpx.rubyforge.org/\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd\">\n <metadata>\n <name>new_gpx_file_from_scratch.gpx</name>\n <time>%s</time>\n <bounds minlat=\"90.0\" minlon=\"180.0\" maxlat=\"-90.0\" maxlon=\"-180.0\"/>\n </metadata>\n <trk>\n <name/>\n <trkseg>\n <trkpt lat=\"40.036926\" lon=\"-105.253487\">\n <time>2005-12-31T22:01:24Z</time>\n <ele>1737.24</ele>\n </trkpt>\n <trkpt lat=\"40.036604\" lon=\"-105.253487\">\n <time>2005-12-31T22:02:01Z</time>\n <ele>1738.682</ele>\n </trkpt>\n <trkpt lat=\"40.036347\" lon=\"-105.25383\">\n <time>2005-12-31T22:02:08Z</time>\n <ele>1738.682</ele>\n </trkpt>\n <trkpt lat=\"40.035574\" lon=\"-105.254045\">\n <time>2005-12-31T22:02:20Z</time>\n <ele>1737.24</ele>\n </trkpt>\n <trkpt lat=\"40.035467\" lon=\"-105.254366\">\n <time>2005-12-31T22:02:29Z</time>\n <ele>1735.798</ele>\n </trkpt>\n <trkpt lat=\"40.035317\" lon=\"-105.254388\">\n <time>2005-12-31T22:02:33Z</time>\n <ele>1735.798</ele>\n </trkpt>\n <trkpt lat=\"40.035274\" lon=\"-105.254431\">\n <time>2005-12-31T22:02:49Z</time>\n <ele>1736.278</ele>\n </trkpt>\n <trkpt lat=\"40.035274\" lon=\"-105.254431\">\n <time>2005-12-31T22:02:54Z</time>\n <ele>1739.643</ele>\n </trkpt>\n <trkpt lat=\"40.035317\" lon=\"-105.254431\">\n <time>2005-12-31T22:05:08Z</time>\n <ele>1732.433</ele>\n </trkpt>\n <trkpt lat=\"40.035317\" lon=\"-105.254431\">\n <time>2005-12-31T22:05:09Z</time>\n <ele>1726.665</ele>\n </trkpt>\n </trkseg>\n </trk>\n <wpt lat=\"39.997298\" lon=\"-105.292674\">\n <name>GRG-CA</name>\n <sym>Waypoint</sym>\n <ele>1766.535</ele>\n </wpt>\n <wpt lat=\"33.33019\" lon=\"-111.94611\">\n <name>GRMPHX</name>\n <cmt>Hey here's a comment.</cmt>\n <desc>Somewhere in my backyard.</desc>\n <sym>Waypoint</sym>\n <fix>3d</fix>\n <sat>8</sat>\n <hdop>50.5</hdop>\n <vdop>6.8</vdop>\n <pdop>7.6</pdop>\n <ele>361.0981</ele>\n </wpt>\n <wpt lat=\"25.061783\" lon=\"121.640267\">\n <name>GRMTWN</name>\n <sym>Waypoint</sym>\n <ele>38.09766</ele>\n </wpt>\n <wpt lat=\"39.99984\" lon=\"-105.214696\">\n <name>SBDR</name>\n <sym>Waypoint</sym>\n <ele>1612.965</ele>\n </wpt>\n <wpt lat=\"39.989739\" lon=\"-105.295285\">\n <name>TO</name>\n <sym>Waypoint</sym>\n <ele>2163.556</ele>\n </wpt>\n <wpt lat=\"40.035301\" lon=\"-105.254443\">\n <name>VICS</name>\n <sym>Waypoint</sym>\n <ele>1535.34</ele>\n </wpt>\n <rte>\n <name/>\n <rtept lat=\"40.035467\" lon=\"-105.254366\">\n <time>2005-12-31T22:02:29Z</time>\n <ele>1735.798</ele>\n </rtept>\n <rtept lat=\"40.035317\" lon=\"-105.254388\">\n <time>2005-12-31T22:02:33Z</time>\n <ele>1735.798</ele>\n </rtept>\n <rtept lat=\"40.035274\" lon=\"-105.254431\">\n <time>2005-12-31T22:02:49Z</time>\n <ele>1736.278</ele>\n </rtept>\n </rte>\n</gpx>\n"
|
113
115
|
end
|
data/tests/route_test.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'minitest/autorun'
|
2
4
|
require 'gpx'
|
3
5
|
|
@@ -53,4 +55,54 @@ class RouteTest < Minitest::Test
|
|
53
55
|
assert_equal(-105.214696, second_route.points[0].lon)
|
54
56
|
assert_equal(1612.965, second_route.points[0].elevation)
|
55
57
|
end
|
58
|
+
|
59
|
+
def test_read_routes_without_name_fields
|
60
|
+
file = File.join(File.dirname(__FILE__), 'gpx_files/routes_without_names.gpx')
|
61
|
+
gpx = GPX::GPXFile.new(gpx_file: file)
|
62
|
+
assert_equal(2, gpx.routes.size)
|
63
|
+
first_route = gpx.routes.first
|
64
|
+
assert_equal(3, first_route.points.size)
|
65
|
+
assert_nil(first_route.name)
|
66
|
+
|
67
|
+
# Route 1, First Point
|
68
|
+
# <rtept lat="39.997298" lon="-105.292674">
|
69
|
+
# <sym>Waypoint</sym>
|
70
|
+
# <ele>1766.535</ele>
|
71
|
+
# </rtept>
|
72
|
+
assert_equal(39.997298, first_route.points[0].lat)
|
73
|
+
assert_equal(-105.292674, first_route.points[0].lon)
|
74
|
+
assert_equal(1766.535, first_route.points[0].elevation)
|
75
|
+
|
76
|
+
# Route 1, Second Point
|
77
|
+
# <rtept lat="39.995700" lon="-105.292805">
|
78
|
+
# <name><![CDATA[AMPTHT]]></name>
|
79
|
+
# <sym>Waypoint</sym>
|
80
|
+
# <ele>1854.735</ele>
|
81
|
+
# </rtept>
|
82
|
+
assert_equal(39.995700, first_route.points[1].lat)
|
83
|
+
assert_equal(-105.292805, first_route.points[1].lon)
|
84
|
+
assert_equal(1854.735, first_route.points[1].elevation)
|
85
|
+
|
86
|
+
# Route 1, Third Point
|
87
|
+
# <rtept lat="39.989739" lon="-105.295285">
|
88
|
+
# <sym>Waypoint</sym>
|
89
|
+
# <ele>2163.556</ele>
|
90
|
+
# </rtept>
|
91
|
+
assert_equal(39.989739, first_route.points[2].lat)
|
92
|
+
assert_equal(-105.295285, first_route.points[2].lon)
|
93
|
+
assert_equal(2163.556, first_route.points[2].elevation)
|
94
|
+
|
95
|
+
second_route = gpx.routes[1]
|
96
|
+
assert_equal(1, second_route.points.size)
|
97
|
+
assert_nil(second_route.name)
|
98
|
+
|
99
|
+
# Route 2, Only Point
|
100
|
+
# <rtept lat="39.999840" lon="-105.214696">
|
101
|
+
# <sym>Waypoint</sym>
|
102
|
+
# <ele>1612.965</ele>
|
103
|
+
# </rtept>
|
104
|
+
assert_equal(39.999840, second_route.points[0].lat)
|
105
|
+
assert_equal(-105.214696, second_route.points[0].lon)
|
106
|
+
assert_equal(1612.965, second_route.points[0].elevation)
|
107
|
+
end
|
56
108
|
end
|
data/tests/segment_test.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'minitest/autorun'
|
3
4
|
require 'yaml'
|
4
5
|
require 'gpx'
|
@@ -6,6 +7,7 @@ require 'gpx'
|
|
6
7
|
class SegmentTest < Minitest::Test
|
7
8
|
ONE_SEGMENT = File.join(File.dirname(__FILE__), 'gpx_files/one_segment.gpx')
|
8
9
|
ONE_SEGMENT_NO_TIME = File.join(File.dirname(__FILE__), 'gpx_files/one_segment_no_time.gpx')
|
10
|
+
ONE_SEGMENT_MIXED_TIMES = File.join(File.dirname(__FILE__), 'gpx_files/one_segment_mixed_times.gpx')
|
9
11
|
|
10
12
|
def setup
|
11
13
|
@gpx_file = GPX::GPXFile.new(gpx_file: ONE_SEGMENT)
|
@@ -105,4 +107,14 @@ class SegmentTest < Minitest::Test
|
|
105
107
|
assert_in_delta(6.900813095, @segment.distance, 0.001)
|
106
108
|
assert_equal(4466.0, @segment.duration)
|
107
109
|
end
|
110
|
+
|
111
|
+
def test_segment_mixed_times
|
112
|
+
gpx_file_mixed_times = GPX::GPXFile.new(gpx_file: ONE_SEGMENT_MIXED_TIMES)
|
113
|
+
segment_mixed_times = gpx_file_mixed_times.tracks.first.segments.first
|
114
|
+
assert_equal(588, segment_mixed_times.points.size)
|
115
|
+
assert_equal(0, segment_mixed_times.earliest_point.time.to_i)
|
116
|
+
assert_equal(0, segment_mixed_times.latest_point.time.to_i)
|
117
|
+
assert_in_delta(40.763726054, segment_mixed_times.distance, 0.001)
|
118
|
+
assert_equal(0.0, segment_mixed_times.duration)
|
119
|
+
end
|
108
120
|
end
|
data/tests/track_file_test.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'minitest/autorun'
|
2
4
|
require 'gpx'
|
3
5
|
|
@@ -8,6 +10,7 @@ class TrackFileTest < Minitest::Test
|
|
8
10
|
def setup
|
9
11
|
@track_file = GPX::GPXFile.new(gpx_file: TRACK_FILE)
|
10
12
|
@other_track_file = GPX::GPXFile.new(gpx_file: OTHER_TRACK_FILE)
|
13
|
+
FileUtils.mkdir_p(File.join(File.dirname(__FILE__), 'output'))
|
11
14
|
end
|
12
15
|
|
13
16
|
def test_track_read
|
data/tests/track_point_test.rb
CHANGED
data/tests/track_test.rb
CHANGED
data/tests/waypoint_test.rb
CHANGED
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gpx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Guillaume Dott
|
8
8
|
- Doug Fales
|
9
9
|
- Andrew Hao
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2023-05-20 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: nokogiri
|
@@ -91,19 +91,25 @@ executables: []
|
|
91
91
|
extensions: []
|
92
92
|
extra_rdoc_files: []
|
93
93
|
files:
|
94
|
+
- ".github/workflows/ruby.yml"
|
94
95
|
- ".gitignore"
|
96
|
+
- ".rubocop"
|
95
97
|
- ".rubocop.yml"
|
98
|
+
- ".ruby-version"
|
99
|
+
- ".tool-versions"
|
96
100
|
- ".travis.yml"
|
97
101
|
- CHANGELOG.md
|
98
102
|
- Gemfile
|
99
103
|
- LICENSE.txt
|
100
104
|
- README.md
|
101
105
|
- Rakefile
|
106
|
+
- UPGRADING.md
|
102
107
|
- bin/gpx_distance
|
103
108
|
- bin/gpx_smooth
|
104
109
|
- gpx.gemspec
|
105
110
|
- lib/gpx.rb
|
106
111
|
- lib/gpx/bounds.rb
|
112
|
+
- lib/gpx/geo_json.rb
|
107
113
|
- lib/gpx/gpx.rb
|
108
114
|
- lib/gpx/gpx_file.rb
|
109
115
|
- lib/gpx/magellan_track_log.rb
|
@@ -114,6 +120,12 @@ files:
|
|
114
120
|
- lib/gpx/track_point.rb
|
115
121
|
- lib/gpx/version.rb
|
116
122
|
- lib/gpx/waypoint.rb
|
123
|
+
- tests/geojson_files/combined_data.json
|
124
|
+
- tests/geojson_files/line_string_data.json
|
125
|
+
- tests/geojson_files/multi_line_string_data.json
|
126
|
+
- tests/geojson_files/multi_point_data.json
|
127
|
+
- tests/geojson_files/point_data.json
|
128
|
+
- tests/geojson_test.rb
|
117
129
|
- tests/gpx10_test.rb
|
118
130
|
- tests/gpx_file_test.rb
|
119
131
|
- tests/gpx_files/arches.gpx
|
@@ -121,9 +133,11 @@ files:
|
|
121
133
|
- tests/gpx_files/gpx10.gpx
|
122
134
|
- tests/gpx_files/magellan_track.log
|
123
135
|
- tests/gpx_files/one_segment.gpx
|
136
|
+
- tests/gpx_files/one_segment_mixed_times.gpx
|
124
137
|
- tests/gpx_files/one_segment_no_time.gpx
|
125
138
|
- tests/gpx_files/one_track.gpx
|
126
139
|
- tests/gpx_files/routes.gpx
|
140
|
+
- tests/gpx_files/routes_without_names.gpx
|
127
141
|
- tests/gpx_files/tracks.gpx
|
128
142
|
- tests/gpx_files/waypoints.gpx
|
129
143
|
- tests/gpx_files/with_empty_tracks.gpx
|
@@ -139,24 +153,26 @@ files:
|
|
139
153
|
homepage: http://www.github.com/dougfales/gpx
|
140
154
|
licenses: []
|
141
155
|
metadata: {}
|
142
|
-
post_install_message:
|
156
|
+
post_install_message:
|
143
157
|
rdoc_options: []
|
144
158
|
require_paths:
|
145
159
|
- lib
|
146
160
|
required_ruby_version: !ruby/object:Gem::Requirement
|
147
161
|
requirements:
|
148
|
-
- - "
|
162
|
+
- - ">="
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: '2.7'
|
165
|
+
- - "<"
|
149
166
|
- !ruby/object:Gem::Version
|
150
|
-
version: '
|
167
|
+
version: '4'
|
151
168
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
152
169
|
requirements:
|
153
170
|
- - ">="
|
154
171
|
- !ruby/object:Gem::Version
|
155
172
|
version: '0'
|
156
173
|
requirements: []
|
157
|
-
|
158
|
-
|
159
|
-
signing_key:
|
174
|
+
rubygems_version: 3.4.10
|
175
|
+
signing_key:
|
160
176
|
specification_version: 4
|
161
177
|
summary: A basic API for reading and writing GPX files.
|
162
178
|
test_files: []
|