Method: When::Coordinates.to_deg_225

Defined in:
lib/when_exe/coordinates.rb

.to_deg_225(src, dir) ⇒ Numeric

60進->10進変換(1/225度単位)

Parameters:

  • src (String)

    60進法で表した方向付きの数値

  • dir (String)

    方向 (‘NS’ または ‘EW’)

Returns:

  • (Numeric)

    10進変換した数値 (src が nil なら0.0を、Numeric なら 225*src を返す)



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/when_exe/coordinates.rb', line 32

def self.to_deg_225(src, dir)
  case src
  when String
    src = src.gsub(/_+/,'').gsub(/@/, '.')
    return src.to_r * Spatial::DEGREE if (src =~ /E[-+]/ || src !~ MATCH[dir])
    sign  = ($1 == dir[1..1]) ? -1 : +1
    value = src.gsub(MATCH[dir], '').strip
    if ((value + "00000") =~ /\A(\d+)\.(\d{2})(\d{2})(\d+)\z/)
      deg, min, sec, frac = $~[1..4]
      sec += "." + frac
    else
      deg, min, sec = value.split(/[^\d.]+/)
    end
    return sign * (deg.to_i *  Spatial::DEGREE +
              (min||0).to_f * (Spatial::DEGREE/60.0) +
              (sec||0).to_f * (Spatial::DEGREE/3600.0))
  when NilClass
    0.0
  when Numeric
    src * Spatial::DEGREE
  else
    raise TypeError, "Invalid Location Type"
  end
end