gpx 0.1 → 0.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.
- data/README +1 -1
- data/lib/gpx.rb +2 -1
- data/lib/gpx/bounds.rb +5 -5
- data/lib/gpx/gpx.rb +5 -5
- data/lib/gpx/gpx_file.rb +57 -37
- data/lib/gpx/point.rb +17 -14
- data/lib/gpx/route.rb +9 -9
- data/lib/gpx/segment.rb +17 -12
- data/lib/gpx/track.rb +10 -10
- data/lib/gpx/waypoint.rb +12 -12
- data/tests/gpx10_test.rb +12 -0
- data/tests/gpx_files/gpx10.gpx +17 -0
- data/tests/segment_test.rb +1 -0
- metadata +11 -8
data/README
CHANGED
@@ -33,7 +33,7 @@ work-in-progress than an attempt at full GPX compliance. The track side of the
|
|
33
33
|
library has seen much more use than the route/waypoint side, so if you're doing
|
34
34
|
something with routes or waypoints, you may need to tweak some things.
|
35
35
|
|
36
|
-
Since this code uses
|
36
|
+
Since this code uses XML to read an entire GPX file into memory, it is not
|
37
37
|
the fastest possible solution for working with GPX data, especially if you are
|
38
38
|
working with tracks from several days or weeks.
|
39
39
|
|
data/lib/gpx.rb
CHANGED
data/lib/gpx/bounds.rb
CHANGED
@@ -44,11 +44,11 @@ module GPX
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def to_xml
|
47
|
-
bnd =
|
48
|
-
bnd
|
49
|
-
bnd
|
50
|
-
bnd
|
51
|
-
bnd
|
47
|
+
bnd = XML::Node.new('bounds')
|
48
|
+
bnd['minlat'] = min_lat.to_s
|
49
|
+
bnd['minlon'] = min_lon.to_s
|
50
|
+
bnd['maxlat'] = max_lat.to_s
|
51
|
+
bnd['maxlon'] = max_lon.to_s
|
52
52
|
bnd
|
53
53
|
end
|
54
54
|
|
data/lib/gpx/gpx.rb
CHANGED
@@ -21,14 +21,14 @@
|
|
21
21
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
22
|
#++
|
23
23
|
module GPX
|
24
|
-
VERSION = "0.
|
24
|
+
VERSION = "0.2"
|
25
25
|
|
26
26
|
# A common base class which provides a useful initializer method to many
|
27
27
|
# class in the GPX library.
|
28
28
|
class Base
|
29
|
-
include
|
29
|
+
include XML
|
30
30
|
|
31
|
-
# This initializer can take
|
31
|
+
# This initializer can take an XML::Node and scrape out any text
|
32
32
|
# elements with the names given in the "text_elements" array. Each
|
33
33
|
# element found underneath "parent" with a name in "text_elements" causes
|
34
34
|
# an attribute to be initialized on the instance. This means you don't
|
@@ -37,8 +37,8 @@ module GPX
|
|
37
37
|
# attributes to this method.
|
38
38
|
def instantiate_with_text_elements(parent, text_elements)
|
39
39
|
text_elements.each do |el|
|
40
|
-
unless parent.
|
41
|
-
val = parent.
|
40
|
+
unless parent.find(el).empty?
|
41
|
+
val = parent.find(el).first.content
|
42
42
|
code = <<-code
|
43
43
|
attr_accessor #{ el }
|
44
44
|
#{el}=#{val}
|
data/lib/gpx/gpx_file.rb
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
#++
|
23
23
|
module GPX
|
24
24
|
class GPXFile < Base
|
25
|
-
attr_reader :tracks, :routes, :waypoints, :bounds, :lowest_point, :highest_point, :distance, :duration, :average_speed
|
25
|
+
attr_reader :tracks, :routes, :waypoints, :bounds, :lowest_point, :highest_point, :distance, :duration, :average_speed, :ns
|
26
26
|
|
27
27
|
|
28
28
|
# This initializer can be used to create a new GPXFile from an existing
|
@@ -44,30 +44,41 @@ module GPX
|
|
44
44
|
@duration = 0
|
45
45
|
if(opts[:gpx_file])
|
46
46
|
gpx_file = opts[:gpx_file]
|
47
|
-
case gpx_file
|
48
|
-
when String
|
49
|
-
|
50
|
-
end
|
47
|
+
#case gpx_file
|
48
|
+
#when String
|
49
|
+
# gpx_file = File.open(gpx_file)
|
50
|
+
#end
|
51
|
+
gpx_file = gpx_file.name if gpx_file.is_a?(File)
|
51
52
|
reset_meta_data
|
52
|
-
@xml = Document.
|
53
|
-
|
54
|
-
|
53
|
+
@xml = XML::Document.file(gpx_file)
|
54
|
+
|
55
|
+
# set XML namespace for XML find
|
56
|
+
if @xml.root.namespace_node
|
57
|
+
@ns = 'gpx:' + @xml.root.namespace_node.href
|
58
|
+
else
|
59
|
+
@ns = 'gpx:http://www.topografix.com/GPX/1/1' # default to GPX 1.1
|
60
|
+
end
|
61
|
+
|
62
|
+
bounds_element = (@xml.find("//gpx:gpx/gpx:metadata/gpx:bounds", @ns).to_a.first rescue nil)
|
55
63
|
if bounds_element
|
56
|
-
@bounds.min_lat = bounds_element
|
57
|
-
@bounds.min_lon = bounds_element
|
58
|
-
@bounds.max_lat = bounds_element
|
59
|
-
@bounds.max_lon = bounds_element
|
64
|
+
@bounds.min_lat = get_bounds_attr_value(bounds_element, %w{ min_lat minlat minLat })
|
65
|
+
@bounds.min_lon = get_bounds_attr_value(bounds_element, %w{ min_lon minlon minLon})
|
66
|
+
@bounds.max_lat = get_bounds_attr_value(bounds_element, %w{ max_lat maxlat maxLat})
|
67
|
+
@bounds.max_lon = get_bounds_attr_value(bounds_element, %w{ max_lon maxlon maxLon})
|
60
68
|
else
|
61
69
|
get_bounds = true
|
62
70
|
end
|
63
|
-
|
64
|
-
@tracks =
|
71
|
+
|
72
|
+
@tracks = []
|
73
|
+
@xml.find("//gpx:gpx/gpx:trk", @ns).each do |trk|
|
65
74
|
trk = Track.new(:element => trk, :gpx_file => self)
|
66
75
|
update_meta_data(trk, get_bounds)
|
67
|
-
trk
|
76
|
+
@tracks << trk
|
68
77
|
end
|
69
|
-
@waypoints =
|
70
|
-
@
|
78
|
+
@waypoints = []
|
79
|
+
@xml.find("//gpx:gpx/gpx:wpt", @ns).each { |wpt| @waypoints << Waypoint.new(:element => wpt, :gpx_file => self) }
|
80
|
+
@routes = []
|
81
|
+
@xml.find("//gpx:gpx/gpx:rte", @ns).each { |rte| @routes << Route.new(:element => rte, :gpx_file => self) }
|
71
82
|
|
72
83
|
@tracks.delete_if { |t| t.empty? }
|
73
84
|
|
@@ -82,6 +93,15 @@ module GPX
|
|
82
93
|
end
|
83
94
|
end
|
84
95
|
|
96
|
+
def get_bounds_attr_value(el, possible_names)
|
97
|
+
result = nil
|
98
|
+
possible_names.each do |name|
|
99
|
+
result = el[name]
|
100
|
+
break unless result.nil?
|
101
|
+
end
|
102
|
+
return (result.to_f rescue nil)
|
103
|
+
end
|
104
|
+
|
85
105
|
# Returns the distance, in kilometers, meters, or miles, of all of the
|
86
106
|
# tracks and segments contained in this GPXFile.
|
87
107
|
def distance(opts = { :units => 'kilometers' })
|
@@ -175,32 +195,32 @@ module GPX
|
|
175
195
|
def write(filename)
|
176
196
|
|
177
197
|
doc = Document.new
|
178
|
-
|
179
|
-
doc.
|
180
|
-
gpx_elem
|
181
|
-
gpx_elem
|
182
|
-
gpx_elem
|
183
|
-
gpx_elem
|
184
|
-
gpx_elem
|
198
|
+
doc.root = Node.new('gpx')
|
199
|
+
gpx_elem = doc.root
|
200
|
+
gpx_elem['xmlns:xsi'] = "http://www.w3.org/2001/XMLSchema-instance"
|
201
|
+
gpx_elem['xmlns'] = "http://www.topografix.com/GPX/1/1"
|
202
|
+
gpx_elem['version'] = "1.1"
|
203
|
+
gpx_elem['creator'] = "GPX RubyGem 0.1 Copyright 2006 Doug Fales -- http://walkingboss.com"
|
204
|
+
gpx_elem['xsi:schemaLocation'] = "http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"
|
185
205
|
|
186
|
-
meta_data_elem =
|
187
|
-
name_elem =
|
188
|
-
name_elem
|
189
|
-
meta_data_elem
|
206
|
+
meta_data_elem = Node.new('metadata')
|
207
|
+
name_elem = Node.new('name')
|
208
|
+
name_elem << File.basename(filename)
|
209
|
+
meta_data_elem << name_elem
|
190
210
|
|
191
|
-
time_elem =
|
192
|
-
time_elem
|
193
|
-
meta_data_elem
|
211
|
+
time_elem = Node.new('time')
|
212
|
+
time_elem << Time.now.xmlschema
|
213
|
+
meta_data_elem << time_elem
|
194
214
|
|
195
|
-
meta_data_elem
|
215
|
+
meta_data_elem << bounds.to_xml
|
196
216
|
|
197
|
-
gpx_elem
|
217
|
+
gpx_elem << meta_data_elem
|
198
218
|
|
199
|
-
tracks.each { |t|
|
200
|
-
waypoints.each { |w| gpx_elem
|
201
|
-
routes.each { |r| gpx_elem
|
219
|
+
tracks.each { |t| gpx_elem << t.to_xml } unless tracks.nil?
|
220
|
+
waypoints.each { |w| gpx_elem << w.to_xml } unless waypoints.nil?
|
221
|
+
routes.each { |r| gpx_elem << r.to_xml } unless routes.nil?
|
202
222
|
|
203
|
-
|
223
|
+
doc.save(filename, true)
|
204
224
|
end
|
205
225
|
|
206
226
|
private
|
data/lib/gpx/point.rb
CHANGED
@@ -29,16 +29,17 @@ module GPX
|
|
29
29
|
|
30
30
|
# When you need to manipulate individual points, you can create a Point
|
31
31
|
# object with a latitude, a longitude, an elevation, and a time. In
|
32
|
-
# addition, you can pass
|
32
|
+
# addition, you can pass an XML element to this initializer, and the
|
33
33
|
# relevant info will be parsed out.
|
34
34
|
def initialize(opts = {:lat => 0.0, :lon => 0.0, :elevation => 0.0, :time => Time.now } )
|
35
|
+
@gpx_file = opts[:gpx_file]
|
35
36
|
if (opts[:element])
|
36
37
|
elem = opts[:element]
|
37
|
-
@lat, @lon = elem
|
38
|
+
@lat, @lon = elem["lat"].to_f, elem["lon"].to_f
|
38
39
|
@latr, @lonr = (D_TO_R * @lat), (D_TO_R * @lon)
|
39
40
|
#'-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
|
40
|
-
@time = (Time.xmlschema(elem.
|
41
|
-
@elevation = elem.
|
41
|
+
@time = (Time.xmlschema(elem.find("gpx:time", @gpx_file.ns).first.content) rescue nil)
|
42
|
+
@elevation = elem.find("gpx:ele", @gpx_file.ns).first.content.to_f unless elem.find("gpx:ele", @gpx_file.ns).empty?
|
42
43
|
else
|
43
44
|
@lat = opts[:lat]
|
44
45
|
@lon = opts[:lon]
|
@@ -85,17 +86,19 @@ module GPX
|
|
85
86
|
@lon = longitude
|
86
87
|
end
|
87
88
|
|
88
|
-
# Convert this point to a
|
89
|
+
# Convert this point to a XML::Node.
|
89
90
|
def to_xml(elem_name = 'trkpt')
|
90
|
-
pt =
|
91
|
-
pt
|
92
|
-
pt
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
91
|
+
pt = Node.new('trkpt')
|
92
|
+
pt['lat'] = lat.to_s
|
93
|
+
pt['lon'] = lon.to_s
|
94
|
+
unless time.nil?
|
95
|
+
time_elem = Node.new('time')
|
96
|
+
time_elem << time.xmlschema
|
97
|
+
pt << time_elem
|
98
|
+
end
|
99
|
+
elev = Node.new('ele')
|
100
|
+
elev << elevation
|
101
|
+
pt << elev
|
99
102
|
pt
|
100
103
|
end
|
101
104
|
|
data/lib/gpx/route.rb
CHANGED
@@ -29,13 +29,13 @@ module GPX
|
|
29
29
|
|
30
30
|
attr_reader :points, :name, :gpx_file
|
31
31
|
|
32
|
-
# Initialize a Route from a
|
32
|
+
# Initialize a Route from a XML::Node.
|
33
33
|
def initialize(opts = {})
|
34
34
|
rte_element = opts[:element]
|
35
35
|
@gpx_file = opts[:gpx_file]
|
36
|
-
@name = rte_element.
|
36
|
+
@name = rte_element.find("child::gpx:name", @ns).first.content
|
37
37
|
@points = []
|
38
|
-
|
38
|
+
rte_element.find("child::gpx:rtept", @ns).each do |point|
|
39
39
|
@points << Point.new(:element => point)
|
40
40
|
end
|
41
41
|
|
@@ -51,13 +51,13 @@ module GPX
|
|
51
51
|
points.delete_if{ |pt| area.contains? pt }
|
52
52
|
end
|
53
53
|
|
54
|
-
# Convert this Route to a
|
54
|
+
# Convert this Route to a XML::Node.
|
55
55
|
def to_xml
|
56
|
-
rte =
|
57
|
-
name_elem =
|
58
|
-
name_elem
|
59
|
-
rte
|
60
|
-
points.each { |rte_pt| rte
|
56
|
+
rte = Node.new('rte')
|
57
|
+
name_elem = Node.new('name')
|
58
|
+
name_elem << name
|
59
|
+
rte << name_elem
|
60
|
+
points.each { |rte_pt| rte << rte_pt.to_xml('rtept') }
|
61
61
|
rte
|
62
62
|
end
|
63
63
|
|
data/lib/gpx/segment.rb
CHANGED
@@ -31,9 +31,10 @@ module GPX
|
|
31
31
|
attr_reader :earliest_point, :latest_point, :bounds, :highest_point, :lowest_point, :distance
|
32
32
|
attr_accessor :points, :track
|
33
33
|
|
34
|
-
# If a
|
34
|
+
# If a XML::Node object is passed-in, this will initialize a new
|
35
35
|
# Segment based on its contents. Otherwise, a blank Segment is created.
|
36
36
|
def initialize(opts = {})
|
37
|
+
@gpx_file = opts[:gpx_file]
|
37
38
|
@track = opts[:track]
|
38
39
|
@points = []
|
39
40
|
@earliest_point = nil
|
@@ -45,11 +46,13 @@ module GPX
|
|
45
46
|
if(opts[:element])
|
46
47
|
segment_element = opts[:element]
|
47
48
|
last_pt = nil
|
48
|
-
|
49
|
-
|
50
|
-
pt = TrackPoint.new(:element => trkpt, :segment => self)
|
51
|
-
|
52
|
-
|
49
|
+
if segment_element.is_a?(XML::Node)
|
50
|
+
segment_element.find("child::gpx:trkpt", @gpx_file.ns).each do |trkpt|
|
51
|
+
pt = TrackPoint.new(:element => trkpt, :segment => self, :gpx_file => @gpx_file)
|
52
|
+
unless pt.time.nil?
|
53
|
+
@earliest_point = pt if(@earliest_point.nil? or pt.time < @earliest_point.time)
|
54
|
+
@latest_point = pt if(@latest_point.nil? or pt.time > @latest_point.time)
|
55
|
+
end
|
53
56
|
unless pt.elevation.nil?
|
54
57
|
@lowest_point = pt if(@lowest_point.nil? or pt.elevation < @lowest_point.elevation)
|
55
58
|
@highest_point = pt if(@highest_point.nil? or pt.elevation > @highest_point.elevation)
|
@@ -85,7 +88,7 @@ module GPX
|
|
85
88
|
|
86
89
|
# Returns true if the given time is within this Segment.
|
87
90
|
def contains_time?(time)
|
88
|
-
(time >= @earliest_point.time and time <= @latest_point.time)
|
91
|
+
(time >= @earliest_point.time and time <= @latest_point.time) rescue false
|
89
92
|
end
|
90
93
|
|
91
94
|
# Finds the closest point in time to the passed-in time argument. Useful
|
@@ -129,10 +132,10 @@ module GPX
|
|
129
132
|
(points.nil? or (points.size == 0))
|
130
133
|
end
|
131
134
|
|
132
|
-
# Converts this Segment to a
|
135
|
+
# Converts this Segment to a XML::Node object.
|
133
136
|
def to_xml
|
134
|
-
seg =
|
135
|
-
points.each { |pt| seg
|
137
|
+
seg = Node.new('trkseg')
|
138
|
+
points.each { |pt| seg << pt.to_xml }
|
136
139
|
seg
|
137
140
|
end
|
138
141
|
|
@@ -202,8 +205,10 @@ module GPX
|
|
202
205
|
end
|
203
206
|
|
204
207
|
def update_meta_data(pt, last_pt)
|
205
|
-
|
206
|
-
|
208
|
+
unless pt.time.nil?
|
209
|
+
@earliest_point = pt if(@earliest_point.nil? or pt.time < @earliest_point.time)
|
210
|
+
@latest_point = pt if(@latest_point.nil? or pt.time > @latest_point.time)
|
211
|
+
end
|
207
212
|
unless pt.elevation.nil?
|
208
213
|
@lowest_point = pt if(@lowest_point.nil? or pt.elevation < @lowest_point.elevation)
|
209
214
|
@highest_point = pt if(@highest_point.nil? or pt.elevation > @highest_point.elevation)
|
data/lib/gpx/track.rb
CHANGED
@@ -32,7 +32,7 @@ module GPX
|
|
32
32
|
attr_reader :points, :bounds, :lowest_point, :highest_point, :distance
|
33
33
|
attr_accessor :segments, :name, :gpx_file
|
34
34
|
|
35
|
-
# Initialize a track from a
|
35
|
+
# Initialize a track from a XML::Node, or, if no :element option is
|
36
36
|
# passed, initialize a blank Track object.
|
37
37
|
def initialize(opts = {})
|
38
38
|
@gpx_file = opts[:gpx_file]
|
@@ -41,9 +41,9 @@ module GPX
|
|
41
41
|
reset_meta_data
|
42
42
|
if(opts[:element])
|
43
43
|
trk_element = opts[:element]
|
44
|
-
@name = (trk_element.
|
45
|
-
|
46
|
-
seg = Segment.new(:element => seg_element, :track => self)
|
44
|
+
@name = (trk_element.find("child::gpx:name", @gpx_file.ns).first.content rescue "")
|
45
|
+
trk_element.find("child::gpx:trkseg", @gpx_file.ns).each do |seg_element|
|
46
|
+
seg = Segment.new(:element => seg_element, :track => self, :gpx_file => @gpx_file)
|
47
47
|
update_meta_data(seg)
|
48
48
|
@segments << seg
|
49
49
|
@points.concat(seg.points) unless seg.nil?
|
@@ -101,14 +101,14 @@ module GPX
|
|
101
101
|
(points.nil? or points.size.zero?)
|
102
102
|
end
|
103
103
|
|
104
|
-
# Creates a new
|
104
|
+
# Creates a new XML::Node from the contents of this instance.
|
105
105
|
def to_xml
|
106
|
-
trk=
|
107
|
-
name_elem =
|
108
|
-
name_elem
|
109
|
-
trk
|
106
|
+
trk= Node.new('trk')
|
107
|
+
name_elem = Node.new('name')
|
108
|
+
name_elem << name
|
109
|
+
trk << name_elem
|
110
110
|
segments.each do |seg|
|
111
|
-
trk
|
111
|
+
trk << seg.to_xml
|
112
112
|
end
|
113
113
|
trk
|
114
114
|
end
|
data/lib/gpx/waypoint.rb
CHANGED
@@ -39,7 +39,7 @@ module GPX
|
|
39
39
|
def delete_area(area)
|
40
40
|
end
|
41
41
|
|
42
|
-
# Initializes a waypoint from a
|
42
|
+
# Initializes a waypoint from a XML::Node.
|
43
43
|
def initialize(opts = {})
|
44
44
|
wpt_elem = opts[:element]
|
45
45
|
super(:element => wpt_elem)
|
@@ -47,25 +47,25 @@ module GPX
|
|
47
47
|
@gpx_file = opts[:gpx_file]
|
48
48
|
end
|
49
49
|
|
50
|
-
# Converts a waypoint to a
|
50
|
+
# Converts a waypoint to a XML::Node.
|
51
51
|
def to_xml
|
52
|
-
wpt =
|
52
|
+
wpt = Node.new('wpt')
|
53
53
|
wpt.attributes['lat'] = lat
|
54
54
|
wpt.attributes['lon'] = lon
|
55
55
|
if self.respond_to? :name
|
56
|
-
name_elem =
|
57
|
-
name_elem
|
58
|
-
wpt
|
56
|
+
name_elem = Node.new('name')
|
57
|
+
name_elem << self.name
|
58
|
+
wpt << name_elem
|
59
59
|
end
|
60
60
|
if self.respond_to? :sym
|
61
|
-
sym_elem =
|
62
|
-
sym_elem
|
63
|
-
wpt
|
61
|
+
sym_elem = Node.new('sym')
|
62
|
+
sym_elem << self.sym
|
63
|
+
wpt << sym_elem
|
64
64
|
end
|
65
65
|
if self.respond_to? :ele
|
66
|
-
elev_elem =
|
67
|
-
elev_elem
|
68
|
-
wpt
|
66
|
+
elev_elem = Node.new('ele')
|
67
|
+
elev_elem << self.ele
|
68
|
+
wpt << elev_elem
|
69
69
|
end
|
70
70
|
wpt
|
71
71
|
end
|
data/tests/gpx10_test.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require File.dirname(__FILE__) + '/../lib/gpx'
|
3
|
+
|
4
|
+
class TestGPX10 < Test::Unit::TestCase
|
5
|
+
GPX_FILE = File.join(File.dirname(__FILE__), "gpx_files/gpx10.gpx")
|
6
|
+
|
7
|
+
def test_read
|
8
|
+
# make sure we can read a GPX 1.0 file
|
9
|
+
@gpx_file = GPX::GPXFile.new(:gpx_file => GPX_FILE)
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<gpx version="1.0"
|
3
|
+
creator="GPSBabel - http://www.gpsbabel.org"
|
4
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
5
|
+
xmlns="http://www.topografix.com/GPX/1/0"
|
6
|
+
xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
|
7
|
+
<trk>
|
8
|
+
<name>ACTIVE LOG #74</name>
|
9
|
+
<number>82</number>
|
10
|
+
<trkseg>
|
11
|
+
<trkpt lat="37.378388923" lon="-122.063654875">
|
12
|
+
<ele>35.706055</ele>
|
13
|
+
<time>2007-11-23T23:49:43Z</time>
|
14
|
+
</trkpt>
|
15
|
+
</trkseg>
|
16
|
+
</trk>
|
17
|
+
</gpx>
|
data/tests/segment_test.rb
CHANGED
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.
|
2
|
+
rubygems_version: 0.9.4
|
3
3
|
specification_version: 1
|
4
4
|
name: gpx
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: "0.
|
7
|
-
date:
|
6
|
+
version: "0.2"
|
7
|
+
date: 2007-11-29 00:00:00 -07:00
|
8
8
|
summary: A basic API for reading and writing GPX files.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -25,11 +25,11 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
|
|
25
25
|
platform: ruby
|
26
26
|
signing_key:
|
27
27
|
cert_chain:
|
28
|
+
post_install_message:
|
28
29
|
authors:
|
29
30
|
- Doug Fales
|
30
31
|
files:
|
31
32
|
- lib/gpx
|
32
|
-
- lib/gpx.rb
|
33
33
|
- lib/gpx/bounds.rb
|
34
34
|
- lib/gpx/gpx.rb
|
35
35
|
- lib/gpx/gpx_file.rb
|
@@ -40,18 +40,21 @@ files:
|
|
40
40
|
- lib/gpx/track.rb
|
41
41
|
- lib/gpx/trackpoint.rb
|
42
42
|
- lib/gpx/waypoint.rb
|
43
|
+
- lib/gpx.rb
|
44
|
+
- tests/gpx10_test.rb
|
43
45
|
- tests/gpx_files
|
44
|
-
- tests/magellan_test.rb
|
45
|
-
- tests/segment_test.rb
|
46
|
-
- tests/track_file_test.rb
|
47
|
-
- tests/track_test.rb
|
48
46
|
- tests/gpx_files/arches.gpx
|
47
|
+
- tests/gpx_files/gpx10.gpx
|
49
48
|
- tests/gpx_files/magellan_track.log
|
50
49
|
- tests/gpx_files/one_segment.gpx
|
51
50
|
- tests/gpx_files/one_track.gpx
|
52
51
|
- tests/gpx_files/routes.gpx
|
53
52
|
- tests/gpx_files/tracks.gpx
|
54
53
|
- tests/gpx_files/waypoints.gpx
|
54
|
+
- tests/magellan_test.rb
|
55
|
+
- tests/segment_test.rb
|
56
|
+
- tests/track_file_test.rb
|
57
|
+
- tests/track_test.rb
|
55
58
|
- Rakefile
|
56
59
|
- README
|
57
60
|
test_files: []
|