Source code for orbitdeterminator.util.teme_to_ecef

"""Converts coordinates in TEME frame to ECEF frame."""

from datetime import datetime, timezone
import numpy as np

[docs]def conv_to_ecef(coords): """Converts coordinates in TEME frame to ECEF frame. Args: coords(nx4 numpy array): list of coordinates in the format [t,x,y,z] Returns: nx4 numpy array: list of coordinates in the format [t, latitude, longitude, altitude] Note that these coordinates are with respect to the surface of the Earth. Latitude, longitude are in degrees. """ t = coords[:,0] x = coords[:,1] y = coords[:,2] z = coords[:,3] alt = (x**2+y**2+z**2)**0.5 lat = np.degrees(np.arcsin(z/alt)) lng = np.degrees(np.arctan2(y,x)%(2*np.pi)) midnight = datetime.fromtimestamp(t[0],tz=timezone.utc) midnight = midnight.replace(hour=0,minute=0,second=0,microsecond=0) t_mid = midnight.timestamp() J2000 = 946728000 Tu = (t_mid-J2000)/86400/36525 tg0h = 24110.54841 + 8640184.812866*Tu + 0.093104*Tu**2 - 6.2e-6*Tu**3 we = 1.00273790935 tgt = tg0h + we*(t-t_mid) era = (tgt%86400)*360/86400 lng = lng-era return np.column_stack((t,lat,lng,alt))
if __name__ == "__main__": ecef_coords = conv_to_ecef(np.array([[1521562500,768.281,5835.68,2438.076],[1521562500,768.281,5835.68,2438.076],[1521562500,768.281,5835.68,2438.076]])) print(ecef_coords)