Sha256: d09ad109f46ea00f4a27579a517db5a4ba774c80fd562bc87bca5b93ddbd713f
Contents?: true
Size: 1.28 KB
Versions: 1
Compression:
Stored size: 1.28 KB
Contents
module GPX # Class is responsible for calculating distance between two geo points (it considers point height) class Haversine RADIAN_PER_DEGREE = Math::PI/180.0 EARTH_RADIUS = 6371.00079 def self.distance(first_point, second_point) first_latitude_rad = first_point.latitude.to_f * RADIAN_PER_DEGREE second_latitude_rad = second_point.latitude.to_f * RADIAN_PER_DEGREE delta_longitude = (second_point.longitude.to_f - first_point.longitude.to_f) * RADIAN_PER_DEGREE delta_latitude = (second_point.latitude.to_f - first_point.latitude.to_f) * RADIAN_PER_DEGREE elevation = (first_point.elevation.to_f / 1000.0 - second_point.elevation.to_f / 1000.0).abs distance = calculate_distance(first_latitude_rad, second_latitude_rad, delta_latitude, delta_longitude) triangulate(EARTH_RADIUS * distance, elevation) end private def self.calculate_distance(first_latitude_rad, second_latitude_rad, delta_latitude, delta_longitude) coefficient = (Math::sin(delta_latitude/2.0)**2.0) + Math::cos(first_latitude_rad) * Math::cos(second_latitude_rad) * (Math::sin(delta_longitude/2.0)**2.0) 2.0 * Math::atan2(Math::sqrt(coefficient), Math::sqrt(1.0-coefficient)) end def self.triangulate (distance, height) Math::sqrt(distance**2 + height**2) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
gpx_track-0.0.2 | lib/gpx/haversine.rb |