chi and h site logo

{ Practical astronomy | Computing | Satellite ephemeris }


Satellite ephemeris

Here we combine the computing environment, the software design principles and the insights about the movement of artificial satellites into software to do some calculations for us. The result is the module Satellite.

The algorithm is the SGP4/SDP4 model (Hoots and Roehrich 1980a). Unlike the other calculations in Ciel4, satellite orbit integration is not coded within Ciel4. Rather, the Python package sdp has to be obtained from the Python package index.

Orbit parameters are traditionally published as three-line elements (TLE). Since 2000 the Y2K problem of this data format has been apparent. For now, year numbers above 56 are presumed to be 20th century and numbers below 57 are presumed to be 21st century. Since 2026 the number of objects is causing another problem with the format, which provides only five digits to number all objects. Due to tracking of smaller objects, due to debris from a few satellite collisions, and due to lower cost of building and launching satellites, the 100000 mark was exceeded in 2026-07. The object ID by launch also has two issues. Its first part is the launch year, in two digits and hence with a Y2K problem. Its second is a counter for all launches of that year and limited to 999. The third part is a single letter to denote the fragment of the launch vehicle, thus limited to 26 fragments. Since 2020, the Orbit Mean-Elements Message (OMM) has been available as an alternative. This avoids the five-digit, three-digit, single-letter and Y2K limits and can be provided in a variety of formats, including XML and CSV (comma-separated values, Kelso 2020a).

We use a hidden file to hold the three TLE lines with contemporary orbit parameters of the satellite that we are interested in. Such parameters can be obtained for most satellites from CelesTrak.org (Kelso 2026a) or Heavens-Above.com (Peat 2026b). The former source is very efficient to use due to a query form where one satellite, a satellite group, etc. can be chosen. It has two disadvantages that can be overcome by using the second source: CelesTrak is associated with the US military and may deny the existence of some satellites that are classified. And since a satellite number above 999999 cannot be represented in the TLE format, CelesTrak will refuse to provide orbit data in that format. Heavens Above is associated with the Deutsches Zentrum für Luft- und Raumfahrt (DLR). It may provide details of satellites kept secret by CelesTrak, and it will provide TLE even when the satellite number would have seven digits.

.CL4_SAT
Stores the contemporary details of a satellite as expressed in Three-line elements (TLE).

We have these user utilities to show the information for the chosen object. They require Python scripts to invoke from the Bash shell and to convert input parameters, and Python functions to do the work:

SatShow.py
SatShow(aFile)
Show the sky position of the satellite specified in .CL4_SAT.
SatPhys.py
SatPhys(aFile)
Show the physical ephemeris of the satellite specified in .CL4_SAT.
SatPass.py
SatPass(aFile)
Show the passes during the next 24 hours of the satellite specified in .CL4_SAT.

Here is an example use from the Bash shell for the ISS. The TLE are obtained and stored first. Then the time is set from the computer's clock, then the observatory selected. Five output routines show time, observatory, position ephemeris, physical ephemeris, and finally, when the ISS will move across the local sky.

$ wget \
  "http://celestrak.org/NORAD/elements/gp.php?CATNR=25544&FORMAT=TLE" \
  -O .CL4_SAT
$ TimSetSys
$ LocSet   -70.417 -24.667 2635 "Cerro Paranal"

$ TimShow

                     JD [d]  2461349.168576
      Gregorian Date and UT  2026-11-04T16:02:45.0
         Julian Date and UT  2026-10-22T16:02:45.0
                TT - UT [s]  76.84
              TAI - UTC [s]  44.66

$ LocShow

                Observatory  Cerro Paranal
 Geographic longitude [deg]  -70.4170
  Geographic latitude [deg]  -24.6670
  Geocentric latitude [deg]  -24.5216
              Elevation [m]  2635.0
        Sidereal time [deg]  214.1840   14:16:44

$ SatShow

        Object  ISS (ZARYA)
       lII,bII  291.5032   25.6335   0.006804
  RA,Dec B1950  179.4456  -35.8233   0.006804  11:57:47  -35:49:24
  RA,Dec J2000  180.0857  -36.1011   0.006804  12:00:21  -36:06:04
   lam,bet EOD  196.6236  -32.6912   0.006804
    RA,Dec EOD  180.4302  -36.2503   0.006804  12:01:43  -36:15:01
   HA,Dec topo  112.1345  -22.6951   0.003567  07:28:32  -22:41:42
      A,h topo  239.8844   -8.9090   0.003567
  PA of zenith            121.56

$ SatPhys

                      Object  ISS (ZARYA)
              whether sunlit  1
            Elongation [deg]  -108.11404764363391
           Phase angle [deg]  -71.88503071730337

$ SatPass

Passes of satellite ISS (ZARYA)

         UT               A      h       r        El      Ph  sunlit
                         deg    deg      km       deg     deg
---------------------  ------  -----  --------  ------  ------  -
2026-11-04T21:00:45.0   200.3    3.2    2040.4   -64.7  -115.3  1
2026-11-04T21:01:45.0   193.1    7.3    1689.8   -69.3  -110.7  1
2026-11-04T21:02:45.0   182.3   12.1    1377.2   -77.1  -102.9  1
2026-11-04T21:03:45.0   165.5   17.2    1136.5   -89.8   -90.2  1
2026-11-04T21:04:45.0   141.6   20.3    1021.4   107.8    72.2  1
2026-11-04T21:05:45.0   116.0   18.7    1073.8   126.5    53.5  1
2026-11-04T21:06:45.0    96.4   13.9    1273.3   140.0    40.0  1
2026-11-04T21:07:45.0    83.6    8.8    1564.0   147.4    32.6  1
2026-11-04T21:08:45.0    75.3    4.4    1903.9   151.1    28.9  1
2026-11-04T21:09:45.0    69.6    0.6    2270.1   152.8    27.2  1

2026-11-04T22:36:45.0   239.7    0.4    2310.7   -15.3  -164.7  1
2026-11-04T22:37:45.0   245.1    4.1    1940.6    -9.5  -170.5  1
2026-11-04T22:38:45.0   253.0    8.5    1595.7     5.2   174.8  1
2026-11-04T22:39:45.0   265.3   13.4    1298.3    14.8   165.2  1
2026-11-04T22:40:45.0   284.2   18.1    1089.6    33.0   147.0  1
2026-11-04T22:41:45.0   309.4   19.8    1026.4    56.5   123.5  1
2026-11-04T22:42:45.0   333.4   16.8    1133.4    79.0   101.0  1
2026-11-04T22:43:45.0   350.3   11.8    1370.9    95.8    84.2  1
2026-11-04T22:44:45.0     1.2    7.0    1683.8   107.0    73.0  1
2026-11-04T22:45:45.0     8.4    2.8    2036.6   114.5    65.5  1

2026-11-05T11:59:45.0   334.7    0.3    2320.3  -116.9   -63.1  1
2026-11-05T12:00:45.0   337.6    4.4    1919.2  -112.1   -67.9  1
2026-11-05T12:01:45.0   342.0    9.6    1527.8  -105.4   -74.6  1
2026-11-05T12:02:45.0   349.8   16.7    1158.3   -95.1   -84.9  1
2026-11-05T12:03:45.0     5.7   27.1     842.7   -77.1  -102.9  1
2026-11-05T12:04:45.0    40.8   37.6     665.2   -45.7  -134.3  1
2026-11-05T12:05:45.0    85.3   32.9     734.6    -9.2  -170.8  1
2026-11-05T12:06:45.0   108.6   21.3    1000.7    14.7   165.3  1
2026-11-05T12:07:45.0   119.2   12.8    1351.2    28.0   152.0  1
2026-11-05T12:08:45.0   124.8    6.9    1734.7    36.3   143.7  1
2026-11-05T12:09:45.0   128.3    2.4    2132.3    42.1   137.9  1

2026-11-05T13:37:45.0   275.3    1.6    2198.8  -127.8   -52.2  1
2026-11-05T13:38:45.0   267.1    4.9    1888.6  -125.0   -55.0  1
2026-11-05T13:39:45.0   255.9    8.3    1626.5  -120.8   -59.2  1
2026-11-05T13:40:45.0   241.0   11.2    1439.9  -114.8   -65.2  1
2026-11-05T13:41:45.0   222.8   12.7    1361.2  -106.8   -73.3  1
2026-11-05T13:42:45.0   204.2   11.8    1408.6   -98.3   -81.7  1
2026-11-05T13:43:45.0   188.3    9.2    1570.5    91.2    88.8  1
2026-11-05T13:44:45.0   176.2    5.9    1815.7    86.4    93.6  1
2026-11-05T13:45:45.0   167.3    2.6    2114.6    83.6    96.4  1

The sunlit flag should be used with some caution. The algorithm uses a cylindrical shadow of the Earth, when the shadow in fact diminishes with distance away from Sun and Earth and has a conical shape. The error in shadow size for low earth orbits (LEO) is less than 0.1% (6 km or less than 1 s along the orbit). Even for geosynchronous orbits the error is only 3% (200 km, 1 min along the orbit).