lib/hrmparser/trackpoint.rb in teich-hrmparser-0.4.0 vs lib/hrmparser/trackpoint.rb in teich-hrmparser-0.4.1
- old
+ new
@@ -1,15 +1,48 @@
module HRMParser
- class TrackPoint
- attr_accessor :lat, :lng, :altitude, :speed, :hr, :distance, :time, :cadence
- def initialize(opts = {:lat => nil, :lng => nil, :altitude => nil, :speed => nil, :hr => nil, :distance => nil, :cadence => nil, :time => Time.now})
- @lat = opts[:lat]
- @lng = opts[:lng]
- @altitude = opts[:altitude]
- @speed = opts[:speed]
- @hr = opts[:hr]
- @distance = opts[:distance]
- @time = opts[:time]
- @cadence = opts[:cadence]
- end
- end
-end
\ No newline at end of file
+ class TrackPoint
+
+ RAD_PER_DEG = 0.017453293 # PI/180
+
+ attr_accessor :lat, :lng, :altitude, :speed, :hr, :distance, :time, :cadence
+ def initialize(opts = {:lat => nil, :lng => nil, :altitude => nil, :speed => nil, :hr => nil, :distance => nil, :cadence => nil, :time => Time.now})
+ @lat = opts[:lat]
+ @lng = opts[:lng]
+ @altitude = opts[:altitude]
+ @speed = opts[:speed]
+ @hr = opts[:hr]
+ @distance = opts[:distance]
+ @time = opts[:time]
+ @cadence = opts[:cadence]
+ end
+
+ def calc_distance(pointA, pointB)
+ return 0 if pointA.nil? || pointA.lat.nil?
+
+ dlng = pointB.lng - pointA.lng
+ dlat = pointB.lat - pointA.lat
+
+ dlat_rad = dlat * RAD_PER_DEG
+ dlng_rad = dlng * RAD_PER_DEG
+
+ lat1_rad = pointA.lat * RAD_PER_DEG
+ lng1_rad = pointA.lng * RAD_PER_DEG
+
+ lat2_rad = pointB.lat * RAD_PER_DEG
+ lng2_rad = pointB.lng * RAD_PER_DEG
+
+ a = (Math.sin(dlat_rad/2))**2 + Math.cos(lat1_rad) * Math.cos(lat2_rad) * (Math.sin(dlng_rad/2))**2
+ c = 2 * Math.atan2( Math.sqrt(a), Math.sqrt(1-a))
+
+ return 6371000 * c
+ end
+
+ def calc_speed(pointA, pointB)
+ return 0 if pointA.nil? || pointA.lat.nil?
+ time_delta = pointB.time - pointA.time
+ distance_delta = pointB.distance - pointA.distance
+ return distance_delta / time_delta
+ end
+ end
+end
+
+