class EagleTree::Log::Session

Represents an individual recording session.

Attributes

number[R]

@return [Fixnum] this sessions number in the data file

range[R]

@return [Array<Fixnum>] range of entries timestamps for this session

rows[R]

@return [Array] rows of raw data from session

Public Class Methods

new(number, range) click to toggle source
# File lib/eagletree/log/session.rb, line 18
def initialize number, range
  @number = number
  @range = range
end

Public Instance Methods

airspeeds(unit = :mph) click to toggle source

Gets the air speed (Pitot), in the desired unit.

@param unit one of :knots, :mph, :kph to define desired unit @return [Float] speed in the desired unit

# File lib/eagletree/log/session.rb, line 54
def airspeeds(unit = :mph)
  @airspeeds ||= float_fields('Airspeed')
end
airspeeds?() click to toggle source
# File lib/eagletree/log/session.rb, line 58
def airspeeds?
  nonzero?(airspeeds)
end
altitudes() click to toggle source
# File lib/eagletree/log/session.rb, line 42
def altitudes
  @altitudes ||= int_fields('Altitude')
end
altitudes?() click to toggle source
# File lib/eagletree/log/session.rb, line 46
def altitudes?
  nonzero?(altitudes)
end
amps() click to toggle source
# File lib/eagletree/log/session.rb, line 86
def amps
  @amps ||= float_fields('Amps*100').map { |val| val / 100.0 }
end
amps?() click to toggle source
# File lib/eagletree/log/session.rb, line 90
def amps?
  nonzero?(amps)
end
coords() click to toggle source
# File lib/eagletree/log/session.rb, line 186
def coords
  @coords ||= longitudes.zip(latitudes, gps_altitudes, gps_courses)
end
coords?() click to toggle source
# File lib/eagletree/log/session.rb, line 190
def coords?
  longitudes? || latitudes? || gps_altitudes? || gps_courses?
end
duration() click to toggle source

Gets the duration of the session, in seconds.

@return [Float] duration of the session, in seconds

# File lib/eagletree/log/session.rb, line 30
def duration
  @duration ||= (range[1] - range[0]) / 1000.0
end
gps_altitudes() click to toggle source
# File lib/eagletree/log/session.rb, line 150
def gps_altitudes
  @gps_altitudes ||= float_fields('GPSAlt')
end
gps_altitudes?() click to toggle source
# File lib/eagletree/log/session.rb, line 154
def gps_altitudes?
  nonzero?(gps_altitudes)
end
gps_courses() click to toggle source
# File lib/eagletree/log/session.rb, line 170
def gps_courses
  @gps_courses ||= float_fields('GPSCourse')
end
gps_courses?() click to toggle source
# File lib/eagletree/log/session.rb, line 174
def gps_courses?
  nonzero?(gps_courses)
end
gps_satellites() click to toggle source
# File lib/eagletree/log/session.rb, line 178
def gps_satellites
  @gps_satellites ||= int_fields('NumSats')
end
gps_satellites?() click to toggle source
# File lib/eagletree/log/session.rb, line 182
def gps_satellites?
  nonzero?(gps_satellites)
end
gps_speeds(unit = :mph) click to toggle source

Gets the ground speed (GPS), in the desired unit.

@param unit one of :knots, :mph, :kph to define desired unit @return [Float] speed in the desired unit

# File lib/eagletree/log/session.rb, line 162
def gps_speeds(unit = :mph)
  @gps_speeds ||= float_fields('GPSSpeed')
end
gps_speeds?() click to toggle source
# File lib/eagletree/log/session.rb, line 166
def gps_speeds?
  nonzero?(gps_speeds)
end
latitudes() click to toggle source
# File lib/eagletree/log/session.rb, line 134
def latitudes
  @latitudes ||= float_fields('GPSLat')
end
latitudes?() click to toggle source
# File lib/eagletree/log/session.rb, line 138
def latitudes?
  nonzero?(latitudes)
end
longitudes() click to toggle source
# File lib/eagletree/log/session.rb, line 142
def longitudes
  @longitudes ||= float_fields('GPSLon')
end
longitudes?() click to toggle source
# File lib/eagletree/log/session.rb, line 146
def longitudes?
  nonzero?(longitudes)
end
milliseconds() click to toggle source
# File lib/eagletree/log/session.rb, line 34
def milliseconds
  @milliseconds ||= int_fields('Milliseconds')
end
milliseconds?() click to toggle source
# File lib/eagletree/log/session.rb, line 38
def milliseconds?
  nonzero?(milliseconds)
end
pack_voltages() click to toggle source
# File lib/eagletree/log/session.rb, line 78
def pack_voltages
  @pack_voltages ||= float_fields('PackVolt*100').map { |val| val / 100.0 }
end
pack_voltages?() click to toggle source
# File lib/eagletree/log/session.rb, line 82
def pack_voltages?
  nonzero?(pack_voltages)
end
rows=(rows) click to toggle source
# File lib/eagletree/log/session.rb, line 23
def rows= rows
  @rows = rows
end
rpms() click to toggle source
# File lib/eagletree/log/session.rb, line 118
def rpms
  @rpms ||= int_fields('RPM')
end
rpms2() click to toggle source
# File lib/eagletree/log/session.rb, line 126
def rpms2
  @rpms2 ||= int_fields('RPM2')
end
rpms2?() click to toggle source
# File lib/eagletree/log/session.rb, line 130
def rpms2?
  nonzero?(rpms2)
end
rpms?() click to toggle source
# File lib/eagletree/log/session.rb, line 122
def rpms?
  nonzero?(rpms)
end
servo_currents() click to toggle source
# File lib/eagletree/log/session.rb, line 62
def servo_currents
  @servo_currents ||= float_fields('ServoCurrent*100').map { |val| val / 100.0 }
end
servo_currents?() click to toggle source
# File lib/eagletree/log/session.rb, line 66
def servo_currents?
  nonzero?(servo_currents)
end
temps1() click to toggle source
# File lib/eagletree/log/session.rb, line 94
def temps1
  @temps1 ||= float_fields('Temp1*10').map { |val| val / 10.0 }
end
temps1?() click to toggle source
# File lib/eagletree/log/session.rb, line 98
def temps1?
  nonzero?(temps1)
end
temps2() click to toggle source
# File lib/eagletree/log/session.rb, line 102
def temps2
  @temps2 ||= float_fields('Temp2*10').map { |val| val / 10.0 }
end
temps2?() click to toggle source
# File lib/eagletree/log/session.rb, line 106
def temps2?
  nonzero?(temps2)
end
temps3() click to toggle source
# File lib/eagletree/log/session.rb, line 110
def temps3
  @temps3 ||= float_fields('Temp3*10').map { |val| val / 10.0 }
end
temps3?() click to toggle source
# File lib/eagletree/log/session.rb, line 114
def temps3?
  nonzero?(temps3)
end
throttles() click to toggle source
# File lib/eagletree/log/session.rb, line 70
def throttles
  @throttles ||= int_fields('Throttle')
end
throttles?() click to toggle source
# File lib/eagletree/log/session.rb, line 74
def throttles?
  nonzero?(throttles)
end
to_kml(file_options = {}, placemark_options = {}) click to toggle source

Converts the session into a KML document containing a placemark.

@param file_options [Hash] hash containing options for file @param placemark_options [Hash] hash containing options for placemark @return [String] KML document for the session @see to_kml_file file options @see to_kml_placemark placemark options

# File lib/eagletree/log/session.rb, line 208
def to_kml(file_options = {}, placemark_options = {})
  raise RuntimeError, 'No coordinates available for KML generation' unless to_kml?
  to_kml_file(file_options, placemark_options).render
end
to_kml?() click to toggle source

Determines if KML methods can be called for this session.

@return [Boolean] true if KML can be generated for this session, false otherwise

# File lib/eagletree/log/session.rb, line 197
def to_kml?
  coords?
end
to_kml_file(file_options = {}, placemark_options = {}) click to toggle source

Converts the session into a KMLFile containing a placemark.

@param file_options [Hash] hash containing options for file @option file_options [String] :name name option of KML::Document @option file_options [String] :description name option of KML::Document @option file_options [String] :style_id id option of KML::Style @param placemark_options [Hash] hash containing options for placemark @return [KMLFile] file for the session @see to_kml_placemark placemark options

# File lib/eagletree/log/session.rb, line 222
def to_kml_file(file_options = {}, placemark_options = {})
  raise RuntimeError, 'No coordinates available for KML generation' unless to_kml?
  options = apply_default_file_options(file_options)

  kml = KMLFile.new
  kml.objects << KML::Document.new(
    :name => options[:name],
    :description => options[:description],
    :styles => [
      KML::Style.new(
        :id => options[:style_id],
        :line_style => KML::LineStyle.new(:color => '7F00FFFF', :width => 4),
        :poly_style => KML::PolyStyle.new(:color => '7F00FF00')
      )
    ],
    :features => [ to_kml_placemark(placemark_options) ]
  )
  kml
end
to_kml_placemark(options = {}) click to toggle source

Converts the session into a KML::Placemark containing GPS coordinates.

@param options [Hash] hash containing options for placemark @option options [String] :altitude_mode altitude_mode option of KML::LineString @option options [Boolean] :extrude extrude option of KML::LineString @option options [String] :name name option of KML::Placemark @option options [String] :style_url style_url option of KML::Placemark @option options [Boolean] :tessellate tessellate option of KML::LineString @return [KML::Placemark] placemark for the session

# File lib/eagletree/log/session.rb, line 251
def to_kml_placemark(options = {})
  raise RuntimeError, 'No coordinates available for KML generation' unless to_kml?
  options = apply_default_placemark_options(options)

  KML::Placemark.new(
    :name => options[:name],
    :style_url => options[:style_url],
    :geometry => KML::LineString.new(
      :altitude_mode => options[:altitude_mode],
      :extrude => options[:extrude],
      :tessellate => options[:tessellate],
      :coordinates => coords.map { |c| c.join(',') }.join(' ')
    )
  )
end

Private Instance Methods

apply_default_file_options(options) click to toggle source
# File lib/eagletree/log/session.rb, line 269
def apply_default_file_options options
  options = { :name => 'Eagle Tree GPS Path' }.merge(options)
  options = { :description => 'Session paths for GPS log data' }.merge(options)
  options = { :style_id => 'default-poly-style' }.merge(options)
  options
end
apply_default_placemark_options(options) click to toggle source
# File lib/eagletree/log/session.rb, line 276
def apply_default_placemark_options options
  options = { :altitude_mode => 'absolute' }.merge(options)
  options = { :extrude => true }.merge(options)
  options = { :name => "Session (#{duration.round(1)}s)" }.merge(options)
  options = { :style_url => '#default-poly-style' }.merge(options)
  options = { :tessellate => true }.merge(options)
  options
end
fields(name) click to toggle source
# File lib/eagletree/log/session.rb, line 297
def fields name
  @rows.each_with_object(name).map(&:[])
end
float_fields(name) click to toggle source
# File lib/eagletree/log/session.rb, line 293
def float_fields name
  fields(name).map(&:to_f)
end
int_fields(name) click to toggle source
# File lib/eagletree/log/session.rb, line 289
def int_fields name
  fields(name).map(&:to_i)
end
nonzero?(array) click to toggle source
# File lib/eagletree/log/session.rb, line 285
def nonzero? array
  !array.all?(&:zero?)
end