Sha256: 19233a03b7fc47886139c7e86161ba1865f20e7b2749bae4af7acf6788763274

Contents?: true

Size: 1.21 KB

Versions: 5

Compression:

Stored size: 1.21 KB

Contents

require 'nokogiri'
require 'duration'
require 'date'
require 'time'

module Natour
  class GPXFile < GPSTrack
    def initialize(filename)
      @doc = Nokogiri.XML(File.read(filename, mode: 'r:utf-8'))

      date = Date.parse(@doc.at('/xmlns:gpx/xmlns:metadata/xmlns:time').text)
      stats = @doc.at('/xmlns:gpx/xmlns:trk/xmlns:extensions/gpxtrkx:TrackStatsExtension')
      if stats
        ascent = stats.at('./gpxtrkx:Ascent').text.to_i
        descent = stats.at('./gpxtrkx:Descent').text.to_i
        distance = stats.at('./gpxtrkx:Distance').text.to_i
        duration = Duration.new(stats.at('./gpxtrkx:TotalElapsedTime').text.to_i)
      end

      start_point = to_track_point(@doc.at('/xmlns:gpx/xmlns:trk/xmlns:trkseg[1]/xmlns:trkpt[1]'))
      end_point = to_track_point(@doc.at('/xmlns:gpx/xmlns:trk/xmlns:trkseg[last()]/xmlns:trkpt[last()]'))

      super(filename, date, ascent, descent, distance, duration, start_point, end_point)
    end

    def to_gpx
      @doc.to_xml
    end

    private

    def to_track_point(trkpt)
      GPSTrackPoint.new(
        trkpt['lat'].to_f,
        trkpt['lon'].to_f,
        trkpt.at('./xmlns:ele').text.to_f,
        Time.parse(trkpt.at('./xmlns:time').text)
      )
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
natour-0.5.0 lib/natour/gpx_file.rb
natour-0.4.0 lib/natour/gpx_file.rb
natour-0.3.0 lib/natour/gpx_file.rb
natour-0.2.0 lib/natour/gpx_file.rb
natour-0.1.0 lib/natour/gpx_file.rb