Skip to main content

Cysgp4: a wrapper around the SGP4 package, for sat TLE calculations

Project description

PyPI tag License-GPL3 License-Apache License-BSD3

Project Status

cysgp4's Azure Pipelines Status cysgp4's Coveralls Status

Purpose

The cysgp4 package is a Cython-powered wrapper of the sgp4lib library (by Daniel Warner) to compute satellite positions from two-line elements (TLE).

It provides similar functionality as the well-known sgp4 Python package (by Brandon Rhodes), which uses Numba internally to speed-up the calculations. In contrast to sgp4, cysgp4 can work well with arrays of TLEs and/or times and make use of multi-core platforms (via OpenMP) to boost processing times a lot.

Installation

We highly recommend to use cysgp4 with the Anaconda Python distribution, in which case installiation is as easy as

conda install -c conda-forge cysgp4

Otherwise, you should install cysgp4 via pip:

pip install cysgp4

The installation is also possible from source. Detailed installation instructions can be found in the user manual.

Dependencies

We kept the dependencies as minimal as possible. The following packages are required:

  • Python 3.5 or later

  • numpy 1.13 or later

If you want to run the notebooks yourself, you will also need the Jupyter server and install matplotlib. To run the tests, you’ll need sgp4.

Note, for compiling the C-extension, OpenMP is used for parallelization. If you use gcc, for example, you should have at least version 4.8 otherwise the setup-script may fail. Again, see Detailed installation instructions for more information.

Usage

Using cysgp4 is possible via an object-oriented interface or with a fast numpy-array functional approach. The former works like this:

import cysgp4

# Define a date/time and an observer
pydt = cysgp4.PyDateTime.from_mjd(58805.57)
lon_deg, lat_deg = 6.88375, 50.525
alt_km = 0.366
obs = cysgp4.PyObserver(lon_deg, lat_deg, alt_km)

# Define satellite properties/orbit via two-line element string (TLE)
hst_tle = cysgp4.PyTle(
    'HST',
    '1 20580U 90037B   19321.38711875  .00000471  00000-0  17700-4 0  9991',
    '2 20580  28.4699 288.8102 0002495 321.7771 171.5855 15.09299865423838',
    )

# Create a satellite object for querying coordinates
sat = cysgp4.Satellite(hst_tle, obs, pydt)
sat.eci_pos().loc  # ECI cartesian position, km
(5879.5931344459295, 1545.7455647032068, 3287.4155452595)
sat.eci_pos().vel  # ECI cartesian velocity, km/s
(-1.8205895517672226, 7.374044252723081, -0.20697960810978586)
sat.geo_pos()  # geographic (geodetic) position, lon/lat/alt
<PyCoordGeodetic: 112.2146d, 28.5509d, 538.0186km>
sat.topo_pos()  # topocentric position, az/el/dist/dist_rate
<PyCoordTopocentric: 60.2453d, -35.6844d, 8314.5683km, 3.5087km/s>

# One can change time to determine positions at another moment
sat.mjd += 1 / 720.  # one minute later
sat.topo_pos()
<PyCoordTopocentric: 54.8446d, -38.2749d, 8734.9195km, 3.4885km/s>

In many cases, however, one probably wants to calculate coordinates for a (large) number of satellites, observer locations, and/or observing times. For this, the function ~cysgp4.propagate_many is useful. This is an array interface to the sgp4 calculations, which allows to perform calculations for different satellite TLEs, observers and times in a parallelized manner. ~numpy broadcasting rules apply:

import requests
import numpy as np
from cysgp4 import PyTle, PyObserver, propagate_many

# Download many TLEs from a website
url = 'http://celestrak.com/NORAD/elements/science.txt'
ctrak_science = requests.get(url)
all_lines = ctrak_science.text.split('\\r\\n')

# Need to convert them to a list of tuples (each tuple consisting
# of the three TLE strings)
tle_list = list(zip(*tuple(
    all_lines[idx::3] for idx in range(3)
    )))
# Create an array of PyTle and PyObserver objects, and MJDs
tles = np.array([
    PyTle(*tle) for tle in tle_list
    ])[np.newaxis, np.newaxis, :20]  # use first 20 TLEs
observers = np.array([
    PyObserver(6.88375, 50.525, 0.366),
    PyObserver(16.88375, 50.525, 0.366),
    ])[np.newaxis, :, np.newaxis]
mjds = np.linspace(
    58805.5, 58806.5, 1000  # 1000 time steps
    )[:, np.newaxis, np.newaxis]

# The result is a dictionary
result = propagate_many(mjds, tles, observers)
print(result.keys())
dict_keys(['eci_pos', 'eci_vel', 'geo', 'topo'])

# Returned array shapes are as follows; last array dimension
# contains the coordinate pairs.
print(np.broadcast(mjds, tles, observers).shape)
(1000, 2, 20)
print(result['eci_pos'].shape, result['topo'].shape)
(1000, 2, 20, 3) (1000, 2, 20, 4)

# One can also skip over coordinate frames.
result = propagate_many(
    mjds, tles, observers,
    do_eci_pos=False, do_eci_vel=False, do_geo=False, do_topo=True
    )
print(result.keys())
dict_keys(['topo'])

More use-cases and tutorials

Check out the user manual or the Jupyter tutorial notebooks in the repository for further examples of how to use cysgp4. Note that you can only view the notebooks on GitHub, if you want to edit something it is necessary to clone the repository or download a notebook to run it on your machine.

Who do I talk to?

If you encounter any problems or have questions, do not hesitate to raise an issue or make a pull request. Moreover, you can contact the devs directly:

Licenses

cysgp4 itself is published under GPL v3, an open-source license. The package is a Cython-powered wrapper of the sgp4lib library (by Daniel Warner) to compute satellite positions from two-line elements (TLE). The sgp4lib source code is licensed under Apache-2.0 license

The package is partly based on the Astropy-affiliated package template, which is under BSD 3-clause license.

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

cysgp4-0.3.4.tar.gz (580.7 kB view details)

Uploaded Source

Built Distributions

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

cysgp4-0.3.4-cp310-cp310-win_amd64.whl (240.6 kB view details)

Uploaded CPython 3.10Windows x86-64

cysgp4-0.3.4-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.12+ x86-64

cysgp4-0.3.4-cp39-cp39-win_amd64.whl (243.7 kB view details)

Uploaded CPython 3.9Windows x86-64

cysgp4-0.3.4-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ x86-64

cysgp4-0.3.4-cp39-cp39-macosx_10_9_x86_64.whl (292.3 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

cysgp4-0.3.4-cp38-cp38-win_amd64.whl (243.8 kB view details)

Uploaded CPython 3.8Windows x86-64

cysgp4-0.3.4-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ x86-64

cysgp4-0.3.4-cp38-cp38-macosx_10_9_x86_64.whl (294.2 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

File details

Details for the file cysgp4-0.3.4.tar.gz.

File metadata

  • Download URL: cysgp4-0.3.4.tar.gz
  • Upload date:
  • Size: 580.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for cysgp4-0.3.4.tar.gz
Algorithm Hash digest
SHA256 e0a94d4f3793caede40621e1f77f5e9f44ebff95ec2ce32429d65bbde150318b
MD5 6e7dbe9434d55e24413883ddc014029b
BLAKE2b-256 dc0e1de6240bef423df0d05efac54741f9cdb54bf9d07f8f0ea5c247024f565c

See more details on using hashes here.

File details

Details for the file cysgp4-0.3.4-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: cysgp4-0.3.4-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 240.6 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.10

File hashes

Hashes for cysgp4-0.3.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 83e8491d4258f083c46bb2cba22ea66221a9100dd9249a24b52d69a688035ffd
MD5 20bc926ffa59bd8da6b191bdf745065c
BLAKE2b-256 e8a49fd0c18cf27f271b0451aad212cd48a1ab3624612e560f47335f84d05648

See more details on using hashes here.

File details

Details for the file cysgp4-0.3.4-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for cysgp4-0.3.4-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 27a45f13a3bd0f7396010f851592b82f079c0a9244f0b1616914f777a2c3924f
MD5 4f41e18b156fecce79c0201e9d75f54e
BLAKE2b-256 f8a97063dcc4869c48e8fa6da564f2d0782fb82d403e0b7a27a9a9f7e0b4cd13

See more details on using hashes here.

File details

Details for the file cysgp4-0.3.4-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: cysgp4-0.3.4-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 243.7 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.10

File hashes

Hashes for cysgp4-0.3.4-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 f3388e64e34cbde6e671e9bcbc70e6110713d0cda5b37fb6f0e18249b9ceced0
MD5 112ff40d28cf7c77ffd14e824024fcf7
BLAKE2b-256 a86ab731d0585ece5200ac09cb903df00480b335fd9e93cc17fac47027bf72c4

See more details on using hashes here.

File details

Details for the file cysgp4-0.3.4-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for cysgp4-0.3.4-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 dc4736660cec8e0d86c5551326f692ec5028602b41490878b564ac5c8ccd150a
MD5 ab16d194672e43cc0e68c136cdd629a7
BLAKE2b-256 214f8be9744a973b141325e7aab500d2298d451900c228e4121b16e60a9447c1

See more details on using hashes here.

File details

Details for the file cysgp4-0.3.4-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for cysgp4-0.3.4-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 97e372bb55c6efd84ef7bab1ee42371ad92a988d54f4648784478019dc479b1a
MD5 17eb43600e2ca497dee6574a9f99569d
BLAKE2b-256 3cec9bb55565ccacecc5facf8bbc1c3e57d1216c01b4298860f611926e8eb45a

See more details on using hashes here.

File details

Details for the file cysgp4-0.3.4-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: cysgp4-0.3.4-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 243.8 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.10

File hashes

Hashes for cysgp4-0.3.4-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 de2d2f2cfde249902653b81722e2a86b560dc4765b40f12db01e7fe779843e33
MD5 a92c5abc9a350a9696ddb979c7d799a8
BLAKE2b-256 50b3bd48b6f8a1478cc158cf90ce3422cc6d47ca7c90f26da029e1b36b4c5ba9

See more details on using hashes here.

File details

Details for the file cysgp4-0.3.4-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for cysgp4-0.3.4-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 bc1ee70e7c4abc310d0a0ccb47dccdf0193018c790e5ac8bf4cc9cf8a0d97971
MD5 8c89c408f8c5af63eb5c9d21a536b12a
BLAKE2b-256 527f3892261b7ed3e0569cfeb5cd53edb88d674bde18244e71c57b1ab5bcb302

See more details on using hashes here.

File details

Details for the file cysgp4-0.3.4-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for cysgp4-0.3.4-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 3128c330181f50e13b0f13c0c2fbc59e0a9f066606e6332ce02a4082b5bf087f
MD5 e855c4b8373e32d4886a6291e08b648d
BLAKE2b-256 b1d413744b272309b0a48c93350607c21a5d38643e1ca0f9604a07e628674870

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