Associated Topics || Dr. Math Home || Search Dr. Math

### Bearing Between Two Points

```
Date: 12/19/2001 at 20:32:39
From: Doug
Subject: Latitude/Longitude calculations

I have found numerous solutions for finding the distance between two
Lat/Long points on the earth (including the Haversine Formula), but
I can't seem to find a reference that shows how to also calculate the
direction between those points. At first blush it seemed easy but
there appears to be something I'm missing. Is there an easy way to
calculate the "heading" (relative to North = 0)between two
coordinates?

Thanks.

Doug
```

```
Date: 12/20/2001 at 16:37:08
From: Doctor Rick
Subject: Re: Latitude/Longitude calculations

Hi, Doug.

My favorite web reference for navigational formulas is this:

Aviation Formulary V1.33, by Ed Williams
http://williams.best.vwh.net/avform.htm

The algorithm it gives for bearing (or course) between two points is
this:

tc1=mod(atan2(sin(lon2-lon1)*cos(lat2),
cos(lat1)*sin(lat2)-sin(lat1)*cos(lat2)*cos(lon2-lon1)),
2*pi)

The formula gives the *initial* heading for a great-circle route from
point A to point B. The heading will change in the course of the
trip. The quantities in the formula have these meanings:

lon1 = longitude of point A
lat1 = latitude of point A
lon2 = longitude of point B
lat2 = latitude of point B
tc1 = direction of point B from point A (angle east of north)
pi = 3.141596...

NOTE: The introduction to the Aviation Formulary page says this:

"For the convenience of North Americans I will take North latitudes
and West longitudes as positive and South and East negative. The
longitude is the opposite of the usual mathematical convention."

The algorithm as I show it above has been modified to use the usual
convention that east longitudes are positive.

In the formula, atan2(y,x) is the arctangent, or inverse tangent, of
belongs in, based on the signs of x and y. This is common in computer
programming languages.

Also, mod(a,2*pi) is the remainder you get when you divide a by 2*pi;
that is, subtract the largest multiple of 2*pi less than a from a,

I'll restate the algorithm in a form that makes the quadrant decision
explicit (and also covers the cases for dlat and dlon equal to zero),

dlat = lat2 - lat1
dlon = lon2 - lon1
y = sin(lon2-lon1)*cos(lat2)
x = cos(lat1)*sin(lat2)-sin(lat1)*cos(lat2)*cos(lon2-lon1)
if y > 0 then
if x > 0 then tc1 = arctan(y/x)
if x < 0 then tc1 = 180 - arctan(-y/x)
if x = 0 then tc1 = 90
if y < 0 then
if x > 0 then tc1 = -arctan(-y/x)
if x < 0 then tc1 = arctan(y/x)-180
if x = 0 then tc1 = 270
if y = 0 then
if x > 0 then tc1 = 0
if x < 0 then tc1 = 180
if x = 0 then [the 2 points are the same]

Thanks to Kalpana who wrote in and helped me correct the original
version of this algorithm.

- Doctor Rick, The Math Forum
http://mathforum.org/dr.math/
```

```
Date: 12/20/2001 at 22:47:05
From: Doug
Subject: Latitude/Longitude calculations

Thanks very much Dr. Rick. I will try the code you've suggested and
let you know the result. For your information, it's to be used to
calculate current speed and direction from an Acoustic Doppler
Current Profiler. Normally the instrument utilizes the ship's gyro to
determine direction, but it failed, and I need to use GPS positions
at 2-minute intervals to determine the ship's direction. The current
speed and direction relative to the ship can then be rotated to real-
world coordinates...

Doug
```

```
Date: 06/15/2002 at 12:18:04
From: Hurle

I know how to derive the formula

sin(lat2) - sin(lat1)*cos(d)
Bearing = acos ----------------------------
sin(d) * cos(lat1)

But how did you derive the alternative formula (which does not require
the pre-computation of the distance, d) that appears in your archive?

Thank you.

Hurle of Phoenix (actually "Surprise") Arizona
```

```Date: 06/19/2002 at 08:45:23
From: Doctor Rick
Subject: Re: Your formula for bearing

Hi, Hurle.

I've wanted to get a derivation of the bearing formula into the
Archives, but until now our correspondents have been content to get
the formula without knowing why it works. Thanks for asking, and
motivating me to do the work!

Let's define three unit vectors, each in the direction of the line
from the center of the earth to a point on the surface: N in the
direction of the north pole, A in the direction of the initial point,
and B in the direction of the final point on the course. Then the
bearing we seek is the angle between the plane containing N and A,
and the plane containing A and B. Thus it equals the angle between
vectors perpendicular to these planes, namely, NxA and BxA.

Let point A have latitude lat1 and longitude 0 (we can rotate our
coordinate system so this is true), and let point B have latitude
lat2 and longitude dlon (the difference between the actual longitudes
of A and B). Then we can calculate NxA and BxA:

N = (0, 0, 1)
A = (cos(lat1), 0, sin(lat1))
B = (cos(lat2)*cos(dlon), cos(lat2)*sin(dlon), sin(lat2))

NxA = (0, cos(lat1), 0)
BxA = (sin(lat1)*cos(lat2)*sin(dlon),
cos(lat1)*sin(lat2)-sin(lat1)*cos(lat2)*cos(dlon),
-cos(lat1)*cos(lat2)*sin(dlon))

The usual way to find the angle would be to take the dot product of
these vectors, divide by the product of the magnitudes of the vectors,
and take the arccosine. But that would be quite a mess. Instead we
can take advantage of the fact that NxA is parallel to the y axis.
The tangent of the angle between BxA and the y axis is the component
of BxA in the x-z plane (the square root of the sum of the squares of
the x and z components) divided by the y component:

tan(theta) = sqrt((sin(lat1)*cos(lat2)*sin(dlon))^2 +
(-cos(lat1)*cos(lat2)*sin(dlon))^2) /
(cos(lat1)*sin(lat2)-sin(lat1)*cos(lat2)*cos(dlon))

The numerator simplifies to

sqrt(cos(lat2)^2 * sin(dlon)^2) * sqrt(sin(lat1)^2 + cos(lat1)^2)
= cos(lat2)*sin(dlon)

Thus

tan(theta) = cos(lat2)*sin(dlon) /
(cos(lat1)*sin(lat2)-sin(lat1)*cos(lat2)*cos(dlon))

That's the formula. If we take the arctan of both sides, we get a
value in the range from -pi/2 to pi/2 radians. The problem is, this
doesn't distinguish between opposite directions, NE vs. SW for
instance. But the function atan2(y,x) returns the arctan of y/x with
adjustments for the signs of x and y so that the angle returned is
the angle of the cartesian point (x,y) in polar coordinates -- just
what we need here.

The only problem is that it returns a value in the range (-pi, pi].
The function mod(..., 2*pi) moves negative angles up to the range
(pi, 2*pi). To get a final answer in degrees (0 to 360), you must
multiply by 180/pi.

- Doctor Rick, The Math Forum
http://mathforum.org/dr.math/
```

```Date: 06/19/2002 at 19:32:37
From: Hurle

else -- you are a wizard, I don't care what the other Math

Why is this used over the simpler version?
```

```Date: 06/19/2002 at 20:44:33
From: Doctor Rick
Subject: Re: Your formula for bearing

Hi, Hurle.

I believe you're referring to the first version given here:

Aviation Formulary V1.33, by Ed Williams
http://williams.best.vwh.net/avform.htm#Crs

That version is only simpler if you don't count the calculations you
had to do to find the distance between the points, which that version
uses. Thus that version is better if you need to find the distance as
well as the bearing, but if you only needed the bearing, then the
formula I derived would be simpler.

- Doctor Rick, The Math Forum
http://mathforum.org/dr.math/
```

```Date: 06/20/2002 at 09:25:01
From: Hurle
Subject: Thank you (Your formula for bearing)

You're right. Thanks once again.

Hurle
```

```
Date: 01/31/2006 at 13:52:18
From: Bruce
Subject: spherical trigonometrical bearings for a dumb pilot!

Hello!  I am a rather unlearned (when compared to others on this
site) pilot from South Africa.  I am trying to write an Excel sheet
that calculates great circle distances and bearings in the context
of a logcard.  The distance part I got right (as backed up by my
helicopter's GPS system), while bearings I just cannot hack.  As I
am in the Southern and Eastern Hemisphere, that might be causing
the problem.

Also, I don't know what distance to insert in the formulas (i.e. nm,
degrees, etc) and whether to use degrees or radians.  I keep getting
answers like 708 or 1.257777 which don't equate to bearings.

to Excel, that I can try out.  Thank you in advance!!!
```

```
Date: 01/31/2006 at 20:04:12
From: Doctor Rick
Subject: Re: spherical trigonometrical bearings for a dumb pilot!

Hi, Bruce.

The main formula discussed on this page does not require input of the
distance between points.  (There is a link to a different formula,
that does require that input, near the bottom of the page.)

tc1 = mod(atan2(sin(lon2-lon1)*cos(lat2),
cos(lat1)*sin(lat2)-sin(lat1)*cos(lat2)*cos(lon2-lon1)),
2*pi)

A spreadsheet version of this formula is:

*COS(LongB-LongA), SIN(LongB-LongA)*COS(LatB)),
2*PI())

where I have defined cells containing formulas as follows:

LatA:  =lat1*pi()/180
LongA: =lon1*pi()/180
LatB:  =lat2*pi()/180
LongB: =lon2*pi()/180

and lat1, lon2, lat2, and lon2 are cells containing the coordinates
in decimal degrees.  It appears that your coordinates are in degrees
and decimal minutes, so you'll need to convert them to decimal
degrees using formulas like this one:

lat1: =lat1deg+lat1min/60*SIGN(lat1deg)

need to convert that to degrees east of north with a formula like
this:

I took these formulas from my own spreadsheet for calculating
bearings.  If this isn't enough to straighten out your problems, let
me know what you do and what you get, so I can check it out.

- Doctor Rick, The Math Forum
http://mathforum.org/dr.math/
```

```
Date: 02/05/2006 at 10:38:17
From: Bruce
Subject: Thank you (spherical trigonometrical bearings for a dumb pilot!)

Thank you so much Doctor Rick!  You are a legend - you really put it
so well and in terms that I, the maths wannabe, could understand.
Keep up the good work and know you have a loyal fan from the
southern hemisphere!!!

Bruce

```

```
Date: 04/25/2016 at 09:14:26
From: Pedro
Subject: Bearing Between Two Points

Good morning, Doctor Rick!

My name is Pedro Reis. I am a student of 9 semester Eng. Automation and
Control. I'm developing a project that aims two antennas in a microwave
link, for which I need to know the angle to the North between
these points.

I would like to use the formula already described above. However, I could
not visualize the trigonometry used in the algorithm -- specifically,
the definitions

y = sin(lon2 - lon1) * cos(Lat2)
x = cos(lat1) * sin(lat2) - sin(lat1) * cos(Lat2) * cos(lon2 - lon1)

Could you send me a picture or drawing of this trigonometry, or a diagram
showing the various vectors mentioned?

Pedro Reis

```

```
Date: 04/27/2016 at 14:33:40
From: Doctor Rick
Subject: Bearing Between Two Points

Here is a diagram:

This shows a unit sphere. The heavy black circle is the equator; vector N
is perpendicular to that (pointing to the north pole). Vectors A and B
point toward the points A and B on the earth's surface. A blue arc is
drawn between A and B along a great circle. The bearing from A to B is
the angle at A between the red arc (north) and the blue arc.

Vector NxA is the red vector pointing right; it is perpendicular to the
great circle through A and N. Vector BxA is the blue vector pointing down
and to the right; it is perpendicular to the great circle through A and
B. The angle between NxA and BxA is thus the same as the angle we seek
(the bearing from A to B).

The rest of the work shown in my derivation of the bearing formula is how
to find the tangent of the angle between NxA and BxA, in terms of the
vector components of BxA.

```

```
Date: 04/29/2016 at 07:21:51
From: Pedro
Subject: Thank you (Bearing Between Two Points)

Doctor Rick, good morning!

Thank you for diagram. It was of great value. I will tell everyone I know

Gratefully,

Pedro Reis

```
Associated Topics:
High School Geometry
High School Higher-Dimensional Geometry

Search the Dr. Math Library:

 Find items containing (put spaces between keywords):   Click only once for faster results: [ Choose "whole words" when searching for a word like age.] all keywords, in any order at least one, that exact phrase parts of words whole words

Submit your own question to Dr. Math
Math Forum Home || Math Library || Quick Reference || Math Forum Search