Lunar Distance Method of William Chauvenet


In 1851 The Astronomical Journal published the William Chauvenet lunar distance method to calculate longitude from sextant observations of lunar distance (the angle between the Moon and another celestial body). An appendix in the 1855 American Ephemeris and Nautical Almanac has a description of the method, tables, and two worked examples. And of course Chauvenet's magnum opus on spherical astronomy has a thorough explanation (the tables are in Volume 2). He calls it "the shortest and most simple of the approximative methods when these are rendered sufficiently accurate by the introduction of all the necessary corrections." (his italics)

Here I present the method in a Windows program. It's as close as practical to a literal implementation of the Chauvenet formulas. The one deviation is the refraction model, which is a hybrid of the Cassini model and the low altitude formula in the modern Astronomical Almanac, already implemented in my SofaJpl fundamental astronomy DLL. I felt it was not worth the effort to code Chauvenet's extensive formulas, which are from Bessel. Tests of my refraction model agree well with the tables of Chauvenet.


ChauvenetLunar is distributed as a 212 k .zip file. No installer is necessary for an application this simple. An installer is a potential security vulnerability since it requires system privileges on your machine. On the other hand, with a .zip file you simply extract all files into one folder. (By default, Windows unzip creates new folder "ChauvenetLunar" as a subfolder of the one that contains the .zip.) Your system (desktop, registry, etc.) is not affected. I recommend the new folder be created somewhere in your Documents folder. To create a desktop shortcut, right click on the .exe file, select Send To, and Desktop.

Example Run

The main window appears when you launch the program:

main window

Initially, all buttons are disabled except Moon. After you visit its window, the Sun button is enabled, and so on until the OK button is the last to be enabled.

The Moon button opens a window to enter observed altitude, geocentric semidiameter, and horizontal parallax. Do not correct altitude for dip, refraction, or anything except error of the sextant. Do not adjust semidiameter for augmentation.

Moon window

Enter the values in the image. Don't forget the upper limb box, otherwise lower limb is assumed. The very precise angles in this example are a simulated observation calculated with modern software. The correct final result is known, which will let us test the accuracy of the Chauvenet formulas.

The software allows angle entry in D, DM, or DMS format. For example, you can enter a decimal degrees angle in the degrees box and nothing or zero in the minutes and seconds boxes. When no great precision is required there are no boxes for minutes and seconds. (In his book Chauvenet rounds these values to whole degrees.)

After entering all values, click OK. On the main window the Sun button is now enabled. Open the Sun window. Except for title, it's a clone of the Moon window. Enter these values:

sun window

Although the window says "Sun" it can be used for any body. If the center of a planet was observed use zero or blank for semidiameter, else the program assumes a limb observation and applies SD, however small. For stars use zero or blank SD and HP.

After you enter the Sun values, OK out of the window, and click the Atmosphere button on the main window. Enter these values:

atmosphere window

In the heyday of lunars the air pressure instrument was a mercury barometer, which responded to both pressure and temperature. Another factor was the different temperature coefficients of the mercury and the brass scale that measured its height. Chauvenet discusses these matters, and if the "mercury barometer" box is checked I implement his correction formulas to obtain air pressure at the observer ("station pressure"). That's appropriate for solving examples in old books. But the modern "barometric pressure" distributed to the public is aviation altimeter setting. For these values un-check "mercury barometer". That disables the barometer temperature input, and computes station pressure from altimeter setting and height.

A third possibility is that you know station pressure. In that case, enter it as altimeter setting. The program will decrease the pressure to compensate for height, but at typical shipboard height the difference is insignificant. If observing from land, enter zero height to eliminate the pressure adjustment.

In reality, normal air pressure variations have little effect on refraction. Temperature variation is far more significant. For instance, a 2% pressure increase, say from 29.9 to 30.5 inches, is uncommon. A 2% decrease in absolute temperature, say from 70 to 60 F, has the same effect on refraction. Thus, normally it's sufficient to enter temperature, height, and a nominal altimeter setting.

Height also affects the dip correction. It's assumed your altitudes are with respect to the sea horizon, so dip is automatically subtracted unless you check the "no dip correction" box.

For this example, enter the values in the image and OK out of the window.

In the main window enter dead reckoning latitude 40° and lunar distance 67°23′16.5″. (The tab key will navigate through the input boxes and buttons in sequence.)

Open the Almanac window and enter the values below:

almanac data

These are geocentric lunar distances at 1800, 1900, and 2000. In the old days they were tabulated in the almanac, normally every three hours. However, my program does not restrict you to that interval. Also, if the distances are unknown it will calculate them from the coordinates of the bodies. But for this example we use the distances I have provided.

For optimum accuracy the observation should occur between the first two entries, in this case between 1800 and 1900. But the math still works if you're outside that interval. The third distance (labeled "distance at t2") is not required. If present, it helps correct for the non-constant lunar distance rate of change. In this case, if you compare lunar distances at t0 and t1 vs. t1 and t2, the hourly rates are 2.7″ different. A correction for this "second difference" is applied with the formula of Chauvenet.

If you only need the "cleared" lunar distance (i.e., the observed distance reduced to Earth center), the almanac lunar distances are irrelevant and you don't need to enter values. However, you must still enter the window and exit with the OK button, else the OK button in the main window is not enabled.

For this demonstration, enter the values above and exit. In the main window click OK:

final values

The correct angle d ("cleared" lunar distance, i.e., the equivalent geocentric angle) is 67°36′49.6″ and the correct UT is 17:50:00, so the result above is highly satisfactory. (Date is 2020 October 21, position N40° W050°.)

Although the time of 1750 was not within the data in the Almanac window, the result was still good. However, for best accuracy the observation should be in the interval between the first two almanac distances, though in this case it makes no difference. In fact, the third distance (which provides the optional second difference correction) can be omitted with no effect.

However, my demonstration was not too sensitive to these factors since the observation was close to one of the tabulated distances, and the tabulation interval was only one hour. It was usually three hours in the old days.

Angle Input and Output

In this program angles may be entered in D, DM, or DMS format. For example, you can enter decimal degrees and leave the minutes and seconds boxes empty. (An empty box is the same as zero). For some non-critical angles, such dead reckoning latitude, it's sufficient to use the nearest degree or tenth degree, so there are no boxes for minutes and seconds.

If at least one of degrees, minutes, or seconds is negative, the program considers the entire angle negative. For example, you can enter -22°13′45″ with a negative sign on 22° only. (But it's not an error to put a negative sign on all three number.) Be careful with negative angles less than one degree. The negative sign must be in a nonzero box. For example, to input -0°0′0.5″, put the negative sign on the seconds.

It's not necessary that the values fit the boxes. The program reads all digits even if they overflow the box. (That can happen if you copy and paste from another document.)

The angle format selector in the main window affects only the output of d, the "cleared" (geocentric) lunar distance. Output precision is fixed at 0.1″, or the equivalent in other formats.

Another Sun Lunar

In this test, all inputs are decimal degrees. And since this is an accuracy test, precision is far beyond what is attainable in practice. Values are from my Lunar 4.4 software at 2019-01-01 19:00:00 UT1, +1m08.627s delta T, JPL DE431 ephemeris, IAU 2006 precession model and 2000B nutation. Polar motion is ignored.

15.44833 alt UL
0.25517 SD
0.93678 HP
-13.8 dec

26.66954 alt LL
0.27109 SD
0.00248 HP
-23.0 dec

30.3 inches Hg, 32 F, height 0

40 lat, 48.44996 distance near to near

almanac distances 49.14341, 47.67513, 46.21022
first distance at 18h, interval 3h

48°39′13.4″, 18h59m59s computed d and UT
48°39'13.0", 19h00m00s correct values

Star Lunar

The result should be exactly midnight, but that makes the time solution too easy since it would normally coincide with a tabulated almanac distance. So to make the problem more difficult I provide distances every two hours, with the solution falling midway between the first and second distances.

26.77179 alt LL
0.24528 SD
0.90047 HP
-13.6 dec

33.38650 alt
0.0 SD
0.0 HP
+16.5 dec

30.3 inches Hg, 32 F, 0 height

40 lat, 98.37973 distance, far to center

almanac distances 98.10525, 97.12144, 96.13749
first distance 23h, interval 2h

97°36′48.4″, 23h59m59s computed d and UT
97°36′48.1″, 00h00m00s correct values

Yet Another Sun Lunar

So far I've provided geocentric lunar distances for input in the Almanac page. However, the program can calculate the distances from spherical coordinates. At the top of the Almanac page, select either RA/dec or HA/dec. The only difference between the two modes is hours or degrees for the angle measured about the pole. The coordinate system need not be equatorial, and the "longitude" angle can increase east or west. The only requirement is that the coordinates are geocentric apparent place. To demonstrate, in this example the Almanac data are ecliptic sexagesimal latitude and longitude.

71.35924 alt LL
0.24576 SD
0.90223 HP
+0.8 dec

35.97069 alt LL
0.27062 SD
0.00248 HP
-17.7 dec

1010 mb, 10 C, height 0

10° DR lat
63.74182 observed distance, near to near

Enter this almanac data:

ecliptic coordinates

OK out of the Almanac window, and OK in the main window. Results:

64°06′16.0″, 16h40m01s computed values
64°06′15.9″, 16h40m00s correct values

Sun Lunar (1855 Almanac)

Chauvenet gives two examples in the 1855 Almanac and one example in his spherical astronomy book. I don't think these are the best basis for testing lunar distance algorithms since he always has one body at low altitude and atmospheric conditions are far from standard in all three examples. (I believe that's intentional, to flatter his method when compared to simpler ones.) But it means the results are sensitive to the refraction model of the algorithm under test. Nevertheless, here I present all three, re-computed with my Lunar program. Both programs share the same refraction model (except refracted semidiameter), so any discrepancy is due to the slight departure from a rigorous solution in the Chauvenet lunar method.

This modern re-computation has the same angles as the 1855 Almanac example (within a few minutes). Input parameters: 1855-09-07 08:07 UT1, +0m10.270s delta T, N 35°30′ W 030°00′, JPL DE 422 ephemeris, IAU 2006 precession, 2000B nutation.

49°30.051' moon LL
14.781' SD
54.265' HP
+25.3 dec

5°23.262' Sun LL
15.879' SD
0.146' HP
+6.3 dec

29.1 inches Hg altimeter setting, 75 F, 20 ft height

35.5 DR lat
43°52.709' observed distance, near to near

46°02.961', 44°41.310', 43°19.763' almanac distances
6h first distance, 3h table interval

45°05.295′, 8h07m06s computed d and UT1
45°05.341′, 8h07m00s correct values

Fomalhaut Lunar (1855 Almanac)

Parameters of the modern re-computation: 1855-08-30 05:42 UT1, +0m10.276s delta T, S 55°20′ W 120°25′. Fomalhaut catalog data from the Hipparcos new reduction (van Leeuven 2007).

6°34.798' Moon LL
16.399' SD
1°00.203' HP
+3.8 dec

52°42.760' Fomalhaut altitude
-30.4 dec

31 inches altimeter setting, 20 F, 18 ft height

-55.3 DR lat
46°30.469' Moon far to Fomalhaut

43°51.962', 45°32.554' almanac distances
3 h first distance, 3 h interval

45°22.462′, 5h41m56s computed d and UT1
45°22.484′, 5h42m00s correct values

Sun Lunar (Spherical and Practical Astronomy, 1891)

Modern re-computation at 1856-03-10 03:14 UT1, +0m10.147s delta T, N 35° W 150°, JPL DE422 ephemeris.

52°35'03.6" Moon LL
16'20.0" SD
59'58.0" HP
+14.3° dec

8°57'46.8" Sun LL
16'05.6" SD
08.8" HP
-4.1° dec

29.5 inch Hg altimeter setting, 58° F, 0 height

+35° DR lat

44°37'40.5" distance, near to near

45°40'52.8", 47°21'51.9" almanac distances
3h first distance, 3h interval

45°48′44.3″, 3h14m00s computed d and UT1
45°48′44.9″, 3h14m00s correct values


(last modified 2023-02-19)