Skip to content

Instantly share code, notes, and snippets.

@gmcintire
Created January 19, 2011 05:25
Show Gist options
  • Save gmcintire/785733 to your computer and use it in GitHub Desktop.
Save gmcintire/785733 to your computer and use it in GitHub Desktop.
Converts Lat/Long in decimal to 6 digit Gridsquare
def degrees_to_dms(dec)
deg = dec.floor
remainder = (dec - deg) * 3600
min = (remainder/60).floor
sec = remainder - (min*60)
a = [deg, min, sec]
end
def dec_to_grid(dms)
grid = ''
lat = dms[0]+90
lon = dms[1]+180
v = (lon/20).to_i
lon -= (v*20)
grid += (?A + v).chr # first letter
v = (lat/10).to_i
lat -= (v*10)
grid += (?A + v).chr # second letter
p3 = (lon/2).to_i
grid += p3.to_s # third number
p4 = (lat).to_i
grid += p4.to_s # fourth number
lon -= p3*2
lat -= p4
p3 = (?0 + p3).chr
p4 = (?0 + p4).chr
p5 = (12 * lon).to_i
p6 = (24 * lat).to_i
grid += (?a + p5).chr # fifth letter
grid += (?a + p6).chr # sixth letter
end
def dms_to_degrees(d, m, s)
degrees = d
fractional = m / 60 + s / 3600
if d > 0
degrees + fractional
else
degrees - fractional
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment