class Natour::FITFile

Public Class Methods

new(filename) click to toggle source
Calls superclass method
# File lib/natour/fit_file.rb, line 9
def initialize(filename)
  Fit4Ruby::Log.level = Logger::ERROR
  @activity = Fit4Ruby.read(filename)

  date = Date.parse(@activity.local_timestamp.to_s)
  session = @activity.sessions.first
  ascent = session.total_ascent
  descent = session.total_descent
  distance = session.total_distance.to_i
  duration = Duration.new(session.total_elapsed_time)

  records = @activity.records.reject { |record| [record.position_lat, record.position_lat].any?(&:nil?) }
  start_point = to_track_point(records[0])
  end_point = to_track_point(records[-1])

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

Public Instance Methods

to_gpx() click to toggle source
# File lib/natour/fit_file.rb, line 27
def to_gpx
  decl = Nokogiri.XML('<?xml version="1.0" encoding="UTF-8" standalone="no"?>')
  builder = Nokogiri::XML::Builder.with(decl) do |doc|
    doc.gpx(
      'creator' => 'natour',
      'version' => '1.1',
      'xmlns' => 'http://www.topografix.com/GPX/1/1',
      'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
      'xsi:schemaLocation' => 'http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd'
    ) do
      doc.trk do
        doc.trkseg do
          records = @activity.records.reject { |record| [record.position_lat, record.position_lat].any?(&:nil?) }
          records.each do |record|
            doc.trkpt('lat' => record.position_lat, 'lon' => record.position_long) do
              doc.ele record.enhanced_elevation
              doc.time record.timestamp.utc.xmlschema
            end
          end
        end
      end
    end
  end

  builder.to_xml
end

Private Instance Methods

to_track_point(record) click to toggle source
# File lib/natour/fit_file.rb, line 56
def to_track_point(record)
  GPSTrackPoint.new(
    record.position_lat,
    record.position_long,
    record.enhanced_elevation,
    Time.parse(record.timestamp.to_s).utc
  )
end