class V900Track
Attributes
filename[R]
Public Class Methods
new(hash)
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 9 def initialize hash @filename = hash[:filename] if hash[:empty] @data = [] else read filename end end
Public Instance Methods
[](i)
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 58 def [](i) @data[i] end
add(v900_waypoint)
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 27 def add v900_waypoint @data << v900_waypoint end
bearing()
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 124 def bearing Geocoder::Calculations.compass_point(Geocoder::Calculations.bearing_between(first.lat_lon, last.lat_lon)) end
distance()
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 132 def distance distance = 0 range.each do |i| distance += Geocoder::Calculations.distance_between(self[i].lat_lon, self[i-1].lat_lon, :units => :km) end distance end
distance_aerial()
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 128 def distance_aerial Geocoder::Calculations.distance_between(first.lat_lon, last.lat_lon, :units => :km) end
duration()
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 80 def duration last.time - first.time end
each(&block)
click to toggle source
stackoverflow.com/questions/19226821/iterator-array-each-as-return-value-of-method-in-ruby
# File lib/columbus3/v900track/v900track.rb, line 50 def each(&block) @data.each(&block) end
end_date()
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 76 def end_date last.time end
end_location()
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 120 def end_location Geocoder.address(last.lat_lon) end
first()
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 62 def first @data[0] end
get(i)
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 54 def get i self[i] end
last()
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 66 def last @data[size - 1] end
max_height()
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 96 def max_height get :>, :height end
max_height_idx()
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 112 def max_height_idx get_idx :>, :height end
max_speed()
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 88 def max_speed get :>, :speed end
max_speed_idx()
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 104 def max_speed_idx get_idx :>, :speed end
metadata()
click to toggle source
return a hash with all the metadata … it could be a nice metamethod, creating a key for each public methods
# File lib/columbus3/v900track/v900track.rb, line 142 def metadata metadata = Hash.new [:start_date, :end_date, :duration, :size, :start_location, :end_location, :min_speed, :max_speed, :min_height, :max_height, :bearing, :distance, :distance_aerial].map { |x| metadata[x] = self.send(x) } metadata end
min_height()
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 92 def min_height get :<, :height end
min_height_idx()
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 108 def min_height_idx get_idx :<, :height end
min_speed()
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 84 def min_speed get :<, :speed end
min_speed_idx()
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 100 def min_speed_idx get_idx :<, :speed end
points()
click to toggle source
an alias for size
# File lib/columbus3/v900track/v900track.rb, line 36 def points @data.size end
range()
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 40 def range (0..self.size - 1) end
read(filename)
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 18 def read filename @filename = filename @data = CSV::read(filename, headers: true).each.map { |item| V900Waypoint.new(item) } end
save()
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 23 def save File.open(@filename, 'w') {|f| f.write(to_s) } end
size()
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 31 def size @data.size end
start_date()
click to toggle source
statistics
# File lib/columbus3/v900track/v900track.rb, line 72 def start_date first.time end
start_location()
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 116 def start_location Geocoder.address(first.lat_lon) end
to_a()
click to toggle source
to enumerate (till I can solve the each issue)
# File lib/columbus3/v900track/v900track.rb, line 45 def to_a @data end
to_s()
click to toggle source
a slightly more robust implementation calls data in the same order in which the header is printed
# File lib/columbus3/v900track/v900track.rb, line 152 def to_s string = "INDEX,TAG,DATE,TIME,LATITUDE N/S,LONGITUDE E/W,HEIGHT,SPEED,HEADING,VOX\n" @data.each do |data| string << data.to_s + "\n" end string end
Private Instance Methods
get_idx(comparison, method)
click to toggle source
# File lib/columbus3/v900track/v900track.rb, line 170 def get_idx comparison, method current = self[0].send(method) # initialize max or min to the first value in the file idx = 0 range.each do |i| if self[i].send(method).send(comparison, current) then current = self[i].send(method) idx = i end end idx end