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