The definitive source of information about the position of the Sun, Moon and planets can be found at the NASA Jet Propulsion Laboratory. The data sets are named DE4XX, where the latest are DE440 and DE441. The data comes sets of files spanning over 1,000 years from 1550 to 2650. The data sets are updated periodically, usually as a result of improved data from space probes. The data is calculated using numerical integration based on actual data and so is very accurate.
The DE440 data is in a set of ASCII files. The header file header.440 describes the data and defines constants. The data files ascp01550.440 through ascp2550.440 contain large numbers of data values. The file testpo.441 contains results for testing. The JPL data files can be found at ssd.jpl.nasa.gov.
Later data sets have additional very large ASCII files that extend calulations into the distant past and distant future.
The header file header.440
is the key to
understanding the data. The header file has a number of groups
starting with a number of the form 10XX.
The order in which the bodies are defined is:
Note that the order and number of data sets changes between
DE4XX versions. Read the file ascii_format.txt
that
comes with each data set for detail. Also note that data for the
nutations etc can be missing or have no data.
There are 11 data files which contain the actual coordinate
data for each of the bodies. Each data file spans 100 years.
They are named ascp01550.440
,
ascp01650.440
, … ,ascp02550.440
.
Each data file contains 1142 blocks of 1018 values. The first two values in each block are the start Julian date and the end Julian date for the block. Each block spans 32 days.
Header group 1050 takes the following form:
GROUP 1050
3 171 231 309 342 366 387 405 423 441 753 819 899 1019 1019
14 10 13 11 8 7 6 6 6 13 11 10 10 0 0
4 2 2 1 1 1 1 1 1 8 2 4 4 0 0
The first row gives the start offset in each data block for each of the bodies. Mercury’s data starts at offset 3, Venus’ data starts at offset 171, etc. So, Mercury has 168 data values.
The third row gives the number of time intervals each 32 day block is divided into. Mercury’s value is 4. This means that Mercury’s data has 4 intervals of \(32 / 4 = 8\) days. The 168 data values are divided into 4 blocks of 42 values.
The third row gives the number of Chebychev coefficients for each coordinate value. Mercury has 14 coefficients. Each 42 value block defines \(42 / 14 = 3\) coordinate values. These are Mercury’s x, y, and z coordinates.
A coordinates define a position relative to the Solar System Barycenter (SSB) for all bodies except the Moon which has coordinates relative to the center of the Earth. All corrdinate values are in kilometers. The z-axis direction is the direction of the Earth’s axis of totation at the J2000 epoch. The x-axis direction is the direction of the Vernal Equinox at the J2000 epoch.
We will give an example of calculating the position of Mercury at Julian date \(t\). Locate the data file containing data for the date. Locate the 1018 data value block for the 32 day period with start date \(T_s\) and end date \(T_e\) where \(T_s \le t < T_e\). The interval tile \(t_i = 8\) days. Find the interval for the date \(i = floor((t - T_s) / t_i)\).
The Chebychev polynomials use a time in the range \([-1, 1]\) where -1 is the start time of the interval, and 1 is the end time of the interval. Calculate the Chebychev time \(t_c = 2(t - T_s - i * t_i) / t_i - 1\).
The Chebychev terms \(T_i, 0 \le i < 14\) can now be calculated.
\[T_0 = 1\] \[T_1 = t_c\] \[T_i = 2t_cT_{i-1} - T_{i-2}\]
The Chebychev velocity terms \(T'_i\) can be calculated by differentiating the Chebychev terms.
\[T'_0 = 0\] \[T'_1 = 1\] \[T'_i = 2T_{i-1} + 2t_cT'_{i-1} - T'_{i-2}\]
The coordinate \(x\) and velocity \(v\) can be calculated by summation, where \(n = 14\).
\[x = \sum_{i=0}^n T_i\] \[v = \sum_{i=0}^n T'_i\]
The \(y\) and \(z\) positions and velocities in the same way from the next two blocks of 14 values.