Skip to main content

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

Project description

PyPI tag License

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:

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.2.20.tar.gz (115.2 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.2.20-cp37-cp37m-win_amd64.whl (244.5 kB view details)

Uploaded CPython 3.7mWindows x86-64

cysgp4-0.2.20-cp37-cp37m-manylinux2010_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ x86-64

cysgp4-0.2.20-cp37-cp37m-macosx_10_9_x86_64.whl (279.3 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

cysgp4-0.2.20-cp36-cp36m-win_amd64.whl (244.1 kB view details)

Uploaded CPython 3.6mWindows x86-64

cysgp4-0.2.20-cp36-cp36m-manylinux2010_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.12+ x86-64

cysgp4-0.2.20-cp36-cp36m-macosx_10_9_x86_64.whl (284.4 kB view details)

Uploaded CPython 3.6mmacOS 10.9+ x86-64

cysgp4-0.2.20-cp35-cp35m-win_amd64.whl (233.1 kB view details)

Uploaded CPython 3.5mWindows x86-64

cysgp4-0.2.20-cp35-cp35m-manylinux2010_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.5mmanylinux: glibc 2.12+ x86-64

cysgp4-0.2.20-cp35-cp35m-macosx_10_9_x86_64.whl (303.1 kB view details)

Uploaded CPython 3.5mmacOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: cysgp4-0.2.20.tar.gz
  • Upload date:
  • Size: 115.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/42.0.1.post20191125 requests-toolbelt/0.9.1 tqdm/4.39.0 CPython/3.6.7

File hashes

Hashes for cysgp4-0.2.20.tar.gz
Algorithm Hash digest
SHA256 e99c4f72aaef9d72dfa43778abd085b7b837e930ca1cd7d0d4885adce1230527
MD5 29a23d67ea89f7de2ea289a3cb3824cf
BLAKE2b-256 a03f46122541e25660a76808c3f3576325527549621a43cfa487ade134a29fd1

See more details on using hashes here.

File details

Details for the file cysgp4-0.2.20-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: cysgp4-0.2.20-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 244.5 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.39.0 CPython/3.6.8

File hashes

Hashes for cysgp4-0.2.20-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 e0ef6f29fa1b45355397a921f1bcb1b976c25de26ad066da00a62f8632048b09
MD5 09244949e278af99b8d89aecb42cf5c4
BLAKE2b-256 5169c9a7c9691b3fd217441fbf34034b9bdefe6293fb51d6b66ebacdf4af37ad

See more details on using hashes here.

File details

Details for the file cysgp4-0.2.20-cp37-cp37m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: cysgp4-0.2.20-cp37-cp37m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.39.0 CPython/3.6.9

File hashes

Hashes for cysgp4-0.2.20-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 a025ee84ed7e356987be1d58e516ae760b45df31706409cc2a7302c175a6a24d
MD5 e23740d935fc880071247fc7bf0ec9ee
BLAKE2b-256 d3a89706a30b92761105efa134a810c9c0a74b771f6173870e2d8c33039cb459

See more details on using hashes here.

File details

Details for the file cysgp4-0.2.20-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: cysgp4-0.2.20-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 279.3 kB
  • Tags: CPython 3.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.39.0 CPython/3.6.9

File hashes

Hashes for cysgp4-0.2.20-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 7434fcdc607d657372c8552e8b70e5cb8ea5ee08bc184e4b400290622f93ac4a
MD5 0699b9d7829930ff2c7834a2c7b752b7
BLAKE2b-256 b3ddbf8aa2287dae390aa70e65df56bf91467fe7e570df6d99f8572c4e930d09

See more details on using hashes here.

File details

Details for the file cysgp4-0.2.20-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: cysgp4-0.2.20-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 244.1 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.39.0 CPython/3.6.8

File hashes

Hashes for cysgp4-0.2.20-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 2472c018f6fa21f646f31abb87ffbfaf0836e9c06f0a4c49ee4fb29afcf28c42
MD5 ef4ef9c0ecfe51e7155392890d7659c2
BLAKE2b-256 8b159f03460f543be6b0f6f21577dba65fa9095937e5002e2932355504a76ba4

See more details on using hashes here.

File details

Details for the file cysgp4-0.2.20-cp36-cp36m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: cysgp4-0.2.20-cp36-cp36m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: CPython 3.6m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.39.0 CPython/3.6.9

File hashes

Hashes for cysgp4-0.2.20-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 7e7a002c09b9f0dda261a932c163d1562a7cc258d28a5d812ac57ee6617d18be
MD5 cb841940a4fef70d132db968d7f59055
BLAKE2b-256 580ca37c5384987505e596f9461e9dc6c1d47ddb614b52f857ce69f98b571c71

See more details on using hashes here.

File details

Details for the file cysgp4-0.2.20-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: cysgp4-0.2.20-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 284.4 kB
  • Tags: CPython 3.6m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.39.0 CPython/3.6.9

File hashes

Hashes for cysgp4-0.2.20-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 bb93deace1e781ce39228082453d40fb84f77f03b8a37ddbb6b2583a0e554818
MD5 12deb33c43fe5a89da3727481a524db2
BLAKE2b-256 716f2736b4beb692e2154b12d5a26b23fd2ca1a8722cdd2b095f4099bab4d14c

See more details on using hashes here.

File details

Details for the file cysgp4-0.2.20-cp35-cp35m-win_amd64.whl.

File metadata

  • Download URL: cysgp4-0.2.20-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 233.1 kB
  • Tags: CPython 3.5m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.39.0 CPython/3.6.8

File hashes

Hashes for cysgp4-0.2.20-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 7f1151bc5a6ea18afc311d96562b48c376011dd0de8ec8783ad42e804068fba6
MD5 49fe198c253dff216769a7cbb60bc06e
BLAKE2b-256 f4f17633f70bf30942257147f1920728bc28701fd239162edaf774656420249e

See more details on using hashes here.

File details

Details for the file cysgp4-0.2.20-cp35-cp35m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: cysgp4-0.2.20-cp35-cp35m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: CPython 3.5m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.39.0 CPython/3.6.9

File hashes

Hashes for cysgp4-0.2.20-cp35-cp35m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 ee0e35b58b2fdc3778463280db9b74528fefb7b985f4b3c49e8ac4bf3bdf183e
MD5 a8e17ab8f0bbed4925b896f891508974
BLAKE2b-256 930e7a2e84894a483318be84a3e11f3f07e459498b798cc3d9a660b8e3507ebb

See more details on using hashes here.

File details

Details for the file cysgp4-0.2.20-cp35-cp35m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: cysgp4-0.2.20-cp35-cp35m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 303.1 kB
  • Tags: CPython 3.5m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.39.0 CPython/3.6.9

File hashes

Hashes for cysgp4-0.2.20-cp35-cp35m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 290f35e44d30da9d6e990d74d1b4c069fa26eb2548bcb48c0ed9ab385a3cb89b
MD5 722474a9699e600c3ecbae9f85ff3ded
BLAKE2b-256 cb739c9aa715a61de700710da5b80870145e277ad00ef3b121b16e58a0ced354

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