class Track

Public Class Methods

new(track:) click to toggle source
# File lib/gpx_manipulator/track.rb, line 8
def initialize(track:)
  @track = track
end

Public Instance Methods

ascent(start, finish) click to toggle source
# File lib/gpx_manipulator/track.rb, line 30
def ascent(start, finish)
  [0, finish.elevation - start.elevation].max
end
averaged_points() click to toggle source
# File lib/gpx_manipulator/track.rb, line 58
def averaged_points
  number_of_points = pt_per_km * DISTANCE_FOR_AVERAGING_IN_KILOMETERS
  points_in_lan_lgt_format.each_slice(number_of_points.ceil).map do |sector|
    sector.transpose.map { |ar| ar.sum(0.0) / ar.size }
  end
end
back_to_start?() click to toggle source
# File lib/gpx_manipulator/track.rb, line 50
def back_to_start?
  distance_in_straigh_line(start: points.first, finish: points.last) < 0.3
end
distance_in_straigh_line(start: points.first, finish: points.last) click to toggle source
# File lib/gpx_manipulator/track.rb, line 34
def distance_in_straigh_line(start: points.first, finish: points.last)
  Geokit::LatLng.new(*to_lat_lng(start))
                .distance_to(to_lat_lng_str(finish)).round(3)
end
max_distance_from_the_start() click to toggle source
# File lib/gpx_manipulator/track.rb, line 43
def max_distance_from_the_start
  start = points.first
  points.map do |point|
    distance_in_straigh_line(start: start, finish: point)
  end.max
end
points() click to toggle source
# File lib/gpx_manipulator/track.rb, line 12
def points
  @points ||= @track.points
end
points_in_lan_lgt_format() click to toggle source
# File lib/gpx_manipulator/track.rb, line 54
def points_in_lan_lgt_format
  points.map { |p| [p.lat, p.lon] }
end
pt_per_km() click to toggle source
# File lib/gpx_manipulator/track.rb, line 39
def pt_per_km
  (points.count / total_distance).round
end
total_distance() click to toggle source
# File lib/gpx_manipulator/track.rb, line 16
def total_distance
  @track.distance
end
total_elevation_gain() click to toggle source
# File lib/gpx_manipulator/track.rb, line 20
def total_elevation_gain
  sum = 0.0
  pair_size = points.size - 1

  pair_size.times do |i|
    sum += ascent(points[i], points[i + 1])
  end
  sum.floor
end

Private Instance Methods

to_lat_lng(point) click to toggle source
# File lib/gpx_manipulator/track.rb, line 67
def to_lat_lng(point)
  [point.lat, point.lon]
end
to_lat_lng_str(point) click to toggle source
# File lib/gpx_manipulator/track.rb, line 71
def to_lat_lng_str(point)
  "#{point.lat},#{point.lon}"
end