Source code for ssapy_toolkit.Coordinates.gcrf_to_itrf

import numpy as np
from ssapy import groundTrack
from .v_from_r import v_from_r
from ..Time_Functions import Time, to_gps


[docs] def gcrf_to_itrf(r_gcrf, t, v=None): """ Convert GCRF coordinates to ITRF coordinates. Parameters: - r_gcrf (np.ndarray): 3D position vector in GCRF coordinates (meters). - t (np.ndarray): Time array for conversion. - v (np.ndarray, optional): Velocity vector in GCRF coordinates (m/s). Optional. Returns: - np.ndarray: Position in ITRF coordinates, or (position, velocity) in ITRF coordinates if velocity is provided. Author: Travis Yeager (yeager7@llnl.gov) """ t = to_gps(t) x, y, z = groundTrack(r_gcrf, t, format="cartesian") pos = np.array([x, y, z]).T if v is None: return pos else: return pos, v_from_r(pos, t)
def gcrf_to_itrf_astropy(state_vectors, t): """ Convert GCRF state vectors to ITRF using Astropy. Parameters: - state_vectors (np.ndarray): Position and velocity vectors in GCRF coordinates (meters). - t (Time): Time of conversion. Returns: - np.ndarray: Position and velocity vectors in ITRF coordinates (meters). Author: Travis Yeager (yeager7@llnl.gov) """ import astropy.units as u from astropy.coordinates import GCRS, ITRS, SkyCoord, get_body_barycentric, solar_system_ephemeris, ICRS sc = SkyCoord( x=state_vectors[:, 0] * u.m, y=state_vectors[:, 1] * u.m, z=state_vectors[:, 2] * u.m, representation_type="cartesian", frame=GCRS(obstime=t), ) sc_itrs = sc.transform_to(ITRS(obstime=t)) with solar_system_ephemeris.set("de430"): earth = get_body_barycentric("earth", t) earth_center_itrs = SkyCoord( earth.x, earth.y, earth.z, representation_type="cartesian", frame=ICRS(), ).transform_to(ITRS(obstime=t)) itrs_coords = SkyCoord( sc_itrs.x.value - earth_center_itrs.x.to_value(u.m), sc_itrs.y.value - earth_center_itrs.y.to_value(u.m), sc_itrs.z.value - earth_center_itrs.z.to_value(u.m), representation_type="cartesian", frame=ITRS(obstime=t), ) return np.array([itrs_coords.x, itrs_coords.y, itrs_coords.z]).T