class PistePal::DataServices::Distance

Public Class Methods

call(trackpoints:) click to toggle source
# File lib/piste_pal/data_services/distance.rb, line 5
def self.call(trackpoints:)
  new(trackpoints: trackpoints).call
end
new(trackpoints:) click to toggle source
# File lib/piste_pal/data_services/distance.rb, line 23
def initialize(trackpoints:)
  @trackpoints = trackpoints
end

Public Instance Methods

call() click to toggle source
# File lib/piste_pal/data_services/distance.rb, line 9
def call
  if @trackpoints.first.is_a? Array
    distance = 0
    @trackpoints.each do |trackpoints|
      distance += calculate_distance trackpoints
    end
  else
    distance = calculate_distance @trackpoints
  end
  distance
end

Private Instance Methods

calculate_distance(trackpoints) click to toggle source
# File lib/piste_pal/data_services/distance.rb, line 27
def calculate_distance trackpoints
  distance = 0
  total_points = trackpoints.count - 1

  point_a = nil
  point_b = nil

  for i in 0..total_points do
    if i == 0
      point_a = { latitude: trackpoints[i].lat, longitude: trackpoints[i].lon }
      next
    end

    point_b = { latitude: trackpoints[i].lat, longitude: trackpoints[i].lon }
    distance += Vincenty.distance_between_points(point_a, point_b)
    point_a = point_b
  end

  distance
end