#!/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)

