#!/usr/bin/python # Leigh L. Klotz, Jr. # WA5ZNU # http://wa5znu.org/2007/08/bearing import sys, math def latlon(qra): c1 = int(qra[0:1], 36)-10 c2 = int(qra[1:2], 36)-10 c3 = int(qra[2:3], 10) c4 = int(qra[3:4], 10) if (len(qra) > 4): c5 = int(qra[4:5], 36)-10 c6 = int(qra[5:6], 36)-10 lat = (((c2 * 10) + c4 + ((c6 + 0.5)/24)) - 90) lon = (((c1 * 20) + (c3 * 2) + ((c5 + 0.5) / 12)) - 180) else: lat = (((c2 * 10) + c4 ) - 90) lon = (((c1 * 20) + (c3 * 2)) - 180) return (lat,lon) # Set your QRA here (lat1,lon1)=latlon("CM87wk") # Or use latitude and longitude more precisely here #lat1=37.428833 #lon1=-122.114667 # Beam rotor offset correction here (or use command-line arg) offset=0 if len(sys.argv) == 1: print "usage: bearing dxqra [+/- offset]" exit if len(sys.argv) == 3: offset=int(sys.argv[2]) if len(sys.argv) >= 2: dxqra=sys.argv[1] (lat2,lon2)=latlon(dxqra) k=180.0/math.pi lat1r=lat1/k lon1r=lon1/k lat2r=lat2/k lon2r=lon2/k dlong = lon2r - lon1r dlat = lat2r - lat1r arg1=math.sin(dlong) * math.cos(lat2r) arg2a = math.cos(lat1r) * math.sin(lat2r) arg2b = math.sin(lat1r) * math.cos(lat2r) * math.cos(dlong) arg2 = arg2a - arg2b bearingr = math.atan2(arg1, arg2) bearing = round(((360 + (bearingr * k)) % 360)) bearing = bearing + offset if (bearing <= 180): antibearing = bearing + 180 else: antibearing = bearing - 180 print("%d/%d" % (bearing, antibearing))