title: Python: Calculate bearing between two lat/long
body: <p>I am attempting to calculate the bearing between two lat/long.</p>
  
  <p>I don't have a question regarding the function/formula per se,</p>
  
  <p><em>provided:</em></p>
  
  <pre><code>def get_bearing(lat1, long1, lat2, long2):
      dLon = (long2 - long1)
  
      y = math.sin(dLon) * math.cos(lat2)
      x = math.cos(lat1) * math.sin(lat2) - math.sin(lat1) * math.cos(lat2) * math.cos(dLon)
  
      brng = math.atan2(y, x)
  
      brng = np.rad2deg(brng)
  
      return brng
  </code></pre>
  
  <p>the problem is that the result isn't what is expected. </p>
  
  <p>The intended usage of the function returns the bearing between two lat/long pairs in a (very long) list i.e. </p>
  
  <pre><code>    lat1 = path[int(len(path) * location / 1000)][0]
      lat2 = path[int(len(path) * location / 1000) + 1][0]
      lng1 = path[int(len(path) * location / 1000)][1]
      lng2 = path[int(len(path) * location / 1000) + 1][1]
  </code></pre>
  
  <p>The bearing result then alters the view orientation of the plot where bearing can assume a value in the range [-180, 180]. Ideally, the result would appear such that the line formed between lat1, lng1 and lat2, lng2 is perfectly "vertical" in the plot (lat/lon annotations are switched in plot), <em>see below</em></p>
  
  <p><a href="https://i.stack.imgur.com/fpt8r.png" rel="noreferrer"><img src="https://i.stack.imgur.com/fpt8r.png" alt="enter image description here"></a></p>
  
  <p><a href="https://i.stack.imgur.com/6sD61.png" rel="noreferrer"><img src="https://i.stack.imgur.com/6sD61.png" alt="enter image description here"></a></p>
  
  <p>I am hoping that someone might be able to deduce the problem from the bearing returned from the function and what the expected bearing should be. A few instances below:</p>
  
  <pre><code>Current Location: 30.07134 -97.23076
  Next in path: 30.0709 -97.22907
  Calculated Bearing: 88.39967863143139
  Expected Bearing: ~-70.67
  
  Current Location: 29.91581 -96.85068
  Next in path: 29.91556 -96.85021
  Calculated Bearing: 118.9170342272798
  Expected Bearing: ~122.67
  
  Current Location: 29.69419 -96.53487
  Next in path: 29.69432 -96.53466
  Calculated Bearing 141.0271357781952
  Expected Bearing: ~56
  
  Current Location: 29.77357 -96.07924
  Next in path: 29.77349 -96.07876
  Calculated Bearing 165.24612555483893
  Expected Bearing: ~104
  </code></pre>
  
  <p>Happy to provide additional information, thanks in advance for any/all help.</p>