Latitude, Longitude,
And Great Circles
This page describes how to work with Latitude and Longitude in Excel and
how to compute Great Circle Distances.
You can use Excel's trigonometric and time functions to work with Latitude and Longitude
values. There are two different ways express geographical coordinates. The first is to use
a time format of degrees:minutes:seconds. This is the same format as
an Excel time value. The other method is to use decimal degrees, representing values as the number of degrees as
a real number. For example, the location 20 degrees, 30 minutes, 40 seconds can be represented as
the time 20:30:40 or in decimal degrees as 20.51111.
If you are restricting yourself to one hemisphere for latitude and one hemisphere for longitude, you can
use either time format or decimal degrees format and use postive values for both. If you are working with
two hemispheres, you must choose one hemisphere to be positive and then use negative values for locations in the
other hemisphere. This is fine for decimal degree values, but Excel can't display negative time values. Therefore,
if you are working in two hemispheres, you need to use the decimal degrees format or set the date system to the
1904 base. To change the date format, go to the Tools menu, choose Options and then the
Calculation tab. There, check the 1904 date system setting. When using positive and negative values
to specify the hemisphere, it doesn't matter which hemisphere is assigned to positive numbers and which is assigned to
negative numbers. However, you must be consistent in all your calculations. If North is positive in one set of coordinates,
it must be positive in all coordinates.
If you are using the time format for latitude and longitude values, you will need to change the number format for those cells.
By default, when you enter a time in a cell, Excel will use the Short Time format as specified in the Windows Regional
Settings. Excel will "roll-over" times at 24 hours (although the underlying value remains correct). For example, the time value
30:40:50 is displayed as 06:40:50. To correct this, you can use a number
format of [hh]:mm:ss. The square brackets [ ] instruct Excel not to
roll over the displayed value as a "time of day" value.
Also, you can instead use a custom number format to display time-format latitude and longitude
values with a cartographic format. Select the cells that you want to format, go
to the Format menu, choose Cells and then the Number tab. There, choose Custom in the
Category list and enter [hh]º mm' ss\" in the Type text box. To enter the degree
symbox (º), hold down the ALT key and press 0176 on the numeric keypad
on the right side of the keyboard (do not use the numbers above the letters). This number format will display the time
formatted coordinate value 20:30:40, for example, as 20° 30' 40". Note,
though, that even though the cell is formated to display degrees, minutes, and seconds, you must enter the number as a time using
the ":" character -- e.g., 20:30:40.
Since time formatted coordinates are just numbers representing the fraction of a 24-hour day (06:00:00 = 0.25, 12:00:00 = 0.5,
18:00:00 = 0.75, etc.), you can multiply a time format coordinate by 24 to get the decimal degrees value. For example, if
cell A1 has the value 20:30:40, you can use
=A1*24 to get the decimal degrees result, in this case 20.511111. Similarly, you can convert
a decimal degree value to time format by dividing by 24. For example, =B1/24. Be sure to format the
cells with a number format of [hh]:mm:ss or [hh]º mm' ss\".
If you have coordinate values in time format, you can use the following formulas to extract the degree, minute, and second values. In all
these examples, the time format value is assumed to be in cell A1.
=INT(A1) returns degrees
=MINUTE(A1) returns minutes
=SECOND(A1) returns seconds.
For decimal degrees values, use the formulas:
=INT(A1) returns degrees
=MINUTE((A1-INT(A1))/24) returns minutes
=SECOND((A1-INT(A1))/24 returns seconds.
In addition to the formulas above, you can use an array formula to split out the degree, minute, and second
values from either a time-format value or a decimal degree value. To split out the component from a time-format value, select the three cells that will get the component values and enter the following
array formula:
={1,0,0}*INT(A1*24)+{0,1,0}*MINUTE(A1)+{0,0,1}*SECOND(A1)
and press CTRL SHIFT ENTER. For more information about array formulas, see the
array formulas page on this web site. In the formula above, note the differences
between the parentheses and the curly braces { }.
To break out the degrees, minutes, and seconds values from a decimal degrees value, use the following array formula. Select
the cells that will get the component values, type the formula, and press CTRL SHIFT ENTER.
={1,0,0}*INT(A1)+{0,1,0}*MINUTE(A1/24)+{0,0,1}*SECOND(A1/24)
As before, note the difference between the parentheses and the curly braces.
In Mathematics and Cartography, a Great Circle Distance is the shortest path between two points on the
surface of a sphere (and we will assume that the Earth is a perfect sphere, even though it really isn't). This is the
"as the crow files" distance between the two points. All lines of Longitude are Great Circles, while the Equator
is the only Latitudinal Great Circle.
To calculate the Great Circle Distance between points, we first calculate the spherical central angle between the
two points and then multiply that angle (in Radians) by the radius of the Earth. Don't worry if you don't know what spherical
central angle means -- the formulas will calculate it for you. The equation used in the formulas is
Note that Excel's trigonometric functions work only with Radians, not Degrees, so the coordinate values must be converted from
Degrees to Radians. The RADIANS function is used to convert Degrees to Radians.
To calculate the Great Circle Distance between Location1 and Location2, use the formula:
=RadiusEarth*((2*ASIN(SQRT((SIN((RADIANS(D49*24)-RADIANS(D50*24))/2)^2)
+COS(RADIANS(D49*24))*COS(RADIANS(D50*24))*
(SIN((RADIANS(E49*24)-RADIANS(E50*24))/2)^2)))))
In this example, the RadiusEarth is a named cell with the value 6370.97327862273 for
nautical kilometers or 3958.73926185 for nautical miles. Multiply either value by 1.1507794480 to get the length in
statute kilometers or statute miles. Cells D49 and E49 are the latitude
and longitude of Location 1 and cells D50 and E50 are the latitude and
longitude of Location 2. These coordinates are in Time format. The result is the distance in either miles or kilometers, depending
on the value in the cell named RadiusEarth. For readability, the formula is broken into several lines. In
Excel, of course, the formula is in a single line in a single cell.
The same formula, using defined names for coordinates is shown below. Lat1_ and
Long1_ are the coordinates of the first location. Lat2_ and Long2_ are
the coordinates of the second location.
=RadiusEarth*((2*ASIN(SQRT((SIN((RADIANS(Lat1_*24)-
RADIANS(Lat2_*24))/2)^2)+COS(RADIANS(Lat1_*24))*COS(RADIANS(Lat2_*24))*
(SIN((RADIANS(Long1_*24)-RADIANS(Long2_*24))/2)^2)))))
To calculate the Great Circle Distance between Location 1 and Location 2, where the coordinates are in decimal degree format, use
the following formula:
=RadiusEarth*((2*ASIN(SQRT((SIN((RADIANS(D71)-RADIANS(D72))/2)^2)+
COS(RADIANS(D71))*COS(RADIANS(D72))*
(SIN((RADIANS(E71)-RADIANS(E72))/2)^2)))))
Here, cells D71 and E71 contain the latitude and longitude
of Location 1 and cells D72 and E72 contain the latitude and
longitude of Location 2. For readability, the formula is split over several lines. In Excel, of course, the formula is in
a single line in a single cell.
The same formula, using defined names for the coordinates is shown below. Lat1__ and
Long1__ are the coordinates of the start location and Lat2__ and
Long2__ are the coordinates of the end location.
=RadiusEarth*((2*ASIN(SQRT((SIN((RADIANS(Lat1__)-RADIANS(Lat2__))/2)^2)+
COS(RADIANS(Lat1__))*COS(RADIANS(Lat2__))* (SIN((RADIANS(Long1__)-RADIANS(Long2__))/2)^2)))))
The following VBA code will calculate a Great Circle Distance in either Kilometers or Miles (as specified in the
ResultAsMiles parameter -- True indicates Miles, False indicates Kilometers). The inputs may
be either decimal degrees or time-format values. (Set the ValuesAsDecimalDegrees
parameter to True for decimal degrees, False for Time degrees.)
Private Const C_RADIUS_EARTH_KM As Double = 6370.97327862
Private Const C_RADIUS_EARTH_MI As Double = 3958.73926185
Private Const C_PI As Double = 3.14159265358979
Function GreatCircleDistance(Latitude1 As Double, Longitude1 As Double, _
Latitude2 As Double, Longitude2 As Double, _
ValuesAsDecimalDegrees As Boolean, _
ResultAsMiles As Boolean) As Double
Dim Lat1 As Double
Dim Lat2 As Double
Dim Long1 As Double
Dim Long2 As Double
Dim X As Long
Dim Delta As Double
If ValuesAsDecimalDegrees = True Then
X = 1
Else
X = 24
End If
Lat1 = Latitude1 * X
Long1 = Longitude1 * X
Lat2 = Latitude2 * X
Long2 = Longitude2 * X
Lat1 = (Lat1 / 180) * C_PI
Lat2 = (Lat2 / 180) * C_PI
Long1 = (Long1 / 180) * C_PI
Long2 = (Long2 / 180) * C_PI
Delta = ((2 * ArcSin(Sqr((Sin((Lat1 - Lat2) / 2) ^ 2) + _
Cos(Lat1) * Cos(Lat2) * (Sin((Long1 - Long2) / 2) ^ 2)))))
If ResultAsMiles = True Then
GreatCircleDistance = Delta * C_RADIUS_EARTH_MI
Else
GreatCircleDistance = Delta * C_RADIUS_EARTH_KM
End If
End Function
Function ArcSin(X As Double) As Double
ArcSin = Atn(X / Sqr(-X * X + 1))
End Function
You can calculate the initial and terminal bearing of a great circle with formulas. The initial bearing is the bearing at which one would leave the starting point to
travel on a Great Circle route to the end point. The initial bearing is given by the formula:
=DEGREES(IMARGUMENT(COMPLEX(North1-North2,East1-East2))+PI())
The terminal bearing, the bearing one will be travelling upon arrival at the end point, is give by the formula:
=DEGREES(IMARGUMENT(COMPLEX(North2-North1,East2-East1))+PI()).
Bearings are measured clockwise from North, with North as 0 degrees, East at 90 degrees, South at 180 degrees, and West at 270 degrees.
|
This page last updated: 15-July-2011. |