title: Haversine Formula in Python (Bearing and Distance between two GPS points)
body: <h2>Problem</h2>
  
  <p>I would like to know how to get the <strong>distance and bearing between 2 GPS points</strong>.
  I have researched on the haversine formula.
  Someone told me that I could also find the bearing using the same data.</p>
  
  <h2>Edit</h2>
  
  <p>Everything is working fine but the bearing doesn't quite work right yet. The bearing outputs negative but should be between 0 - 360 degrees.
  The set data should make the horizontal bearing <code>96.02166666666666</code>
  and is:</p>
  
  <pre><code>Start point: 53.32055555555556 , -1.7297222222222221   
  Bearing:  96.02166666666666  
  Distance: 2 km  
  Destination point: 53.31861111111111, -1.6997222222222223  
  Final bearing: 96.04555555555555
  </code></pre>
  
  <p>Here is my new code:</p>
  
  <pre><code>from math import *
  
  Aaltitude = 2000
  Oppsite  = 20000
  
  lat1 = 53.32055555555556
  lat2 = 53.31861111111111
  lon1 = -1.7297222222222221
  lon2 = -1.6997222222222223
  
  lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
  
  dlon = lon2 - lon1
  dlat = lat2 - lat1
  a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
  c = 2 * atan2(sqrt(a), sqrt(1-a))
  Base = 6371 * c
  
  
  Bearing =atan2(cos(lat1)*sin(lat2)-sin(lat1)*cos(lat2)*cos(lon2-lon1), sin(lon2-lon1)*cos(lat2)) 
  
  Bearing = degrees(Bearing)
  print ""
  print ""
  print "--------------------"
  print "Horizontal Distance:"
  print Base
  print "--------------------"
  print "Bearing:"
  print Bearing
  print "--------------------"
  
  
  Base2 = Base * 1000
  distance = Base * 2 + Oppsite * 2 / 2
  Caltitude = Oppsite - Aaltitude
  
  a = Oppsite/Base
  b = atan(a)
  c = degrees(b)
  
  distance = distance / 1000
  
  print "The degree of vertical angle is:"
  print c
  print "--------------------"
  print "The distance between the Balloon GPS and the Antenna GPS is:"
  print distance
  print "--------------------"
  </code></pre>