class GeoRb::Point
Attributes
altitude[R]
latitude[R]
longitude[R]
Public Class Methods
new(latitude = 0.0, longitude = 0.0, altitude = 0.0)
click to toggle source
# File lib/geo_rb/point.rb, line 5 def initialize(latitude = 0.0, longitude = 0.0, altitude = 0.0) @latitude, @longitude, @altitude = normalize_coordinates(latitude, longitude, altitude) end
Public Instance Methods
to_h()
click to toggle source
# File lib/geo_rb/point.rb, line 9 def to_h instance_variables.map do |var| [var[1..].to_sym, instance_variable_get(var)] end.to_h end
Private Instance Methods
normalize_angle(x, limit)
click to toggle source
Normalize angle `x` to be within `[-limit; limit)` range.
# File lib/geo_rb/point.rb, line 18 def normalize_angle(x, limit) double_limit = limit * 2.0 modulo = x % double_limit return modulo + double_limit if modulo < -limit return modulo - double_limit if modulo >= limit modulo end
normalize_coordinates(latitude, longitude, altitude)
click to toggle source
# File lib/geo_rb/point.rb, line 27 def normalize_coordinates(latitude, longitude, altitude) latitude = Float(latitude) longitude = Float(longitude) altitude = Float(altitude) unless [latitude, longitude, altitude].all?(&:finite?) raise "Point coordinates must be finite. #{latitude}, #{longitude} #{altitude} has been passed as coordinates." end raise "Latitude must be in the [-90; 90] range." if latitude.abs > 90 longitude = normalize_angle(longitude, 180.0) if longitude.abs > 180 [latitude, longitude, altitude] end