Class: GeoDistance

Inherits:
Object
  • Object
show all
Includes:
Comparable, Extract, GeoUnits, GeoUnits::UnitMaps, NumericCheckExt
Defined in:
lib/geo_vectors/util/geo_distance.rb,
lib/geo_vectors/util/geo_distance/units.rb

Defined Under Namespace

Modules: Extract, Unit

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from GeoUnits::UnitMaps

#earth_radius, #meters_map

Methods included from GeoUnits::Methods

#check_unit!, #default_unit, #default_unit=, #valid_unit?, #valid_units

Constructor Details

#initialize(number, unit = :kms) ⇒ GeoDistance

Returns a new instance of GeoDistance.



11
12
13
14
15
16
17
# File 'lib/geo_vectors/util/geo_distance.rb', line 11

def initialize number, unit = :kms
  check_unit! unit
  check_numeric! number 

  @unit = unit
  @number = number
end

Instance Attribute Details

#numberObject

Returns the value of attribute number.



9
10
11
# File 'lib/geo_vectors/util/geo_distance.rb', line 9

def number
  @number
end

#unitObject

Returns the value of attribute unit.



9
10
11
# File 'lib/geo_vectors/util/geo_distance.rb', line 9

def unit
  @unit
end

Instance Method Details

#*(factor) ⇒ Object



23
24
25
26
27
# File 'lib/geo_vectors/util/geo_distance.rb', line 23

def * factor  
  dist = self.dup
  dist.number *= factor
  dist
end

#/(factor) ⇒ Object



29
30
31
32
33
# File 'lib/geo_vectors/util/geo_distance.rb', line 29

def / factor  
  dist = self.dup
  dist.number /= factor
  dist
end

#<=>(dist) ⇒ Object

compare 2 distances



36
37
38
39
40
41
42
43
44
45
# File 'lib/geo_vectors/util/geo_distance.rb', line 36

def <=> dist
  dist = extract_distance(dist).as(unit)
  if number < dist.number
    -1
  elsif number > dist.number
    1
  else
    0
  end
end

#as(unit) ⇒ Object

convert to unit (see GeoMagic)



52
53
54
55
56
57
58
# File 'lib/geo_vectors/util/geo_distance.rb', line 52

def as unit
  check_unit! unit
  dist = self.dup
  dist.number = convert_to_meters * meters_map[unit]
  dist.unit = unit
  dist    
end

#convert_to_metersObject



47
48
49
# File 'lib/geo_vectors/util/geo_distance.rb', line 47

def convert_to_meters
  (unit == :radians) ? radians_to(:meters) : number / meters_map[unit]
end

#radians_to(unit) ⇒ Object



82
83
84
85
# File 'lib/geo_vectors/util/geo_distance.rb', line 82

def radians_to unit
  check_unit! unit
  earth_radius[unit] * number
end

#randomObject



78
79
80
# File 'lib/geo_vectors/util/geo_distance.rb', line 78

def random
  rand(number.to_f * 100) / 100.0
end

#to_sObject



19
20
21
# File 'lib/geo_vectors/util/geo_distance.rb', line 19

def to_s
  "distance: #{number} #{unit}"
end