Class: EagleTree::Log::File
- Inherits:
-
Object
- Object
- EagleTree::Log::File
- Defined in:
- lib/eagletree/log/file.rb
Overview
Represents a single Eagle Tree data logger file.
Instance Attribute Summary collapse
-
#hardware ⇒ String
readonly
Hardware that recorded this file.
-
#name ⇒ String
readonly
Name given to the log file.
-
#sessions ⇒ Array<Session>
readonly
Sessions contained in this file.
-
#version ⇒ FixNum
readonly
Version of the data recorder software.
Class Method Summary collapse
-
.eagle_tree?(uri) ⇒ EagleTree::Log::File
Determines if the file at the given URI is a EagleTree log file.
Instance Method Summary collapse
-
#duration ⇒ Float
Gets the total duration of all sessions contained within.
-
#initialize(uri) ⇒ File
constructor
A new instance of File.
-
#to_kml(options = {}) ⇒ String
Converts the file into a KML document containing placemarks for each session containing GPS data.
-
#to_kml? ⇒ Boolean
Determines if KML methods can be called for this file.
-
#to_kml_file(options = {}) ⇒ KMLFile
Converts the file into a KMLFile containing placemarks for each session containing GPS data.
Constructor Details
#initialize(uri) ⇒ File
Returns a new instance of File.
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/eagletree/log/file.rb', line 30 def initialize uri @sessions = [] open(uri, 'r') do |file| @name = file.gets.strip @meta = file.gets.strip.split session_count = @meta[27].to_i if 'All Sessions' != file.gets.strip raise RuntimeError, "No 'All Sessions' marker found" end # empty files are still valid, just have no sessions if session_count.zero? break end # read off the full file range all_sessions_range = file.gets.strip.split.map(&:to_i) session_count.times do |expected| num = /Session (?<num>\d)/.match(file.gets)[:num].to_i if (expected + 1) != num raise RuntimeError, "Unexpected session marker encountered" end range = file.gets.strip.split.map(&:to_i).map { |v| v * @meta[22].to_i } @sessions << Session.new(num, range) end session_index = 0 session = @sessions[session_index] session_rows = [] CSV.new(file, { :col_sep => ' ', :headers => true }).each do |csv| if !((session.range[0]..(session.range[1]-1)).include? csv[0].to_i) session.rows = session_rows session_index += 1 session = @sessions[session_index] session_rows = [] end session_rows << csv end session.rows = session_rows unless session.nil? end @hardware = @meta[23] # TODO interpret correctly @version = @meta[25].to_f rescue raise ArgumentError, 'File does not appear to be an Eagle Tree log' end |
Instance Attribute Details
#hardware ⇒ String (readonly)
Returns Hardware that recorded this file.
11 12 13 |
# File 'lib/eagletree/log/file.rb', line 11 def hardware @hardware end |
#name ⇒ String (readonly)
Returns Name given to the log file.
14 15 16 |
# File 'lib/eagletree/log/file.rb', line 14 def name @name end |
#sessions ⇒ Array<Session> (readonly)
Returns Sessions contained in this file.
17 18 19 |
# File 'lib/eagletree/log/file.rb', line 17 def sessions @sessions end |
#version ⇒ FixNum (readonly)
Returns Version of the data recorder software.
20 21 22 |
# File 'lib/eagletree/log/file.rb', line 20 def version @version end |
Class Method Details
.eagle_tree?(uri) ⇒ EagleTree::Log::File
Determines if the file at the given URI is a EagleTree log file.
26 27 28 |
# File 'lib/eagletree/log/file.rb', line 26 def self.eagle_tree? uri File.new(uri) rescue nil end |
Instance Method Details
#duration ⇒ Float
Gets the total duration of all sessions contained within.
87 88 89 |
# File 'lib/eagletree/log/file.rb', line 87 def duration @sessions.map(&:duration).reduce(&:+) end |
#to_kml(options = {}) ⇒ String
Converts the file into a KML document containing placemarks for each session containing GPS data.
104 105 106 107 |
# File 'lib/eagletree/log/file.rb', line 104 def to_kml( = {}) raise RuntimeError, 'No coordinates available for KML generation' unless to_kml? to_kml_file().render end |
#to_kml? ⇒ Boolean
Determines if KML methods can be called for this file.
94 95 96 |
# File 'lib/eagletree/log/file.rb', line 94 def to_kml? @sessions.any?(&:to_kml?) end |
#to_kml_file(options = {}) ⇒ KMLFile
Converts the file into a KMLFile containing placemarks for each session containing GPS data.
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/eagletree/log/file.rb', line 116 def to_kml_file( = {}) raise RuntimeError, 'No coordinates available for KML generation' unless to_kml? = () style = 'kmlfile-style-id' kml_sessions = @sessions.select(&:to_kml?) marks = kml_sessions.each_with_object({ :style_url => "##{style}" }).map(&:to_kml_placemark) kml = KMLFile.new kml.objects << KML::Document.new( :name => [:name], :description => [:description], :styles => [ KML::Style.new( :id => style, :line_style => KML::LineStyle.new(:color => '7F00FFFF', :width => 4), :poly_style => KML::PolyStyle.new(:color => '7F00FF00') ) ], :features => marks ) kml end |