I was looking at time series of some TLE parameter(semimajor axis, inclination, etc..) and I wanted to how those parameters evolve between measured time points. So i decided to feed TLE element to SPG4 propagator in python. This propagator, however, outputs state vectors, i.e., r and v. So I converted those vector back to orbital elements using rv2coe algorithm.

I tried to test this approach by no feeding propagator the exact time of TLE measurement, which in my opinion should result in no propagation and only conversion of orbital elements to state vectors. But the results differ from state vectors obtained by coe2rv transform.

I understand that TLE orbital elements are in teme frame, but i still assumed that transform from TEME orbital elements to TEME state vectors will look the same as in classical case. Can you explain where is the issue with this logic?

Also, I would be glad if anyone told me how to achieve what I am trying to do in the first place, computing TEME orbital elements of propagated satellite? Is this even possible?

------  code sample -----
from poliastro.core.elements import rv2coe as rc
from poliastro.core.elements import coe2rv as coe
from sgp4.api import Satrec 

t = '1 22076U 92052  A 92313.00000000 -.00000012 +00000-0 +00000-5 0  9994'
s = '2 22076 066.0397 067.7576 0007354 268.3209 091.6966 12.80929363011469'

satellite = Satrec.twoline2rv(t, s)
jd = satellite.jdsatepoch
fr = satellite.jdsatepochF
e, r, v = satellite.sgp4(jd, fr)


r =(2921.4342910801934, 7143.671606708223, 0.026677943621712583)

v =(-2.7011095249536727, 1.1034342941544737, 6.569372429454202)

Coordinate transform:

r_eci: (2915.56799533073 7143.99403314843 12.51960898796)

v_eci: (-2.70443791382 1.09791652715 6.56795904965)

  • 2
    $\begingroup$ You are not showing all of your code. If you are treating TLEs as if they are classical orbital elements, that is a big mistake. I can't tell whether you did this because that is part of the code you are not showing. You also are not showing how you did the coordinate transform. Show more of your code! As currently written, the question is pretty much unanswerable. $\endgroup$ Mar 31, 2023 at 13:50

1 Answer 1


The problem with your approach is that TLEs just don't work that way. You seem to have made assumptions that sound reasonable in principle, but they are nothing at all like the assumptions that are built in to the TLE format. For more detail, I recommend you start reading with Mean to Osculating conversion for non-J2 averaged elements, and continue through all the other questions linked to it.

TLEs assume you are modeling the gravity of the Sun and Moon, Earth gravity with $J_2$, $J_3$, $J_4$, and $J_2^2$, and atmospheric drag for low orbits. If the RV<->COE converters you use don't take those things into account, in the same way the TLE format and SGP4 algorithm do, they can never match what the TLE produces. As far as I know, the only software configured to do that is SGP4 itself.

It doesn't even work at the TLE epoch time, because the numbers in a TLE are not intended to describe exactly the instantaneous state at that or any other specific time. Instead, they try to characterize the whole orbit on average, over time scales from hours to days. They are the result of an estimation procedure which tries to minimize the total error over a large batch of inputs, so in general the best-fit curve does not pass exactly through any of the measured points. Errors of 5 km and 5 m/s are perfectly ordinary performance for a TLE.

However, that doesn't mean you have to give up. You can still see how the parameters evolve over time, but you have to let SGP4 do all the math. The SGP4 API has functions that will compute the predicted values of mean and osculating elements at any list of past or future times you choose, all from just one TLE.

My recommendation, not just to you, but to everyone reading this, is to stop thinking that the numbers in TLEs are meaningful in themselves. Ignore that some of the names seem familiar. Ignore that they have names at all. Think of them as nothing other than an input file to the SGP4 software library. The only meaning of the numbers in the TLE is to provide whatever weird junk happens to be necessary to convince SGP4 to describe the orbit of the object of interest.

  • $\begingroup$ Thank you for your answer, it helped a lot. However, I do have related follow up question. I have read articles, in which authors use TLE data to identify manoeuvres performed by the satellites. example Based on what you just wrote, does such approach even make sense? $\endgroup$ Mar 31, 2023 at 22:30
  • 1
    $\begingroup$ Great last paragraph! $\endgroup$ Mar 31, 2023 at 23:17
  • $\begingroup$ @klobaskasoslaninou that is a complicated problem, which you should post as a separate question, so that more people might see it! $\endgroup$
    – Ryan C
    Apr 3, 2023 at 16:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.