#!/usr/bin/python # Leigh L. Klotz, Jr. # WA5ZNU # http://wa5znu.org/2007/08/bearing import sys from math import sin, cos, atan2, pi, sqrt 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 def haversineGreatCircleDistanceKM(lat1r, lon1r, lat2r, lon2r): R = 6367000.0 dlonr = lon2r - lon1r dlatr = lat2r - lat1r a = ((sin (dlatr/ 2.0)) * (sin (dlatr/ 2.0))) + (cos(lat1r) * cos(lat2r) * (sin (dlonr / 2.0)) * (sin (dlonr / 2.0))) c = (2 * (atan2(sqrt (a), (sqrt (1.0 - a))))) d = (R * c) return d / 1000.0 if len(sys.argv) == 1: print "usage: distance dxqra" exit if len(sys.argv) == 2: dxqra=sys.argv[1] (lat2,lon2)=latlon(dxqra) k=180.0/pi lat1r=lat1/k lon1r=lon1/k lat2r=lat2/k lon2r=lon2/k distmi = 0.621371192 * haversineGreatCircleDistanceKM(lat1r, lon1r, lat2r, lon2r) print("%g" % distmi)