Skip to main content

OrbitOps

OrbitOps is a Python command-line toolkit for satellite tracking and basic orbital analysis using publicly available CelesTrak data.

It uses Two-Line Element (TLE) data and the SGP4 propagation model to calculate spacecraft positions, velocities, and distances.

Features

  • Calculate current latitude, longitude, and altitude
  • Display TEME Cartesian position and velocity
  • View satellite catalog information
  • Search satellites by name
  • Calculate 3D distance between two spacecraft
  • Continuously monitor a spacecraft's calculated position

Installation

OrbitOps requires Python 3.14 or later.

Install from PyPI:

pip install orbitops

Then verify the installation:

orbitops help

Usage

OrbitOps uses NORAD Catalog Numbers to identify spacecraft.

For example, the International Space Station (ISS) has catalog number 25544.

Position

Show the calculated latitude, longitude, and altitude of a spacecraft.

orbitops position 25544

Example:

Geographic position of ISS (ZARYA)
--------------------
Latitude:  -32.7625°
Longitude: -54.1085°
Altitude:  432.53 km

TEME State

Show the spacecraft's TEME Cartesian position and velocity.

orbitops teme 25544

Position is reported in kilometers and velocity in kilometers per second.

Satellite Information

View catalog information for a spacecraft.

orbitops info 25544

This may include information such as the spacecraft name, NORAD catalog number, launch date, owner, inclination, apogee, and perigee.

Search

Search the satellite catalog by name.

orbitops search ISS

You can also use broader searches:

orbitops search STARLINK

Broad searches may match many spacecraft. The current version of OrbitOps displays the first returned result.

Distance

Calculate the current straight-line 3D distance between two spacecraft.

orbitops distance 25544 69012

The result is reported in kilometers.

The distance is calculated from both spacecraft's propagated TEME Cartesian positions and represents their instantaneous 3D separation, not distance along Earth's surface.

Watch

Continuously monitor the calculated geographic position of a spacecraft.

orbitops watch 25544

Example:

ISS (ZARYA) | Lat: 38.2841° | Lon: -72.1832° | Alt: 421.72 km

Press Ctrl+C to stop.

Command Reference

Command Usage Description
position orbitops position <CATNR> Show latitude, longitude, and altitude
teme orbitops teme <CATNR> Show TEME position and velocity
info orbitops info <CATNR> Show satellite catalog information
search orbitops search <name> Search satellites by name
distance orbitops distance <CATNR1> <CATNR2> Calculate 3D spacecraft separation
watch orbitops watch <CATNR> Continuously monitor spacecraft position
help orbitops help Display the help menu

How It Works

OrbitOps retrieves publicly available orbital data from CelesTrak.

For position calculations, OrbitOps retrieves a spacecraft's TLE and uses SGP4 to propagate its orbit to the current time.

CelesTrak
    |
    | TLE
    v
OrbitOps
    |
    | SGP4
    v
Calculated spacecraft state
    |
    +--> TEME position and velocity
    |
    +--> Latitude / Longitude / Altitude

For continuous tracking, the TLE does not need to be downloaded every second. OrbitOps retrieves the orbital elements and performs subsequent propagation locally.

Data and Accuracy

OrbitOps does not receive live spacecraft telemetry.

Positions are calculated from publicly available orbital elements using SGP4. They should therefore be treated as calculated or predicted positions, not authoritative spacecraft positions.

Accuracy can be affected by factors including:

  • Age of the orbital elements
  • Atmospheric drag
  • Spacecraft maneuvers
  • Spacecraft orbit
  • Time elapsed from the TLE epoch

OrbitOps is intended for educational, informational, satellite-tracking, visualization, and general orbital-analysis purposes.

Development

Clone the repository:

git clone <repository-url>
cd OrbitOps

Install the development environment:

uv sync

Run OrbitOps:

uv run orbitops position 25544

Run tests and checks:

uv run pytest
uv run ruff check .
uv run pyright

License

OrbitOps is licensed under the MIT License.

See the LICENSE file for the full license terms.

Disclaimer

OrbitOps is provided for educational, informational, and general satellite tracking purposes only.

OrbitOps does not provide authoritative spacecraft telemetry, precision orbit determination, or mission-operational data. Satellite positions and other orbital information produced by OrbitOps are calculated from publicly available orbital elements using mathematical propagation models and may contain errors or become inaccurate over time.

OrbitOps is not intended for spacecraft navigation, collision avoidance, rendezvous operations, launch operations, flight safety, mission-critical decision-making, or any other safety-critical application.

Users are responsible for independently verifying any data produced by OrbitOps before relying on it for operational purposes.

THE SOFTWARE AND ALL OUTPUT GENERATED BY THE SOFTWARE ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. USE OF ORBITOPS AND RELIANCE ON ITS OUTPUT IS AT THE USER'S OWN RISK.

Download files

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

Source Distribution

orbitops-0.1.0.tar.gz (5.4 kB view details)

Uploaded Source

Built Distribution

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

orbitops-0.1.0-py3-none-any.whl (7.3 kB view details)

Uploaded Python 3

File details

Details for the file orbitops-0.1.0.tar.gz.

File metadata

  • Download URL: orbitops-0.1.0.tar.gz
  • Upload date:
  • Size: 5.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for orbitops-0.1.0.tar.gz
Algorithm Hash digest
SHA256 55dc519f990bef824e8b7bf2edeea11a3faa2b533fe00c65d8a05dcb5708aa9b
MD5 5c880955521e0c8cd9450cd53d567be0
BLAKE2b-256 2a80eed42f3d8fe55859a32502182b05e0af202c915a21f57163d10fd715f8ad

See more details on using hashes here.

File details

Details for the file orbitops-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: orbitops-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 7.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for orbitops-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 02d48155de3c982cba0a2d31c29346ab007223d65e4fadb61c4609173dbe7310
MD5 c77101dbc27fe30605cdae3858b9780d
BLAKE2b-256 b869032d99a799101dc2ce06ba797d5be7bed97d9a3ebc28e2f0c02a7fa5df90

See more details on using hashes here.

Release history Release notifications | RSS feed

0.2.0

2 files

0.1.1

2 files

This release

0.1.0 This release

2 files

Supported by

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