Module: Utilities::Elevation

Defined in:
lib/utilities/elevation.rb

Defined Under Namespace

Classes: MethodFromLabel

Class Method Summary collapse

Class Method Details

.convert_to_meters!(hsh, key) ⇒ Object (private)

Converts the value in a hash from feet to meters

Parameters:

  • hsh (Hash)
  • key (Symbol)
[View source]

55
56
57
# File 'lib/utilities/elevation.rb', line 55

def self.convert_to_meters!(hsh, key)
  hsh[key] = (hsh[key].to_f * 0.3048).round(2).to_s if hsh[key]
end

.elevation_regex_from_verbatim_label(text) ⇒ Object

[View source]

14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/utilities/elevation.rb', line 14

def self.elevation_regex_from_verbatim_label(text)
  text = ' ' + text.downcase.squish + ' '
  elevation = {}

  if (matchdata1 = text.match(/\D(\d*,?\d+)\s?[-–]\s?(\d*,?\d+) ?(m|ft|feet|meters)\.?\W/))
    elevation[:verbatim_elevation] = matchdata1[0].strip
    elevation[:minimum_elevation] = matchdata1[1]
    elevation[:maximum_elevation] = matchdata1[2]
    elevation[:units] = matchdata1[3]
  elsif (matchdata1 = text.match(/\D(\d*,?\d+) ?(m|ft|feet|meters)\.?( ?(\+\/-|±) ?(\d+) ?(m|ft|feet|meters)?[. ]?)?\W/))
    elevation[:verbatim_elevation] = matchdata1[0].strip
    elevation[:minimum_elevation] = matchdata1[1]
    elevation[:units] = matchdata1[2]
    elevation[:elevation_precision] = matchdata1[5] if matchdata1[5]
  end

  if elevation[:units]
    elevation[:units] = elevation[:units].gsub('feet', 'ft')
                            .gsub('meters', 'm')
                            .gsub('.', '')
    elevation[:verbatim_elevation] = elevation[:verbatim_elevation][0..-2] if elevation[:verbatim_elevation] =~ /[;,:).\/]$/
    elevation[:minimum_elevation] = elevation[:minimum_elevation].gsub(',', '') if elevation[:minimum_elevation]
    elevation[:maximum_elevation] = elevation[:maximum_elevation].gsub(',', '') if elevation[:maximum_elevation]

    if elevation[:units].to_s == 'ft'
      convert_to_meters!(elevation, :minimum_elevation)
      convert_to_meters!(elevation, :maximum_elevation)
      convert_to_meters!(elevation, :elevation_precision)
      elevation[:units] = 'm'
    end
    return elevation
  else
    return {}
  end
end