class LatLong::Point

Constants

ARGUMENT_ERRORS_TEXT

Attributes

lat[R]
long[R]

Public Class Methods

new(lat, long) click to toggle source
# File lib/lat_long/point.rb, line 14
def initialize(lat, long)
  @lat = lat
  @long = long
end

Public Instance Methods

move(raw_distance, unit, direction) click to toggle source
# File lib/lat_long/point.rb, line 23
def move(raw_distance, unit, direction)
  direction = direction_multipliers(direction)
  distance = distance_in_meters(raw_distance, unit)

  lat_offset = distance / EARTH_RADIUS
  long_offset = distance / (
    EARTH_RADIUS * Math.cos(Math::PI * @lat/180)
  )

  new_point_lat = @lat + (lat_offset * 180/Math::PI) * direction[:y_axis]
  new_point_long = @long + (long_offset * 180/Math::PI) * direction[:x_axis]

  { lat: new_point_lat, long: new_point_long }
end
starting_point() click to toggle source
# File lib/lat_long/point.rb, line 19
def starting_point
  [@lat, @long]
end

Private Instance Methods

direction_multipliers(direction) click to toggle source
# File lib/lat_long/point.rb, line 40
def direction_multipliers(direction)
  DIRECTION_MULTIPLIERS[direction] ||
    raise(ArgumentError, ARGUMENT_ERRORS_TEXT[:direction])
end
distance_in_meters(distance, unit) click to toggle source
# File lib/lat_long/point.rb, line 45
def distance_in_meters(distance, unit)
  unit_multiplier = TO_METERS_MULTIPLIERS[unit] ||
    raise(ArgumentError, ARGUMENT_ERRORS_TEXT[:distance_unit])
  distance.to_f * unit_multiplier
end