Download or view Maidenhead.frink in plain text format
// Utilities for converting Maidenhead coordinates to lat/long and vice
// versa. See http://www.arrl.org/files/contests/ln9404.pdf
// This makes the assumption that west longitudes are negative.
// Convert a lat/long coordinate to a 6-character Maidenhead coordinate.
LatLongToMaidenhead[lat, long] :=
{
z1 = floor[(long / degrees) + 180]
longZone1 = z1 div 20
char1 = char[char["A"] + longZone1]
z2 = floor[(lat/degrees) + 90]
latZone1 = z2 div 10
char2 = char[char["A"] + latZone1]
// println["z1 = $z1"]
longZone2 = (z1 mod 20) div 2
char3 = "$longZone2"
latZone4 = z2 mod 10
char4 = "$latZone4"
longZone5 = floor[(((long/degrees) + 180) mod 2) * 12]
char5 = char[char["A"] + longZone5]
latZone6 = floor[(((lat/degrees) + 90) mod 1) * 24]
char6 = char[char["A"] + latZone6]
return "$char1$char2$char3$char4$char5$char6"
}
// Convert a set of Maidenhead coordinates to the lat/long coordinates of
// the box surrounding these coordinates.
//
// returns:
// [latS, longW, latN, longE]
// which are the south, west, north, and east sides of the box respectively.
MaidenheadToLatLong[str] :=
{
str = uc[str] // Uppercase
longC1 = (char[substrLen[str,0,1]] - char["A"]) * 20
longC2 = (char[substrLen[str,2,1]] - char["0"]) * 2
if (length[str] > 4)
{
longC3 = (char[substrLen[str,4,1]] - char["A"]) / 12
width = 5 arcmin
} else
{
longC3 = 0
width = 2 degrees
}
longW = ((longC1 + longC2 + longC3) - 180) degrees
latC1 = (char[substrLen[str,1,1]] - char["A"]) * 10
latC2 = (char[substrLen[str,3,1]] - char["0"])
if (length[str] > 5)
{
latC3 = (char[substrLen[str,5,1]] - char["A"]) / 24
height = 2.5 arcmin
} else
{
latC3 = 0
height = 1 degree
}
latS = ((latC1 + latC2 + latC3) - 90) degrees
return [latS, longW, latS+height, longW+width]
}
Download or view Maidenhead.frink in plain text format
This is a program written in the programming language Frink.
For more information, view the Frink
Documentation or see More Sample Frink Programs.
Alan Eliasen was born 20136 days, 4 hours, 12 minutes ago.