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