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