class GPX::GPX
Class is responsible for parsing GPX
files and calculate track statistics
Attributes
average_speed[R]
distances[R]
end_date[R]
max_speed[R]
points[R]
points_count[R]
speeds[R]
start_date[R]
times[R]
Public Class Methods
new(path)
click to toggle source
# File lib/gpx/gpx.rb, line 79 def initialize(path) @doc = nil begin path = open(path) doc = Nokogiri::XML(path) rescue raise GPXInvalidFileException end @points = [] @dates = [] doc.search('trkpt').map do |el| @dates.push Time.parse(el.at('time').text) @points.push GeoPoint.new( latitude: el['lat'].to_f, longitude: el['lon'].to_f, elevation: el.at('ele').text.to_f ) end end
Public Instance Methods
duration()
click to toggle source
# File lib/gpx/gpx.rb, line 66 def duration self.times.last[:t] end
length()
click to toggle source
# File lib/gpx/gpx.rb, line 75 def length self.distances.last[:s] end
Private Instance Methods
calculate_distances()
click to toggle source
# File lib/gpx/gpx.rb, line 115 def calculate_distances @distances = [ {ds: 0.0, s: 0.0} ] @points.each_cons(2) do |point| distance = { ds: difference = Haversine.distance(point[0], point[1]), s: difference + @distances.last[:s] } @distances.push distance end end
calculate_times()
click to toggle source
# File lib/gpx/gpx.rb, line 104 def calculate_times @times = [ { dt: 0.0, t: 0.0 } ] @dates.each_cons(2) do |date| time = { dt: difference = date[1] - date[0], t: difference + @times.last[:t] } @times.push time end end