Files
skyview.astronomiemuseum.de/public/py/sgp4/wrapper.py
T
2026-03-31 09:44:27 +02:00

68 lines
2.2 KiB
Python

from . import vallado_cpp
class Satrec(vallado_cpp.Satrec):
"""High-speed computation of satellite positions and velocities."""
__slots__ = ()
def sgp4_array(self, jd, fr):
"""Compute positions and velocities for the times in a NumPy array.
Given NumPy arrays ``jd`` and ``fr`` of the same length that
supply the whole part and the fractional part of one or more
Julian dates, return a tuple ``(e, r, v)`` of three vectors:
* ``e``: nonzero for any dates that produced errors, 0 otherwise.
* ``r``: position vectors in kilometers.
* ``v``: velocity vectors in kilometers per second.
"""
jd = jd.astype('float64', copy=False)
fr = fr.astype('float64', copy=False)
eshape = jd.shape
fshape = eshape[0], 3
array = type(jd)
e = array(eshape, 'uint8')
r = array(fshape, 'float64')
v = array(fshape, 'float64')
self._sgp4(jd, fr, e, r, v)
return e, r, v
class SatrecArray(vallado_cpp.SatrecArray):
"""High-speed satellite array for computing positions and velocities."""
__slots__ = ()
def sgp4(self, jd, fr):
"""Compute positions and velocities for the satellites in this array.
Given NumPy scalars or arrays ``jd`` and ``fr`` supplying the
whole part and the fractional part of one or more Julian dates,
return a tuple ``(e, r, v)`` of three vectors:
* ``e``: nonzero for any dates that produced errors, 0 otherwise.
* ``r``: position vectors in kilometers.
* ``v``: velocity vectors in kilometers per second.
The first dimension of each output vector has the same length as
this satellite array, the second dimension the same length as
the input date arrays, and the third dimension has length 3.
"""
jd = jd.astype('float64', copy=False)
fr = fr.astype('float64', copy=False)
ilength = len(self)
jlength, = jd.shape
eshape = ilength, jlength
fshape = ilength, jlength, 3
array = type(jd)
e = array(eshape, 'uint8')
r = array(fshape, 'float64')
v = array(fshape, 'float64')
self._sgp4(jd, fr, e, r, v)
return e, r, v