Class: V900Track

Inherits:
Object
  • Object
show all
Defined in:
lib/columbus3/v900track/v900track.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(hash) ⇒ V900Track

Returns a new instance of V900Track.



9
10
11
12
13
14
15
16
# File 'lib/columbus3/v900track/v900track.rb', line 9

def initialize hash 
  @filename = hash[:filename]
  if hash[:empty]
    @data = []
  else
    read filename
  end
end

Instance Attribute Details

#filenameObject (readonly)

Returns the value of attribute filename.



7
8
9
# File 'lib/columbus3/v900track/v900track.rb', line 7

def filename
  @filename
end

Instance Method Details

#[](i) ⇒ Object



58
59
60
# File 'lib/columbus3/v900track/v900track.rb', line 58

def [](i)
  @data[i]
end

#add(v900_waypoint) ⇒ Object



27
28
29
# File 'lib/columbus3/v900track/v900track.rb', line 27

def add v900_waypoint
  @data << v900_waypoint
end

#bearingObject



124
125
126
# 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

#distanceObject



132
133
134
135
136
137
138
# 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_aerialObject



128
129
130
# File 'lib/columbus3/v900track/v900track.rb', line 128

def distance_aerial
  Geocoder::Calculations.distance_between(first.lat_lon, last.lat_lon, :units => :km)
end

#durationObject



80
81
82
# File 'lib/columbus3/v900track/v900track.rb', line 80

def duration
  last.time - first.time
end

#each(&block) ⇒ Object



50
51
52
# File 'lib/columbus3/v900track/v900track.rb', line 50

def each(&block)
  @data.each(&block)
end

#end_dateObject



76
77
78
# File 'lib/columbus3/v900track/v900track.rb', line 76

def end_date
  last.time
end

#end_locationObject



120
121
122
# File 'lib/columbus3/v900track/v900track.rb', line 120

def end_location
  Geocoder.address(last.lat_lon)
end

#firstObject



62
63
64
# File 'lib/columbus3/v900track/v900track.rb', line 62

def first
  @data[0]
end

#lastObject



66
67
68
# File 'lib/columbus3/v900track/v900track.rb', line 66

def last
  @data[size - 1]
end

#max_heightObject



96
97
98
# File 'lib/columbus3/v900track/v900track.rb', line 96

def max_height
  get :>, :height
end

#max_height_idxObject



112
113
114
# File 'lib/columbus3/v900track/v900track.rb', line 112

def max_height_idx
  get_idx :>, :height
end

#max_speedObject



88
89
90
# File 'lib/columbus3/v900track/v900track.rb', line 88

def max_speed
  get :>, :speed
end

#max_speed_idxObject



104
105
106
# File 'lib/columbus3/v900track/v900track.rb', line 104

def max_speed_idx
  get_idx :>, :speed
end

#metadataObject

return a hash with all the metadata … it could be a nice metamethod, creating a key for each public methods



142
143
144
145
146
147
148
# File 'lib/columbus3/v900track/v900track.rb', line 142

def 
   = 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| [x] = self.send(x) }

  
end

#min_heightObject



92
93
94
# File 'lib/columbus3/v900track/v900track.rb', line 92

def min_height
  get :<, :height
end

#min_height_idxObject



108
109
110
# File 'lib/columbus3/v900track/v900track.rb', line 108

def min_height_idx
  get_idx :<, :height
end

#min_speedObject



84
85
86
# File 'lib/columbus3/v900track/v900track.rb', line 84

def min_speed
  get :<, :speed
end

#min_speed_idxObject



100
101
102
# File 'lib/columbus3/v900track/v900track.rb', line 100

def min_speed_idx
  get_idx :<, :speed
end

#pointsObject

an alias for size



36
37
38
# File 'lib/columbus3/v900track/v900track.rb', line 36

def points
  @data.size
end

#rangeObject



40
41
42
# File 'lib/columbus3/v900track/v900track.rb', line 40

def range
  (0..self.size - 1)
end

#read(filename) ⇒ Object



18
19
20
21
# 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

#saveObject



23
24
25
# File 'lib/columbus3/v900track/v900track.rb', line 23

def save
  File.open(@filename, 'w') {|f| f.write(to_s) }
end

#sizeObject



31
32
33
# File 'lib/columbus3/v900track/v900track.rb', line 31

def size
  @data.size
end

#start_dateObject

statistics



72
73
74
# File 'lib/columbus3/v900track/v900track.rb', line 72

def start_date
  first.time
end

#start_locationObject



116
117
118
# File 'lib/columbus3/v900track/v900track.rb', line 116

def start_location
  Geocoder.address(first.lat_lon)
end

#to_aObject

to enumerate (till I can solve the each issue)



45
46
47
# File 'lib/columbus3/v900track/v900track.rb', line 45

def to_a
  @data
end

#to_sObject

a slightly more robust implementation calls data in the same order in which the header is printed



152
153
154
155
156
157
158
# 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