
{ 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).
