Source code for skplatform.celestialbodies.celestialbody

import numpy as np
import astropy.coordinates
import astropy.units as units
from astropy.time import Time
from datetime import datetime

astropy.coordinates.solar_system_ephemeris.set('jpl')                   # Ensure the JPL ephemerides are used by default


# -----------------------------------------------------------------------------
#           planetary_body_itrf
# -----------------------------------------------------------------------------
[docs] def solsys_body_vector_itrf(utc: datetime, body: str) -> np.ndarray: """ Fetches the ITRF geocentric vector from the center of the Earth to the solar system body at the requested time. Parameters ---------- utc : datetime, np.datetime64, str The UTC time at which the position of the body is required body: str The name of the solar system body, e.g. "moon", "sun" Returns ------- np.ndarray(3): The geocentric positon of the requested body as a 3 element column vector. Expressed in meters. """ t = Time(utc) coord = astropy.coordinates.get_body(body, t, ephemeris='jpl') itrs = astropy.coordinates.ITRS(representation_type='cartesian') itrscoord = coord.transform_to(itrs) geocentricpos = np.array((itrscoord.x.to(units.meter).value, itrscoord.y.to(units.meter).value, itrscoord.z.to(units.meter).value)) return geocentricpos
[docs] def star_unitvector_itrf(utc: datetime, body: str) -> np.ndarray: """ Fetches the ITRF geocentric unit vector from the center of the Earth to the desired star at the requested time. This currently does not account for **proper motion** of the star. Parameters ---------- utc : datetime, np.datetime64, str The UTC time at which the position of the star is required body: str The name of the star, e.g. "Betelgeuse" Returns ------- np.ndarray(3): The geocentric unit vector toward the requested star as a 3 element column vector. Dimensionless Unit vector. """ t = Time(utc) star = astropy.coordinates.SkyCoord.from_name(body) # **** DOES NOT SEEM TO INCLUDE proper motion corrections itrs = astropy.coordinates.ITRS(representation_type='cartesian', obstime=t) itrscoord = star.transform_to(itrs) geocentricpos = np.array((itrscoord.x.value, itrscoord.y.value, itrscoord.z.value)) return geocentricpos