class EagleTree::Log::Session
Represents an individual recording session.
Attributes
@return [Fixnum] this sessions number in the data file
@return [Array<Fixnum>] range of entries timestamps for this session
@return [Array] rows of raw data from session
Public Class Methods
# File lib/eagletree/log/session.rb, line 18 def initialize number, range @number = number @range = range end
Public Instance Methods
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
# File lib/eagletree/log/session.rb, line 58 def airspeeds? nonzero?(airspeeds) end
# File lib/eagletree/log/session.rb, line 42 def altitudes @altitudes ||= int_fields('Altitude') end
# File lib/eagletree/log/session.rb, line 46 def altitudes? nonzero?(altitudes) end
# File lib/eagletree/log/session.rb, line 86 def amps @amps ||= float_fields('Amps*100').map { |val| val / 100.0 } end
# File lib/eagletree/log/session.rb, line 90 def amps? nonzero?(amps) end
# File lib/eagletree/log/session.rb, line 186 def coords @coords ||= longitudes.zip(latitudes, gps_altitudes, gps_courses) end
# File lib/eagletree/log/session.rb, line 190 def coords? longitudes? || latitudes? || gps_altitudes? || gps_courses? end
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
# File lib/eagletree/log/session.rb, line 150 def gps_altitudes @gps_altitudes ||= float_fields('GPSAlt') end
# File lib/eagletree/log/session.rb, line 154 def gps_altitudes? nonzero?(gps_altitudes) end
# File lib/eagletree/log/session.rb, line 170 def gps_courses @gps_courses ||= float_fields('GPSCourse') end
# File lib/eagletree/log/session.rb, line 174 def gps_courses? nonzero?(gps_courses) end
# File lib/eagletree/log/session.rb, line 178 def gps_satellites @gps_satellites ||= int_fields('NumSats') end
# File lib/eagletree/log/session.rb, line 182 def gps_satellites? nonzero?(gps_satellites) end
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
# File lib/eagletree/log/session.rb, line 166 def gps_speeds? nonzero?(gps_speeds) end
# File lib/eagletree/log/session.rb, line 134 def latitudes @latitudes ||= float_fields('GPSLat') end
# File lib/eagletree/log/session.rb, line 138 def latitudes? nonzero?(latitudes) end
# File lib/eagletree/log/session.rb, line 142 def longitudes @longitudes ||= float_fields('GPSLon') end
# File lib/eagletree/log/session.rb, line 146 def longitudes? nonzero?(longitudes) end
# File lib/eagletree/log/session.rb, line 34 def milliseconds @milliseconds ||= int_fields('Milliseconds') end
# File lib/eagletree/log/session.rb, line 38 def milliseconds? nonzero?(milliseconds) end
# File lib/eagletree/log/session.rb, line 78 def pack_voltages @pack_voltages ||= float_fields('PackVolt*100').map { |val| val / 100.0 } end
# File lib/eagletree/log/session.rb, line 82 def pack_voltages? nonzero?(pack_voltages) end
# File lib/eagletree/log/session.rb, line 23 def rows= rows @rows = rows end
# File lib/eagletree/log/session.rb, line 118 def rpms @rpms ||= int_fields('RPM') end
# File lib/eagletree/log/session.rb, line 126 def rpms2 @rpms2 ||= int_fields('RPM2') end
# File lib/eagletree/log/session.rb, line 130 def rpms2? nonzero?(rpms2) end
# File lib/eagletree/log/session.rb, line 122 def rpms? nonzero?(rpms) end
# File lib/eagletree/log/session.rb, line 62 def servo_currents @servo_currents ||= float_fields('ServoCurrent*100').map { |val| val / 100.0 } end
# File lib/eagletree/log/session.rb, line 66 def servo_currents? nonzero?(servo_currents) end
# File lib/eagletree/log/session.rb, line 94 def temps1 @temps1 ||= float_fields('Temp1*10').map { |val| val / 10.0 } end
# File lib/eagletree/log/session.rb, line 98 def temps1? nonzero?(temps1) end
# File lib/eagletree/log/session.rb, line 102 def temps2 @temps2 ||= float_fields('Temp2*10').map { |val| val / 10.0 } end
# File lib/eagletree/log/session.rb, line 106 def temps2? nonzero?(temps2) end
# File lib/eagletree/log/session.rb, line 110 def temps3 @temps3 ||= float_fields('Temp3*10').map { |val| val / 10.0 } end
# File lib/eagletree/log/session.rb, line 114 def temps3? nonzero?(temps3) end
# File lib/eagletree/log/session.rb, line 70 def throttles @throttles ||= int_fields('Throttle') end
# File lib/eagletree/log/session.rb, line 74 def throttles? nonzero?(throttles) end
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
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
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
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
# 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
# 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
# File lib/eagletree/log/session.rb, line 297 def fields name @rows.each_with_object(name).map(&:[]) end
# File lib/eagletree/log/session.rb, line 293 def float_fields name fields(name).map(&:to_f) end
# File lib/eagletree/log/session.rb, line 289 def int_fields name fields(name).map(&:to_i) end
# File lib/eagletree/log/session.rb, line 285 def nonzero? array !array.all?(&:zero?) end