Module: Libgeo::Coordinate::ClassMethods

Included in:
Libgeo::Coordinate
Defined in:
lib/libgeo/coordinate/class_methods.rb

Constant Summary collapse

DMS_SEPARATORS =
/['°′"`\ \,]+/.freeze
NMEA_SEPARATORS =
/(,\ |,|\ )/.freeze

Instance Method Summary collapse

Instance Method Details

#decimal(value) ⇒ Object

Factory: make a coordinate from decimal value

Examples:

Longitude.decimal(39.342679) # => #<Longitude hemisphere=E degrees=39 minutes=20 ...

Params:

  • value Float decimal coordinate

Returns: Latitude|Longitude|Coordinate instance



22
23
24
25
# File 'lib/libgeo/coordinate/class_methods.rb', line 22

def decimal(value)
  minutes = value.abs.to_d.modulo(1) * 60 # extract minutes from decimal degrees
  create(dir_from(value), value.abs.to_i, *min_with_sec(minutes))
end

#degrees_minutes(degrees, minutes) ⇒ Object

Factory: make a coordinate from degrees and full minutes

Params:

  • degrees Fixnum degrees part

  • minutes Float full minutes, with seconds

Examples:

Latitude.degrees_minutes(-39, 20.56074) # => #<Latitude hemisphere=S degrees=39 minutes=20 ...

Returns: Latitude|Longitude|Coordinate instance



89
90
91
# File 'lib/libgeo/coordinate/class_methods.rb', line 89

def degrees_minutes(degrees, minutes)
  create(dir_from(degrees), degrees.abs.to_i, *min_with_sec(minutes))
end

#dms(input) ⇒ Object

Factory: make a coordinate from dms value

Examples:

Longitude.dms("58°39′13.5 S") # => #<Longitude hemisphere=S degrees=58 minutes=39 ...

Params:

  • inputs String dms coordinate

Returns: Latitude|Longitude|Coordinate instance



63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/libgeo/coordinate/class_methods.rb', line 63

def dms(input)
  string_values = input.split(DMS_SEPARATORS)

  degrees = string_values[0].to_i # get degrees and minutes
  minutes = (string_values[1] || 0).to_i
  seconds = (string_values[2] || 0).to_f
  hemi    = string_values[3]

  direction = dir_from_values(degrees, hemi)

  create(direction, degrees.abs, minutes, seconds, hemi)
end

#nmea(input) ⇒ Object

Factory: make a coordinate from nmea input

Examples:

Longitude.nmea('03920.56074,E') # => #<Longitude hemisphere=E degrees=39 minutes=20 ...

Params:

  • input String nmea coordinate

Returns: Latitude|Longitude|Coordinate instance



39
40
41
42
43
44
45
46
47
48
49
# File 'lib/libgeo/coordinate/class_methods.rb', line 39

def nmea(input)
  value, hemi = prepare_nmea(input)

  value = value.to_f

  direction = dir_from_values(value, hemi)

  degrees = value.to_i.abs / 100

  create(direction, degrees, *min_with_sec_nmea(value.abs), hemi)
end