class GpxRuby::Gpx::Point

Constants

RADIUS_KM

Attributes

lat[RW]
lon[RW]

Public Class Methods

new(a_hash) click to toggle source
# File lib/gpx_ruby/gpx/point.rb, line 11
def initialize(a_hash)
  @lat = a_hash[:lat]
  @lon = a_hash[:lon]
end

Public Instance Methods

+(a_point) click to toggle source
# File lib/gpx_ruby/gpx/point.rb, line 28
def +(a_point)
  nlat = lat + a_point.lat
  nlon = lon + a_point.lon
  Point.new lat: nlat, lon: nlon
end
/(a_scalar) click to toggle source
# File lib/gpx_ruby/gpx/point.rb, line 34
def /(a_scalar)
  nlat = lat / a_scalar.to_f
  nlon = lon / a_scalar.to_f
  Point.new lat: nlat, lon: nlon
end
[](index) click to toggle source
# File lib/gpx_ruby/gpx/point.rb, line 17
def [](index)
  case index
    when 0
      lat
    when 1
      lon
    else
      raise 'Invalid index!'
  end
end
distance(a_point) click to toggle source
# File lib/gpx_ruby/gpx/point.rb, line 55
def distance(a_point)
  p_point = self
  rad_per_deg, radius_meter = Math::PI/180, RADIUS_KM * 1000

  dlon_rad = (a_point.lon-p_point.lon) * rad_per_deg
  dlat_rad = (a_point.lat-p_point.lat) * rad_per_deg

  lat1_rad = p_point.lat * rad_per_deg
  lat2_rad = a_point.lat * rad_per_deg

  p_point = Math.sin(dlat_rad/2)**2 + Math.cos(lat1_rad) * Math.cos(lat2_rad) * Math.sin(dlon_rad/2)**2
  c = 2 * Math::atan2(Math::sqrt(p_point), Math::sqrt(1-p_point))

  radius_meter * c
end
to_a() click to toggle source
# File lib/gpx_ruby/gpx/point.rb, line 44
def to_a
  [lat, lon]
end
to_h()
Alias for: to_hash
to_hash() click to toggle source
# File lib/gpx_ruby/gpx/point.rb, line 48
def to_hash
  { lat: lat, lon: lon }
end
Also aliased as: to_h
to_s() click to toggle source
# File lib/gpx_ruby/gpx/point.rb, line 40
def to_s
  "lat: #{lat}, lon: #{lon}"
end