2
$\begingroup$

My question is related to this one on Physics SE. Admittedly, I'm somewhat preempting the answer over there being "you can't, there's a missing parameter", so if it comes back that you can derive this parameter mathematically, I'll close this question.


The space-track.org API returns a model conforming to this from the /basicspacedata/modeldef/class/satcat endpoint:

{
  "controller": "basicspacedata",
  "data": [
    {
      "Field": "INTLDES",
      "Type": "char(12)",
      "Null": "NO",
      "Key": "",
      "Default": "",
      "Extra": ""
    },
    {
      "Field": "NORAD_CAT_ID",
      "Type": "int(10) unsigned",
      "Null": "YES",
      "Key": "",
      "Default": null,
      "Extra": ""
    },
    {
      "Field": "OBJECT_TYPE",
      "Type": "varchar(12)",
      "Null": "YES",
      "Key": "",
      "Default": null,
      "Extra": ""
    },
    {
      "Field": "SATNAME",
      "Type": "char(25)",
      "Null": "NO",
      "Key": "",
      "Default": "",
      "Extra": ""
    },
    {
      "Field": "COUNTRY",
      "Type": "char(6)",
      "Null": "NO",
      "Key": "",
      "Default": "",
      "Extra": ""
    },
    {
      "Field": "LAUNCH",
      "Type": "date",
      "Null": "YES",
      "Key": "",
      "Default": null,
      "Extra": ""
    },
    {
      "Field": "SITE",
      "Type": "char(5)",
      "Null": "YES",
      "Key": "",
      "Default": null,
      "Extra": ""
    },
    {
      "Field": "DECAY",
      "Type": "date",
      "Null": "YES",
      "Key": "",
      "Default": null,
      "Extra": ""
    },
    {
      "Field": "PERIOD",
      "Type": "decimal(12,2)",
      "Null": "YES",
      "Key": "",
      "Default": null,
      "Extra": ""
    },
    {
      "Field": "INCLINATION",
      "Type": "decimal(12,2)",
      "Null": "YES",
      "Key": "",
      "Default": null,
      "Extra": ""
    },
    {
      "Field": "APOGEE",
      "Type": "bigint(10) unsigned",
      "Null": "YES",
      "Key": "",
      "Default": null,
      "Extra": ""
    },
    {
      "Field": "PERIGEE",
      "Type": "bigint(10) unsigned",
      "Null": "YES",
      "Key": "",
      "Default": null,
      "Extra": ""
    },
    {
      "Field": "COMMENT",
      "Type": "char(32)",
      "Null": "YES",
      "Key": "",
      "Default": null,
      "Extra": ""
    },
    {
      "Field": "COMMENTCODE",
      "Type": "tinyint(3) unsigned",
      "Null": "YES",
      "Key": "",
      "Default": null,
      "Extra": ""
    },
    {
      "Field": "RCSVALUE",
      "Type": "int(1)",
      "Null": "NO",
      "Key": "",
      "Default": "0",
      "Extra": ""
    },
    {
      "Field": "RCS_SIZE",
      "Type": "varchar(6)",
      "Null": "YES",
      "Key": "",
      "Default": null,
      "Extra": ""
    },
    {
      "Field": "FILE",
      "Type": "smallint(5) unsigned",
      "Null": "NO",
      "Key": "",
      "Default": "0",
      "Extra": ""
    },
    {
      "Field": "LAUNCH_YEAR",
      "Type": "smallint(5) unsigned",
      "Null": "NO",
      "Key": "",
      "Default": "0",
      "Extra": ""
    },
    {
      "Field": "LAUNCH_NUM",
      "Type": "smallint(5) unsigned",
      "Null": "NO",
      "Key": "",
      "Default": "0",
      "Extra": ""
    },
    {
      "Field": "LAUNCH_PIECE",
      "Type": "varchar(3)",
      "Null": "NO",
      "Key": "",
      "Default": "",
      "Extra": ""
    },
    {
      "Field": "CURRENT",
      "Type": "enum('Y','N')",
      "Null": "NO",
      "Key": "",
      "Default": "N",
      "Extra": ""
    },
    {
      "Field": "OBJECT_NAME",
      "Type": "char(25)",
      "Null": "NO",
      "Key": "",
      "Default": "",
      "Extra": ""
    },
    {
      "Field": "OBJECT_ID",
      "Type": "char(12)",
      "Null": "NO",
      "Key": "",
      "Default": "",
      "Extra": ""
    },
    {
      "Field": "OBJECT_NUMBER",
      "Type": "int(10) unsigned",
      "Null": "YES",
      "Key": "",
      "Default": null,
      "Extra": ""
    }
  ]
}

In terms of fields that relate to the orbit of the satellite, I make it:

  • Period
  • Inclination
  • Apogee
  • Perigee

Which is all great information. However, I want to be able to fully define these orbits in terms of the classical Keplerian representation used by the ESA such that I can compare data from the two. To do this, I somehow need to find the right ascension of the ascending node / longitude of the ascending node.

Now, I'm assuming that space-track has this information somewhere... It seems somewhat pointless to miss a key parameter out of an orbital definition. So where can I find it?

$\endgroup$

1 Answer 1

3
$\begingroup$

Problem 1: you're querying the wrong database. For orbit data, you don't want SATCAT, you want ELSETs, which means you need to use "gp" (for General Perturbations) in your URL in place of "satcat".

Problem 2: the values you retrieve through the gp URL must be used with great care. They are NOT osculating elements that everyone understands. They are a particular type of mean elements, which have been mangled by mathematics into something that uses the same words to mean completely different things. I strongly recommend reading the following links for warnings of the kinds of things that go wrong all too easily.

The bottom line is, if at all possible, use TLEs only as inputs to SGP4 (which is also downloadable from space-track.org), tell SGP4 to compute J2000 position and velocity, and use some other tool to operate on those values.

Confused about SGP4 implementation published by celestrack

Mean to Osculating conversion for non-J2 averaged elements

Python orbit simulation using TLE-tools and poliastro

Failing at getting apogee and perigee from TLE

How is an input card for SGP4/other astro standards packages crafted?

Has Skyfield or any other SGP4-capable open-source Python package yet wrapped/implemented the new, improved SGP4 (version 8+)?

$\endgroup$
6
  • $\begingroup$ So, if I'm not mistaken, what you're saying is take the data from the gp endpoint, pump it through SGP4 to get J2000 based values and then compare those to whatever is in Discos? Also, just seems a bit weird to me that they'd include all but one parameter needed to define an orbit into SATCAT $\endgroup$ Jan 7 at 20:34
  • $\begingroup$ Yes, that should work, but beware that the way SGP4 is implemented, the accuracy generally decreases quadratically away from the stated epoch time. Yes, it's strange, but they haven't really changed the format since 1960, so by now there are all sorts of weird artifacts stuffed in there that never made much sense but have become hallowed by time. $\endgroup$
    – Ryan C
    Jan 7 at 20:40
  • 1
    $\begingroup$ Thank you. For what I'm doing, I'm not really concerned with the exact position of any given object at any given time, more the distribution and composition of stuff in different orbital planes. So I'm hoping that won't matter too much. I don't suppose you know of any resource that explains the algorithm to convert from SGP4/TEME to J2000? I'd like to implement it into the library I'm writing for my data analysis suite. $\endgroup$ Jan 7 at 20:45
  • $\begingroup$ For that, you should be fine. The answers linked above have some links to papers containing equations, but they are so complicated that I advise reading them mainly for entertainment, not practical use. To actually make those transformations, use the other stuff that comes along with SGP4 in the other libraries zipped up with it from space-track.org/documentation#/sgp4 $\endgroup$
    – Ryan C
    Jan 7 at 20:49
  • $\begingroup$ Thanks pal, I'll give them a read, I'd really rather avoid having to package native libs though if I can help it $\endgroup$ Jan 7 at 21:12

Your Answer

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

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