Skip to main content

Satellite orbit tools: TLE propagation, SP3 parsing, and coordinate transformations

Project description

satorbit

Satellite orbit tools for Python: TLE propagation, SP3 parsing, and coordinate transformations.

Originally developed at KNMI (Royal Netherlands Meteorological Institute) as part of swxtools.

Installation

pip install satorbit

Features

  • TLE handling: Query space-track.org, parse TLE data, and propagate orbits using SGP4
  • SP3 parsing: Read SP3 precise orbit files into pandas DataFrames
  • Coordinate transforms: Convert between ITRF, geodetic, GCRS, and Quasi-Dipole coordinates
  • Orbit interpolation: High-accuracy 7th-order Lagrange interpolation with automatic handling of geodetic, magnetic, and solar angle coordinates
  • Keplerian mechanics: Simulate orbits with J2 perturbation effects

Usage

TLE Propagation

import pandas as pd
from satorbit import geodetic_orbit_from_tle

# Generate orbit positions for a satellite over a time range
times = pd.date_range("2024-01-01", "2024-01-02", freq="1min")
orbit = geodetic_orbit_from_tle(norad_id=25544, times=times)  # ISS
print(orbit[['lat', 'lon', 'height']])

API calls to space-track.org are automatically rate-limited (2s between requests) and TLE results are cached in memory with merge-on-overlap, so iterating over consecutive daily ranges only hits the API once per satellite.

SP3 File Parsing

from satorbit import sp3_to_itrf_df

df = sp3_to_itrf_df("orbit.sp3")
print(df[['x_itrf', 'y_itrf', 'z_itrf']])

Coordinate Transformations

from satorbit import itrf_to_geodetic, geodetic_to_qd

# Convert ITRF to geodetic coordinates
df_geo = itrf_to_geodetic(df_orbit)

# Convert to Quasi-Dipole magnetic coordinates
df_qd = geodetic_to_qd(df_geo)

Orbit Interpolation

from satorbit import interpolate_orbit_to_datetimeindex

# Interpolate an orbit DataFrame to new timestamps
# Works with ITRF, geodetic, quasi-dipole, MLT, and solar angle columns
new_times = pd.date_range("2024-01-01", "2024-01-02", freq="1s")
df_interpolated = interpolate_orbit_to_datetimeindex(df_orbit, new_times)

Spherical and angular columns (lon, lat, height, lat_qd, lon_qd, mlt, solar_elevation, solar_azimuth) are automatically converted to Cartesian representation before interpolation, avoiding singularities at the antimeridian and poles. This allows expensive coordinate transformations to be computed once at coarse cadence and then accurately interpolated to any timestamp.

Keplerian Orbit Simulation

import numpy as np
from satorbit import simulate_orbit, unperturbed_orbitalperiod

kepler = {
    "semimajoraxis": 7000,  # km
    "eccentricity": 0.001,
    "inclination": np.radians(98),
    "argumentofperigee": np.radians(90),
    "raan": np.radians(0),
    "initial_mean_anomaly": 0,
    "mu": 398600.4415,
    "re": 6378.1363,
    "j2": 1082.6357e-6
}

period = unperturbed_orbitalperiod(kepler)
times = np.linspace(0, period, 100)
orbit = simulate_orbit(kepler, times)

Configuration

For TLE queries from space-track.org, either create ~/.spacetrackorg.txt:

[default]
username = your_username
password = your_password

Or set credentials programmatically:

from satorbit import set_credentials

set_credentials("your_username", "your_password")

License

Apache License 2.0 - see LICENSE

Acknowledgements

Developed with support from ESA through the Swarm Data Innovation and Science Cluster (Swarm DISC).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

satorbit-0.3.0.tar.gz (114.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

satorbit-0.3.0-py3-none-any.whl (24.4 kB view details)

Uploaded Python 3

File details

Details for the file satorbit-0.3.0.tar.gz.

File metadata

  • Download URL: satorbit-0.3.0.tar.gz
  • Upload date:
  • Size: 114.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for satorbit-0.3.0.tar.gz
Algorithm Hash digest
SHA256 7442be5316f52a07ca6e710f87d0bf35fe84c015758c591871edf2d3e66e0992
MD5 40bfa2d2961a043c4e1a204cf6e350d0
BLAKE2b-256 3b6da11d02c794ff2bfe180bd1dc0432156723b1e67e1d34a6fb8253ab820d51

See more details on using hashes here.

File details

Details for the file satorbit-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: satorbit-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 24.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for satorbit-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3bacf68aabe171dcd1736a0ffcc7b10dfcd528001cb9ca8ed3cd145190cfa7b8
MD5 b09e737ef2057a126c6dbcd4a5e73c85
BLAKE2b-256 2851b12ff8e21d77925506c333a663228489b22a9fc2c81e871f4aa5fd5f5436

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page