1

J'ai des vecteurs de position (x, y, z) et de vitesse (Vx, Vy, Vz) en coordonnées inertielles centrées sur la Terre (ICE) pour une orbite satellitaire, et je souhaite finir par les coordonnées géodésiques (Latitude, Longitude, & Altitude). Selon ce other Stack Overflow question, il me semble que j'ai besoin de convertir en coordonnées Earth Earthed Earth Fix (ECEF) comme une étape intermédiaire (donc ECI -> ECEF -> Lat/Lon/Alt). Je sais que ECI et ECEF partagent le même point d'origine (le centre de masse de la Terre) et le même axe z qui pointe vers le pôle Nord. Cependant, je ne suis pas sûr de ce que les équations ou les ajustements réels que je dois faire pour convertir ECI en ECEF. Sinon, si quelqu'un connaît des conversions en conserve sur Astropy ou quelque chose de similaire, ce serait encore mieux. (Je n'ai pas vu ECI en option sur Astro Py ou Space Py).Comment convertir les coordonnées de l'inertie centrée sur la Terre (ECI) en une étoile de la terre centrée sur la terre (ECEF) AstroPy? Autre?

Voici le code que j'utilise pour générer mon orbite et obtenir les vecteurs de position et de vitesse.

from scipy.constants import kilo 
import orbital 
from orbital import earth, KeplerianElements, Maneuver, plot, utilities 
from orbital.utilities import Position, Velocity 
import matplotlib.pyplot as plt 
import numpy as np 

orbitPineapple = KeplerianElements.with_period(5760, body=earth, 
e=0.05, i=(np.deg2rad(0)), arg_pe=(np.deg2rad(30))) 
plot(orbitPineapple) 
plt.show() 
print(orbitPineapple.r) 
print(orbitPineapple.v) 

Out: position (x = 5713846,540659178, y = 3.298.890,8383577876, z = 0,0) Velocity (x = -3982,305479346745, y = 6897,555421488496, z = 0,0)

+0

Pouvez-vous inclure des entrées exemplaric et les résultats attendus? Cela rendrait beaucoup plus facile de trouver une solution qui fonctionne réellement pour vous. – MSeifert

+0

Je vais modifier ma question pour inclure le code que j'utilise pour générer mon orbite et obtenir les vecteurs de position et de vitesse. – Rose

+0

Donc en ce moment j'ai la position et la vitesse en ECI pour un exemple d'orbite de satellite. Position (x = 5713846.540659178, y = 3298890.8383577876, z = 0.0) Vitesse (x = -3982.305479346745, y = 6897.555421488496, z = 0.0) et je souhaite obtenir la latitude, la longitude et l'altitude du satellite lorsqu'il est dans le Même position. J'ai lu que je dois d'abord convertir d'ECI en ECEF afin de convertir en lat et lon. Le problème est que l'ECI est un système de coordonnées fixes qui ne tourne pas avec la Terre comme ECEF et lat/lon/alt. Je ne suis pas sûr de savoir comment convertir ECI en ECEF. – Rose

Répondre

0

Il existe un certain nombre de différents Trames inertielles centrées sur la Terre, et la réponse dépend de celle dans laquelle vous avez vos coordonnées.

Le plus commun est ce qu'on appelle J2000; qui est défini w.r.t à l'orientation de la Terre le 1er janvier 2000. Un autre commun est GCRF, qui est presque le même (à moins de 80 milli secondes d'arc).

Si c'est l'un de ces deux, vous devriez être en mesure de créer un astropy EarthLocation objet et accéder aux lat, lon et height attributs comme si

from astropy import coordinates as coord 
from astropy import units as u 
from astropy.time import Time 
now = Time('2017-09-27 12:22:00') 
# position of satellite in GCRS or J20000 ECI: 
cartrep = coord.CartesianRepresentation(x=5713846.540659178, 
             y=3298890.8383577876, 
             z=0., unit=u.m) 
gcrs = coord.GCRS(cartrep, obstime=now) 
itrs = gcrs.transform_to(coord.ITRS(obstime=now)) 
loc = coord.EarthLocation(*itrs.cartesian.cartrep) 
print(loc.lat, loc.lon, loc.height) 
+0

Comment le facteur temps interviendrait-il? Dire que je veux obtenir le lat/lon/alt pour une orbite ISS avec la position (x = -2686197.06, y = -6402017.61, z = 10956.56) et l'heure UTC (aujourd'hui) 2017/09/28 16: 53: 40.293 ou 559889620.2930000 en J2000. – Rose

+0

Il est important d'utiliser l'heure exacte pour la position donnée pour que la transformation de GCRS à ITRS soit correcte. Donc si vous avez le temps correspondant à la position dans 'xyz' stockée dans un objet' astropy.time.Time' appelé 'now', vous devriez utiliser' itrs = coord.GCRS (cartrep, obstime = now) .transform_to (coord .ITRS (obstime = maintenant)) '. J'ai édité ma réponse pour refléter cela –

+0

J'ai essayé la nouvelle version et ai obtenu une erreur de type: 'TypeError: transform_to() a obtenu un argument de mot-clé inattendu 'obstime'' pour la ligne' itrs = gcrs.transform_to (coord.ITRS, obstime = maintenant) ' – Rose