diff --git a/src/sgp4.ts b/src/sgp4.ts index 0faf636..3789d7b 100644 --- a/src/sgp4.ts +++ b/src/sgp4.ts @@ -362,6 +362,1035 @@ type SGP4PropagationConstants = { threeθ2MinusOne: number oneMinusθ2: number sevenθ2MinusOne: number + // The propagation constants of the deep-space theory, for an orbit of a period of 225 minutes or more: + deepSpace: SGP4DeepSpacePropagationConstants | undefined +} + +/*****************************************************************************************************************/ + +// The Julian date of the epoch the SGP4 theory counts its days from, e.g., 1950 January 0.0 UT, or 1949 December +// 31 at 00:00 UT: +const SGP4_EPOCH = 2433281.5 + +// The rate of rotation of the Earth of the deep-space theory (in radians per minute), e.g., the reference +// implementation's 4.37526908801129966e-3, written as the nearest double it resolves to. +// +// N.B. It is that of the theory, and not EARTH_ANGULAR_VELOCITY, from which it differs in its seventh digit, so that +// a propagation conforms to the reference implementation: +const SGP4_EARTH_ROTATION_RATE = 0.0043752690880113 + +// The mean motion (in radians per minute) and the eccentricity of the orbit of the Sun about the Earth, and of the +// Moon about the Earth, of the deep-space theory: +const SGP4_SUN = { n: 1.19459e-5, e: 0.01675 } + +const SGP4_MOON = { n: 1.5835218e-4, e: 0.0549 } + +/*****************************************************************************************************************/ + +/** + * + * The coefficients of the long-period perturbations of the gravity of the Sun or of the Moon of the + * deep-space theory, e.g., of the eccentricity (e), the inclination (i), and the Delaunay variables + * of the mean anomaly (l), the argument of perigee and the longitude of the ascending node together + * (gh), and the longitude of the ascending node (h), as functions of the position of the body in its + * orbit, together with the mean anomaly of the body at the epoch (M0). + * + * N.B. The name of each coefficient in the reference implementation is given alongside it, of the + * Sun and of the Moon in turn, e.g., (se2, ee2), so that each may be traced to it. + * + */ +type SGP4LunisolarCoefficients = { + // (se2, ee2), (se3, e3): + e2: number + e3: number + // (si2, xi2), (si3, xi3): + i2: number + i3: number + // (sl2, xl2), (sl3, xl3), (sl4, xl4): + l2: number + l3: number + l4: number + // (sgh2, xgh2), (sgh3, xgh3), (sgh4, xgh4): + gh2: number + gh3: number + gh4: number + // (sh2, xh2), (sh3, xh3): + h2: number + h3: number + // The mean anomaly of the body at the epoch (in radians) (zmos, zmol): + M0: number +} + +/*****************************************************************************************************************/ + +/** + * + * The resonance of an orbit with the tesseral harmonics of the gravity of the Earth, e.g., of a + * geosynchronous orbit of a period of ~24 hours, or of a 12-hour orbit of an eccentricity of 0.5 or + * more, together with the coefficients of its integration (irez). + * + */ +type SGP4Resonance = + | { + // The resonance of a geosynchronous orbit, e.g., of the 22, 31 and 33 tesseral harmonics (irez = 1): + kind: 'synchronous' + // The coefficients of the resonance (del1, del2, del3): + δ1: number + δ2: number + δ3: number + // The resonance angle at the epoch (in radians) (xlamo): + λ0: number + // The rate of the resonance angle less the mean motion (in radians per minute) (xfact): + λDotMinusN: number + } + | { + // The resonance of a 12-hour orbit of an eccentricity of 0.5 or more (irez = 2): + kind: 'half-day' + // The coefficients of the resonance (d2201, d2211, d3210, d3222, d4410, d4422, d5220, d5232, + // d5421, d5433): + D2201: number + D2211: number + D3210: number + D3222: number + D4410: number + D4422: number + D5220: number + D5232: number + D5421: number + D5433: number + // The resonance angle at the epoch (in radians) (xlamo): + λ0: number + // The rate of the resonance angle less the mean motion (in radians per minute) (xfact): + λDotMinusN: number + } + +/*****************************************************************************************************************/ + +/** + * + * The propagation constants of the deep-space theory of SGP4, for an orbit of a period of 225 + * minutes or more, e.g., the coefficients of the long-period perturbations of the Sun and of the + * Moon, the secular rates of their gravity, and any resonance of the orbit. + * + */ +type SGP4DeepSpacePropagationConstants = { + // The mode of operation of the theory: + mode: 'improved' | 'afspc' + // The Greenwich sidereal angle at the epoch (in radians) (gsto): + θ0: number + // The coefficients of the long-period perturbations of the Sun and of the Moon: + sun: SGP4LunisolarCoefficients + moon: SGP4LunisolarCoefficients + // The secular rates of the gravity of the Sun and of the Moon on the eccentricity, the inclination, + // the mean anomaly, the argument of perigee and the longitude of the ascending node (in radians per + // minute) (dedt, didt, dmdt, domdt, dnodt): + eDot: number + iDot: number + MDot: number + ωDot: number + ΩDot: number + // The resonance of the orbit, if any: + resonance: SGP4Resonance | undefined +} + +/*****************************************************************************************************************/ + +/** + * + * Resolves the Greenwich sidereal angle (in radians) at the epoch of an element set, as the reference + * implementation of the SGP4 theory resolves it, e.g., by the sidereal time of IAU 1982 in the improved + * mode of operation, and by that of the operational implementation of the Air Force Space Command in + * its mode of operation. + * + * N.B. It is resolved from the days since the epoch of the theory, rather than from a Date, as a Date + * resolves the epoch of an element set to the millisecond alone, and so that a propagation conforms + * to the reference implementation. + * + * @param days - The days since the epoch of the theory, e.g., 1950 January 0.0 UT. + * @param mode - The mode of operation of the theory. + * @returns The Greenwich sidereal angle (in radians), in the range [0, 2π). + * + */ +const getSGP4GreenwichSiderealAngle = (days: number, mode: 'improved' | 'afspc'): number => { + if (mode === 'afspc') { + // The days since 1970 January 0.0 UT (ts70), and the whole days (ds70) and the fraction of a day + // (tfrac) of them: + const daysSince1970 = days - 7305.0 + + const wholeDaysSince1970 = Math.floor(daysSince1970 + 1.0e-8) + + const fractionOfDay = daysSince1970 - wholeDaysSince1970 + + // N.B. The constants are those of the reference implementation, e.g., 1.72027916940703639e-2, + // 1.7321343856509374 and 5.07551419432269442e-15, written as the nearest double each resolves to: + + // The rate of the sidereal angle beyond a whole turn (in radians per day) (c1): + const siderealRate = 0.017202791694070362 + + // The Greenwich sidereal angle at 1970 January 0.0 UT (in radians) (thgr70): + const θ1970 = 1.7321343856509375 + + // The correction of the sidereal angle of the FK5 catalogue (in radians per day squared) (fk5r): + const fk5Correction = 5.075514194322695e-15 + + // The rate of the sidereal angle, including a whole turn (in radians per day) (c1p2p): + const siderealRatePlusTwoPi = siderealRate + TWO_PI + + let θ = + (θ1970 + + siderealRate * wholeDaysSince1970 + + siderealRatePlusTwoPi * fractionOfDay + + daysSince1970 * daysSince1970 * fk5Correction) % + TWO_PI + + if (θ < 0.0) { + θ += TWO_PI + } + + return θ + } + + // The Julian centuries of UT1 since J2000 (tut1): + const T = (days + SGP4_EPOCH - 2451545.0) / 36525.0 + + // The Greenwich mean sidereal time of IAU 1982 (in seconds of time): + const seconds = + -6.2e-6 * T * T * T + 0.093104 * T * T + (876600.0 * 3600 + 8640184.812866) * T + 67310.54841 + + // 360° / 86400 s = 1 / 240, from seconds of time to degrees, and then to radians: + const θ = ((seconds * Math.PI) / 180 / 240.0) % TWO_PI + + return θ < 0 ? θ + TWO_PI : θ +} + +/*****************************************************************************************************************/ + +/** + * + * Resolves the lunar or solar terms of the deep-space theory for an element set at its epoch, e.g., + * the terms Z1 to Z33 and S1 to S7 of Hoots & Roehrich (1980) of the geometry of the body, as each + * pass of the dscom() routine of the reference implementation does. + * + * @param body - The geometry of the orbit of the body, e.g., the cosines and sines of its argument of perigee (g), inclination (i) and node (h), and its coefficient (C). + * @param orbit - The mean elements of the orbit at the epoch. + * @returns The terms of the body. + * + */ +const getSGP4LunisolarTerms = ( + body: { + cosG: number + sinG: number + cosI: number + sinI: number + cosH: number + sinH: number + C: number + }, + orbit: { + e0: number + e02: number + β02: number + β0: number + n0: number + sinI0: number + cosI0: number + sinω0: number + cosω0: number + } +) => { + const { cosG, sinG, cosI, sinI, cosH, sinH, C } = body + + const { e0, e02, β02, β0, n0, sinI0, cosI0, sinω0, cosω0 } = orbit + + // The direction cosines of the orbit of the body in the frame of the orbit of the object, e.g., the + // terms a1 to a10 of Hoots & Roehrich (1980), of its node and inclination: + const a1 = cosG * cosH + sinG * cosI * sinH + + const a3 = -sinG * cosH + cosG * cosI * sinH + + const a7 = -cosG * sinH + sinG * cosI * cosH + + const a8 = sinG * sinI + + const a9 = sinG * sinH + cosG * cosI * cosH + + const a10 = cosG * sinI + + const a2 = cosI0 * a7 + sinI0 * a8 + + const a4 = cosI0 * a9 + sinI0 * a10 + + const a5 = -sinI0 * a7 + cosI0 * a8 + + const a6 = -sinI0 * a9 + cosI0 * a10 + + // The direction cosines carried to the argument of perigee of the object, e.g., the terms x1 to x8: + const x1 = a1 * cosω0 + a2 * sinω0 + + const x2 = a3 * cosω0 + a4 * sinω0 + + const x3 = -a1 * sinω0 + a2 * cosω0 + + const x4 = -a3 * sinω0 + a4 * cosω0 + + const x5 = a5 * sinω0 + + const x6 = a6 * sinω0 + + const x7 = a5 * cosω0 + + const x8 = a6 * cosω0 + + const Z31 = 12.0 * x1 * x1 - 3.0 * x3 * x3 + + const Z32 = 24.0 * x1 * x2 - 6.0 * x3 * x4 + + const Z33 = 12.0 * x2 * x2 - 3.0 * x4 * x4 + + let Z1 = 3.0 * (a1 * a1 + a2 * a2) + Z31 * e02 + + let Z2 = 6.0 * (a1 * a3 + a2 * a4) + Z32 * e02 + + let Z3 = 3.0 * (a3 * a3 + a4 * a4) + Z33 * e02 + + const Z11 = -6.0 * a1 * a5 + e02 * (-24.0 * x1 * x7 - 6.0 * x3 * x5) + + const Z12 = + -6.0 * (a1 * a6 + a3 * a5) + e02 * (-24.0 * (x2 * x7 + x1 * x8) - 6.0 * (x3 * x6 + x4 * x5)) + + const Z13 = -6.0 * a3 * a6 + e02 * (-24.0 * x2 * x8 - 6.0 * x4 * x6) + + const Z21 = 6.0 * a2 * a5 + e02 * (24.0 * x1 * x5 - 6.0 * x3 * x7) + + const Z22 = + 6.0 * (a4 * a5 + a2 * a6) + e02 * (24.0 * (x2 * x5 + x1 * x6) - 6.0 * (x4 * x7 + x3 * x8)) + + const Z23 = 6.0 * a4 * a6 + e02 * (24.0 * x2 * x6 - 6.0 * x4 * x8) + + Z1 = Z1 + Z1 + β02 * Z31 + + Z2 = Z2 + Z2 + β02 * Z32 + + Z3 = Z3 + Z3 + β02 * Z33 + + const S3 = C * (1.0 / n0) + + const S2 = (-0.5 * S3) / β0 + + const S4 = S3 * β0 + + const S1 = -15.0 * e0 * S4 + + const S5 = x1 * x3 + x2 * x4 + + const S6 = x2 * x3 + x1 * x4 + + const S7 = x2 * x4 - x1 * x3 + + return { S1, S2, S3, S4, S5, S6, S7, Z1, Z2, Z3, Z11, Z12, Z13, Z21, Z22, Z23, Z31, Z32, Z33 } +} + +/*****************************************************************************************************************/ + +/** + * + * Initialises the deep-space theory for an element set, e.g., resolves the coefficients of the + * long-period perturbations of the Sun and of the Moon, the secular rates of their gravity, and the + * coefficients of any resonance of the orbit, as the dscom() and dsinit() routines of the reference + * implementation do. + * + * @param days - The days since the epoch of the theory, e.g., 1950 January 0.0 UT, of the epoch of the element set. + * @param mode - The mode of operation of the theory. + * @param orbit - The mean elements and the propagation constants of the near-Earth theory at the epoch. + * @returns The propagation constants of the deep-space theory for the element set. + * + */ +const initialiseSGP4DeepSpace = ( + days: number, + mode: 'improved' | 'afspc', + orbit: { + xke: number + e0: number + ω0: number + i0: number + M0: number + Ω0: number + n0: number + MDot: number + ωDot: number + ΩDot: number + } +): SGP4DeepSpacePropagationConstants => { + const { xke, e0, ω0, i0, M0, Ω0, n0, MDot, ωDot, ΩDot } = orbit + + // The Greenwich sidereal angle at the epoch (in radians) (gsto): + const θ0 = getSGP4GreenwichSiderealAngle(days, mode) + + // dscom(): the lunar and solar terms at the epoch: + const sinΩ0 = Math.sin(Ω0) + + const cosΩ0 = Math.cos(Ω0) + + const sinω0 = Math.sin(ω0) + + const cosω0 = Math.cos(ω0) + + const sinI0 = Math.sin(i0) + + const cosI0 = Math.cos(i0) + + // e0² (emsq), β0² = 1 - e0² (betasq), and β0 (rtemsq): + const e02 = e0 * e0 + + const β02 = 1.0 - e02 + + const β0 = Math.sqrt(β02) + + // The days since 1900 January 0.5, e.g., of the epoch of the lunar and solar ephemerides (day): + const daysSince1900 = days + 18261.5 + + // The longitude of the ascending node of the orbit of the Moon (in radians) (xnodce): + const ΩMoon = (4.523602 - 9.2422029e-4 * daysSince1900) % TWO_PI + + const sinΩMoon = Math.sin(ΩMoon) + + const cosΩMoon = Math.cos(ΩMoon) + + // The inclination of the orbit of the Moon to the equator (zcosil, zsinil): + const cosIMoon = 0.91375164 - 0.03568096 * cosΩMoon + + const sinIMoon = Math.sqrt(1.0 - cosIMoon * cosIMoon) + + // The node of the orbit of the Moon on the equator (zsinhl, zcoshl): + const sinHMoon = (0.089683511 * sinΩMoon) / sinIMoon + + const cosHMoon = Math.sqrt(1.0 - sinHMoon * sinHMoon) + + // The longitude of the perigee of the orbit of the Moon (in radians) (gam): + const ΓMoon = 5.8351514 + 0.001944368 * daysSince1900 + + // The argument of perigee of the orbit of the Moon from its node on the equator (in radians) (zx): + const gMoon = + ΓMoon + + Math.atan2( + (0.39785416 * sinΩMoon) / sinIMoon, + cosHMoon * cosΩMoon + 0.91744867 * sinHMoon * sinΩMoon + ) - + ΩMoon + + // The mean elements of the orbit at the epoch, from which the terms of each body are resolved: + const elements = { e0, e02, β02, β0, n0, sinI0, cosI0, sinω0, cosω0 } + + // The terms of the Sun, e.g., of its geometry (zcosgs, zsings, zcosis, zsinis) and of its + // coefficient (c1ss): + const sun = getSGP4LunisolarTerms( + { + cosG: 0.1945905, + sinG: -0.98088458, + cosI: 0.91744867, + sinI: 0.39785416, + cosH: cosΩ0, + sinH: sinΩ0, + C: 2.9864797e-6 + }, + elements + ) + + // The terms of the Moon, e.g., of its geometry and of its coefficient (c1l): + const moon = getSGP4LunisolarTerms( + { + cosG: Math.cos(gMoon), + sinG: Math.sin(gMoon), + cosI: cosIMoon, + sinI: sinIMoon, + cosH: cosHMoon * cosΩ0 + sinHMoon * sinΩ0, + sinH: sinΩ0 * cosHMoon - cosΩ0 * sinHMoon, + C: 4.7968065e-7 + }, + elements + ) + + // The coefficients of the long-period perturbations of a body, from its terms and the eccentricity + // of its orbit: + const getCoefficients = ( + { S1, S2, S3, S4, S6, S7, Z1, Z2, Z3, Z11, Z12, Z13, Z21, Z22, Z23, Z31, Z32, Z33 }: typeof sun, + e: number, + M0: number + ): SGP4LunisolarCoefficients => ({ + e2: 2.0 * S1 * S6, + e3: 2.0 * S1 * S7, + i2: 2.0 * S2 * Z12, + i3: 2.0 * S2 * (Z13 - Z11), + l2: -2.0 * S3 * Z2, + l3: -2.0 * S3 * (Z3 - Z1), + l4: -2.0 * S3 * (-21.0 - 9.0 * e02) * e, + gh2: 2.0 * S4 * Z32, + gh3: 2.0 * S4 * (Z33 - Z31), + gh4: -18.0 * S4 * e, + h2: -2.0 * S2 * Z22, + h3: -2.0 * S2 * (Z23 - Z21), + M0 + }) + + // The mean anomalies of the Moon (zmol) and of the Sun (zmos) at the epoch (in radians): + const MMoon = (4.7199672 + 0.2299715 * daysSince1900 - ΓMoon) % TWO_PI + + const MSun = (6.2565837 + 0.017201977 * daysSince1900) % TWO_PI + + // dsinit(): the secular rates of the gravity of the Sun and of the Moon, and any resonance: + + // The node of an orbit of an inclination within 3° of the equator is not resolved: + const isEquatorial = i0 < 5.2359877e-2 || i0 > Math.PI - 5.2359877e-2 + + // The secular rates of the gravity of a body, from its terms and its mean motion, e.g., on the + // eccentricity (ses), the inclination (sis), the mean anomaly (sls), the argument of perigee and + // the node together (sghs) and the node (shs): + const getSecularRates = ( + { S1, S2, S3, S4, S5, Z1, Z3, Z11, Z13, Z21, Z23, Z31, Z33 }: typeof sun, + n: number + ) => ({ + eDot: S1 * n * S5, + iDot: S2 * n * (Z11 + Z13), + lDot: -n * S3 * (Z1 + Z3 - 14.0 - 6.0 * e02), + ghDot: S4 * n * (Z31 + Z33 - 6.0), + hDot: isEquatorial ? 0.0 : -n * S2 * (Z21 + Z23) + }) + + const sunRates = getSecularRates(sun, SGP4_SUN.n) + + const moonRates = getSecularRates(moon, SGP4_MOON.n) + + let hDotSun = sunRates.hDot + + if (sinI0 !== 0.0) { + hDotSun = hDotSun / sinI0 + } + + const eDot = sunRates.eDot + moonRates.eDot + + const iDot = sunRates.iDot + moonRates.iDot + + const MDotLunisolar = sunRates.lDot + moonRates.lDot + + let ωDotLunisolar = sunRates.ghDot - cosI0 * hDotSun + moonRates.ghDot + + let ΩDotLunisolar = hDotSun + + if (sinI0 !== 0.0) { + ωDotLunisolar = ωDotLunisolar - (cosI0 / sinI0) * moonRates.hDot + + ΩDotLunisolar = ΩDotLunisolar + moonRates.hDot / sinI0 + } + + // A geosynchronous orbit, e.g., of a period of ~24 hours, or a 12-hour orbit of an eccentricity of + // 0.5 or more, is resonant with the tesseral harmonics of the gravity of the Earth: + let resonance: SGP4Resonance | undefined + + // The Greenwich sidereal angle at the epoch, reduced to a whole turn (theta): + const θ = θ0 % TWO_PI + + // The inverse of the semi-major axis of the orbit (in inverse Earth radii) (aonv): + const inverseA = (n0 / xke) ** TWO_THIRDS + + if (0.0034906585 < n0 && n0 < 0.0052359877) { + // The resonance of a geosynchronous orbit, e.g., of the 22, 31 and 33 tesseral harmonics: + const G200 = 1.0 + e02 * (-2.5 + 0.8125 * e02) + + const G310 = 1.0 + 2.0 * e02 + + const G300 = 1.0 + e02 * (-6.0 + 6.60937 * e02) + + const F220 = 0.75 * (1.0 + cosI0) * (1.0 + cosI0) + + const F311 = 0.9375 * sinI0 * sinI0 * (1.0 + 3.0 * cosI0) - 0.75 * (1.0 + cosI0) + + const onePlusCosI0 = 1.0 + cosI0 + + const F330 = 1.875 * onePlusCosI0 * onePlusCosI0 * onePlusCosI0 + + // The coefficients of the 22, 31 and 33 tesseral harmonics (q22, q31, q33): + const Q22 = 1.7891679e-6 + + const Q31 = 2.1460748e-6 + + const Q33 = 2.2123015e-7 + + const δ = 3.0 * n0 * n0 * inverseA * inverseA + + resonance = { + kind: 'synchronous', + δ1: δ * F311 * G310 * Q31 * inverseA, + δ2: 2.0 * δ * F220 * G200 * Q22, + δ3: 3.0 * δ * F330 * G300 * Q33 * inverseA, + λ0: (M0 + Ω0 + ω0 - θ) % TWO_PI, + λDotMinusN: + MDot + + (ωDot + ΩDot) - + SGP4_EARTH_ROTATION_RATE + + MDotLunisolar + + ωDotLunisolar + + ΩDotLunisolar - + n0 + } + } + + if (8.26e-3 <= n0 && n0 <= 9.24e-3 && e0 >= 0.5) { + // The resonance of a 12-hour orbit, e.g., of the second and the higher tesseral harmonics: + const cosI02 = cosI0 * cosI0 + + const e03 = e0 * e02 + + const G201 = -0.306 - (e0 - 0.64) * 0.44 + + let G211: number + + let G310: number + + let G322: number + + let G410: number + + let G422: number + + let G520: number + + let G521: number + + let G532: number + + let G533: number + + if (e0 <= 0.65) { + G211 = 3.616 - 13.247 * e0 + 16.29 * e02 + + G310 = -19.302 + 117.39 * e0 - 228.419 * e02 + 156.591 * e03 + + G322 = -18.9068 + 109.7927 * e0 - 214.6334 * e02 + 146.5816 * e03 + + G410 = -41.122 + 242.694 * e0 - 471.094 * e02 + 313.953 * e03 + + G422 = -146.407 + 841.88 * e0 - 1629.014 * e02 + 1083.435 * e03 + + G520 = -532.114 + 3017.977 * e0 - 5740.032 * e02 + 3708.276 * e03 + } else { + G211 = -72.099 + 331.819 * e0 - 508.738 * e02 + 266.724 * e03 + + G310 = -346.844 + 1582.851 * e0 - 2415.925 * e02 + 1246.113 * e03 + + G322 = -342.585 + 1554.908 * e0 - 2366.899 * e02 + 1215.972 * e03 + + G410 = -1052.797 + 4758.686 * e0 - 7193.992 * e02 + 3651.957 * e03 + + G422 = -3581.69 + 16178.11 * e0 - 24462.77 * e02 + 12422.52 * e03 + + G520 = + e0 > 0.715 + ? -5149.66 + 29936.92 * e0 - 54087.36 * e02 + 31324.56 * e03 + : 1464.74 - 4664.75 * e0 + 3763.64 * e02 + } + + if (e0 < 0.7) { + G533 = -919.2277 + 4988.61 * e0 - 9064.77 * e02 + 5542.21 * e03 + + G521 = -822.71072 + 4568.6173 * e0 - 8491.4146 * e02 + 5337.524 * e03 + + G532 = -853.666 + 4690.25 * e0 - 8624.77 * e02 + 5341.4 * e03 + } else { + G533 = -37995.78 + 161616.52 * e0 - 229838.2 * e02 + 109377.94 * e03 + + G521 = -51752.104 + 218913.95 * e0 - 309468.16 * e02 + 146349.42 * e03 + + G532 = -40023.88 + 170470.89 * e0 - 242699.48 * e02 + 115605.82 * e03 + } + + const sinI02 = sinI0 * sinI0 + + const F220 = 0.75 * (1.0 + 2.0 * cosI0 + cosI02) + + const F221 = 1.5 * sinI02 + + const F321 = 1.875 * sinI0 * (1.0 - 2.0 * cosI0 - 3.0 * cosI02) + + const F322 = -1.875 * sinI0 * (1.0 + 2.0 * cosI0 - 3.0 * cosI02) + + const F441 = 35.0 * sinI02 * F220 + + const F442 = 39.375 * sinI02 * sinI02 + + const F522 = + 9.84375 * + sinI0 * + (sinI02 * (1.0 - 2.0 * cosI0 - 5.0 * cosI02) + + 0.33333333 * (-2.0 + 4.0 * cosI0 + 6.0 * cosI02)) + + const F523 = + sinI0 * + (4.92187512 * sinI02 * (-2.0 - 4.0 * cosI0 + 10.0 * cosI02) + + 6.56250012 * (1.0 + 2.0 * cosI0 - 3.0 * cosI02)) + + const F542 = + 29.53125 * sinI0 * (2.0 - 8.0 * cosI0 + cosI02 * (-12.0 + 8.0 * cosI0 + 10.0 * cosI02)) + + const F543 = + 29.53125 * sinI0 * (-2.0 - 8.0 * cosI0 + cosI02 * (12.0 + 8.0 * cosI0 - 10.0 * cosI02)) + + // The coefficients of the tesseral harmonics (root22, root32, root44, root52, root54): + const ROOT22 = 1.7891679e-6 + + const ROOT32 = 3.7393792e-7 + + const ROOT44 = 7.3636953e-9 + + const ROOT52 = 1.1428639e-7 + + const ROOT54 = 2.1765803e-9 + + // The scale of the coefficients of each harmonic, e.g., 3n²/a² carried by a further 1/a for each + // degree of the harmonic (temp1), and that of each harmonic itself (temp): + let scale = 3.0 * (n0 * n0) * (inverseA * inverseA) + + const D22 = scale * ROOT22 + + scale = scale * inverseA + + const D32 = scale * ROOT32 + + scale = scale * inverseA + + const D44 = 2.0 * scale * ROOT44 + + scale = scale * inverseA + + const D52 = scale * ROOT52 + + const D54 = 2.0 * scale * ROOT54 + + resonance = { + kind: 'half-day', + D2201: D22 * F220 * G201, + D2211: D22 * F221 * G211, + D3210: D32 * F321 * G310, + D3222: D32 * F322 * G322, + D4410: D44 * F441 * G410, + D4422: D44 * F442 * G422, + D5220: D52 * F522 * G520, + D5232: D52 * F523 * G532, + D5421: D54 * F542 * G521, + D5433: D54 * F543 * G533, + λ0: (M0 + Ω0 + Ω0 - θ - θ) % TWO_PI, + λDotMinusN: + MDot + MDotLunisolar + 2.0 * (ΩDot + ΩDotLunisolar - SGP4_EARTH_ROTATION_RATE) - n0 + } + } + + return { + mode, + θ0, + sun: getCoefficients(sun, SGP4_SUN.e, MSun), + moon: getCoefficients(moon, SGP4_MOON.e, MMoon), + eDot, + iDot, + MDot: MDotLunisolar, + ωDot: ωDotLunisolar, + ΩDot: ΩDotLunisolar, + resonance + } +} + +/*****************************************************************************************************************/ + +/** + * + * Resolves the secular effects of the gravity of the Sun and of the Moon, and the integration of any + * resonance of the orbit, on the mean elements at a time since the epoch, as the dspace() routine of + * the reference implementation does. + * + * N.B. The resonance is integrated from the epoch at each propagation, in steps of 720 minutes, as + * the reference implementation integrates it, e.g., the integration is deterministic, and so the + * state of a propagation does not depend on the propagations that came before it. + * + * @param deepSpace - The propagation constants of the deep-space theory for the element set. + * @param propagationConstants - The propagation constants of the near-Earth theory for the element set. + * @param t - The time since the epoch of the element set (in minutes). + * @param elements - The mean elements carried by the secular effects of the near-Earth theory. + * @returns The mean elements carried by the secular effects of the deep-space theory. + * + */ +const getSGP4DeepSpaceSecularEffects = ( + deepSpace: SGP4DeepSpacePropagationConstants, + propagationConstants: { n0: number; ω0: number; ωDot: number }, + t: number, + elements: { e: number; i: number; ω: number; Ω: number; M: number; n: number } +): { e: number; i: number; ω: number; Ω: number; M: number; n: number } => { + let { M, Ω, n } = elements + + // The Greenwich sidereal angle at the time (in radians) (theta): + const θ = (deepSpace.θ0 + t * SGP4_EARTH_ROTATION_RATE) % TWO_PI + + const e = elements.e + deepSpace.eDot * t + + const i = elements.i + deepSpace.iDot * t + + const ω = elements.ω + deepSpace.ωDot * t + + Ω = Ω + deepSpace.ΩDot * t + + M = M + deepSpace.MDot * t + + const { resonance } = deepSpace + + if (resonance) { + // The step of the integration (in minutes) (stepp, stepn), and half of its square (step2): + const STEP = 720.0 + + const HALF_STEP_SQUARED = 259200.0 + + // The phases of the resonance terms (in radians) (fasx2, fasx4, fasx6, g22, g32, g44, g52, g54): + const FASX2 = 0.13130908 + + const FASX4 = 2.8843198 + + const FASX6 = 0.37448087 + + const G22 = 5.7686396 + + const G32 = 0.95240898 + + const G44 = 1.8014998 + + const G52 = 1.050833 + + const G54 = 4.4108898 + + // The integration begins at the epoch, from the mean motion and the resonance angle of it (atime, + // xni, xli): + let time = 0.0 + + let nIntegrated = propagationConstants.n0 + + let λ = resonance.λ0 + + const step = t > 0.0 ? STEP : -STEP + + // The rates of the mean motion (xndt) and of the resonance angle (xldot), and the second rate of + // the mean motion (xnddt), and the remainder of the time beyond the last step (ft): + let nDot = 0.0 + + let λDot = 0.0 + + let nDoubleDot = 0.0 + + let Δt = 0.0 + + for (;;) { + if (resonance.kind === 'synchronous') { + const { δ1, δ2, δ3 } = resonance + + nDot = + δ1 * Math.sin(λ - FASX2) + + δ2 * Math.sin(2.0 * (λ - FASX4)) + + δ3 * Math.sin(3.0 * (λ - FASX6)) + + λDot = nIntegrated + resonance.λDotMinusN + + nDoubleDot = + δ1 * Math.cos(λ - FASX2) + + 2.0 * δ2 * Math.cos(2.0 * (λ - FASX4)) + + 3.0 * δ3 * Math.cos(3.0 * (λ - FASX6)) + + nDoubleDot = nDoubleDot * λDot + } else { + const { D2201, D2211, D3210, D3222, D4410, D4422, D5220, D5232, D5421, D5433 } = resonance + + // The argument of perigee at the time of the step (xomi), and twice it (x2omi), and twice the + // resonance angle (x2li): + const ωi = propagationConstants.ω0 + propagationConstants.ωDot * time + + const twoωi = ωi + ωi + + const twoλ = λ + λ + + nDot = + D2201 * Math.sin(twoωi + λ - G22) + + D2211 * Math.sin(λ - G22) + + D3210 * Math.sin(ωi + λ - G32) + + D3222 * Math.sin(-ωi + λ - G32) + + D4410 * Math.sin(twoωi + twoλ - G44) + + D4422 * Math.sin(twoλ - G44) + + D5220 * Math.sin(ωi + λ - G52) + + D5232 * Math.sin(-ωi + λ - G52) + + D5421 * Math.sin(ωi + twoλ - G54) + + D5433 * Math.sin(-ωi + twoλ - G54) + + λDot = nIntegrated + resonance.λDotMinusN + + nDoubleDot = + D2201 * Math.cos(twoωi + λ - G22) + + D2211 * Math.cos(λ - G22) + + D3210 * Math.cos(ωi + λ - G32) + + D3222 * Math.cos(-ωi + λ - G32) + + D5220 * Math.cos(ωi + λ - G52) + + D5232 * Math.cos(-ωi + λ - G52) + + 2.0 * + (D4410 * Math.cos(twoωi + twoλ - G44) + + D4422 * Math.cos(twoλ - G44) + + D5421 * Math.cos(ωi + twoλ - G54) + + D5433 * Math.cos(-ωi + twoλ - G54)) + + nDoubleDot = nDoubleDot * λDot + } + + // The integration steps until it is within a step of the time, from which it is then + // extrapolated to the time itself: + if (Math.abs(t - time) < STEP) { + Δt = t - time + + break + } + + λ = λ + λDot * step + nDot * HALF_STEP_SQUARED + + nIntegrated = nIntegrated + nDot * step + nDoubleDot * HALF_STEP_SQUARED + + time = time + step + } + + n = nIntegrated + nDot * Δt + nDoubleDot * Δt * Δt * 0.5 + + // The resonance angle at the time (xl): + const λt = λ + λDot * Δt + nDot * Δt * Δt * 0.5 + + M = resonance.kind === 'synchronous' ? λt - Ω - ω + θ : λt - 2.0 * Ω + 2.0 * θ + + // N.B. The mean motion is resolved through its rate from that at the epoch, e.g., n0 + (n - n0), + // rather than taken as it is, as the reference implementation resolves it, which may differ from + // it in the last bit: + n = propagationConstants.n0 + (n - propagationConstants.n0) + } + + return { e, i, ω, Ω, M, n } +} + +/*****************************************************************************************************************/ + +/** + * + * Resolves the long-period perturbations of the gravity of the Sun and of the Moon of the deep-space + * theory at a time since the epoch, and applies them to the mean elements, as the dpper() routine of + * the reference implementation does. + * + * @param deepSpace - The propagation constants of the deep-space theory for the element set. + * @param t - The time since the epoch of the element set (in minutes). + * @param elements - The mean elements to perturb. + * @returns The perturbed elements. + * + */ +const getSGP4LunisolarPerturbations = ( + deepSpace: SGP4DeepSpacePropagationConstants, + t: number, + elements: { e: number; i: number; Ω: number; ω: number; M: number } +): { e: number; i: number; Ω: number; ω: number; M: number } => { + let { e, i, Ω, ω, M } = elements + + // The perturbations of a body at the time, from the position of the body in its orbit, e.g., its + // mean anomaly (zm) and its true anomaly to the first order of its eccentricity (zf): + const getPerturbations = ( + coefficients: SGP4LunisolarCoefficients, + body: { n: number; e: number } + ) => { + const MBody = coefficients.M0 + body.n * t + + const fBody = MBody + 2.0 * body.e * Math.sin(MBody) + + const sinFBody = Math.sin(fBody) + + const F2 = 0.5 * sinFBody * sinFBody - 0.25 + + const F3 = -0.5 * sinFBody * Math.cos(fBody) + + return { + δe: coefficients.e2 * F2 + coefficients.e3 * F3, + δi: coefficients.i2 * F2 + coefficients.i3 * F3, + δl: coefficients.l2 * F2 + coefficients.l3 * F3 + coefficients.l4 * sinFBody, + δgh: coefficients.gh2 * F2 + coefficients.gh3 * F3 + coefficients.gh4 * sinFBody, + δh: coefficients.h2 * F2 + coefficients.h3 * F3 + } + } + + const sun = getPerturbations(deepSpace.sun, SGP4_SUN) + + const moon = getPerturbations(deepSpace.moon, SGP4_MOON) + + // The perturbations of the Sun and of the Moon together (pe, pinc, pl, pgh, ph): + const δe = sun.δe + moon.δe + + const δi = sun.δi + moon.δi + + const δl = sun.δl + moon.δl + + let δgh = sun.δgh + moon.δgh + + let δh = sun.δh + moon.δh + + i = i + δi + + e = e + δe + + const sinI = Math.sin(i) + + const cosI = Math.cos(i) + + // The perturbations are applied directly for an inclination of 0.2 radians or more, and by the + // method of Lyddane otherwise, which is not singular for an orbit of a small inclination: + if (i >= 0.2) { + δh = δh / sinI + + δgh = δgh - cosI * δh + + ω = ω + δgh + + Ω = Ω + δh + + M = M + δl + } else { + const sinΩ = Math.sin(Ω) + + const cosΩ = Math.cos(Ω) + + // The components of the unit vector of the node, e.g., sin(i) sin(Ω) (alfdp) and sin(i) cos(Ω) + // (betdp), each displaced by its perturbation (dalf, dbet): + const α = sinI * sinΩ + (δh * cosΩ + δi * cosI * sinΩ) + + const β = sinI * cosΩ + (-δh * sinΩ + δi * cosI * cosΩ) + + Ω = Ω % TWO_PI + + // The operational implementation of the Air Force Space Command keeps the node within [0, 2π): + if (Ω < 0.0 && deepSpace.mode === 'afspc') { + Ω = Ω + TWO_PI + } + + // The mean longitude (xls), and the node before it is perturbed (xnoh): + const L = M + ω + δl + δgh + (cosI - δi * sinI) * Ω + + const ΩBefore = Ω + + Ω = Math.atan2(α, β) + + if (Ω < 0.0 && deepSpace.mode === 'afspc') { + Ω = Ω + TWO_PI + } + + if (Math.abs(ΩBefore - Ω) > Math.PI) { + Ω = Ω < ΩBefore ? Ω + TWO_PI : Ω - TWO_PI + } + + M = M + δl + + ω = L - M - cosI * Ω + } + + return { e, i, Ω, ω, M } } /*****************************************************************************************************************/ @@ -374,11 +1403,15 @@ type SGP4PropagationConstants = { * * @param tle - The two-line element set to initialise. * @param gravity - The gravity model to initialise it with. - * @throws An SGP4Error if the orbit is of the deep-space theory, which is not yet resolved. + * @param mode - The mode of operation of the theory. * @returns The propagation constants of the theory for the element set. * */ -const initialiseSGP4 = (tle: TwoLineElement, gravity: GravityModel): SGP4PropagationConstants => { +const initialiseSGP4 = ( + tle: TwoLineElement, + gravity: GravityModel, + mode: 'improved' | 'afspc' +): SGP4PropagationConstants => { const { radius, xke, J2, J4 } = gravity const J3OverJ2 = gravity.J3 / gravity.J2 @@ -462,15 +1495,6 @@ const initialiseSGP4 = (tle: TwoLineElement, gravity: GravityModel): SGP4Propaga // The radius of perigee (in Earth radii) (rp): const rPerigee = a0 * (1.0 - e0) - // An orbit of a period of 225 minutes or more is resolved by the deep-space terms of the theory, - // e.g., the lunar and solar perturbations and the resonances of a geosynchronous or a 12-hour orbit, - // which are not yet resolved, and so it is not propagated rather than propagated without them: - if (TWO_PI / n0 >= SGP4_DEEP_SPACE_PERIOD) { - throw new SGP4Error( - `The orbit of a period of ${TWO_PI / n0} minutes is of the deep-space theory, which is not yet resolved` - ) - } - // sgp4init(): resolve the coefficients of the theory: let isSimplified = false @@ -520,6 +1544,8 @@ const initialiseSGP4 = (tle: TwoLineElement, gravity: GravityModel): SGP4Propaga let sevenθ2MinusOne = 0 + let deepSpace: SGP4DeepSpacePropagationConstants | undefined + if (β02 >= 0.0 || n0 >= 0.0) { // An orbit of a perigee below 220 km is propagated by the simplified drag terms of the theory: isSimplified = rPerigee < 220.0 / radius + 1.0 @@ -658,6 +1684,26 @@ const initialiseSGP4 = (tle: TwoLineElement, gravity: GravityModel): SGP4Propaga sevenθ2MinusOne = 7.0 * θ2 - 1.0 + // An orbit of a period of 225 minutes or more is resolved by the deep-space terms of the theory, + // e.g., the perturbations of the Sun and of the Moon and the resonances of a geosynchronous or a + // 12-hour orbit, and is propagated by the simplified drag terms: + if (TWO_PI / n0 >= SGP4_DEEP_SPACE_PERIOD) { + isSimplified = true + + deepSpace = initialiseSGP4DeepSpace(tle.epoch - SGP4_EPOCH, mode, { + xke, + e0, + ω0, + i0, + M0, + Ω0, + n0, + MDot, + ωDot, + ΩDot + }) + } + if (!isSimplified) { // C1² (cc1sq): const C12 = C1 * C1 @@ -717,7 +1763,8 @@ const initialiseSGP4 = (tle: TwoLineElement, gravity: GravityModel): SGP4Propaga LCoefficient, threeθ2MinusOne, oneMinusθ2, - sevenθ2MinusOne + sevenθ2MinusOne, + deepSpace } } @@ -732,12 +1779,12 @@ const initialiseSGP4 = (tle: TwoLineElement, gravity: GravityModel): SGP4Propaga * * @param propagationConstants - The propagation constants of the theory for the element set. * @param t - The time since the epoch of the element set (in minutes). - * @throws An SGP4MeanMotionError, an SGP4MeanEccentricityError, an SGP4SemiLatusRectumError or an SGP4DecayedError where the theory fails. + * @throws An SGP4MeanMotionError, an SGP4MeanEccentricityError, an SGP4PerturbedEccentricityError, an SGP4SemiLatusRectumError or an SGP4DecayedError where the theory fails. * @returns The state vector of the object, in the True Equator, Mean Equinox (TEME) frame of the epoch (in kilometres and kilometres per second). * */ const propagateSGP4 = (propagationConstants: SGP4PropagationConstants, t: number): StateVector => { - const { xke, J2, isSimplified } = propagationConstants + const { xke, J2, isSimplified, deepSpace } = propagationConstants // The secular effects of the gravity of the Earth on the mean anomaly, the argument of perigee and // the longitude of the ascending node (xmdf, argpdf, nodedf): @@ -808,7 +1855,20 @@ const propagateSGP4 = (propagationConstants: SGP4PropagationConstants, t: number let e = propagationConstants.e0 - const i = propagationConstants.i0 + let i = propagationConstants.i0 + + // The secular effects of the gravity of the Sun and of the Moon, and of any resonance of the orbit, + // of the deep-space theory: + if (deepSpace) { + ;({ e, i, ω, Ω, M, n } = getSGP4DeepSpaceSecularEffects(deepSpace, propagationConstants, t, { + e, + i, + ω, + Ω, + M, + n + })) + } if (n <= 0.0) { throw new SGP4MeanMotionError(n) @@ -845,9 +1905,41 @@ const propagateSGP4 = (propagationConstants: SGP4PropagationConstants, t: number M = (L - ω - Ω) % TWO_PI - const sinI = Math.sin(i) + let sinI = Math.sin(i) - const cosI = Math.cos(i) + let cosI = Math.cos(i) + + let { ayNCoefficient, LCoefficient } = propagationConstants + + // The long-period perturbations of the gravity of the Sun and of the Moon of the deep-space theory: + if (deepSpace) { + ;({ e, i, Ω, ω, M } = getSGP4LunisolarPerturbations(deepSpace, t, { e, i, Ω, ω, M })) + + // A perturbed inclination that is negative is reflected, together with its node and perigee: + if (i < 0.0) { + i = -i + + Ω = Ω + Math.PI + + ω = ω - Math.PI + } + + if (e < 0.0 || e > 1.0) { + throw new SGP4PerturbedEccentricityError(e) + } + + // The long-period coefficients are resolved from the perturbed inclination: + sinI = Math.sin(i) + + cosI = Math.cos(i) + + ayNCoefficient = -0.5 * propagationConstants.J3OverJ2 * sinI + + LCoefficient = + Math.abs(cosI + 1.0) > 1.5e-12 + ? (-0.25 * propagationConstants.J3OverJ2 * sinI * (3.0 + 5.0 * cosI)) / (1.0 + cosI) + : (-0.25 * propagationConstants.J3OverJ2 * sinI * (3.0 + 5.0 * cosI)) / 1.5e-12 + } // The long-period periodic effects of the third zonal harmonic, e.g., on the components of the // eccentricity vector (axnl, aynl) and on the mean longitude (xl): @@ -856,9 +1948,9 @@ const propagateSGP4 = (propagationConstants: SGP4PropagationConstants, t: number // 1 / a(1 - e²) (temp): const inverseAβ2 = 1.0 / (a * (1.0 - e * e)) - const ayN = e * Math.sin(ω) + inverseAβ2 * propagationConstants.ayNCoefficient + const ayN = e * Math.sin(ω) + inverseAβ2 * ayNCoefficient - const LT = M + ω + Ω + inverseAβ2 * propagationConstants.LCoefficient * axN + const LT = M + ω + Ω + inverseAβ2 * LCoefficient * axN // Solve Kepler's equation for the eccentric longitude E + ω, e.g., by Newton's method, with each // step limited to 0.95 radians, as the reference implementation solves it (u, eo1, tem5): @@ -933,27 +2025,35 @@ const propagateSGP4 = (propagationConstants: SGP4PropagationConstants, t: number const J2OverTwoPL2 = J2OverTwoPL * inversePL + // The functions of the inclination of the short-period periodic effects, which the deep-space + // theory resolves from the perturbed inclination: + let { threeθ2MinusOne, oneMinusθ2, sevenθ2MinusOne } = propagationConstants + + if (deepSpace) { + const θ2 = cosI * cosI + + threeθ2MinusOne = 3.0 * θ2 - 1.0 + + oneMinusθ2 = 1.0 - θ2 + + sevenθ2MinusOne = 7.0 * θ2 - 1.0 + } + // The short-period periodic effects, e.g., the osculating radius (mrt), argument of latitude (su), // longitude of the ascending node (xnode) and inclination (xinc), and the radial (mvt) and // transverse (rvdot) rates: const rk = - r * (1.0 - 1.5 * J2OverTwoPL2 * βL * propagationConstants.threeθ2MinusOne) + - 0.5 * J2OverTwoPL * propagationConstants.oneMinusθ2 * cos2u + r * (1.0 - 1.5 * J2OverTwoPL2 * βL * threeθ2MinusOne) + 0.5 * J2OverTwoPL * oneMinusθ2 * cos2u - u = u - 0.25 * J2OverTwoPL2 * propagationConstants.sevenθ2MinusOne * sin2u + u = u - 0.25 * J2OverTwoPL2 * sevenθ2MinusOne * sin2u const Ωk = Ω + 1.5 * J2OverTwoPL2 * cosI * sin2u const ik = i + 1.5 * J2OverTwoPL2 * cosI * sinI * cos2u - const rDotk = rDot - (n * J2OverTwoPL * propagationConstants.oneMinusθ2 * sin2u) / xke + const rDotk = rDot - (n * J2OverTwoPL * oneMinusθ2 * sin2u) / xke - const rfDotk = - rfDot + - (n * - J2OverTwoPL * - (propagationConstants.oneMinusθ2 * cos2u + 1.5 * propagationConstants.threeθ2MinusOne)) / - xke + const rfDotk = rfDot + (n * J2OverTwoPL * (oneMinusθ2 * cos2u + 1.5 * threeθ2MinusOne)) / xke // The orientation vectors of the orbit, e.g., the unit vectors along the radius (U) and along the // direction of motion (V), in the TEME frame: @@ -1029,9 +2129,9 @@ const propagateSGP4 = (propagationConstants: SGP4PropagationConstants, t: number * Space Force, SGP4-XP, and not to SGP4, and so it is rejected, rather than recorded for a * propagation to a position that is not that of the object. * - * N.B. An orbit of a period of 225 minutes or more is of the deep-space theory, e.g., the lunar and - * solar perturbations and the resonances of a geosynchronous or a 12-hour orbit, which is not yet - * resolved, and so it is rejected, rather than propagated without those terms. + * N.B. An orbit of a period of 225 minutes or more is propagated by the deep-space terms of the + * theory, e.g., the long-period perturbations of the Sun and of the Moon, and the resonances of a + * geosynchronous or a 12-hour orbit with the tesseral harmonics of the gravity of the Earth. * * @see Hoots, F. R., & Roehrich, R. L. (1980), "Spacetrack Report No. 3: Models for Propagation of NORAD Element Sets". * @see Vallado, D. A., Crawford, P., Hujsak, R., & Kelso, T. S. (2006), "Revisiting Spacetrack Report #3", AIAA 2006-6753. @@ -1063,7 +2163,6 @@ export class SatelliteRecord { * @param options - The gravity model and the mode of operation of the theory. * @throws An SGP4EphemerisTypeError if the element set is of ephemeris type 4, e.g., of SGP4-XP. * @throws An error if the mode of operation is not one of "improved" or "afspc". - * @throws An SGP4Error if the orbit is of the deep-space theory, which is not yet resolved. * @throws An SGP4Error of the failure, where the theory fails for the element set at its epoch. * */ @@ -1087,7 +2186,7 @@ export class SatelliteRecord { this.mode = mode - this.#propagationConstants = initialiseSGP4(this.tle, gravity) + this.#propagationConstants = initialiseSGP4(this.tle, gravity, mode) // Propagate to the epoch, as the reference implementation does as it initialises, so that an // element set the theory fails for at its epoch is rejected as it is initialised: diff --git a/tests/conformance/sgp4.spec.ts b/tests/conformance/sgp4.spec.ts index d3a8fb7..be6fdd2 100644 --- a/tests/conformance/sgp4.spec.ts +++ b/tests/conformance/sgp4.spec.ts @@ -14,19 +14,24 @@ import { SGP4Error, SatelliteRecord } from '../../src/sgp4' import { parseTwoLineElement } from '../../src/tle' -import { sgp4NearEarthReferences } from './sgp4' +import { sgp4References } from './sgp4' /*****************************************************************************************************************/ // The tolerances below are the error envelope of the propagation as it stands, measured against the references of // the reference implementation, and pinned with a modest headroom so that a regression beyond the current envelope -// fails. The envelope is that of the rounding of the arithmetic of the two implementations, e.g., ~0.2 micrometres -// in position and ~2 × 10⁻¹⁰ metres per second in velocity, far beneath the accuracy of the theory itself. +// fails. The envelope is that of the rounding of the arithmetic of the two implementations, e.g., ~2 micrometres in +// position and ~2 × 10⁻¹⁰ metres per second in velocity, far beneath the accuracy of the theory itself. +// +// N.B. A propagation of a resonant orbit integrates its resonance in steps of 720 minutes from the epoch, and so the +// rounding of each step accumulates over a propagation of years, e.g., ~65 micrometres in position and ~7 × 10⁻⁹ +// metres per second in velocity over the ~3.5 years of the longest propagation of the verification set, and so a +// propagation of more than a million minutes from the epoch is held to an envelope of its own. /*****************************************************************************************************************/ // The position of the object (in SI metres): -const POSITION_TOLERANCE = 1e-6 +const POSITION_TOLERANCE = 5e-6 /*****************************************************************************************************************/ @@ -35,22 +40,62 @@ const VELOCITY_TOLERANCE = 1e-9 /*****************************************************************************************************************/ +// The time since the epoch (in minutes) beyond which a propagation is held to the envelope of a propagation of years: +const LONG_PROPAGATION = 1e6 + +/*****************************************************************************************************************/ + +// The position of the object, of a propagation of years (in SI metres): +const LONG_PROPAGATION_POSITION_TOLERANCE = 1e-4 + +/*****************************************************************************************************************/ + +// The velocity of the object, of a propagation of years (in SI metres per second): +const LONG_PROPAGATION_VELOCITY_TOLERANCE = 1e-8 + +/*****************************************************************************************************************/ + // The gravity models of the references, by name: const GRAVITY_MODELS = { WGS72OLD, WGS72, WGS84 } /*****************************************************************************************************************/ describe('SatelliteRecord conformance against the reference implementation of SGP4', () => { - for (const reference of sgp4NearEarthReferences) { - describe(`satellite ${reference.satellite} with the gravity model of ${reference.gravity}`, () => { - const record = new SatelliteRecord(parseTwoLineElement(reference.line1, reference.line2), { - gravity: GRAVITY_MODELS[reference.gravity] - }) + for (const reference of sgp4References) { + describe(`satellite ${reference.satellite} with the gravity model of ${reference.gravity} in the ${reference.mode} mode`, () => { + const tle = parseTwoLineElement(reference.line1, reference.line2) + + const options = { gravity: GRAVITY_MODELS[reference.gravity], mode: reference.mode } + + const failure = reference.error + + // The reference implementation fails for an element set at its epoch as it initialises it, and + // so the record is rejected as it is initialised: + if (failure && failure.minutes === 0 && reference.states.length === 0) { + it(`should fail as it is initialised with the error code ${failure.code}, as the reference does`, () => { + let error: unknown + + try { + new SatelliteRecord(tle, options) + } catch (e) { + error = e + } + + expect(error).toBeInstanceOf(SGP4Error) + expect((error as SGP4Error).code).toBe(failure.code) + }) + + return + } + + const record = new SatelliteRecord(tle, options) for (const state of reference.states) { it(`should resolve the state vector at ${state.minutes} minutes within the tolerance`, () => { const { position, velocity } = record.getStateVectorAtMinutesSinceEpoch(state.minutes) + const long = Math.abs(state.minutes) > LONG_PROPAGATION + // The references are in kilometres and kilometres per second: expect( Math.hypot( @@ -58,7 +103,7 @@ describe('SatelliteRecord conformance against the reference implementation of SG position.y - state.position[1] * 1000, position.z - state.position[2] * 1000 ) - ).toBeLessThan(POSITION_TOLERANCE) + ).toBeLessThan(long ? LONG_PROPAGATION_POSITION_TOLERANCE : POSITION_TOLERANCE) expect( Math.hypot( @@ -66,12 +111,10 @@ describe('SatelliteRecord conformance against the reference implementation of SG velocity.y - state.velocity[1] * 1000, velocity.z - state.velocity[2] * 1000 ) - ).toBeLessThan(VELOCITY_TOLERANCE) + ).toBeLessThan(long ? LONG_PROPAGATION_VELOCITY_TOLERANCE : VELOCITY_TOLERANCE) }) } - const failure = reference.error - if (failure) { it(`should fail at ${failure.minutes} minutes with the error code ${failure.code}, as the reference does`, () => { let error: unknown diff --git a/tests/conformance/sgp4.ts b/tests/conformance/sgp4.ts index aa4817a..47676c3 100644 --- a/tests/conformance/sgp4.ts +++ b/tests/conformance/sgp4.ts @@ -8,12 +8,17 @@ // The reference values in this module are generated with the reference implementation of SGP4 of Vallado, D. A., // Crawford, P., Hujsak, R., & Kelso, T. S. (2006), "Revisiting Spacetrack Report #3", AIAA 2006-6753, e.g., its C++ -// implementation, as bound by the sgp4 package (version 2.24), in its improved mode of operation. +// implementation, as bound by the sgp4 package (version 2.24). // -// The element sets are those of the verification set of that paper, e.g., SGP4-VER.TLE, of the near-Earth theory, -// e.g., of a period of less than 225 minutes, each propagated over the times of its verification run, e.g., the -// start, stop and step carried beyond the 69th column of its second line, with the gravity model of WGS 72, and -// two of them with the gravity models of WGS 72 (old) and WGS 84 also. +// The element sets are those of the verification set of that paper, e.g., SGP4-VER.TLE, of both the near-Earth and +// the deep-space theory, each propagated over the times of its verification run, e.g., the start, stop and step +// carried beyond the 69th column of its second line, with the gravity model of WGS 72 in the improved mode of +// operation, six of the deep-space element sets in the mode of operation of the Air Force Space Command also, and +// three of them with the gravity models of WGS 72 (old) and WGS 84 also. +// +// N.B. The element sets of the satellites 33333, 33334 and 33335 are deliberately corrupted by the verification set, +// e.g., their checksums are not those of their lines, and so they are given without their checksums, which are not +// verified then, as the reference implementation does not verify them. // // The states are those of the reference implementation, e.g., in the True Equator, Mean Equinox (TEME) frame of the // epoch, in kilometres and kilometres per second. Where the reference implementation fails, the propagation of the @@ -41,6 +46,8 @@ export interface SGP4Reference { line2: string // The gravity model the element set is propagated with: gravity: 'WGS72OLD' | 'WGS72' | 'WGS84' + // The mode of operation of the theory the element set is propagated with: + mode: 'improved' | 'afspc' // The states of the object over the times of its verification run: states: SGP4StateReference[] // The failure of the reference implementation, e.g., the time and the error code of it, where it fails: @@ -49,13 +56,14 @@ export interface SGP4Reference { /*****************************************************************************************************************/ -// The near-Earth element sets of the verification set, as the reference implementation propagates them: -export const sgp4NearEarthReferences: SGP4Reference[] = [ +// The element sets of the verification set, as the reference implementation propagates them: +export const sgp4References: SGP4Reference[] = [ { satellite: 5, line1: '1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753', line2: '2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667', gravity: 'WGS72', + mode: 'improved', states: [ { minutes: 0, position: [7022.465292664064, -1400.0829675535551, 0.03995155416521326], velocity: [1.8938410145129514, 6.405893759209842, 4.534807250354738] }, { minutes: 360, position: [-7154.031202015707, -3783.176825036568, -3536.1941229422155], velocity: [4.741887408996156, -4.151817765373694, -2.0939354249073663] }, @@ -72,11 +80,25 @@ export const sgp4NearEarthReferences: SGP4Reference[] = [ { minutes: 4320, position: [-9060.473735694444, 4658.709525022637, 813.6867315341166], velocity: [-2.232832782742506, -4.110453489937012, -3.1573454334573743] } ] }, + { + satellite: 4632, + line1: '1 04632U 70093B 04031.91070959 -.00000084 00000-0 10000-3 0 9955', + line2: '2 04632 11.4628 273.1101 1450506 207.6000 143.9350 1.20231981 44145', + gravity: 'WGS72', + mode: 'improved', + states: [ + { minutes: -5184, position: [-29020.025871276204, 13819.844190633197, -5713.336791826828], velocity: [-1.7680683899898302, -3.2353711920132073, -0.39520613549725875] }, + { minutes: -5064, position: [-32982.56870101271, -11125.54996608817, -6803.284727714999], velocity: [0.6174469956130854, -3.3792400406012453, 0.08595470665876515] }, + { minutes: -4944, position: [-22097.68730513039, -31583.13829283626, -4836.34329328209], velocity: [2.2305974990853357, -2.1665946668680434, 0.42644306968499374] }, + { minutes: -4896, position: [-15129.946945448888, -36907.7452622144, -3487.562567009247], velocity: [2.581167186918367, -1.5242047368938991, 0.504805762626078] } + ] + }, { satellite: 6251, line1: '1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985', line2: '2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774', gravity: 'WGS72', + mode: 'improved', states: [ { minutes: 0, position: [3988.3102269938663, 5498.966572352187, 0.9005587865923731], velocity: [-3.290032737938881, 2.3576528196347417, 6.496623474956849] }, { minutes: 120, position: [-3935.698000833816, 409.10980836548407, 5471.335773274221], velocity: [-3.3747841826433285, -6.6352110434903455, -1.9420562212599477] }, @@ -105,11 +127,240 @@ export const sgp4NearEarthReferences: SGP4Reference[] = [ { minutes: 2880, position: [1159.2780289715447, 5056.601754953892, 4353.494185788894], velocity: [-5.968060340911224, -2.3147904058676363, 4.230722669089957] } ] }, + { + satellite: 8195, + line1: '1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813', + line2: '2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656', + gravity: 'WGS72', + mode: 'improved', + states: [ + { minutes: 0, position: [2349.8948335005193, -14785.938115615325, 0.021193784148377418], velocity: [2.7214880955588243, -3.256811654658782, 4.498416672371417] }, + { minutes: 120, position: [15223.917136582058, -17852.958817127143, 25280.395582242327], velocity: [1.0790417322899628, 0.8751873723849997, 2.485682812742269] }, + { minutes: 240, position: [19752.78050009239, -8600.07130961824, 37522.72921089797], velocity: [0.23810527852474422, 1.5461109241453743, 0.9864104468113838] }, + { minutes: 360, position: [19089.29762968123, 3107.8949501772645, 39958.14661369902], velocity: [-0.410308034083211, 1.6403322771134132, -0.3068738176577795] }, + { minutes: 480, position: [13829.660705739047, 13977.39999816908, 32736.320825078543], velocity: [-1.0650968490451884, 1.279983299493013, -1.7601660746193903] }, + { minutes: 600, position: [3333.0583852465493, 18395.31728674016, 12738.250312378941], velocity: [-1.8824322213787283, -0.6116233333449151, -4.039586549262978] }, + { minutes: 720, position: [2622.132222072606, -15125.154649244922, 474.5104839821881], velocity: [2.688287198776586, -3.078426664126733, 4.49497953044891] }, + { minutes: 840, position: [15320.56770016865, -17777.325645857953, 25539.53198382295], velocity: [1.0643462292299732, 0.8921847706661383, 2.459822414229968] }, + { minutes: 960, position: [19769.702677852496, -8458.65104454399, 37624.20130236141], velocity: [0.22930439615266812, 1.550363884062968, 0.9669930561197229] }, + { minutes: 1080, position: [19048.562015231724, 3260.4322311907713, 39923.39143966545], velocity: [-0.4180155357908766, 1.639346952779, -0.3260948400926709] }, + { minutes: 1200, position: [13729.19205837316, 14097.700148100768, 32547.527998896527], velocity: [-1.0745110428790787, 1.2705052113115725, -1.785099926780704] }, + { minutes: 1320, position: [3148.861656431448, 18323.198417026346, 12305.751955783959], velocity: [-1.895271701495791, -0.67834384684672, -4.086577951102779] }, + { minutes: 1440, position: [2890.8063826773023, -15446.439523001178, 948.7701017643217], velocity: [2.6544074895934373, -2.909344894829329, 4.486437361921106] }, + { minutes: 1560, position: [15415.98410711887, -17699.907144365683, 25796.19644689203], velocity: [1.0498183340756788, 0.9088223320279881, 2.434107329012987] }, + { minutes: 1680, position: [19786.00618537852, -8316.745705810246, 37723.74539119266], velocity: [0.22053981281653637, 1.554518899693896, 0.9476010474766261] }, + { minutes: 1800, position: [19007.286887294355, 3412.8594871484543, 39886.66579255273], velocity: [-0.4257335675620967, 1.6382768090367916, -0.345353806943777] }, + { minutes: 1920, position: [13627.93015254457, 14216.954013066905, 32356.137068678334], velocity: [-1.083991975816045, 1.2608023472323462, -1.8101939028061274] }, + { minutes: 2040, position: [2963.2648655955386, 18243.8506364083, 11868.257974860973], velocity: [-1.9080154468415025, -0.7478703418834995, -4.134004491720151] }, + { minutes: 2160, position: [3155.8512603636127, -15750.703933642204, 1422.3249695296893], velocity: [2.6200856244311947, -2.7489903955621875, 4.473527039077274] }, + { minutes: 2280, position: [15510.151917700847, -17620.710022185685, 26050.435253447682], velocity: [1.035454678000289, 0.9251110062353574, 2.408534464785615] }, + { minutes: 2400, position: [19801.67198811621, -8174.3333716713405, 37821.38577438684], velocity: [0.21181269989867557, 1.5585769370659603, 0.928231879656638] }, + { minutes: 2520, position: [18965.465293785135, 3565.196662420493, 39847.975109976316], velocity: [-0.4334599445964376, 1.6371205852891328, -0.3646532131939538] }, + { minutes: 2640, position: [13525.882273999427, 14335.15978786843, 32162.13236535739], velocity: [-1.0935379446777498, 1.2508682555653465, -1.835451681217032] }, + { minutes: 2760, position: [2776.305742600433, 18156.985384510423, 11425.73046480594], velocity: [-1.9206321993110538, -0.8203707332442405, -4.181839231838337] }, + { minutes: 2880, position: [3417.2093158646844, -16038.795106653071, 1894.7493405778744], velocity: [2.5855158640604436, -2.596818145614585, 4.456882556194725] } + ] + }, + { + satellite: 9880, + line1: '1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814', + line2: '2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380', + gravity: 'WGS72', + mode: 'improved', + states: [ + { minutes: 0, position: [13020.067507843205, -2449.071934995316, 1.158960302719138], velocity: [4.247363934862033, 1.597178500848753, 4.956708611391377] }, + { minutes: 120, position: [19190.324824762174, 9249.012669021546, 26596.71345328353], velocity: [-0.6249601929991986, 1.32455056162034, 2.495697636508456] }, + { minutes: 240, position: [11332.678062175286, 16517.991240078674, 38569.78482990696], velocity: [-1.4009747469848834, 0.7109470057889533, 0.9239356355514396] }, + { minutes: 360, position: [328.7421739785914, 19554.9204738032, 40558.26246144989], velocity: [-1.5932810663666392, 0.12677291295167645, -0.3596273072115779] }, + { minutes: 480, position: [-10684.905906795417, 18057.157288389568, 33158.752538863744], velocity: [-1.3832059972939028, -0.58232899894036, -1.744412556058684] }, + { minutes: 600, position: [-17069.780005496348, 9944.867978974073, 13885.916490586826], velocity: [0.04413335410518433, -1.8534484640290334, -3.815303116950443] }, + { minutes: 720, position: [13725.093989799023, -2180.7087708972826, 863.2968452340624], velocity: [3.8784781111515714, 1.6568464962469225, 4.944867241095794] }, + { minutes: 840, position: [19089.638792255362, 9456.296702471303, 27026.79562882551], velocity: [-0.6566142985020943, 1.309112636488816, 2.4493719405095575] }, + { minutes: 960, position: [11106.412483732764, 16627.608740787255, 38727.35140295731], velocity: [-1.4097226795235231, 0.6985825258442225, 0.8913835346015683] }, + { minutes: 1080, position: [72.4095862064101, 19575.080541440173, 40492.12544000551], velocity: [-1.593394604021636, 0.1136551418845968, -0.39055606285979555] }, + { minutes: 1200, position: [-10905.892525763511, 17965.412051108513, 32850.0729824408], velocity: [-1.3713961204809297, -0.6017066038237535, -1.7828170576139366] }, + { minutes: 1320, position: [-17044.612075684898, 9635.484918488643, 13212.594629531977], velocity: [0.12924402957521894, -1.9035514303506498, -3.8845690980058074] }, + { minutes: 1440, position: [14369.903037347145, -1903.8560106220368, 1722.153198524898], velocity: [3.543393116437396, 1.7016871759567973, 4.913881357634916] }, + { minutes: 1560, position: [18983.96210441159, 9661.122338039915, 27448.99557731661], velocity: [-0.6871893040886221, 1.29380887009567, 2.40363075871237] }, + { minutes: 1680, position: [10878.793367035914, 16735.314339535496, 38879.234342636475], velocity: [-1.418239665776104, 0.6862357498784659, 0.8589518483930275] }, + { minutes: 1800, position: [-184.03743100196132, 19593.093717089872, 40420.40606889155], velocity: [-1.5933489245721475, 0.10044869728888096, -0.42157199337168955] }, + { minutes: 1920, position: [-11125.121386310017, 17870.194889282582, 32534.215212084462], velocity: [-1.3591162357786792, -0.6214137764913353, -1.8216298561737798] }, + { minutes: 2040, position: [-17004.432728265543, 9316.539263508157, 12526.118838115462], velocity: [0.22033073595037142, -1.9555943221011272, -3.955058574816727] }, + { minutes: 2160, position: [14960.064926931678, -1620.6843080493206, 2574.963593810469], velocity: [3.2386340280914543, 1.7347233849220773, 4.868880331132255] }, + { minutes: 2280, position: [18873.463472574036, 9863.570045859737, 27863.465747345865], velocity: [-0.7167369810791899, 1.2786328173987973, 2.358448535210547] }, + { minutes: 2400, position: [10649.868575812641, 16841.141726688773, 39025.48035006407], velocity: [-1.426527152369111, 0.6739010570045921, 0.826632332329715] }, + { minutes: 2520, position: [-440.534593227617, 19608.955244226538, 40343.106754508735], velocity: [-1.5931385973116698, 0.08714788447848498, -0.4526805591051984] }, + { minutes: 2640, position: [-11342.450289092449, 17771.4422394217, 32211.12535720787], velocity: [-1.3463440152614632, -0.6414642913522599, -1.8608642339472865] }, + { minutes: 2760, position: [-16948.060057105715, 8987.6425488001, 11826.282843666957], velocity: [0.31800729710094294, -2.0096934917220377, -4.026726647562781] }, + { minutes: 2880, position: [15500.534450679734, -1332.9098104194418, 3419.7231530771533], velocity: [2.9609179743586593, 1.7583316344487876, 4.813698637895388] } + ] + }, + { + satellite: 9998, + line1: '1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480', + line2: '2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878', + gravity: 'WGS72', + mode: 'improved', + states: [ + { minutes: -1440, position: [-11362.182651175297, -35117.55867813419, -5413.625379944755], velocity: [3.1378612613676946, -1.0116782604838297, 0.26751005855372184] }, + { minutes: -1380, position: [309.25349928897174, -36960.430901430016, -4198.480076703303], velocity: [3.292429375073543, -0.0021660456057221293, 0.40211162769305414] }, + { minutes: -1320, position: [11949.040090766493, -35127.37816803669, -2565.8980646781392], velocity: [3.1199427835648623, 1.0120964437314794, 0.4972840999856083] }, + { minutes: -1260, position: [22400.45329335922, -29798.632363213954, -677.9151512206134], velocity: [2.6385333439185215, 1.9224777362274124, 0.5427929125821418] }, + { minutes: -1200, position: [30640.84752457799, -21525.023402005496, 1277.3480872223338], velocity: [1.9034649410609619, 2.6342943119002546, 0.5345409335057768] }, + { minutes: -1140, position: [35899.56788034935, -11152.711581382917, 3108.725352379689], velocity: [0.9973930448388639, 3.079858547670377, 0.47487329066677536] }, + { minutes: -1080, position: [37732.45438599719, 288.188210538128, 4643.875874950493], velocity: [0.01665222633917234, 3.2251844103776124, 0.37166974565634925] }, + { minutes: -1020, position: [36045.92961699479, 11706.618162298033, 5746.326465740122], velocity: [-0.9424090646216623, 3.0698889411339287, 0.23666298044737258] }, + { minutes: -960, position: [31076.77273608906, 22063.44379775652, 6325.934037051833], velocity: [-1.7940279759897833, 2.6420724761038215, 0.08355612737496668] }, + { minutes: -900, position: [23341.260153199913, 30460.880025305447, 6342.917078954936], velocity: [-2.469409743480137, 1.9908616576833964, -0.0736120961266987] }, + { minutes: -840, position: [13568.39733054185, 36204.45930900312, 5806.795487330767], velocity: [-2.9193542030702253, 1.178920217102081, -0.22164681353903337] }, + { minutes: -780, position: [2628.587624197177, 38840.10855897252, 4771.9197985438195], velocity: [-3.114400514096716, 0.2762391085556356, -0.3489264012615159] }, + { minutes: -720, position: [-8535.815981575404, 38171.79073851366, 3331.003112853886], velocity: [-3.0438399577696074, -0.644462527492824, -0.44580889406273616] } + ] + }, + { + satellite: 11801, + line1: '1 11801U 80230.29629788 .01431103 00000-0 14311-1 13', + line2: '2 11801 46.7916 230.4354 7318036 47.4722 10.4117 2.28537848 13', + gravity: 'WGS72', + mode: 'improved', + states: [ + { minutes: 0, position: [7473.371024914288, 428.9474831243528, 5828.748467826838], velocity: [5.107155390863484, 6.444680304626358, -0.18613329734153358] }, + { minutes: 360, position: [-3305.2214869391364, 32410.84323331261, -24697.16974954453], velocity: [-1.3011373191520812, -1.151315600194223, -0.2833358225210396] }, + { minutes: 720, position: [14271.290838581668, 24110.443090094366, -4725.7632014320125], velocity: [-0.32050452810192553, 2.67984153918737, -2.084054354533064] }, + { minutes: 1080, position: [-9990.058000091936, 22717.342124480707, -23616.885155534517], velocity: [-1.01667439224078, -2.290267980770243, 0.7289233366775063] }, + { minutes: 1440, position: [9787.878362555224, 33753.32249666768, -15030.798746254333], velocity: [-1.0942515528493595, 0.9235899056171107, -1.52231100767063] } + ] + }, + { + satellite: 14128, + line1: '1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627', + line2: '2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093', + gravity: 'WGS72', + mode: 'improved', + states: [ + { minutes: 0, position: [34747.57932696245, 24502.371140788688, -1.3283298584398513], velocity: [-1.7316426619069176, 2.452772615436074, 0.6085100806921905] }, + { minutes: 120, position: [18263.334390938286, 38159.96004751461, 4186.1830408539145], velocity: [-2.7443966112441536, 1.2555832603978636, 0.5285589317647994] }, + { minutes: 240, position: [-3023.388407034285, 41783.1318645949, 7273.034129057532], velocity: [-3.0355747927351477, -0.27165654384893717, 0.3096452507184417] }, + { minutes: 360, position: [-23516.34391907246, 34424.42065671045, 8448.498676926707], velocity: [-2.5291204771903364, -1.7261860202129786, 0.009582303196372554] }, + { minutes: 480, position: [-37837.466995108894, 18028.397271699094, 7406.255402707602], velocity: [-1.3600695246096683, -2.7257946857914073, -0.29255534888976875] }, + { minutes: 600, position: [-42243.58460661285, -3093.728877740619, 4422.917118012296], velocity: [0.16311091889742854, -3.0099805979998684, -0.5175843617426902] }, + { minutes: 720, position: [-35597.57919549235, -23407.911453925095, 282.0955438334428], velocity: [1.6414052461178215, -2.5067736780909406, -0.6069634776031629] }, + { minutes: 840, position: [-19649.198344546243, -37606.1162386003, -3932.7152594832332], velocity: [2.6896470555786154, -1.3491500158032552, -0.5377106977158217] }, + { minutes: 960, position: [1431.3091215962936, -41982.04949668477, -7120.454670573138], velocity: [3.0352633526498134, 0.16088294523482838, -0.32799399367374066] }, + { minutes: 1080, position: [22136.97605384039, -35388.198237623306, -8447.623934008854], velocity: [2.5876248888703217, 1.630097135749593, -0.03234900433311923] }, + { minutes: 1200, position: [37050.157902187755, -19537.233214247248, -7564.834635429695], velocity: [1.4618444937293404, 2.674654255714774, 0.27220219065665885] }, + { minutes: 1320, position: [42253.8176094478, 1431.8186759285768, -4699.876211735922], velocity: [-0.04924733417179161, 3.019518960346359, 0.5058900579504234] }, + { minutes: 1440, position: [36366.59147395516, 22023.542457204567, -601.4712182108179], velocity: [-1.549681545806073, 2.5717889811569914, 0.6070574177353861] }, + { minutes: 1560, position: [20922.12287985301, 36826.33975980659, 3654.9112588635107], velocity: [-2.644070067530453, 1.447521215939871, 0.5487229830555002] }, + { minutes: 1680, position: [-23.772241823619343, 41945.5168840185, 6950.298917513772], velocity: [-3.043358385198813, -0.05741743997493661, 0.3461120940565564] }, + { minutes: 1800, position: [-20964.17821076101, 36039.06206171603, 8418.919849633032], velocity: [-2.6427952210884667, -1.5460998856954606, 0.052725851773766014] }, + { minutes: 1920, position: [-36401.63863056831, 20669.752861619007, 7677.197693592315], velocity: [-1.5494881544163066, -2.627052310288457, -0.25407965245109637] }, + { minutes: 2040, position: [-42298.30327543212, -119.03351117694396, 4922.963888414166], velocity: [-0.0522327679096743, -3.018152669338151, -0.49382733117732625] }, + { minutes: 2160, position: [-37125.623835111444, -20879.63058368395, 879.8697134837654], velocity: [1.4564998414475128, -2.6193584208335055, -0.6040816936098713] }, + { minutes: 2280, position: [-22250.123205528806, -36182.74736486836, -3393.153651825447], velocity: [2.583161225931337, -1.5366476283084345, -0.5564045550439227] }, + { minutes: 2400, position: [-1563.0625865374113, -42035.431791590134, -6780.021617603793], velocity: [3.0349175056770683, -0.05270204580917415, -0.36339565371862115] }, + { minutes: 2520, position: [19531.640695869806, -36905.65470955624, -8395.46892032495], velocity: [2.6936821993484634, 1.44607999902144, -0.07525605408713691] }, + { minutes: 2640, position: [35516.53506142424, -22123.719166378098, -7815.0451693498835], velocity: [1.6468821253943504, 2.5684160580223874, 0.23298591206390276] }, + { minutes: 2760, position: [42196.03535975625, -1547.3264675064652, -5187.394019814533], velocity: [0.16649184122078656, 3.019211548678764, 0.4806657802208948] }, + { minutes: 2880, position: [37802.253930451705, 19433.573300193653, -1198.6663422641748], velocity: [-1.3599305799540229, 2.6778309028265985, 0.6025074661403345] } + ] + }, + { + satellite: 16925, + line1: '1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486', + line2: '2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616', + gravity: 'WGS72', + mode: 'improved', + states: [ + { minutes: 0, position: [5559.116868358253, -11941.040907811333, -19.41235206185928], velocity: [3.3921167616331873, -1.9469851242334486, 4.250755852447807] }, + { minutes: 120, position: [12339.832737493969, -2771.144478711381, 18904.576034334408], velocity: [-0.8712476135168162, 2.6009176926796944, 0.5815600021765625] }, + { minutes: 240, position: [-3385.0021565847987, 7538.139557293111, 200.5900861598444], velocity: [-2.023512864987446, -4.261808344402785, -6.856385786921613] }, + { minutes: 360, position: [12805.224421995379, -10258.946671773894, 13780.164867382477], velocity: [0.6192792241561191, 1.8215105419137667, 2.507365975049825] }, + { minutes: 480, position: [5682.465563184483, 7199.3027047252635, 15437.671340695204], velocity: [-2.474365405657533, 2.0878973359077175, -2.5837674597812743] }, + { minutes: 600, position: [7628.942439817238, -12852.72097492142, 2902.872089812841], velocity: [2.748131081188148, -0.7400845792518662, 4.1253079432526905] }, + { minutes: 720, position: [11531.64866625005, -858.2754273594688, 19086.859937713863], velocity: [-1.1700719011918834, 2.6603119859560183, 0.09600570477341233] }, + { minutes: 840, position: [-3866.9806951547116, 2603.734427862783, -4577.364845770035], velocity: [1.1572572978843463, -8.453281163796328, -4.683959406932762] }, + { minutes: 960, position: [13054.777327212214, -8707.92757730362, 15537.6325990313], velocity: [0.22984674828622076, 2.119467054481752, 2.06339685203468] }, + { minutes: 1080, position: [3496.910646522209, 8712.839197782007, 12845.818383266025], velocity: [-2.7821849971067856, 1.5529506439642204, -3.55443613145953] }, + { minutes: 1200, position: [9593.074247289966, -13023.759636083078, 6250.464849314024], velocity: [2.072666375562909, 0.27873533350921975, 3.7781110731086014] }, + { minutes: 1320, position: [10284.79205084208, 1487.8991416877604, 18824.373813265138], velocity: [-1.5303350530601691, 2.663107729732388, -0.54220596600991] }, + { minutes: 1440, position: [-984.6203514640978, -5187.034808131807, -5745.595941442846], velocity: [4.340271916475475, -7.266811354071841, 1.7776688881758926] } + ] + }, + { + satellite: 20413, + line1: '1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041', + line2: '2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978', + gravity: 'WGS72', + mode: 'improved', + states: [ + { minutes: 1440, position: [-151669.05280514943, -5645.20454549569, -2198.5159211843747], velocity: [-0.8691828888193474, -0.8707598718530463, 0.1565082188287725] }, + { minutes: 1560, position: [-157497.7165749453, -11884.99595074187, -1061.4443940244116], velocity: [-0.7496579608381312, -0.8640167152925672, 0.1577661011569624] }, + { minutes: 1680, position: [-162498.3225557683, -18062.997331673236, 81.00915252769028], velocity: [-0.6389803775813591, -0.8536871051597105, 0.15809899154597878] }, + { minutes: 1800, position: [-166728.76010920107, -24155.996482989663, 1222.8412867687525], velocity: [-0.5356006870120515, -0.840455444432173, 0.15768085699012918] }, + { minutes: 1920, position: [-169935.8192459213, -31767.297879638154, 2749.0154034452235], velocity: [-0.43005043062494874, -0.8289041834267769, 0.15781234046679088] }, + { minutes: 2040, position: [-172703.07831815493, -37662.95639336069, 3883.6005257861775], velocity: [-0.338004891081813, -0.8102774874652262, 0.1560200348876178] }, + { minutes: 2160, position: [-174823.19337404336, -43417.55605219431, 5003.263128094578], velocity: [-0.25025862228372375, -0.7898286720210674, 0.15376490304718193] }, + { minutes: 2280, position: [-176324.63925774785, -49018.51958648401, 6104.850250015018], velocity: [-0.16613661268466495, -0.7677062623607793, 0.1510922423752986] }, + { minutes: 2400, position: [-177231.42142457538, -54454.1269949746, 7185.486616065783], velocity: [-0.08506785380970824, -0.7440015671475827, 0.1480334033218291] }, + { minutes: 2520, position: [-177563.73583231858, -59713.1485914353, 8242.484725914002], velocity: [-0.006561729659596287, -0.7187603090747633, 0.14460867603991964] }, + { minutes: 2640, position: [-177338.48026483096, -64784.54644697947, 9273.272200030578], velocity: [0.06980994561025962, -0.6919902383373704, 0.14082923623134075] }, + { minutes: 2760, position: [-176569.65151461042, -69657.21976255355, 10275.330634589536], velocity: [0.14442687824135053, -0.6636658757353582, 0.13669841925257506] }, + { minutes: 2880, position: [-175268.652990729, -74319.77625462702, 11246.141771595489], velocity: [0.21763136987487794, -0.6337310905950635, 0.13221249087596612] }, + { minutes: 3000, position: [-173444.53039609257, -78760.31560395798, 12183.137752118793], velocity: [0.289737324871396, -0.6020999289137476, 0.12736101701726446] }, + { minutes: 3120, position: [-171104.1481365313, -82966.21323590563, 13083.652783812367], velocity: [0.36103777946073096, -0.5686559032440447, 0.12212688853201414] }, + { minutes: 3240, position: [-168252.31543803078, -86923.893634334, 13944.873827157799], velocity: [0.4318113960749265, -0.5332497972119311, 0.11648602176883749] }, + { minutes: 3360, position: [-164891.86832887388, -90618.58225953748, 14763.787942470211], velocity: [0.5023282686523688, -0.49569589645757317, 0.11040672479847798] }, + { minutes: 3480, position: [-161023.71139824679, -94034.02398835169, 15537.123757290587], velocity: [0.5728553207495413, -0.45576641185879474, 0.10384868825302859] }, + { minutes: 3600, position: [-156646.82136725518, -97152.15370790788, 16261.2840930542], velocity: [0.6436615381408728, -0.4131836878364645, 0.09676152377564087] }, + { minutes: 3720, position: [-151758.212857374, -99952.70098346406, 16932.26607548358], velocity: [0.715023254298307, -0.3676095609687081, 0.08908272650297697] }, + { minutes: 3840, position: [-146352.86521283243, -102412.70506284205, 17545.563941580436], velocity: [0.7872296948625243, -0.3186309130390433, 0.08073487275969611] }, + { minutes: 3960, position: [-140423.60777444273, -104505.907997344, 18096.048070967383], velocity: [0.8605889788509332, -0.2657399872728733, 0.07162176779901147] }, + { minutes: 4080, position: [-133960.95961850855, -106201.98091317674, 18577.811219530595], velocity: [0.9354347581086556, -0.20830730675787865, 0.06162311047803939] }, + { minutes: 4200, position: [-126952.91860009612, -107465.51906185655, 18983.969031115397], velocity: [1.0121336283869822, -0.14554387831775328, 0.050587007006728975] }, + { minutes: 4320, position: [-119384.69396454151, -108254.71115371604, 19306.395818915535], velocity: [1.0910933132767804, -0.07644747853773119, 0.03831928160302773] } + ] + }, + { + satellite: 21897, + line1: '1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044', + line2: '2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880', + gravity: 'WGS72', + mode: 'improved', + states: [ + { minutes: 0, position: [-14464.721351821277, -4699.195175872756, 0.0668168570598298], velocity: [-3.2493120134996953, -3.281032706953405, 4.007046939611233] }, + { minutes: 120, position: [-19410.46286123426, -19143.033189685757, 23114.05522619462], velocity: [0.5086022367297448, -1.1568822692045662, 2.3799234547108754] }, + { minutes: 240, position: [-12686.061297078, -23853.753356451212, 35529.81733588021], velocity: [1.2316338288442372, -0.22171820216420907, 1.1184402908930178] }, + { minutes: 360, position: [-2775.466493588002, -22839.645741194403, 39494.646899670595], velocity: [1.468963404930806, 0.48948176875959454, -0.023972787798627826] }, + { minutes: 480, position: [7679.878835699064, -16780.507601060777, 34686.21815554868], velocity: [1.3641710804000236, 1.2111838965234794, -1.385151370860694] }, + { minutes: 600, position: [14552.400230282225, -4819.50121461156, 17154.70672449404], velocity: [0.10920159149580984, 2.1761244942710833, -3.8548568049022096] }, + { minutes: 720, position: [-15302.388453752867, -5556.434402997025, 1095.950887533264], velocity: [-2.838224312259005, -3.134231137480909, 3.9925963257834995] }, + { minutes: 840, position: [-19289.200667479636, -19427.04851118408, 23759.45685635551], velocity: [0.5524950869888946, -1.1124994373382155, 2.325112653903833] }, + { minutes: 960, position: [-12376.219764365207, -23893.38020017917, 35831.33691892171], velocity: [1.24670152871764, -0.1942940481168493, 1.0748672824578216] }, + { minutes: 1080, position: [-2400.5567766512545, -22698.622646401953, 39482.75964390039], velocity: [1.4725829218692752, 0.5135556538063095, -0.06930656058461528] }, + { minutes: 1200, position: [8031.668192520998, -16455.77592085221, 34298.943917416465], velocity: [1.3513574255276766, 1.2396332339983502, -1.4481953240325312] }, + { minutes: 1320, position: [14559.487803721593, -4238.4377381313325, 16079.231547044803], velocity: [-0.0264096554772324, 2.2189387703162278, -4.012628895726652] }, + { minutes: 1440, position: [-16036.049806598765, -6372.514064679628, 2183.448342317749], velocity: [-2.485113443019953, -2.9949943548346294, 3.9558912719575523] }, + { minutes: 1560, position: [-19156.715838143722, -19698.890599567367, 24389.29473933698], velocity: [0.5942781327432439, -1.0694185992512788, 2.271152044320401] }, + { minutes: 1680, position: [-12062.729255524664, -23925.823629114846, 36120.666806666675], velocity: [1.2612387975991588, -0.16720185586782302, 1.031478938785518] }, + { minutes: 1800, position: [-2024.9613696584129, -22551.566267031405, 39458.50085786629], velocity: [1.4758168893636383, 0.537615763761903, -0.11488747180338497] }, + { minutes: 1920, position: [8379.809162036252, -16123.958784592984, 33894.751232306895], velocity: [1.3374682539578462, 1.2684327828525872, -1.512473301061748] }, + { minutes: 2040, position: [14527.867488731154, -3646.3381712016385, 14960.74306517595], velocity: [-0.18003583947783833, 2.2612735149311884, -4.179355590359531] }, + { minutes: 2160, position: [-16680.121473345727, -7149.80800425072, 3257.6422720808764], velocity: [-2.178897351030138, -2.8639270948073063, 3.904876942822642] }, + { minutes: 2280, position: [-19013.587934484996, -19958.937660218122, 25003.817786661504], velocity: [0.6341004308334764, -1.027559822778901, 2.2180026848497882] }, + { minutes: 2400, position: [-11745.761558177279, -23951.19438626588, 36397.87676580943], velocity: [1.2752618125405786, -0.14042513247523708, 0.9882594409507818] }, + { minutes: 2520, position: [-1648.8194507018745, -22398.505945758017, 39421.832738900695], velocity: [1.4786601738783522, 0.5616715190740078, -0.1607330927066033] }, + { minutes: 2640, position: [8723.976527951983, -15784.99406274609, 33473.35215527161], velocity: [1.3224335929917832, 1.2976024967442759, -1.5780554925196708] }, + { minutes: 2760, position: [14452.255715870037, -3043.423326449499, 13796.848708052452], velocity: [-0.35519016934357744, 2.3024854432359123, -4.355767076879418] }, + { minutes: 2880, position: [-17246.31075678373, -7890.726015080816, 4315.394103066402], velocity: [-1.910968457682826, -2.7409456718464495, 3.844722725601155] } + ] + }, { satellite: 22312, line1: '1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953', line2: '2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783', gravity: 'WGS72', + mode: 'improved', states: [ { minutes: 54.2028672, position: [306.10478453210754, -5816.456555245726, -2979.5584606814045], velocity: [3.9506638545949513, 3.415332542536633, -5.879974328912515] }, { minutes: 74.2028672, position: [3282.8208546395886, 2077.469729049188, -5189.179887704459], velocity: [0.09734270093809777, 7.375135691836999, 2.9001967017804158] }, @@ -136,11 +387,240 @@ export const sgp4NearEarthReferences: SGP4Reference[] = [ ], error: { minutes: 494.2028672, code: 1 } }, + { + satellite: 22674, + line1: '1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569', + line2: '2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877', + gravity: 'WGS72', + mode: 'improved', + states: [ + { minutes: 0, position: [14712.220232803109, -1443.810618504991, 0.834978880114516], velocity: [4.418965470365916, 1.6295920975131526, 4.115531801734934] }, + { minutes: 120, position: [25418.88807860413, 9342.603079885586, 23611.466907976006], velocity: [0.05128408585237068, 1.2131273060218652, 2.429004158884197] }, + { minutes: 240, position: [21619.59550749385, 16125.249788643494, 36396.79365831335], velocity: [-0.9636043798930108, 0.685454965329681, 1.177181936797233] }, + { minutes: 360, position: [12721.505433307693, 19258.9619336186, 40898.47648358688], velocity: [-1.4574485646470174, 0.17995546892855238, 0.07150260130698788] }, + { minutes: 480, position: [1272.8076005384416, 18458.419718974645, 37044.74742696164], velocity: [-1.6748633855265245, -0.4364549830031155, -1.2010409902502128] }, + { minutes: 600, position: [-10058.431886194256, 11906.607644536716, 21739.620977332248], velocity: [-1.2458296826399722, -1.5437891254508258, -3.3244492207176606] }, + { minutes: 720, position: [10924.401164656265, -2571.9241416965874, -2956.348562940476], velocity: [6.071727751453417, 1.3495791019479895, 3.898430260132334] }, + { minutes: 840, position: [25332.148515246972, 8398.910999242898, 21783.906543567773], velocity: [0.2223207536624752, 1.2722143057453597, 2.580527192026089] }, + { minutes: 960, position: [22317.719260392376, 15574.820861288728, 35495.77144091758], velocity: [-0.8927500564006339, 0.7373833814582724, 1.2917388344470944] }, + { minutes: 1080, position: [13795.686758850497, 19088.83051008418, 40803.695843845264], velocity: [-1.4202776687183065, 0.23559945616109274, 0.18551705584020564] }, + { minutes: 1200, position: [2515.1714504871306, 18746.637762823026, 37864.58088636192], velocity: [-1.668016052818897, -0.3604314584858367, -1.0528545957011863] }, + { minutes: 1320, position: [-9084.486021062447, 12982.626086460938, 24045.63900249078], velocity: [-1.378032362869781, -1.3731847364692784, -3.013963835301616] }, + { minutes: 1440, position: [5647.0090949499, -3293.9051869275604, -5425.852350630718], velocity: [8.507977175552124, 0.4145607966601552, 2.543322805759877] }, + { minutes: 1560, position: [25111.633722104358, 7412.551094882572, 19844.25781728531], velocity: [0.4164962896993417, 1.3321060056554352, 2.739301737209329] }, + { minutes: 1680, position: [22961.474616412335, 14985.74459578207, 34511.09257380622], velocity: [-0.8167110480217976, 0.7893911075507384, 1.4079018042560745] }, + { minutes: 1800, position: [14841.1530145874, 18876.91439870025, 40626.259016194796], velocity: [-1.380403340808826, 0.29022880987517846, 0.29825812017635006] }, + { minutes: 1920, position: [3750.701740805293, 18978.579396976755, 38578.11783220163], velocity: [-1.6569394124493557, -0.28793088056786664, -0.9108255985566871] }, + { minutes: 2040, position: [-8027.3021948870955, 13939.544369546127, 26136.49045637333], velocity: [-1.4744760609198975, -1.222693623774223, -2.737178731433926] }, + { minutes: 2160, position: [-1296.9565709248898, -2813.693697683166, -5871.095872577287], velocity: [9.881929371106528, -1.9784672065465292, -1.9222610052761968] }, + { minutes: 2280, position: [24738.603648191463, 6383.416440188194, 17787.276319001616], velocity: [0.6395569516125494, 1.392554379179475, 2.9062063239254496] }, + { minutes: 2400, position: [23546.85388669459, 14358.156028320995, 33441.67679479401], velocity: [-0.7348950062910189, 0.8415648514603584, 1.5260099085205077] }, + { minutes: 2520, position: [15855.876963033483, 18624.05633581706, 40367.13420573924], velocity: [-1.3377535460673673, 0.34396952185824176, 0.41001847166799643] }, + { minutes: 2640, position: [4976.4493359058315, 19156.75504041906, 39189.686031839374], velocity: [-1.6420843645749226, -0.21852509596652112, -0.7741482036571966] }, + { minutes: 2760, position: [-6909.207462099701, 14790.447070422571, 28034.46732221535], velocity: [-1.5451526096132413, -1.0881195233559515, -2.4874472138154746] }, + { minutes: 2880, position: [-7331.650067069672, -604.17323418561, -2723.510145754235], velocity: [6.168997264936578, -3.634011554138297, -5.963531681634121] } + ] + }, + { + satellite: 23177, + line1: '1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95', + line2: '2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438', + gravity: 'WGS72', + mode: 'improved', + states: [ + { minutes: 0, position: [-8801.600467064889, -0.03357557345561054, -0.4452274264155939], velocity: [-3.83527910080223, -7.6625521754535315, 0.9445613231476472] }, + { minutes: 120, position: [-1684.3435285774497, -31555.951963395997, 3888.9994431940727], velocity: [2.023055718618875, -2.1513064054170887, 0.2650657784926365] }, + { minutes: 240, position: [12325.514101549183, -38982.15046244404, 4802.888322753921], velocity: [1.7632241571903948, -0.10251444618415352, 0.012397138511472153] }, + { minutes: 360, position: [22773.668319360993, -34348.02176606075, 4228.774073905702], velocity: [1.067616787250243, 1.3524278654813207, -0.16695636736184194] }, + { minutes: 480, position: [26194.404410885378, -19482.94203671774, 2393.847740627282], velocity: [-0.3137321856816558, 2.8087713280141617, -0.3462041182091391] }, + { minutes: 600, position: [8893.505734479766, 5763.388905608323, -713.6988416357077], velocity: [-7.037399220058836, 3.022613130967637, -0.3702724159315476] }, + { minutes: 720, position: [-6028.75686536632, -25648.999137864335, 3164.3710727385646], velocity: [1.8831592879273935, -3.1770519763760015, 0.390793162381584] }, + { minutes: 840, position: [8313.572990560448, -38146.45710922466, 4697.807775346948], velocity: [1.9050021333064022, -0.6258830744030516, 0.07609818669983556] }, + { minutes: 960, position: [20181.29108622158, -36842.60674072623, 4529.125682183861], velocity: [1.3262444759074654, 0.9219164865847189, -0.11452745519245171] }, + { minutes: 1080, position: [26302.617945688326, -25173.395394361596, 3084.653099861571], velocity: [0.24539883536353957, 2.329974346815825, -0.2874958796262099] }, + { minutes: 1200, position: [19365.070456015186, -2700.0049012179097, 317.42727416519006], velocity: [-3.009733018323536, 3.9024960579315637, -0.4789285820626847] }, + { minutes: 1320, position: [-9667.818787801129, -16930.191126420956, 2095.8746903424635], velocity: [1.279288285156503, -4.7360059053975005, 0.5828782553889733] }, + { minutes: 1440, position: [4021.3143858312105, -36066.09209609082, 4442.915874109432], velocity: [2.0073223541409306, -1.2274613757147639, 0.14938389668466814] } + ] + }, + { + satellite: 23333, + line1: '1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15', + line2: '2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70', + gravity: 'WGS72', + mode: 'improved', + states: [ + { minutes: 0, position: [-9301.245422923748, 3326.1020038246206, 2318.3644112694956], velocity: [-8.729303004901404, -0.8282250368769879, -0.12231482684801978] }, + { minutes: 120, position: [-44672.91239679687, -6213.119965811229, -1738.8013172702601], velocity: [-3.719475069901722, -1.3366730222656873, -0.6218882613836377] }, + { minutes: 240, position: [-67053.08885387583, -14994.696859461439, -5897.990727927197], velocity: [-2.8605766126129297, -1.1837715645131293, -0.5684739091465228] }, + { minutes: 360, position: [-85227.84253168126, -22897.084844705187, -9722.591845640745], velocity: [-2.426469823388366, -1.0785924754585365, -0.525341430667941] }, + { minutes: 480, position: [-100986.00419136188, -30171.196986949144, -13283.770447654284], velocity: [-2.1471089784356714, -1.0005308269211024, -0.49158758196785357] }, + { minutes: 600, position: [-115093.00686386523, -36962.56316477351, -16634.156829288873], velocity: [-1.945446187603335, -0.9389477360593328, -0.46419920182739577] }, + { minutes: 720, position: [-127965.8006489133, -43363.32967164511, -19809.90480432389], velocity: [-1.789652015920874, -0.8882784630767584, -0.44125446830390963] }, + { minutes: 840, position: [-139863.28332206752, -49436.45704153362, -22836.804381388465], velocity: [-1.663762568029161, -0.8453159125263304, -0.4215486272920681] }, + { minutes: 960, position: [-150960.2297825867, -55227.454138963585, -25734.014088790413], velocity: [-1.5587309864449175, -0.8080610648022991, -0.4042938457353464] }, + { minutes: 1080, position: [-161381.71414630424, -60770.640409026986, -28516.262900174657], velocity: [-1.4689771737789066, -0.7751904591525349, -0.3889518104933174] }, + { minutes: 1200, position: [-171221.187369472, -66092.76474441697, -31195.19847386886], velocity: [-1.3908375963314938, -0.7457856328565879, -0.3751403978619777] }, + { minutes: 1320, position: [-180550.82888745566, -71215.23290630039, -33780.249382699985], velocity: [-1.3217886715724894, -0.719184752335971, -0.36257949462944333] }, + { minutes: 1440, position: [-189427.8753307405, -76155.54943343581, -36279.19882816403], velocity: [-1.2600244730462882, -0.6948960527126237, -0.3510581325906777] }, + { minutes: 1560, position: [-197898.6940140858, -80928.29015180895, -38698.579724468946], velocity: [-1.204211888236009, -0.6725447088388535, -0.34041373052237756] }, + { minutes: 1600, position: [-200638.82986236076, -82484.14969881909, -39488.343314470425], velocity: [-1.1867484622465145, -0.6654724216178416, -0.3370375820763332] } + ] + }, + { + satellite: 23599, + line1: '1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905', + line2: '2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555', + gravity: 'WGS72', + mode: 'improved', + states: [ + { minutes: 0, position: [9892.63794340703, 35.761449690835626, -1.08228837647185], velocity: [3.556643236714638, 6.456009375101952, 0.7836108898499567] }, + { minutes: 20, position: [11931.956429973645, 7340.749737495857, 886.4636598693903], velocity: [0.30832911560751275, 5.532328972169434, 0.672887281317537] }, + { minutes: 40, position: [11321.710392047135, 13222.847491560493, 1602.4011904896834], velocity: [-1.1519739824132829, 4.285810871397459, 0.5219194250331425] }, + { minutes: 60, position: [9438.2939567525, 17688.05450260959, 2146.5929340189596], velocity: [-1.9079040543388932, 3.179955045944978, 0.3876924790871379] }, + { minutes: 80, position: [6872.086346385757, 20910.110168114526, 2539.7994503445243], velocity: [-2.323995366880974, 2.2073984617761413, 0.26950612107719296] }, + { minutes: 100, position: [3933.375097982906, 23024.076625416506, 2798.2596674620872], velocity: [-2.542860615828823, 1.327134965795017, 0.1624500761758299] }, + { minutes: 120, position: [816.6409154575417, 24118.986754746227, 2932.6945942752614], velocity: [-2.6268380101386333, 0.504502762546244, 0.06234430647518672] }, + { minutes: 140, position: [-2334.4170580378386, 24246.860963263534, 2949.3644884108467], velocity: [-2.602259645509793, -0.2880582655859941, -0.03414513473677229] }, + { minutes: 160, position: [-5394.317980388372, 23429.42716149262, 2850.868325859998], velocity: [-2.4744340680424863, -1.0740559821818862, -0.129868365901494] }, + { minutes: 180, position: [-8233.351302373516, 21661.244808834486, 2636.514561179789], velocity: [-2.230845532770437, -1.8757423438067296, -0.22752860340627504] }, + { minutes: 200, position: [-10693.964973476768, 18909.881688910864, 2302.3370754826606], velocity: [-1.8359124328783252, -2.7161698646675574, -0.32993188027618825] }, + { minutes: 220, position: [-12553.896699036062, 15114.63990715505, 1840.9357323075512], velocity: [-1.212478879277183, -3.6190369963869573, -0.43997063274315695] }, + { minutes: 240, position: [-13450.20591863997, 10190.57904288773, 1241.9595873594071], velocity: [-0.1890825111154663, -4.59670197137268, -0.5591738989435889] }, + { minutes: 260, position: [-12686.604371210457, 4079.311061608766, 498.2707861417442], velocity: [1.6644982112294369, -5.559889864636208, -0.6767477790003418] }, + { minutes: 280, position: [-8672.558677528492, -2827.5682331485036, -342.59644715588195], velocity: [5.515079851923037, -5.551222961582745, -0.676360044129405] }, + { minutes: 300, position: [1153.3149805972678, -6411.986920596424, -779.8728894122894], velocity: [9.689818101747566, 1.3885984250415007, 0.1678687983019866] }, + { minutes: 320, position: [9542.792010555235, -533.7125308064143, -65.73165427708575], velocity: [3.926947086559404, 6.459583538638782, 0.7856867546234342] }, + { minutes: 340, position: [11868.809601004623, 6861.595908475066, 833.7278060176073], velocity: [0.4529578524427234, 5.632811327978673, 0.685262322665407] }, + { minutes: 360, position: [11376.239416781196, 12858.971213660569, 1563.4066017214807], velocity: [-1.0876656948619055, 4.374693346994409, 0.5322070510627634] }, + { minutes: 380, position: [9547.703007819211, 17421.48570758257, 2118.569075147385], velocity: [-1.8765402624166485, 3.2538917275844637, 0.3958102433992447] }, + { minutes: 400, position: [7008.514702632774, 20725.474712268377, 2520.560642887537], velocity: [-2.3087035988907627, 2.270724438391433, 0.2761386128135489] }, + { minutes: 420, position: [4082.281351035958, 22911.041846007545, 2786.375683089695], velocity: [-2.5366655463055987, 1.3836702317852068, 0.1681534071317765] }, + { minutes: 440, position: [969.1797814898695, 24071.236736759107, 2927.313265790261], velocity: [-2.626695114733264, 0.5571724275943136, 0.06753685382055982] }, + { minutes: 460, position: [-2184.715154439338, 24261.216716011655, 2950.081428247424], velocity: [-2.607072865953605, -0.2368876072255642, -0.029125214588801032] }, + { minutes: 480, position: [-5253.422233696389, 23505.37595671459, 2857.6612073762813], velocity: [-2.4844245441132426, -1.0222554359213278, -0.12471444357555045] }, + { minutes: 500, position: [-8108.2796101680315, 21800.816883878906, 2649.729819608716], velocity: [-2.247597250990764, -1.8211591762939874, -0.2219256237508715] }, + { minutes: 520, position: [-10594.777955562944, 19117.807792206488, 2322.721369788083], velocity: [-1.8631184839417483, -2.6564266680620356, -0.32352150226940324] }, + { minutes: 540, position: [-12497.32045994648, 15398.64085906206, 1869.6998389702778], velocity: [-1.2581307628012406, -3.5515833677569013, -0.4323388881599274] }, + { minutes: 560, position: [-13467.924752454439, 10560.901477849267, 1280.7839918074983], velocity: [-0.2718705231552552, -4.520514224198406, -0.5500160921192225] }, + { minutes: 580, position: [-12848.188435902282, 4541.219018423424, 548.5382642655474], velocity: [1.4941571564786391, -5.489585383675114, -0.6674720394473205] }, + { minutes: 600, position: [-9152.70552727986, -2344.2495014370206, -287.9812196960209], velocity: [5.127921094863555, -5.6503830247094555, -0.6859890076155662] }, + { minutes: 620, position: [280.38490908602853, -6500.102640176027, -790.3609298376886], velocity: [9.779619613582362, 0.5818158109181285, 0.0741713449604852] }, + { minutes: 640, position: [9166.257843150344, -1093.1255265066402, -129.49428887325845], velocity: [4.316668714234465, 6.4386364940175564, 0.7851166087727517] }, + { minutes: 660, position: [11794.489429154773, 6382.211383537175, 780.8843901485627], velocity: [0.6044124532697952, 5.731729369262005, 0.6975743326882488] }, + { minutes: 680, position: [11424.301383237633, 12494.260888639043, 1524.3316548756925], velocity: [-1.0213280751420974, 4.46344896758758, 0.5425326979667778] }, + { minutes: 700, position: [9652.098673499639, 17153.847620751916, 2090.480383359702], velocity: [-1.844516637081217, 3.3275222350099685, 0.4039152320429696] }, + { minutes: 720, position: [7140.419458836718, 20539.254853364964, 2501.2146936783442], velocity: [-2.2931736838689294, 2.3335079118614868, 0.28271631079728743] } + ] + }, + { + satellite: 24208, + line1: '1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600', + line2: '2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119', + gravity: 'WGS72', + mode: 'improved', + states: [ + { minutes: 0, position: [7534.109871894028, 41266.392668428496, -0.10801028479619115], velocity: [-3.0271680083581445, 0.5588489961594965, 0.20798275547192985] }, + { minutes: 120, position: [-14289.199404136703, 39469.05530050804, 1428.6283859143969], velocity: [-2.893205245165581, -1.0454478404046643, 0.179634249487693] }, + { minutes: 240, position: [-32222.920149546935, 26916.254257987555, 2468.599965935392], velocity: [-1.973007929055025, -2.3593350708675453, 0.10253937637570135] }, + { minutes: 360, position: [-41413.95109397987, 7055.516566391827, 2838.9090667122305], velocity: [-0.5216650801119171, -3.0291722067380387, -0.0020668433609719325] }, + { minutes: 480, position: [-39402.722518960974, -14716.424752230556, 2441.3267835759666], velocity: [1.0669281870544143, -2.878714619432834, -0.10586572903724459] }, + { minutes: 600, position: [-26751.088898279988, -32515.139824306316, 1384.388655701571], velocity: [2.366228869376559, -1.9510327993135177, -0.18101849788876834] }, + { minutes: 720, position: [-6874.779755422544, -41530.383294221836, -46.60245459036223], velocity: [3.0274150869698113, -0.49467117683572126, -0.20733725964086558] }, + { minutes: 840, position: [14859.520390419168, -39302.58907246797, -1465.0248252409717], velocity: [2.869609883140148, 1.1001239686054958, -0.17751442491445468] }, + { minutes: 960, position: [32553.148637696395, -26398.884018072287, -2485.4586600246266], velocity: [1.9300644591040632, 2.4015745392783603, -0.09925051981727931] }, + { minutes: 1080, position: [41365.67576837356, -6298.09965810667, -2828.052540328863], velocity: [0.45974127613823546, 3.0516802139089765, 0.006431871844820129] }, + { minutes: 1200, position: [38858.832950704396, 15523.39314923751, -2396.8685075159297], velocity: [-1.1402114879473026, 2.8675671431008247, 0.11063721706464946] }, + { minutes: 1320, position: [25701.46068162417, 33089.426176484216, -1308.685566378151], velocity: [-2.4287138212713213, 1.8973814310970063, 0.18460590744479388] }, + { minutes: 1440, position: [5501.081370995565, 41590.27784405377, 138.32522929720142], velocity: [-3.050691874469434, 0.4092030519612755, 0.2079581327854744] } + ] + }, + { + satellite: 25954, + line1: '1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847', + line2: '2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615', + gravity: 'WGS72', + mode: 'improved', + states: [ + { minutes: -1440, position: [8118.185192209676, -41368.40537377723, 4.110466873303065], velocity: [3.0176967405173363, 0.5919942965820967, 0.0009330158220801537] }, + { minutes: -1320, position: [27766.340153275843, -31724.970005568593, 9.932978462843531], velocity: [2.314236153116698, 2.0249031926704353, 0.0006608611838849819] }, + { minutes: -1200, position: [39932.572379731326, -13532.600404536564, 13.12958252291804], velocity: [0.9873828187443052, 2.9119428434009076, 0.0002132980788857027] }, + { minutes: -1080, position: [41341.013654409966, 8305.716819547648, 12.849885011519165], velocity: [-0.6050982241921166, 3.014378268381519, -0.0002910335896563028] }, + { minutes: -960, position: [31614.99210557961, 27907.29155353014, 9.166187966821079], velocity: [-2.0342435234524503, 2.3050141016557584, -0.0007184181760692913] }, + { minutes: -840, position: [13375.752275869576, 39994.270176508246, 3.054168543211513], velocity: [-2.9154243655759764, 0.9751198736626701, -0.0009555764871799567] }, + { minutes: -720, position: [-8464.899633090887, 41312.935498921135, -3.8662291910793884], velocity: [-3.011600615036147, -0.6172750497400185, -0.0009396644554173615] }, + { minutes: -600, position: [-28026.23406157561, 31507.89995661059, -9.760478685419693], velocity: [-2.2968401597310293, -2.0436075952499544, -0.0006748885938977843] }, + { minutes: -480, position: [-40040.01314363215, 13218.005794127705, -13.065948318147925], velocity: [-0.9633287718859145, -2.919827982596884, -0.00023141371803013077] }, + { minutes: -360, position: [-41268.432919757994, -8632.06859692734, -12.906612664159834], velocity: [0.630042315313116, -3.0096773759437063, 0.0002731633096662882] }, + { minutes: -240, position: [-31377.853170146147, -28156.139703335302, -9.32605529552014], velocity: [2.054021716822185, -2.2885541584016726, 0.0007049590249211153] }, + { minutes: -120, position: [-13031.415526876412, -40092.33381029366, -3.2763666002686986], velocity: [2.924657466184817, -0.950541166518316, 0.0009493811931622964] }, + { minutes: 0, position: [8827.156604720612, -41223.00971237346, 3.634829628581691], velocity: [3.00708731851863, 0.6437013231314678, 0.000941663000009281] }, + { minutes: 120, position: [28306.85426673856, -31243.801473942593, 9.572168911754423], velocity: [2.2791377430949784, 2.064316875308678, 0.0006841271481731722] }, + { minutes: 240, position: [40159.0512880496, -12845.39151157112, 12.960863159224479], velocity: [0.9372654224940079, 2.928448287382574, 0.0002455046084950365] }, + { minutes: 360, position: [41192.55903454768, 9013.79606759118, 12.904956655054955], velocity: [-0.656727442469494, 3.0035434579261495, -0.00025747946704821864] }, + { minutes: 480, position: [31131.697557984844, 28445.556817311972, 9.424192384592919], velocity: [-2.0734848417529976, 2.2697708507038037, -0.0006912330785484947] }, + { minutes: 600, position: [12687.818465303262, 40217.83324638993, 3.4472624908269025], velocity: [-2.9317218270584156, 0.9249622300916039, -0.0009407662752300978] }, + { minutes: 720, position: [-9172.235002450701, 41161.634755272586, -3.435757567743934], velocity: [-3.0005714862895276, -0.6688475083904888, -0.000940101029181425] }, + { minutes: 840, position: [-28562.51093192286, 31022.459875865712, -9.395621609153403], velocity: [-2.261449201877106, -2.082713896672568, -0.0006896686839856594] }, + { minutes: 960, position: [-40260.775045488626, 12529.114843441545, -12.84915105396641], velocity: [-0.9130970307116049, -2.9359335283734826, -0.0002561807220466587] }, + { minutes: 1080, position: [-41114.143765378154, -9338.871944829201, -12.879524035545657], velocity: [0.6815888153115853, -2.9984325645353387, 0.00024500552309290766] }, + { minutes: 1200, position: [-30890.015122404133, -28690.40750792172, -9.480372120171932], velocity: [2.0929898048457476, -2.252978151538102, 0.00068045919207898] }, + { minutes: 1320, position: [-12341.461940203213, -40310.06316385675, -3.5583320100695808], velocity: [2.940537098401987, -0.9002195229491661, 0.000934170056398609] }, + { minutes: 1440, position: [9533.277508183817, -41065.52390213631, 3.3075648210731146], velocity: [2.9955961712664165, 0.695200236263894, 0.0009385247868215418] } + ] + }, + { + satellite: 26900, + line1: '1 26900U 01039A 06106.74503247 .00000045 00000-0 10000-3 0 8290', + line2: '2 26900 0.0164 266.5378 0003319 86.1794 182.2590 1.00273847 16981', + gravity: 'WGS72', + mode: 'improved', + states: [ + { minutes: 9300, position: [40968.68133297857, -9905.991560862201, 11.849468371343804], velocity: [0.7227568481245952, 2.9896453890452976, -0.00016126106924431503] }, + { minutes: 9360, position: [42135.6685848132, 1072.9919561812903, 10.83481752323441], velocity: [-0.07815060209713662, 3.0747724554097235, -0.000380062973352152] }, + { minutes: 9400, position: [41304.75156132466, 8398.27742943802, 9.74006213748659], velocity: [-0.6125151346765617, 3.0141174693058668, -0.0005115749080505014] } + ] + }, + { + satellite: 26975, + line1: '1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809', + line2: '2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521', + gravity: 'WGS72', + mode: 'improved', + states: [ + { minutes: 0, position: [-14506.923137678466, -21613.560432813923, 10.050188936067588], velocity: [2.212943308118924, 1.1599708917042248, 3.0206002019524654] }, + { minutes: 120, position: [7309.621979504589, 6076.007136635804, 6800.087052633042], velocity: [1.3005433828273991, 5.322579614806251, -4.788746312452766] }, + { minutes: 240, position: [-3882.6293379073045, 11960.0054345219, -25088.143838453867], velocity: [-2.146773699437484, -1.3724614914507411, -2.579382089498786] }, + { minutes: 360, position: [-16785.455074645273, -734.7915970418146, -34300.570858525556], velocity: [-1.3865281245368524, -1.9077626407176993, -0.22094964054350585] }, + { minutes: 480, position: [-23524.166893562404, -13629.451246223642, -30246.27899199919], velocity: [-0.46284678387276257, -1.5861398295141382, 1.2692936240143893] }, + { minutes: 600, position: [-22890.235970924256, -22209.359001553665, -16769.919461158806], velocity: [0.7043513419347621, -0.671112594452277, 2.4324338513303427] }, + { minutes: 720, position: [-11646.396989803785, -19855.442221061163, 3574.0010960732448], velocity: [2.626712727480186, 1.8158873289212123, 2.9608839010543817] }, + { minutes: 840, position: [7665.761242414891, 11159.789465766233, 345.9381311655257], velocity: [-0.5848180068326826, 3.1935141614957256, -5.75033892230079] }, + { minutes: 960, position: [-6369.353881120479, 10204.800730221163, -27844.521503844055], velocity: [-2.0505732761374453, -1.5829405424313086, -2.076075231976307] }, + { minutes: 1080, position: [-18345.647631447486, -2977.7668443006987, -34394.90760612127], velocity: [-1.2435898642980687, -1.8920507566774907, 0.060372061137260936] }, + { minutes: 1200, position: [-23979.748392550566, -15436.441395705146, -28616.505402182283], velocity: [-0.2949734249687473, -1.4829879163906594, 1.4782556283640031] }, + { minutes: 1320, position: [-21921.971678800506, -22852.451476579092, -13784.853084846007], velocity: [0.9454556285701848, -0.42894099483040876, 2.5969643779263376] }, + { minutes: 1440, position: [-8266.438210306746, -17210.745901122093, 6967.955460702063], velocity: [3.0822440687444357, 2.6658818715642756, 2.71255507527108] }, + { minutes: 1560, position: [6286.854645346137, 13809.563289709762, -6321.6066378107835], velocity: [-1.6159640162203495, 1.3831353768136632, -5.358719131847865] }, + { minutes: 1680, position: [-8730.875267877333, 8244.633443645394, -30039.923727913796], velocity: [-1.9356228705591003, -1.724162071955591, -1.6312247375293216] }, + { minutes: 1800, position: [-19735.81883248868, -5191.765930066316, -34166.149741427944], velocity: [-1.0978355296896176, -1.8601484182395929, 0.3244010498336997] }, + { minutes: 1920, position: [-24232.738477033196, -17112.082432552554, -26742.888932523387], velocity: [-0.11978618358248759, -1.364365316967607, 1.680220467575568] }, + { minutes: 2040, position: [-20654.456407081503, -23184.54386046638, -10611.55144716456], velocity: [1.209238112654351, -0.1441696392120103, 2.7480549381277446] }, + { minutes: 2160, position: [-4337.159889565858, -13410.468172440844, 9870.459492154714], velocity: [3.5327530945394967, 3.77223646138873, 2.0884242467402143] }, + { minutes: 2280, position: [4074.622635231861, 14698.07548284875, -12248.6532797288], velocity: [-2.053824693037559, 0.2033258168448854, -4.607867717999582] }, + { minutes: 2400, position: [-10950.234389840298, 6148.668794466934, -31736.655328650577], velocity: [-1.8098756051153368, -1.8161790617568268, -1.2333649130358082] }, + { minutes: 2520, position: [-20952.407020447445, -7358.715078948835, -33633.06643074494], velocity: [-0.948973030893199, -1.8135941372206412, 0.5738930782393835] }, + { minutes: 2640, position: [-24273.489441335558, -18637.155469062818, -24633.277023895367], velocity: [0.06416143974375234, -1.2285375595489598, 1.8757289346091737] }, + { minutes: 2760, position: [-19057.55468077199, -23148.29322081832, -7269.386141783819], velocity: [1.5008028085754137, 0.195383037076436, 2.8790312369964957] }, + { minutes: 2880, position: [43.69305307820237, -8145.902992072705, 11634.570799133031], velocity: [3.7806616824272283, 5.105315423409593, 0.7144013445773814] } + ] + }, { satellite: 28057, line1: '1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836', line2: '2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550', gravity: 'WGS72', + mode: 'improved', states: [ { minutes: 0, position: [-2715.282374856451, -6619.264368890808, -0.013414430179686425], velocity: [-1.008587273274863, 0.4227820027829844, 7.385272941602004] }, { minutes: 120, position: [-1816.8792094194175, -1835.7876213217032, 6661.079264647466], velocity: [2.325140070633625, 6.655669328663988, 2.4633945115760296] }, @@ -169,11 +649,34 @@ export const sgp4NearEarthReferences: SGP4Reference[] = [ { minutes: 2880, position: [1788.4233458037966, 1990.5053095696403, -6640.593377252101], velocity: [-2.07416909063938, -6.683381288034106, -2.562777775601973] } ] }, + { + satellite: 28129, + line1: '1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459', + line2: '2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443', + gravity: 'WGS72', + mode: 'improved', + states: [ + { minutes: 0, position: [21707.464123512305, -15318.617523902065, 0.13551152263961733], velocity: [1.3040292142524306, 1.8169049742450583, 3.161919976217288] }, + { minutes: 120, position: [18616.759718609814, 3166.151770434849, 18833.41523210213], velocity: [-2.0761220162101224, 2.8384575750040693, 1.586210534951022] }, + { minutes: 240, position: [-3006.5059632845837, 18522.20742011173, 18941.8407815427], velocity: [-3.3754527893844624, 1.0326807725857046, -1.5593245343082542] }, + { minutes: 360, position: [-21607.020869573957, 15432.59962630493, 206.62470309371054], velocity: [-1.3060498510466279, -1.8170115682234462, -3.1637250184006698] }, + { minutes: 480, position: [-18453.061345493355, -3150.8325613353504, -18685.83030935807], velocity: [2.1060179252958418, -2.8602363365344123, -1.586151870246754] }, + { minutes: 600, position: [3425.117423839182, -18514.73232705787, -18588.67200557408], velocity: [3.394666339720349, -1.0030720299496556, 1.6100612946725388] }, + { minutes: 720, position: [21858.238381485004, -15101.516615538854, 387.34517048078334], velocity: [1.2479739674265722, 1.856017402746982, 3.1614399476117128] }, + { minutes: 840, position: [18360.699357955567, 3506.552567622204, 19024.816789787783], velocity: [-2.1226841838987336, 2.8306186046990436, 1.5375106768099005] }, + { minutes: 960, position: [-3412.847654089871, 18646.85269710399, 18748.003599865013], velocity: [-3.366815727594507, 0.9860399215987231, -1.6078749716718503] }, + { minutes: 1080, position: [-21758.08331585783, 15215.448294778178, -180.82181406308948], velocity: [-1.2501446797054587, -1.8564904484609588, -3.163774870236351] }, + { minutes: 1200, position: [-18193.412902842458, -3493.858769121195, -18877.147577166284], velocity: [2.153326942358244, -2.8522212641866242, -1.5366177601639448] }, + { minutes: 1320, position: [3833.5738684767125, -18635.770267106655, -18388.68722885499], velocity: [3.3847481790255975, -0.9553638407243827, 1.6587850203675762] }, + { minutes: 1440, position: [22002.20074561958, -14879.725955925045, 774.3282709903445], velocity: [1.1915736192897082, 1.8945611646537808, 3.159953047018602] } + ] + }, { satellite: 28350, line1: '1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894', line2: '2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490', gravity: 'WGS72', + mode: 'improved', states: [ { minutes: 0, position: [6333.081231282308, -1580.8285232593505, 90.69355720387874], velocity: [0.7146344234421929, 3.224246549563264, 7.08312813228868] }, { minutes: 120, position: [-3990.9384585453995, 3052.983419071396, 4155.327006289535], velocity: [-5.909006188027874, -0.8763079661833709, -5.039131403570853] }, @@ -191,11 +694,56 @@ export const sgp4NearEarthReferences: SGP4Reference[] = [ ], error: { minutes: 1560, code: 1 } }, + { + satellite: 28623, + line1: '1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000', + line2: '2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753', + gravity: 'WGS72', + mode: 'improved', + states: [ + { minutes: 0, position: [-11665.709023240015, 24943.614333573903, 25.805436332050913], velocity: [-1.596228621449049, -1.476127961211442, 1.1260597536482997] }, + { minutes: 120, position: [-11645.354549499305, 979.3766835596169, 5517.895000578312], velocity: [3.4077435016604576, -5.18309498816905, -0.4929832772234836] }, + { minutes: 240, position: [5619.192522736523, 19651.44862280095, -7261.384967646744], velocity: [-2.0136342128491385, 3.10684286087766, 0.28423551650960505] }, + { minutes: 360, position: [-9708.686297137254, 26306.145531485705, -1204.2947885565452], velocity: [-1.8241642897488746, -0.9319095958560638, 1.1134190518429605] }, + { minutes: 480, position: [-14394.031628919765, 6659.30765073755, 5593.383458578651], velocity: [1.5565229113936665, -4.681657613692803, 0.29691224763804164] }, + { minutes: 600, position: [7712.094762696737, 15565.726274341929, -7342.404655712407], velocity: [-1.646800363991629, 4.070313571346407, -0.10948308094885628] }, + { minutes: 720, position: [-7558.367396028532, 27035.113679618, -2385.1205418402], velocity: [-1.9995837912472214, -0.39340928299648414, 1.0780935145138635] }, + { minutes: 840, position: [-15495.618622199487, 11550.158978282438, 5053.8317812138475], velocity: [0.4692773362912301, -4.029761073284926, 0.6790547422118354] }, + { minutes: 960, position: [9167.025682224461, 10363.652042103178, -6871.525760422533], velocity: [-0.8816210273001667, 5.223361510352799, -0.7406962968990206] }, + { minutes: 1080, position: [-5275.802720938345, 27151.784860083557, -3494.506872161179], velocity: [-2.1296093878107913, 0.15019648044883507, 1.0210380886029518] }, + { minutes: 1200, position: [-15601.376561448065, 15641.293798501978, 4217.032668495932], velocity: [-0.24918312331726264, -3.4052385570305326, 0.8882145034422542] }, + { minutes: 1320, position: [9301.058722996615, 3883.1526557380694, -5477.864770168068], velocity: [0.8714478212337312, 6.493677330816863, -1.885545281704109] }, + { minutes: 1440, position: [-2914.3106582841833, 26665.203927584193, -4511.098143349013], velocity: [-2.2162619088275712, 0.7100677692327508, 0.9406918236661463] } + ] + }, + { + satellite: 28626, + line1: '1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190', + line2: '2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891', + gravity: 'WGS72', + mode: 'improved', + states: [ + { minutes: 0, position: [42080.71852212606, -2646.863874356508, 0.8185129391350228], velocity: [0.19310517736659427, 3.0686882505727104, 0.0004384494314865793] }, + { minutes: 120, position: [37740.00085593191, 18802.768728017705, 3.4551258373015865], velocity: [-1.3710352059678461, 2.752105932104144, 0.00033688282389201157] }, + { minutes: 240, position: [23232.82515008066, 35187.339818019085, 4.989274276438437], velocity: [-2.565776620124763, 1.6941931318509758, 0.00016336535444870753] }, + { minutes: 360, position: [2467.4429017790267, 42093.609099585454, 5.1506298695936765], velocity: [-3.0693418000527646, 0.17997627625130921, -3.1738877320548607e-05] }, + { minutes: 480, position: [-18962.590529913065, 37661.66243818902, 4.044332575236894], velocity: [-2.746151981754457, -1.3826757774658867, -0.00019763313262761073] }, + { minutes: 600, position: [-35285.00095313196, 23085.444027781326, 2.087118800595316], velocity: [-1.6832779075541122, -2.5728936250178736, -0.0002962820474674081] }, + { minutes: 720, position: [-42103.20138132459, 2291.0622889298493, -0.13274963506588708], velocity: [-0.16697481648873227, -3.0701045602666017, -0.0003110070365042613] }, + { minutes: 840, position: [-37580.31858369689, -19120.40485692826, -2.0275570161623246], velocity: [1.3943678477908217, -2.740341611982484, -0.00024859074029622734] }, + { minutes: 960, position: [-22934.207618760345, -35381.238708055076, -3.1649593208210622], velocity: [2.5801675394754655, -1.672360950533771, -0.00013490721042183648] }, + { minutes: 1080, position: [-2109.903323894611, -42110.715081984956, -3.3650788918054757], velocity: [3.070935368803136, -0.15380839036268237, -5.854950569640598e-06] }, + { minutes: 1200, position: [19282.777747276905, -37495.59250597539, -2.718614618435784], velocity: [2.73440052435863, 1.4062209330680033, 0.00010348610812336212] }, + { minutes: 1320, position: [35480.6099059996, -22779.03375285161, -1.5284185891310023], velocity: [1.6612106759618321, 2.5874145931375034, 0.00016829975154806356] }, + { minutes: 1440, position: [42119.96263498593, -1925.7756726299176, -0.19827433154272642], velocity: [0.14052120636715826, 3.0715416134674323, 0.0001795611668155159] } + ] + }, { satellite: 28872, line1: '1 28872U 05037B 05333.02012661 .25992681 00000-0 24476-3 0 1534', line2: '2 28872 96.4736 157.9986 0303955 244.0492 110.6523 16.46015938 10708', gravity: 'WGS72', + mode: 'improved', states: [ { minutes: 0, position: [-6131.827304557578, 2446.5281552811302, -253.64211033478088], velocity: [-0.14492022756089892, 0.9951009627968789, 7.658645066821606] }, { minutes: 5, position: [-5799.242561335917, 2589.1481111876355, 2011.5451509955988], velocity: [2.3252073643678517, -0.04712567240988647, 7.296234070991355] }, @@ -216,6 +764,7 @@ export const sgp4NearEarthReferences: SGP4Reference[] = [ line1: '1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718', line2: '2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828', gravity: 'WGS72', + mode: 'improved', states: [ { minutes: 0, position: [423.99295523853493, -6658.122561487883, 136.13040356370743], velocity: [1.0063736128804568, 0.21730998326153186, 7.6625878922395625] }, { minutes: 20, position: [931.8088358699861, -1017.178522392653, 6529.192445267757], velocity: [-0.2988479182834455, 7.613891977074904, 1.2263994803688032] }, @@ -247,6 +796,7 @@ export const sgp4NearEarthReferences: SGP4Reference[] = [ line1: '1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101', line2: '2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061', gravity: 'WGS72', + mode: 'improved', states: [ { minutes: 0, position: [-5566.595128191503, -3789.759911585479, 67.6038224526737], velocity: [2.8737593669482417, -3.8253405226616213, 6.023253925536158] }, { minutes: 120, position: [4474.279154953501, -1447.7228614161045, 4619.839272345221], velocity: [4.712595821979766, 5.668306152772172, -2.701606741038794] }, @@ -268,6 +818,7 @@ export const sgp4NearEarthReferences: SGP4Reference[] = [ line1: '1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87', line2: '2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058', gravity: 'WGS72', + mode: 'improved', states: [ { minutes: 0, position: [2328.969752620943, -5995.220513378918, 1719.9729719163176], velocity: [2.912073281253137, -0.9834179557957405, -7.0908162100620356] }, { minutes: 120, position: [1020.6923455765659, 2286.5626063423774, -6191.555659269564], velocity: [-3.7465439022343627, 6.467532720712933, 1.8279856781429002] }, @@ -284,11 +835,460 @@ export const sgp4NearEarthReferences: SGP4Reference[] = [ { minutes: 1440, position: [2742.553988316696, -6079.6700912285605, -326.3901264920671], velocity: [1.948497651477911, 1.211072678443041, -7.356193131277518] } ] }, + { + satellite: 33333, + line1: '1 33333U 05037B 05333.02012661 .25992681 00000-0 24476-3 0 153', + line2: '2 33333 96.4736 157.9986 9950000 244.0492 110.6523 4.00004038 1070', + gravity: 'WGS72', + mode: 'improved', + states: [ + { minutes: 0, position: [-12908.671358696885, 8084.564643779425, 22887.749600082796], velocity: [-0.0769819790317014, 0.252652062297988, 1.8373563575382705] }, + { minutes: 5, position: [836.3619855823454, 3131.2186183045874, 27739.125005945134], velocity: [0.8069690921244929, -0.3036133568942342, 1.4955810595607744] }, + { minutes: 10, position: [12529.16240012275, -7305.76672565656, 24606.258824631663], velocity: [1.077046921358033, -0.832176467472062, 0.7348443933000028] }, + { minutes: 15, position: [17680.277817372553, -19040.502742724104, 13889.53302170955], velocity: [0.8388504924016491, -1.0108970500601653, 0.01984576368985621] }, + { minutes: 20, position: [23876.969554768268, -37275.65263892544, -8113.951044729392], velocity: [0.5891081300318982, -0.7677684184625545, -0.260379679151655] } + ], + error: { minutes: 25, code: 4 } + }, + { + satellite: 33334, + line1: '1 33334U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 680', + line2: '2 33334 68.4714 236.1303 5602877 123.7484 302.5767 0.00001000 6752', + gravity: 'WGS72', + mode: 'improved', + states: [ + ], + error: { minutes: 0, code: 3 } + }, + { + satellite: 33335, + line1: '1 33335U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 219', + line2: '2 33335 0.0019 286.9433 0000004 13.7918 55.6504 1.00270176 489', + gravity: 'WGS72', + mode: 'improved', + states: [ + { minutes: 0, position: [42081.343860812354, -2649.184878746374, 0.8182031513674219], velocity: [0.19318451835831515, 3.068627007390095, 0.0004384430345988912] }, + { minutes: 20, position: [42151.86113568161, 1038.5649752090164, 1.3118363814063794], velocity: [-0.07573091527491548, 3.0737688970727297, 0.00042829975411760846] }, + { minutes: 40, position: [41899.82539500801, 4718.367524903343, 1.7878602824137682], velocity: [-0.344066763733265, 3.055389800377552, 0.0004152335601657469] }, + { minutes: 60, position: [41327.16536793057, 8362.064323790843, 2.243061942624927], velocity: [-0.609769675198975, 3.0136303722599957, 0.0003993885739115548] }, + { minutes: 80, position: [40438.26325400855, 11941.773232009742, 2.6744359822266226], velocity: [-0.8708064480826812, 2.9488101781910756, 0.0003809274115354279] }, + { minutes: 100, position: [39239.92118668795, 15430.101775308154, 3.079204198152456], velocity: [-1.1251795894737127, 2.861425248363097, 0.0003600296613199229] }, + { minutes: 120, position: [37741.30917900916, 18800.356756437915, 3.454833169722847], velocity: [-1.370942600269923, 2.7521442815515957, 0.0003368902524455719] }, + { minutes: 140, position: [35953.894949970156, 22026.748515039875, 3.7990497165015213], velocity: [-1.6062148700227026, 2.6218035276942286, 0.00031171772968862645] }, + { minutes: 160, position: [33891.35616861222, 25084.5882730012, 4.1098541179915244], velocity: [-1.829196067520802, 2.471400388358037, 0.0002847324487692064] }, + { minutes: 180, position: [31569.47578743464, 27950.47705519355, 4.385531023533882], velocity: [-2.0381799169975205, 2.3020857840770144, 0.00025616470752764825] }, + { minutes: 200, position: [29006.02126614165, 30602.48473998238, 4.624657999848107], velocity: [-2.2315672545491556, 2.115155346977149, 0.0002262528284112358] }, + { minutes: 220, position: [26220.608609991377, 33020.31786943651, 4.826111682910186], velocity: [-2.4078782648621324, 1.9120395060942161, 0.00019524120793195358] }, + { minutes: 240, position: [23234.552263208116, 35185.47493519188, 4.989071520145398], velocity: [-2.565763804620318, 1.694292541261484, 0.0001633783488084702] }, + { minutes: 260, position: [20070.70200614646, 37081.38795177108, 5.113021108069927], velocity: [-2.704015725954167, 1.4635806893354932, 0.0001309148904332559] }, + { minutes: 280, position: [16753.268104333587, 38693.54923409705, 5.197747149392221], velocity: [-2.8215761209461463, 1.2216693937780514, 9.810165311062605e-05] }, + { minutes: 300, position: [13307.636047398268, 40009.622409165626, 5.2433360720395745], velocity: [-2.917545416463915, 0.9704097951655656, 6.518771119647266e-05] }, + { minutes: 320, position: [9760.172295543154, 41019.53681248521, 5.25016837046346], velocity: [-2.9911892573904355, 0.7117245660035767, 3.241850983948209e-05] }, + { minutes: 340, position: [6138.02252001301, 41715.56454703524, 5.218910746763935], velocity: [-3.0419441255915864, 0.4475931982396662, 3.4039481459814015e-08] }, + { minutes: 360, position: [2468.90388143241, 42092.379615161844, 5.150506145531281], velocity: [-3.0694216516358708, 0.18003685605379824, -3.17329183734441e-05] }, + { minutes: 380, position: [-1219.107064501218, 42147.09867100435, 5.046161791708985], velocity: [-3.0734115862832665, -0.08889709017001418, -6.265846135777946e-05] }, + { minutes: 400, position: [-4897.789211037692, 41879.30308168232, 4.907335355127861], velocity: [-3.0538834090149303, -0.3571507303490782, -9.252914048443196e-05] }, + { minutes: 420, position: [-8538.992850146331, 41291.04212849189, 4.73571937854181], velocity: [-3.0109865613037377, -0.622671361810324, -0.00012114342743466563] }, + { minutes: 440, position: [-12114.855075625283, 40386.81732366853, 4.533224117921115], velocity: [-2.945049302847731, -0.8834271965118008, -0.00014831306488984037] }, + { minutes: 460, position: [-15598.012991326683, 39173.5479627687, 4.301958954349123], velocity: [-2.8565761995240972, -1.1374229081941098, -0.00017386429097278593] }, + { minutes: 480, position: [-18961.81309307516, 37660.518176295795, 4.044212546051947], velocity: [-2.7462442622896597, -1.3827149005039525, -0.0001976389299892721] }, + { minutes: 500, position: [-22180.51522213956, 35859.30588575483, 3.762431896813863], velocity: [-2.6148977665750315, -1.617426179267474, -0.0002194953428327399] }, + { minutes: 520, position: [-25229.489529659233, 33783.69420777397, 3.4592005232455882], velocity: [-2.4635417918146336, -1.839760715120362, -0.00023930923162642932] }, + { minutes: 540, position: [-28085.40494490559, 31449.56598422783, 3.137215908049089], velocity: [-2.2933345305463986, -2.048017186601141, -0.0002569742944161141] }, + { minutes: 560, position: [-30726.40770526574, 28874.7822454085, 2.799266429539819], velocity: [-2.105578425928739, -2.2406019985539984, -0.0002724027269835842] }, + { minutes: 580, position: [-33132.28858188493, 26079.045536219728, 2.4482079592382213], velocity: [-1.9017102054853825, -2.416041476232425, -0.00028552557011559055] }, + { minutes: 600, position: [-35284.63752138965, 23083.749151196047, 2.0869403193343743], velocity: [-1.6832898873338373, -2.5729931418007177, -0.00029629290192476645] }, + { minutes: 620, position: [-37166.98452040708, 19911.81343195866, 1.7183837902782735], velocity: [-1.451988843014038, -2.7102559869511507, -0.00030467387606819183] }, + { minutes: 640, position: [-38764.92565492339, 16587.510379723026, 1.345455855687283], velocity: [-1.2095770082525665, -2.826779663034152, -0.00031065660793563524] }, + { minutes: 660, position: [-40066.23330011899, 13136.277924870386, 0.9710483672295515], velocity: [-0.9579093395162637, -2.921672518380938, -0.0003142479120737205] }, + { minutes: 680, position: [-41060.94969727307, 9584.525274750698, 0.5980053061965233], velocity: [-0.6989116199810353, -2.9942084213170346, -0.00031547289526481656] }, + { minutes: 700, position: [-41741.463151753436, 5959.430829144709, 0.22910131117806548], velocity: [-0.434565723519232, -3.0438323166555845, -0.0003143744107817792] }, + { minutes: 720, position: [-42102.566279001156, 2288.7342096942793, -0.13297886732065062], velocity: [-0.1668944494571103, -3.070164473148834, -0.0003110123803832865] }, + { minutes: 740, position: [-42141.49585276661, -1399.4760056032003, -0.4856598342749185], velocity: [0.10205395587974778, -3.073003389390951, -0.0003054629915915191] }, + { minutes: 760, position: [-41857.953950653085, -5076.977217355824, -0.8264937992195482], velocity: [0.3702214723071369, -3.0523273359287186, -0.00029781777869848457] }, + { minutes: 780, position: [-41254.11023516909, -8715.628767018872, -1.1531774789252278], velocity: [0.6355560538647156, -3.008294521780759, -0.00028818259676957646] }, + { minutes: 800, position: [-40334.58535263895, -12287.587271437815, -1.463567537844354], velocity: [0.8960273311616856, -2.9412418840676366, -0.00027667649865165556] }, + { minutes: 820, position: [-39106.41557705481, -15765.519683165161, -1.755694464407093], velocity: [1.1496421479216972, -2.851682510015412, -0.00026343052564023] }, + { minutes: 840, position: [-37578.998969325614, -19122.81244596529, -2.027774795294764], velocity: [1.3944598128245338, -2.7403017110469405, -0.00024858642301214004] }, + { minutes: 860, position: [-35764.02346385111, -22333.775145031464, -2.2782216145724257], velocity: [1.6286069499364608, -2.6079517789919713, -0.00023229529208402202] }, + { minutes: 880, position: [-33675.37743264519, -25373.83709355105, -2.505653269702839], velocity: [1.850291834090645, -2.4556454645316963, -0.00021471619080969294] }, + { minutes: 900, position: [-31329.043411318125, -28219.735351295578, -2.7089002618857383], velocity: [2.057818101518506, -2.284548227771477, -0.00019601469517974208] }, + { minutes: 920, position: [-28742.975800080927, -30849.69273646311, -2.887010283740767], velocity: [2.24959773081167, -2.095969320232007, -0.00017636143383326327] }, + { minutes: 940, position: [-25936.96347556488, -33243.58446856422, -3.0392513929515497], velocity: [2.4241631948762783, -1.891351766492306, -0.0001559306083346896] }, + { minutes: 960, position: [-22932.478364724753, -35383.092167129216, -3.1651133259823494], velocity: [2.580178690883488, -1.6722613221392604, -0.00013489851150901217] }, + { minutes: 980, position: [-19752.51113952139, -37251.84402776156, -3.2643069712439083], velocity: [2.7164503622743044, -1.440374492513351, -0.00011344205606783348] }, + { minutes: 1000, position: [-16421.39528964585, -38835.54010283091, -3.3367620359981793], velocity: [2.831935434588864, -1.1974657039288301, -9.173732549926161e-05] }, + { minutes: 1020, position: [-12964.62091949263, -40122.061728074754, -3.3826229557330962], velocity: [2.925750195201278, -0.945393725533878, -6.995815883976443e-05] }, + { minutes: 1040, position: [-9408.63969422926, -41101.56425769685, -3.402243108598134], velocity: [2.997176755887688, -0.6860874457121136, -4.827478049977031e-05] }, + { minutes: 1060, position: [-5780.6624275567965, -41766.55239827428, -3.3961774106571108], velocity: [3.045668546468965, -0.4215311118682678, -2.6852485781780134e-05] }, + { minutes: 1080, position: [-2108.4508600684057, -42111.937564946405, -3.3651733800906656], velocity: [3.070854497480186, -0.15374914654854502, -5.850392115255306e-06] }, + { minutes: 1100, position: [1579.8947784171994, -42135.07682093187, -3.310160769970175], velocity: [3.072541879851369, 0.11520934390987614, 1.457973465729456e-05] }, + { minutes: 1120, position: [5256.15079690051, -41835.79310235321, -3.2322398797443523], velocity: [3.050717779861868, 0.3832862496514572, 3.429457036739168e-05] }, + { minutes: 1140, position: [8892.186016145712, -41216.37657356628, -3.132668665053222], velocity: [3.0055491980751703, 0.6484302065012215, 5.3160231225854455e-05] }, + { minutes: 1160, position: [12460.177033809898, -40281.56710259335, -3.0128487738432828], velocity: [2.9373817714919577, 0.908612293565696, 7.105317426629656e-05] }, + { minutes: 1180, position: [15932.821134452533, -39038.517990742184, -2.874310643948008], velocity: [2.8467371286963123, 1.1618415591055578, 8.786099356856399e-05] }, + { minutes: 1200, position: [19283.545215140082, -37496.74123395167, -2.7186978032691487], velocity: [2.7343088982323582, 1.4061802558633079, 0.00010348310726381496] }, + { minutes: 1220, position: [22486.7091278478, -35668.03473473921, -2.547750518413773], velocity: [2.6009574007562493, 1.639758669252313, 0.00011783133131305062] }, + { minutes: 1240, position: [25517.80188258933, -33566.392021753665, -2.363288941080431], velocity: [2.447703065582192, 1.8607894249294799, 0.00013083033706245788] }, + { minutes: 1260, position: [28353.629209835854, -31207.895167804872, -2.1671959036337123], velocity: [2.275718622004268, 2.067581166257921, 0.00014241799060334042] }, + { minutes: 1280, position: [30972.49104691389, -28610.591725820665, -1.9613995161523878], velocity: [2.0863201251531605, 2.2585514969885945, 0.0001525455729929647] }, + { minutes: 1300, position: [33354.34759018417, -25794.356624486958, -1.7478557167916193], velocity: [1.880956885066652, 2.4322390901138635, 0.00016117788141679633] }, + { minutes: 1320, position: [35480.97264230718, -22780.740080428823, -1.5285309255801156], velocity: [1.661200376047023, 2.5873148702276567, 0.0001682932123837416] }, + { minutes: 1340, position: [37336.09308113358, -19592.802690799715, -1.305384948806674], velocity: [1.4287322111825551, 2.722592183818355, 0.000173883229035876] }, + { minutes: 1360, position: [38905.513382970814, -16254.938968246232, -1.080354276975341], velocity: [1.1853312740644584, 2.8370358796668715, 0.00017795271561468862] }, + { minutes: 1380, position: [40177.22424735434, -12792.69066866217, -0.8553359139713664], velocity: [0.9328601061804968, 2.9297702298642156, 0.0001805192230492606] }, + { minutes: 1400, position: [41141.49449212447, -9232.551340249787, -0.6321718686384146], velocity: [0.6732506541622045, 3.0000856308366948, 0.00018161261051075265] }, + { minutes: 1420, position: [41790.9455156412, -5601.7635895818285, -0.41263443248600734], velocity: [0.4084894859609296, 3.0474440331043877, 0.00018127448860511864] }, + { minutes: 1440, position: [42120.60775638121, -1928.110616082598, -0.19841235879876074], velocity: [0.14060258909116224, 3.0714830582283907, 0.0001795575706456148] } + ] + }, + { + satellite: 20413, + line1: '1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041', + line2: '2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978', + gravity: 'WGS72', + mode: 'improved', + states: [ + { minutes: 1844000, position: [-35697.35025449064, -70749.92495961819, 14190.124615447643], velocity: [1.6496361128534924, 1.7699939420297506, -0.5762900527904147] }, + { minutes: 1844005, position: [-35200.64824316334, -70216.17362226969, 14016.779156622028], velocity: [1.6578782754355499, 1.786366861210265, -0.579577469936877] }, + { minutes: 1844010, position: [-34701.45381520284, -69677.4598870253, 13842.437093234046], velocity: [1.666228230985409, 1.8030626537850352, -0.5829136546292462] }, + { minutes: 1844015, position: [-34199.73419508961, -69133.68506096983, 13667.08357913039], velocity: [1.6746888079453803, 1.820093009521733, -0.5863000578838596] }, + { minutes: 1844020, position: [-33695.45574302188, -68584.74685086255, 13490.703323815253], velocity: [1.6832629387019997, 1.837470227690511, -0.589738193644074] }, + { minutes: 1844025, position: [-33188.58392290673, -68030.53917382377, 13313.280573020322], velocity: [1.6919536642227115, 1.8552072587941781, -0.593229642363558] }, + { minutes: 1844030, position: [-32679.083269224946, -67470.95195529266, 13134.799088268754], velocity: [1.7007641388973112, 1.8733177498429605, -0.5967760548386816] }, + { minutes: 1844035, position: [-32166.9173522021, -66905.87091258475, 12955.242125177954], velocity: [1.7096976355970606, 1.8918160935551394, -0.600379156314117] }, + { minutes: 1844040, position: [-31652.048741447965, -66335.17732306122, 12774.592410496507], velocity: [1.718757550950615, 1.9107174818836277, -0.6040407508827749] }, + { minutes: 1844045, position: [-31134.43896795672, -65758.74777549421, 12592.832117768276], velocity: [1.7279474108387447, 1.930037964327534, -0.6077627262051559] }, + { minutes: 1844050, position: [-30614.048484537387, -65176.453903268404, 12409.942841571848], velocity: [1.7372708761042062, 1.9497945115379482, -0.6115470585742386] }, + { minutes: 1844055, position: [-30090.836624390296, -64588.16209749729, 12225.905570149718], velocity: [1.746731748476456, 1.9700050848051658, -0.6153958183571548] }, + { minutes: 1844060, position: [-29564.76155790271, -63993.73319834742, 12040.700656358496], velocity: [1.7563339767007153, 1.9906887120758694, -0.6193111758452267] }, + { minutes: 1844065, position: [-29035.780247817962, -63393.022162741225, 11854.307786887453], velocity: [1.76608166285446, 2.0118655712304006, -0.6232954075463827] }, + { minutes: 1844070, position: [-28503.84840187813, -62785.87770517896, 11666.70594930948], velocity: [1.7759790688476258, 2.0335570814905277, -0.6273509029653415] }, + { minutes: 1844075, position: [-27968.920424062402, -62172.141910425424, 11477.873397225463], velocity: [1.786030623058271, 2.0557860038620794, -0.6314801719057322] }, + { minutes: 1844080, position: [-27430.94936366929, -61551.64981438415, 11287.787613087125], velocity: [1.7962409270798314, 2.0785765517209454, -0.6356858523463669] }, + { minutes: 1844085, position: [-26889.886862322815, -60924.228950049925, 11096.425268556397], velocity: [1.8066147625291922, 2.101954512771462, -0.6399707189424206] }, + { minutes: 1844090, position: [-26345.68309880019, -60289.698854806855, 10903.762182173125], velocity: [1.8171570978532217, 2.1259473837906455, -0.6443376922087675] }, + { minutes: 1844095, position: [-25798.286732168493, -59647.870535554386, 10709.773274286283], velocity: [1.8278730950411752, 2.150584519752047, -0.648789848443471] }, + { minutes: 1844100, position: [-25247.64484245415, -58998.54588610895, 10514.432518727303], velocity: [1.8387681161516107, 2.1758972992196166, -0.6533304304656679] }, + { minutes: 1844105, position: [-24693.702870001478, -58341.51705295603, 10317.712891354364], velocity: [1.8498477294955655, 2.2019193080993182, -0.65796285923302] }, + { minutes: 1844110, position: [-24136.404552443993, -57676.5657420626, 10119.586314766257], velocity: [1.8611177153248457, 2.228686544268925, -0.6626907464291322] }, + { minutes: 1844115, position: [-23575.691860565, -57003.46246135125, 9920.023599271291], velocity: [1.8725840707826593, 2.2562376458923072, -0.6675179080997516] }, + { minutes: 1844120, position: [-23011.504932417476, -56321.96569019137, 9718.994379468642], velocity: [1.8842530138536637, 2.284614146776584, -0.6724483794402187] }, + { minutes: 1844125, position: [-22443.78200683585, -55631.82096814926, 9516.467046360245], velocity: [1.8961309859436444, 2.31386076259922, -0.6774864308303531] }, + { minutes: 1844130, position: [-21872.459356075895, -54932.759892181595, 9312.408674342154], velocity: [1.9082246526564939, 2.344025712557015, -0.682636585233432] }, + { minutes: 1844135, position: [-21297.471218830156, -54224.49901162353, 9106.78494287347], velocity: [1.9205409021903967, 2.375161081701071, -0.6879036370712602] }, + { minutes: 1844140, position: [-20718.749734027864, -53506.73860734386, 8899.560052219242], velocity: [1.9330868406480581, 2.407323230207879, -0.6932926727029064] }, + { minutes: 1844145, position: [-20136.224876740245, -52779.16134023368, 8690.696632864745], velocity: [1.9458697833521506, 2.4405732569285252, -0.6988090926333507] }, + { minutes: 1844150, position: [-19549.824397339737, -52041.43075119465, 8480.155647989892], velocity: [1.958897241026654, 2.4749775259456808, -0.704458635585048] }, + { minutes: 1844155, position: [-18959.473765608916, -51293.18959212215, 8267.896288409904], velocity: [1.972176899393704, 2.510608266516287, -0.7102474045624232] }, + { minutes: 1844160, position: [-18365.096122691095, -50534.05796487448, 8053.875859605856], velocity: [1.9857165903240352, 2.547544258754551, -0.7161818950245817] }, + { minutes: 1844165, position: [-17766.612242634998, -49763.63123890352, 7838.049659799285], velocity: [1.9995242522091023, 2.5858716199929206, -0.7222690252819641] }, + { minutes: 1844170, position: [-17163.940508328513, -48981.477716140034, 7620.3708488047505], velocity: [2.0136078765133734, 2.625684709678609, -0.728516169181154] }, + { minutes: 1844175, position: [-16556.99690577787, -48187.136003448104, 7400.790306708725], velocity: [2.0279754366481906, 2.6670871745579596, -0.7349311911110484] }, + { minutes: 1844180, position: [-15945.695042900561, -47380.11204686919, 7179.256481746968], velocity: [2.042634794166727, 2.710193160562012, -0.741522483278654] }, + { minutes: 1844185, position: [-15329.946201033594, -46559.87577353664, 6955.715226903483], velocity: [2.057593575794538, 2.755128723685574, -0.748299005082426] }, + { minutes: 1844190, position: [-14709.659428509112, -45725.857274965776, 6730.10962444455], velocity: [2.0728590128816986, 2.802033479668308, -0.7552703242485445] }, + { minutes: 1844195, position: [-14084.74168943469, -44877.44245326038, 6502.3797980614245], velocity: [2.0884377322407586, 2.851062541671873, -0.7624466591300342] }, + { minutes: 1844200, position: [-13455.098084303503, -44013.96803486511, 6272.4627124180115], velocity: [2.104335483853515, 2.902388807230556, -0.7698389211959811] }, + { minutes: 1844205, position: [-12820.632164284285, -43134.71583612701, 6040.291960345155], velocity: [2.120556786213681, 2.956205671256223, -0.777458756186921] }, + { minutes: 1844210, position: [-12181.246367324045, -42238.9061384435, 5805.7975383545645], velocity: [2.137104463668675, 3.0127302620283, -0.7853185816159176] }, + { minutes: 1844215, position: [-11536.842613655741, -41325.68999861327, 5568.905612203248], velocity: [2.153979041305381, 3.0722073233489557, -0.7934316171178881] }, + { minutes: 1844220, position: [-10887.323109846131, -40394.14027733125, 5329.538275348936], velocity: [2.1711779507390716, 3.134913900740486, -0.8018119024392206] }, + { minutes: 1844225, position: [-10232.591427371899, -39443.24111539895, 5087.613305230976], velocity: [2.1886944830867407, 3.2011650356187156, -0.8104742953251489] }, + { minutes: 1844230, position: [-9572.553943926661, -38471.875516713866, 4843.043925063562], velocity: [2.2065164012866383, 3.2713207333142327, -0.8194344378166591] }, + { minutes: 1844235, position: [-8907.121767814186, -37478.81060668773, 4595.7385834296565], velocity: [2.224624089400919, 3.345794554735139, -0.8287086738539845] }, + { minutes: 1844240, position: [-8236.213307120512, -36462.68000978731, 4345.600769417756], velocity: [2.2429880666658835, 3.4250642970255205, -0.8383138926702259] }, + { minutes: 1844245, position: [-7559.757710641442, -35421.96263235361, 4092.52889177036], velocity: [2.261565620716566, 3.509685388375209, -0.8482672595451582] }, + { minutes: 1844250, position: [-6877.699494258481, -34354.95691402785, 3836.416264041322], velocity: [2.280296205472286, 3.600307847644769, -0.8585857756723524] }, + { minutes: 1844255, position: [-6190.004795897346, -33259.74931037129, 3577.15125964604], velocity: [2.29909508440277, 3.6976979808500157, -0.8692855778680664] }, + { minutes: 1844260, position: [-5496.6698951411145, -32134.175354801544, 3314.6177351073757], velocity: [2.3178444464767884, 3.802766451612128, -0.880380839570439] }, + { minutes: 1844265, position: [-4797.732918033064, -30975.771056509097, 3048.6958715898118], velocity: [2.33638082516284, 3.916605047736649, -0.891882055069964] }, + { minutes: 1844270, position: [-4093.2900884245464, -29781.711553680354, 2779.2636692789074], velocity: [2.35447701574337, 4.040535491362628, -0.9037933579082202] }, + { minutes: 1844275, position: [-3383.5185710905503, -28548.7327170739, 2506.1994641681954], velocity: [2.371815646915083, 4.176175205856759, -0.9161083040140512] }, + { minutes: 1844280, position: [-2668.709044346291, -27273.029585357286, 2229.3860600483886], velocity: [2.3879498180542957, 4.325527393191138, -0.928803170181664] }, + { minutes: 1844285, position: [-1949.3129272374383, -25950.1227677172, 1948.7174454532817], velocity: [2.402243201004416, 4.491106667515535, -0.9418261451271149] }, + { minutes: 1844290, position: [-1226.0121953920936, -24574.679699141714, 1664.1097197339832], velocity: [2.413776635404785, 4.676117852580396, -0.9550795592591054] }, + { minutes: 1844295, position: [-499.8249465589793, -23140.270885320817, 1375.5190229201955], velocity: [2.421198325314283, 4.884716234221024, -0.9683899673679565] }, + { minutes: 1844300, position: [227.73070621998238, -21639.03026437759, 1082.9714338080319], velocity: [2.4224756509032037, 5.122396026896901, -0.9814562983158367] }, + { minutes: 1844305, position: [954.3741415574875, -20061.170323554208, 786.6139944901145], velocity: [2.414468101690606, 5.39658672405236, -0.9937567762076328] }, + { minutes: 1844310, position: [1676.6259857785676, -18394.27054333893, 486.8045189587674], velocity: [2.3921588637698443, 5.717597475224547, -1.0043745589953095] }, + { minutes: 1844315, position: [2389.050193575907, -16622.20037092622, 184.2760836939102], velocity: [2.347196726418289, 6.100163738369246, -1.0116537367227092] }, + { minutes: 1844320, position: [3082.8642200650997, -14723.43238400086, -119.54602919573311], velocity: [2.264946103965669, 6.566068142461276, -1.0124761011730468] }, + { minutes: 1844325, position: [3743.21501841329, -12668.305372997851, -421.892894536994], velocity: [2.118033246444411, 7.148704872546209, -1.0006161338566912] }, + { minutes: 1844330, position: [4343.377192128679, -10414.454808956543, -717.1975128459145], velocity: [1.8508043117666915, 7.900986048140293, -0.96261365674621] }, + { minutes: 1844335, position: [4831.0377756742655, -7899.261164384549, -993.4839210932529], velocity: [1.3372978486217308, 8.906916366483221, -0.8660849737427884] }, + { minutes: 1844340, position: [5091.55546380017, -5030.011343608589, -1222.1421054853745], velocity: [0.2527920046740733, 10.276493768159979, -0.6218141320503835] } + ], + error: { minutes: 1844345, code: 6 } + }, + { + satellite: 4632, + line1: '1 04632U 70093B 04031.91070959 -.00000084 00000-0 10000-3 0 9955', + line2: '2 04632 11.4628 273.1101 1450506 207.6000 143.9350 1.20231981 44145', + gravity: 'WGS72', + mode: 'afspc', + states: [ + { minutes: -5184, position: [-29020.025871276204, 13819.844190633197, -5713.336791826828], velocity: [-1.7680683899898302, -3.2353711920132073, -0.39520613549725875] }, + { minutes: -5064, position: [-32982.56870101271, -11125.54996608817, -6803.284727714999], velocity: [0.6174469956130854, -3.3792400406012453, 0.08595470665876515] }, + { minutes: -4944, position: [-22097.68730513039, -31583.13829283626, -4836.34329328209], velocity: [2.2305974990853357, -2.1665946668680434, 0.42644306968499374] }, + { minutes: -4896, position: [-15129.946945448888, -36907.7452622144, -3487.562567009247], velocity: [2.581167186918367, -1.5242047368938991, 0.504805762626078] } + ] + }, + { + satellite: 9880, + line1: '1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814', + line2: '2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380', + gravity: 'WGS72', + mode: 'afspc', + states: [ + { minutes: 0, position: [13020.067507843205, -2449.071934995316, 1.158960302719138], velocity: [4.247363934862033, 1.597178500848753, 4.956708611391377] }, + { minutes: 120, position: [19190.324824762174, 9249.012669021546, 26596.71345328353], velocity: [-0.6249601929991986, 1.32455056162034, 2.495697636508456] }, + { minutes: 240, position: [11332.678062175286, 16517.991240078674, 38569.78482990696], velocity: [-1.4009747469848834, 0.7109470057889533, 0.9239356355514396] }, + { minutes: 360, position: [328.7421739785914, 19554.9204738032, 40558.26246144989], velocity: [-1.5932810663666392, 0.12677291295167645, -0.3596273072115779] }, + { minutes: 480, position: [-10684.905906795417, 18057.157288389568, 33158.752538863744], velocity: [-1.3832059972939028, -0.58232899894036, -1.744412556058684] }, + { minutes: 600, position: [-17069.780005496348, 9944.867978974073, 13885.916490586826], velocity: [0.04413335410518433, -1.8534484640290334, -3.815303116950443] }, + { minutes: 720, position: [13725.093989799023, -2180.7087708972826, 863.2968452340624], velocity: [3.8784781111515714, 1.6568464962469225, 4.944867241095794] }, + { minutes: 840, position: [19089.638792255362, 9456.296702471303, 27026.79562882551], velocity: [-0.6566142985020943, 1.309112636488816, 2.4493719405095575] }, + { minutes: 960, position: [11106.412483732764, 16627.608740787255, 38727.35140295731], velocity: [-1.4097226795235231, 0.6985825258442225, 0.8913835346015683] }, + { minutes: 1080, position: [72.4095862064101, 19575.080541440173, 40492.12544000551], velocity: [-1.593394604021636, 0.1136551418845968, -0.39055606285979555] }, + { minutes: 1200, position: [-10905.892525763511, 17965.412051108513, 32850.0729824408], velocity: [-1.3713961204809297, -0.6017066038237535, -1.7828170576139366] }, + { minutes: 1320, position: [-17044.612075684898, 9635.484918488643, 13212.594629531977], velocity: [0.12924402957521894, -1.9035514303506498, -3.8845690980058074] }, + { minutes: 1440, position: [14369.903037347145, -1903.8560106220368, 1722.153198524898], velocity: [3.543393116437396, 1.7016871759567973, 4.913881357634916] }, + { minutes: 1560, position: [18983.96210441159, 9661.122338039915, 27448.99557731661], velocity: [-0.6871893040886221, 1.29380887009567, 2.40363075871237] }, + { minutes: 1680, position: [10878.793367035914, 16735.314339535496, 38879.234342636475], velocity: [-1.418239665776104, 0.6862357498784659, 0.8589518483930275] }, + { minutes: 1800, position: [-184.03743100196132, 19593.093717089872, 40420.40606889155], velocity: [-1.5933489245721475, 0.10044869728888096, -0.42157199337168955] }, + { minutes: 1920, position: [-11125.121386310017, 17870.194889282582, 32534.215212084462], velocity: [-1.3591162357786792, -0.6214137764913353, -1.8216298561737798] }, + { minutes: 2040, position: [-17004.432728265543, 9316.539263508157, 12526.118838115462], velocity: [0.22033073595037142, -1.9555943221011272, -3.955058574816727] }, + { minutes: 2160, position: [14960.064926931678, -1620.6843080493206, 2574.963593810469], velocity: [3.2386340280914543, 1.7347233849220773, 4.868880331132255] }, + { minutes: 2280, position: [18873.463472574036, 9863.570045859737, 27863.465747345865], velocity: [-0.7167369810791899, 1.2786328173987973, 2.358448535210547] }, + { minutes: 2400, position: [10649.868575812641, 16841.141726688773, 39025.48035006407], velocity: [-1.426527152369111, 0.6739010570045921, 0.826632332329715] }, + { minutes: 2520, position: [-440.534593227617, 19608.955244226538, 40343.106754508735], velocity: [-1.5931385973116698, 0.08714788447848498, -0.4526805591051984] }, + { minutes: 2640, position: [-11342.450289092449, 17771.4422394217, 32211.12535720787], velocity: [-1.3463440152614632, -0.6414642913522599, -1.8608642339472865] }, + { minutes: 2760, position: [-16948.060057105715, 8987.6425488001, 11826.282843666957], velocity: [0.31800729710094294, -2.0096934917220377, -4.026726647562781] }, + { minutes: 2880, position: [15500.534450679734, -1332.9098104194418, 3419.7231530771533], velocity: [2.9609179743586593, 1.7583316344487876, 4.813698637895388] } + ] + }, + { + satellite: 20413, + line1: '1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041', + line2: '2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978', + gravity: 'WGS72', + mode: 'afspc', + states: [ + { minutes: 1440, position: [-151669.05280514943, -5645.20454549569, -2198.5159211843747], velocity: [-0.8691828888193474, -0.8707598718530463, 0.1565082188287725] }, + { minutes: 1560, position: [-157497.7165749453, -11884.99595074187, -1061.4443940244116], velocity: [-0.7496579608381312, -0.8640167152925672, 0.1577661011569624] }, + { minutes: 1680, position: [-162498.3225557683, -18062.997331673236, 81.00915252769028], velocity: [-0.6389803775813591, -0.8536871051597105, 0.15809899154597878] }, + { minutes: 1800, position: [-166728.76010920107, -24155.996482989663, 1222.8412867687525], velocity: [-0.5356006870120515, -0.840455444432173, 0.15768085699012918] }, + { minutes: 1920, position: [-169935.8192459213, -31767.297879638154, 2749.0154034452235], velocity: [-0.43005043062494874, -0.8289041834267769, 0.15781234046679088] }, + { minutes: 2040, position: [-172703.07831815493, -37662.95639336069, 3883.6005257861775], velocity: [-0.338004891081813, -0.8102774874652262, 0.1560200348876178] }, + { minutes: 2160, position: [-174823.19337404336, -43417.55605219431, 5003.263128094578], velocity: [-0.25025862228372375, -0.7898286720210674, 0.15376490304718193] }, + { minutes: 2280, position: [-176324.63925774785, -49018.51958648401, 6104.850250015018], velocity: [-0.16613661268466495, -0.7677062623607793, 0.1510922423752986] }, + { minutes: 2400, position: [-177231.42142457538, -54454.1269949746, 7185.486616065783], velocity: [-0.08506785380970824, -0.7440015671475827, 0.1480334033218291] }, + { minutes: 2520, position: [-177563.73583231858, -59713.1485914353, 8242.484725914002], velocity: [-0.006561729659596287, -0.7187603090747633, 0.14460867603991964] }, + { minutes: 2640, position: [-177338.48026483096, -64784.54644697947, 9273.272200030578], velocity: [0.06980994561025962, -0.6919902383373704, 0.14082923623134075] }, + { minutes: 2760, position: [-176569.65151461042, -69657.21976255355, 10275.330634589536], velocity: [0.14442687824135053, -0.6636658757353582, 0.13669841925257506] }, + { minutes: 2880, position: [-175268.652990729, -74319.77625462702, 11246.141771595489], velocity: [0.21763136987487794, -0.6337310905950635, 0.13221249087596612] }, + { minutes: 3000, position: [-173444.53039609257, -78760.31560395798, 12183.137752118793], velocity: [0.289737324871396, -0.6020999289137476, 0.12736101701726446] }, + { minutes: 3120, position: [-171104.1481365313, -82966.21323590563, 13083.652783812367], velocity: [0.36103777946073096, -0.5686559032440447, 0.12212688853201414] }, + { minutes: 3240, position: [-168252.31543803078, -86923.893634334, 13944.873827157799], velocity: [0.4318113960749265, -0.5332497972119311, 0.11648602176883749] }, + { minutes: 3360, position: [-164891.86832887388, -90618.58225953748, 14763.787942470211], velocity: [0.5023282686523688, -0.49569589645757317, 0.11040672479847798] }, + { minutes: 3480, position: [-161023.71139824679, -94034.02398835169, 15537.123757290587], velocity: [0.5728553207495413, -0.45576641185879474, 0.10384868825302859] }, + { minutes: 3600, position: [-156646.82136725518, -97152.15370790788, 16261.2840930542], velocity: [0.6436615381408728, -0.4131836878364645, 0.09676152377564087] }, + { minutes: 3720, position: [-151758.212857374, -99952.70098346406, 16932.26607548358], velocity: [0.715023254298307, -0.3676095609687081, 0.08908272650297697] }, + { minutes: 3840, position: [-146352.86521283243, -102412.70506284205, 17545.563941580436], velocity: [0.7872296948625243, -0.3186309130390433, 0.08073487275969611] }, + { minutes: 3960, position: [-140423.60777444273, -104505.907997344, 18096.048070967383], velocity: [0.8605889788509332, -0.2657399872728733, 0.07162176779901147] }, + { minutes: 4080, position: [-133960.95961850855, -106201.98091317674, 18577.811219530595], velocity: [0.9354347581086556, -0.20830730675787865, 0.06162311047803939] }, + { minutes: 4200, position: [-126952.91860009612, -107465.51906185655, 18983.969031115397], velocity: [1.0121336283869822, -0.14554387831775328, 0.050587007006728975] }, + { minutes: 4320, position: [-119384.69396454151, -108254.71115371604, 19306.395818915535], velocity: [1.0910933132767804, -0.07644747853773119, 0.03831928160302773] } + ] + }, + { + satellite: 23599, + line1: '1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905', + line2: '2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555', + gravity: 'WGS72', + mode: 'afspc', + states: [ + { minutes: 0, position: [9892.63794340703, 35.761449690835626, -1.08228837647185], velocity: [3.556643236714638, 6.456009375101952, 0.7836108898499567] }, + { minutes: 20, position: [11931.956429973645, 7340.749737495857, 886.4636598693903], velocity: [0.30832911560751275, 5.532328972169434, 0.672887281317537] }, + { minutes: 40, position: [11321.710392047135, 13222.847491560493, 1602.4011904896834], velocity: [-1.1519739824132829, 4.285810871397459, 0.5219194250331425] }, + { minutes: 60, position: [9438.2939567525, 17688.05450260959, 2146.5929340189596], velocity: [-1.9079040543388932, 3.179955045944978, 0.3876924790871379] }, + { minutes: 80, position: [6872.086346385757, 20910.110168114526, 2539.7994503445243], velocity: [-2.323995366880974, 2.2073984617761413, 0.26950612107719296] }, + { minutes: 100, position: [3933.375097982906, 23024.076625416506, 2798.2596674620872], velocity: [-2.542860615828823, 1.327134965795017, 0.1624500761758299] }, + { minutes: 120, position: [816.6409154575417, 24118.986754746227, 2932.6945942752614], velocity: [-2.6268380101386333, 0.504502762546244, 0.06234430647518672] }, + { minutes: 140, position: [-2334.4170580378386, 24246.860963263534, 2949.3644884108467], velocity: [-2.602259645509793, -0.2880582655859941, -0.03414513473677229] }, + { minutes: 160, position: [-5394.317980388372, 23429.42716149262, 2850.868325859998], velocity: [-2.4744340680424863, -1.0740559821818862, -0.129868365901494] }, + { minutes: 180, position: [-8233.351302373516, 21661.244808834486, 2636.514561179789], velocity: [-2.230845532770437, -1.8757423438067296, -0.22752860340627504] }, + { minutes: 200, position: [-10693.964973476768, 18909.881688910864, 2302.3370754826606], velocity: [-1.8359124328783252, -2.7161698646675574, -0.32993188027618825] }, + { minutes: 220, position: [-12553.896699036062, 15114.63990715505, 1840.9357323075512], velocity: [-1.212478879277183, -3.6190369963869573, -0.43997063274315695] }, + { minutes: 240, position: [-13450.20591863997, 10190.57904288773, 1241.9595873594071], velocity: [-0.1890825111154663, -4.59670197137268, -0.5591738989435889] }, + { minutes: 260, position: [-12686.604371210457, 4079.311061608766, 498.2707861417442], velocity: [1.6644982112294369, -5.559889864636208, -0.6767477790003418] }, + { minutes: 280, position: [-8672.558677528492, -2827.5682331485036, -342.59644715588195], velocity: [5.515079851923037, -5.551222961582745, -0.676360044129405] }, + { minutes: 300, position: [1153.3149805972678, -6411.986920596424, -779.8728894122894], velocity: [9.689818101747566, 1.3885984250415007, 0.1678687983019866] }, + { minutes: 320, position: [9542.792010555235, -533.7125308064143, -65.73165427708575], velocity: [3.926947086559404, 6.459583538638782, 0.7856867546234342] }, + { minutes: 340, position: [11868.809601004623, 6861.595908475066, 833.7278060176073], velocity: [0.4529578524427234, 5.632811327978673, 0.685262322665407] }, + { minutes: 360, position: [11376.239416781196, 12858.971213660569, 1563.4066017214807], velocity: [-1.0876656948619055, 4.374693346994409, 0.5322070510627634] }, + { minutes: 380, position: [9547.703007819211, 17421.48570758257, 2118.569075147385], velocity: [-1.8765402624166485, 3.2538917275844637, 0.3958102433992447] }, + { minutes: 400, position: [7008.514702632767, 20725.47471226838, 2520.560642887537], velocity: [-2.3087035988907636, 2.270724438391432, 0.2761386128135489] }, + { minutes: 420, position: [4083.1855117983646, 22910.883068023188, 2786.356426599174], velocity: [-2.5366109410684707, 1.3837688745798828, 0.1681654137944036] }, + { minutes: 440, position: [970.1310753263701, 24071.198962817056, 2927.3087543991446], velocity: [-2.626673095408023, 0.5572747170230511, 0.0675493025573931] }, + { minutes: 460, position: [-2183.7549934835884, 24261.301881255633, 2950.091895601075], velocity: [-2.60708224127046, -0.23678593722710733, -0.029112844257452936] }, + { minutes: 480, position: [-5252.4906678348725, 23505.581083884696, 2857.6862865380544], velocity: [-2.4844650585707106, -1.0221584107914772, -0.1247026429028329] }, + { minutes: 500, position: [-8107.414375867571, 21801.13395059889, 2649.7685268268956], velocity: [-2.247669529927408, -1.8210712747578979, -0.22191493925797] }, + { minutes: 520, position: [-10594.018130935197, 19118.222690103365, 2322.7719776696754], velocity: [-1.86322406230332, -2.6563536988056993, -0.32351264248492373] }, + { minutes: 540, position: [-12496.707584990856, 15399.130963507705, 1869.7595805300111], velocity: [-1.2582721178912282, -3.551534021606492, -0.4323329125514964] }, + { minutes: 560, position: [-13467.50382653484, 10561.430400379517, 1280.8484217803514], velocity: [-0.27205069524470493, -4.520503542924496, -0.5500148331483127] }, + { minutes: 580, position: [-12848.007174972903, 4541.724320088671, 548.5997647801374], velocity: [1.4939380557774442, -5.489644145610925, -0.6674792438748309] }, + { minutes: 600, position: [-9152.799203967892, -2343.8890279863485, -287.9374133215266], velocity: [5.12769527290063, -5.650584983258399, -0.6860136439112523] }, + { minutes: 620, position: [280.12478641593157, -6500.1136850771545, -790.3623630160608], velocity: [9.779642903676244, 0.5814301204338369, 0.07412442140016746] }, + { minutes: 640, position: [9166.214061145536, -1093.4875622309976, -129.53833135262695], velocity: [4.316926784646588, 6.438465968961139, 0.7850959661191438] }, + { minutes: 660, position: [11794.74563870308, 6381.744848420992, 780.8277597123575], velocity: [0.6046425229527849, 5.731705439563755, 0.6975715224215611] }, + { minutes: 680, position: [11424.803637886924, 12493.808333384097, 1524.2768383582325], velocity: [-1.0211486608574545, 4.463489405967472, 0.5425377015326979] }, + { minutes: 700, position: [9652.7892008405, 17153.464704279297, 2090.4341368096116], velocity: [-1.8443826955675158, 3.327595387684774, 0.40392419818462816] }, + { minutes: 720, position: [7141.247425264598, 20538.9711515836, 2501.180599656911], velocity: [-2.293079623472543, 2.3335989929007934, 0.2827274412808925] } + ] + }, + { + satellite: 25954, + line1: '1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847', + line2: '2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615', + gravity: 'WGS72', + mode: 'afspc', + states: [ + { minutes: -1440, position: [8118.185192209676, -41368.40537377723, 4.110466873303065], velocity: [3.0176967405173363, 0.5919942965820967, 0.0009330158220801537] }, + { minutes: -1320, position: [27766.340153275843, -31724.970005568593, 9.932978462843531], velocity: [2.314236153116698, 2.0249031926704353, 0.0006608611838849819] }, + { minutes: -1200, position: [39932.572379731326, -13532.600404536564, 13.12958252291804], velocity: [0.9873828187443052, 2.9119428434009076, 0.0002132980788857027] }, + { minutes: -1080, position: [41341.013654409966, 8305.716819547648, 12.849885011519165], velocity: [-0.6050982241921166, 3.014378268381519, -0.0002910335896563028] }, + { minutes: -960, position: [31614.99210557961, 27907.29155353014, 9.166187966821079], velocity: [-2.0342435234524503, 2.3050141016557584, -0.0007184181760692913] }, + { minutes: -840, position: [13375.752275869576, 39994.270176508246, 3.054168543211513], velocity: [-2.9154243655759764, 0.9751198736626701, -0.0009555764871799567] }, + { minutes: -720, position: [-8464.899633090887, 41312.935498921135, -3.8662291910793884], velocity: [-3.011600615036147, -0.6172750497400185, -0.0009396644554173615] }, + { minutes: -600, position: [-28026.23406157561, 31507.89995661059, -9.760478685419693], velocity: [-2.2968401597310293, -2.0436075952499544, -0.0006748885938977843] }, + { minutes: -480, position: [-40040.01314363215, 13218.005794127705, -13.065948318147925], velocity: [-0.9633287718859145, -2.919827982596884, -0.00023141371803013077] }, + { minutes: -360, position: [-41268.432919757994, -8632.06859692734, -12.906612664159834], velocity: [0.630042315313116, -3.0096773759437063, 0.0002731633096662882] }, + { minutes: -240, position: [-31377.853170146147, -28156.139703335302, -9.32605529552014], velocity: [2.054021716822185, -2.2885541584016726, 0.0007049590249211153] }, + { minutes: -120, position: [-13031.415526876412, -40092.33381029366, -3.2763666002686986], velocity: [2.924657466184817, -0.950541166518316, 0.0009493811931622964] }, + { minutes: 0, position: [8827.156604720612, -41223.00971237346, 3.634829628581691], velocity: [3.00708731851863, 0.6437013231314678, 0.000941663000009281] }, + { minutes: 120, position: [28306.85426673856, -31243.801473942593, 9.572168911754423], velocity: [2.2791377430949784, 2.064316875308678, 0.0006841271481731722] }, + { minutes: 240, position: [40159.0512880496, -12845.39151157112, 12.960863159224479], velocity: [0.9372654224940079, 2.928448287382574, 0.0002455046084950365] }, + { minutes: 360, position: [41192.55903454768, 9013.79606759118, 12.904956655054955], velocity: [-0.656727442469494, 3.0035434579261495, -0.00025747946704821864] }, + { minutes: 480, position: [31131.697557984844, 28445.556817311972, 9.424192384592919], velocity: [-2.0734848417529976, 2.2697708507038037, -0.0006912330785484947] }, + { minutes: 600, position: [12687.818465303262, 40217.83324638993, 3.4472624908269025], velocity: [-2.9317218270584156, 0.9249622300916039, -0.0009407662752300978] }, + { minutes: 720, position: [-9172.235002450701, 41161.634755272586, -3.435757567743934], velocity: [-3.0005714862895276, -0.6688475083904888, -0.000940101029181425] }, + { minutes: 840, position: [-28562.51093192286, 31022.459875865712, -9.395621609153403], velocity: [-2.261449201877106, -2.082713896672568, -0.0006896686839856594] }, + { minutes: 960, position: [-40260.775045488626, 12529.114843441545, -12.84915105396641], velocity: [-0.9130970307116049, -2.9359335283734826, -0.0002561807220466587] }, + { minutes: 1080, position: [-41114.143765378154, -9338.871944829201, -12.879524035545657], velocity: [0.6815888153115853, -2.9984325645353387, 0.00024500552309290766] }, + { minutes: 1200, position: [-30890.015122404133, -28690.40750792172, -9.480372120171932], velocity: [2.0929898048457476, -2.252978151538102, 0.00068045919207898] }, + { minutes: 1320, position: [-12341.461940203213, -40310.06316385675, -3.5583320100695808], velocity: [2.940537098401987, -0.9002195229491661, 0.000934170056398609] }, + { minutes: 1440, position: [9533.277508183817, -41065.52390213631, 3.3075648210731146], velocity: [2.9955961712664165, 0.695200236263894, 0.0009385247868215418] } + ] + }, + { + satellite: 28626, + line1: '1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190', + line2: '2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891', + gravity: 'WGS72', + mode: 'afspc', + states: [ + { minutes: 0, position: [42080.71852212606, -2646.863874356508, 0.8185129391350228], velocity: [0.19310517736659427, 3.0686882505727104, 0.0004384494314865793] }, + { minutes: 120, position: [37740.00085593191, 18802.768728017705, 3.4551258373015865], velocity: [-1.3710352059678461, 2.752105932104144, 0.00033688282389201157] }, + { minutes: 240, position: [23232.82515008066, 35187.339818019085, 4.989274276438437], velocity: [-2.565776620124763, 1.6941931318509758, 0.00016336535444870753] }, + { minutes: 360, position: [2467.4429017790267, 42093.609099585454, 5.1506298695936765], velocity: [-3.0693418000527646, 0.17997627625130921, -3.1738877320548607e-05] }, + { minutes: 480, position: [-18962.590529913065, 37661.66243818902, 4.044332575236894], velocity: [-2.746151981754457, -1.3826757774658867, -0.00019763313262761073] }, + { minutes: 600, position: [-35285.00095313196, 23085.444027781326, 2.087118800595316], velocity: [-1.6832779075541122, -2.5728936250178736, -0.0002962820474674081] }, + { minutes: 720, position: [-42103.20138132459, 2291.0622889298493, -0.13274963506588708], velocity: [-0.16697481648873227, -3.0701045602666017, -0.0003110070365042613] }, + { minutes: 840, position: [-37580.31858369689, -19120.40485692826, -2.0275570161623246], velocity: [1.3943678477908217, -2.740341611982484, -0.00024859074029622734] }, + { minutes: 960, position: [-22934.207618760345, -35381.238708055076, -3.1649593208210622], velocity: [2.5801675394754655, -1.672360950533771, -0.00013490721042183648] }, + { minutes: 1080, position: [-2109.903323894611, -42110.715081984956, -3.3650788918054757], velocity: [3.070935368803136, -0.15380839036268237, -5.854950569640598e-06] }, + { minutes: 1200, position: [19282.777747276905, -37495.59250597539, -2.718614618435784], velocity: [2.73440052435863, 1.4062209330680033, 0.00010348610812336212] }, + { minutes: 1320, position: [35480.6099059996, -22779.03375285161, -1.5284185891310023], velocity: [1.6612106759618321, 2.5874145931375034, 0.00016829975154806356] }, + { minutes: 1440, position: [42119.96263498593, -1925.7756726299176, -0.19827433154272642], velocity: [0.14052120636715826, 3.0715416134674323, 0.0001795611668155159] } + ] + }, + { + satellite: 20413, + line1: '1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041', + line2: '2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978', + gravity: 'WGS72', + mode: 'afspc', + states: [ + { minutes: 1844000, position: [-35697.350254490564, -70749.9249596182, 14190.124615447618], velocity: [1.6496361128534893, 1.7699939420297528, -0.5762900527904138] }, + { minutes: 1844005, position: [-35200.64824316337, -70216.17362226968, 14016.779156622028], velocity: [1.6578782754355508, 1.786366861210264, -0.579577469936877] }, + { minutes: 1844010, position: [-34701.45381520284, -69677.4598870253, 13842.437093234046], velocity: [1.666228230985409, 1.8030626537850352, -0.5829136546292462] }, + { minutes: 1844015, position: [-34199.73419508961, -69133.68506096983, 13667.08357913039], velocity: [1.6746888079453803, 1.820093009521733, -0.5863000578838596] }, + { minutes: 1844020, position: [-33695.45574302189, -68584.74685086255, 13490.703323815253], velocity: [1.6832629387020002, 1.8374702276905106, -0.589738193644074] }, + { minutes: 1844025, position: [-33188.583922906764, -68030.53917382375, 13313.280573020322], velocity: [1.6919536642227122, 1.855207258794177, -0.593229642363558] }, + { minutes: 1844030, position: [-32679.083269225033, -67470.95195529264, 13134.799088268785], velocity: [1.7007641388973127, 1.873317749842958, -0.5967760548386822] }, + { minutes: 1844035, position: [-32166.917352202083, -66905.87091258477, 12955.242125177954], velocity: [1.7096976355970603, 1.8918160935551398, -0.600379156314117] }, + { minutes: 1844040, position: [-31652.048741447965, -66335.17732306122, 12774.592410496507], velocity: [1.718757550950615, 1.9107174818836277, -0.6040407508827749] }, + { minutes: 1844045, position: [-31134.43896795672, -65758.74777549421, 12592.832117768276], velocity: [1.7279474108387447, 1.930037964327534, -0.6077627262051559] }, + { minutes: 1844050, position: [-30614.048484537365, -65176.453903268404, 12409.942841571848], velocity: [1.7372708761042053, 1.9497945115379482, -0.6115470585742386] }, + { minutes: 1844055, position: [-30090.836624390326, -64588.16209749727, 12225.905570149735], velocity: [1.7467317484764582, 1.9700050848051638, -0.6153958183571556] }, + { minutes: 1844060, position: [-29564.761557902722, -63993.73319834742, 12040.700656358496], velocity: [1.7563339767007158, 1.9906887120758685, -0.6193111758452267] }, + { minutes: 1844065, position: [-29035.780247817976, -63393.02216274112, 11854.307786887455], velocity: [1.766081662854464, 2.0118655712304, -0.6232954075463839] }, + { minutes: 1844070, position: [-28503.848401878106, -62785.877705178966, 11666.70594930948], velocity: [1.775979068847625, 2.0335570814905286, -0.6273509029653415] }, + { minutes: 1844075, position: [-27968.920424062326, -62172.141910425424, 11477.873397225438], velocity: [1.786030623058269, 2.055786003862082, -0.6314801719057317] }, + { minutes: 1844080, position: [-27430.949363669264, -61551.64981438415, 11287.787613087125], velocity: [1.7962409270798305, 2.0785765517209462, -0.6356858523463669] }, + { minutes: 1844085, position: [-26889.886862322815, -60924.228950049925, 11096.425268556397], velocity: [1.8066147625291922, 2.101954512771462, -0.6399707189424206] }, + { minutes: 1844090, position: [-26345.68309880016, -60289.698854806935, 10903.762182173114], velocity: [1.8171570978532186, 2.125947383790646, -0.6443376922087662] }, + { minutes: 1844095, position: [-25798.286732168486, -59647.87053555439, 10709.773274286283], velocity: [1.8278730950411746, 2.150584519752048, -0.648789848443471] }, + { minutes: 1844100, position: [-25247.64484245415, -58998.54588610895, 10514.432518727303], velocity: [1.8387681161516107, 2.1758972992196166, -0.6533304304656679] }, + { minutes: 1844105, position: [-24693.702870001594, -58341.517052956035, 10317.71289135441], velocity: [1.8498477294955673, 2.201919308099313, -0.6579628592330206] }, + { minutes: 1844110, position: [-24136.404552444073, -57676.56574206267, 10119.586314766277], velocity: [1.8611177153248457, 2.228686544268922, -0.6626907464291316] }, + { minutes: 1844115, position: [-23575.691860565, -57003.46246135125, 9920.023599271291], velocity: [1.8725840707826593, 2.2562376458923072, -0.6675179080997516] }, + { minutes: 1844120, position: [-23011.504932417465, -56321.96569019137, 9718.994379468642], velocity: [1.884253013853663, 2.2846141467765846, -0.6724483794402187] }, + { minutes: 1844125, position: [-22443.78200683586, -55631.820968149244, 9516.467046360245], velocity: [1.8961309859436448, 2.3138607625992194, -0.6774864308303531] }, + { minutes: 1844130, position: [-21872.459356075815, -54932.75989218152, 9312.408674342134], velocity: [1.9082246526564945, 2.344025712557019, -0.6826365852334326] }, + { minutes: 1844135, position: [-21297.471218830156, -54224.49901162353, 9106.78494287347], velocity: [1.9205409021903967, 2.375161081701071, -0.6879036370712602] }, + { minutes: 1844140, position: [-20718.74973402788, -53506.73860734386, 8899.560052219242], velocity: [1.9330868406480592, 2.407323230207879, -0.6932926727029064] }, + { minutes: 1844145, position: [-20136.224876740256, -52779.16134023367, 8690.696632864745], velocity: [1.9458697833521514, 2.4405732569285252, -0.6988090926333507] }, + { minutes: 1844150, position: [-19549.82439733973, -52041.43075119465, 8480.155647989892], velocity: [1.9588972410266536, 2.4749775259456808, -0.704458635585048] }, + { minutes: 1844155, position: [-18959.473765609047, -51293.18959212217, 8267.896288409951], velocity: [1.9721768993937059, 2.510608266516282, -0.7102474045624237] }, + { minutes: 1844160, position: [-18365.096122691095, -50534.05796487448, 8053.875859605856], velocity: [1.9857165903240352, 2.547544258754551, -0.7161818950245817] }, + { minutes: 1844165, position: [-17766.61224263501, -49763.631238903516, 7838.049659799285], velocity: [1.9995242522091028, 2.5858716199929197, -0.7222690252819641] }, + { minutes: 1844170, position: [-17163.940508328513, -48981.477716140034, 7620.3708488047505], velocity: [2.0136078765133734, 2.625684709678609, -0.728516169181154] }, + { minutes: 1844175, position: [-16556.996905777884, -48187.136003448104, 7400.790306708725], velocity: [2.0279754366481915, 2.6670871745579596, -0.7349311911110484] }, + { minutes: 1844180, position: [-15945.695042900576, -47380.11204686919, 7179.256481746968], velocity: [2.042634794166728, 2.710193160562012, -0.741522483278654] }, + { minutes: 1844185, position: [-15329.946201033576, -46559.87577353665, 6955.715226903483], velocity: [2.057593575794537, 2.755128723685575, -0.748299005082426] }, + { minutes: 1844190, position: [-14709.659428509101, -45725.857274965776, 6730.10962444455], velocity: [2.0728590128816977, 2.8020334796683084, -0.7552703242485445] }, + { minutes: 1844195, position: [-14084.741689434677, -44877.44245326039, 6502.3797980614245], velocity: [2.088437732240758, 2.8510625416718733, -0.7624466591300342] }, + { minutes: 1844200, position: [-13455.098084303503, -44013.96803486511, 6272.4627124180115], velocity: [2.104335483853515, 2.902388807230556, -0.7698389211959811] }, + { minutes: 1844205, position: [-12820.632164284207, -43134.71583612688, 6040.291960345118], velocity: [2.1205567862136845, 2.9562056712562303, -0.7774587561869217] }, + { minutes: 1844210, position: [-12181.246367324045, -42238.9061384435, 5805.7975383545645], velocity: [2.137104463668675, 3.0127302620283, -0.7853185816159176] }, + { minutes: 1844215, position: [-11536.84261365575, -41325.68999861327, 5568.905612203248], velocity: [2.153979041305382, 3.072207323348955, -0.7934316171178881] }, + { minutes: 1844220, position: [-10887.323109846111, -40394.14027733126, 5329.538275348936], velocity: [2.17117795073907, 3.1349139007404867, -0.8018119024392206] }, + { minutes: 1844225, position: [-10232.59142737189, -39443.24111539895, 5087.613305230976], velocity: [2.1886944830867403, 3.201165035618716, -0.8104742953251489] }, + { minutes: 1844230, position: [-9572.553943926669, -38471.875516713866, 4843.043925063562], velocity: [2.2065164012866387, 3.2713207333142322, -0.8194344378166591] }, + { minutes: 1844235, position: [-8907.121767814177, -37478.81060668774, 4595.7385834296565], velocity: [2.224624089400918, 3.3457945547351393, -0.8287086738539845] }, + { minutes: 1844240, position: [-8236.213307120504, -36462.68000978732, 4345.600769417756], velocity: [2.2429880666658826, 3.4250642970255214, -0.8383138926702259] }, + { minutes: 1844245, position: [-7559.75771064145, -35421.9626323536, 4092.52889177036], velocity: [2.261565620716566, 3.509685388375208, -0.8482672595451582] }, + { minutes: 1844250, position: [-6877.699494258481, -34354.95691402785, 3836.416264041322], velocity: [2.280296205472286, 3.600307847644769, -0.8585857756723524] }, + { minutes: 1844255, position: [-6190.004795897353, -33259.74931037129, 3577.15125964604], velocity: [2.299095084402771, 3.697697980850015, -0.8692855778680664] }, + { minutes: 1844260, position: [-5496.6698951411145, -32134.175354801544, 3314.6177351073757], velocity: [2.3178444464767884, 3.802766451612128, -0.880380839570439] }, + { minutes: 1844265, position: [-4797.732918033064, -30975.771056509097, 3048.6958715898118], velocity: [2.33638082516284, 3.916605047736649, -0.891882055069964] }, + { minutes: 1844270, position: [-4093.290088424559, -29781.711553680354, 2779.2636692789074], velocity: [2.354477015743371, 4.040535491362627, -0.9037933579082202] }, + { minutes: 1844275, position: [-3383.518571090512, -28548.732717073788, 2506.199464168182], velocity: [2.371815646915088, 4.176175205856768, -0.9161083040140536] }, + { minutes: 1844280, position: [-2668.709044346291, -27273.029585357286, 2229.3860600483886], velocity: [2.3879498180542957, 4.325527393191138, -0.928803170181664] }, + { minutes: 1844285, position: [-1949.3129272374272, -25950.122767717206, 1948.7174454532817], velocity: [2.402243201004415, 4.491106667515536, -0.9418261451271149] }, + { minutes: 1844290, position: [-1226.0121953920936, -24574.679699141714, 1664.1097197339832], velocity: [2.413776635404785, 4.676117852580396, -0.9550795592591054] }, + { minutes: 1844295, position: [-499.824946558989, -23140.270885320813, 1375.5190229201955], velocity: [2.421198325314285, 4.884716234221022, -0.9683899673679565] }, + { minutes: 1844300, position: [227.73070621998238, -21639.03026437759, 1082.9714338080319], velocity: [2.4224756509032037, 5.122396026896901, -0.9814562983158367] }, + { minutes: 1844305, position: [954.3741415574885, -20061.170323554223, 786.6139944901174], velocity: [2.4144681016906087, 5.396586724052358, -0.9937567762076341] }, + { minutes: 1844310, position: [1676.6259857785633, -18394.27054333893, 486.8045189587674], velocity: [2.392158863769845, 5.717597475224546, -1.0043745589953095] }, + { minutes: 1844315, position: [2389.0501935759003, -16622.20037092622, 184.2760836939102], velocity: [2.347196726418291, 6.100163738369246, -1.0116537367227092] }, + { minutes: 1844320, position: [3082.8642200650966, -14723.43238400086, -119.54602919573311], velocity: [2.2649461039656704, 6.566068142461275, -1.0124761011730468] }, + { minutes: 1844325, position: [3743.215018413452, -12668.30537299729, -421.8928945370731], velocity: [2.1180332464443636, 7.1487048725463795, -1.0006161338566852] }, + { minutes: 1844330, position: [4343.377192128681, -10414.454808956541, -717.1975128459145], velocity: [1.8508043117666888, 7.900986048140293, -0.96261365674621] }, + { minutes: 1844335, position: [4831.037775674263, -7899.261164384551, -993.4839210932529], velocity: [1.3372978486217335, 8.906916366483221, -0.8660849737427884] }, + { minutes: 1844340, position: [5091.555463800183, -5030.011343608627, -1222.1421054853759], velocity: [0.25279200467409085, 10.276493768159948, -0.6218141320503878] } + ], + error: { minutes: 1844345, code: 6 } + }, { satellite: 5, line1: '1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753', line2: '2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667', gravity: 'WGS72OLD', + mode: 'improved', states: [ { minutes: 0, position: [7022.465290574917, -1400.0829671389206, 0.039951552899142956], velocity: [1.8938410139508999, 6.405893757305204, 4.534807249007841] }, { minutes: 360, position: [-7154.031199858261, -3783.1768239300586, -3536.1941219313903], velocity: [4.7418874076075, -4.15181776413348, -2.0939354242488966] }, @@ -310,6 +1310,7 @@ export const sgp4NearEarthReferences: SGP4Reference[] = [ line1: '1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753', line2: '2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667', gravity: 'WGS84', + mode: 'improved', states: [ { minutes: 0, position: [7022.46647249137, -1400.0665618178339, 0.05106558274635007], velocity: [1.8938310806788694, 6.405894872518269, 4.534806700953066] }, { minutes: 360, position: [-7154.031829698212, -3783.162221437533, -3536.1837282572305], velocity: [4.741886113777932, -4.151823664356791, -2.0939402147881627] }, @@ -326,11 +1327,56 @@ export const sgp4NearEarthReferences: SGP4Reference[] = [ { minutes: 4320, position: [-9060.478175076545, 4658.697917019259, 813.6926008473886], velocity: [-2.232823140968453, -4.110456334189285, -3.157344043920063] } ] }, + { + satellite: 24208, + line1: '1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600', + line2: '2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119', + gravity: 'WGS72OLD', + mode: 'improved', + states: [ + { minutes: 0, position: [7534.1098696537065, 41266.39265615613, -0.10801028478177664], velocity: [-3.027168007457952, 0.55884899599332, 0.20798275541008424] }, + { minutes: 120, position: [-14289.199399887419, 39469.0552887701, 1428.6283854895594], velocity: [-2.893205244305223, -1.0454478400938076, 0.1796342494342753] }, + { minutes: 240, position: [-32222.920139964448, 26916.254249982234, 2468.599965201271], velocity: [-1.9730079284682722, -2.359335070165993, 0.10253937634520288] }, + { minutes: 360, position: [-41413.95108166376, 7055.516564292151, 2838.909065867919], velocity: [-0.52166507995669, -3.029172205837279, -0.0020668433603716107] }, + { minutes: 480, position: [-39402.72250724206, -14716.424747855935, 2441.3267828497587], velocity: [1.066928186737282, -2.878714618576746, -0.10586572900578169] }, + { minutes: 600, position: [-26751.088890322295, -32515.139814638238, 1384.3886552895422], velocity: [2.366228868673036, -1.9510327987331963, -0.18101849783495322] }, + { minutes: 720, position: [-6874.779753374892, -41530.38328187155, -46.60245457691833], velocity: [3.0274150860695825, -0.4946711766884, -0.2073372595792113] }, + { minutes: 840, position: [14859.520386003434, -39302.58906077851, -1465.0248248056785], velocity: [2.869609882286715, 1.1001239682785855, -0.177514424861651] }, + { minutes: 960, position: [32553.148628017956, -26398.884010218462, -2485.4586592857077], velocity: [1.930064458529891, 2.401574538564374, -0.0992505197877318] }, + { minutes: 1080, position: [41365.67575607255, -6298.099656229482, -2828.052539487785], velocity: [0.45974127600121223, 3.0516802130015304, 0.006431871842950558] }, + { minutes: 1200, position: [38858.83293914656, 15523.393144625268, -2396.868506802762], velocity: [-1.1402114876085487, 2.8675671422479576, 0.1106372170317903] }, + { minutes: 1320, position: [25701.460673977, 33089.42616664674, -1308.6855659883322], velocity: [-2.428713820549314, 1.897381430532486, 0.1846059073899232] }, + { minutes: 1440, position: [5501.081369354283, 41590.27783168586, 138.32522925682395], velocity: [-3.050691873562302, 0.40920305183918687, 0.20795813272363353] } + ] + }, + { + satellite: 24208, + line1: '1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600', + line2: '2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119', + gravity: 'WGS84', + mode: 'improved', + states: [ + { minutes: 0, position: [7534.105376980968, 41266.38278371421, -0.10783144815862661], velocity: [-3.027167267648854, 0.5588487603446687, 0.207982703434235] }, + { minutes: 120, position: [-14289.198203364138, 39469.04523515746, 1428.62818418723], velocity: [-2.8932044456216315, -1.0454476413857825, 0.17963419877760572] }, + { minutes: 240, position: [-32222.913793355492, 26916.247222060523, 2468.599458044722], velocity: [-1.973007343023692, -2.359334446303886, 0.10253934493738763] }, + { minutes: 360, position: [-41413.942002878146, 7055.515020993823, 2838.908442798143], velocity: [-0.5216649322291129, -3.0291713522155894, -0.002066842970654083] }, + { minutes: 480, position: [-39402.71415487568, -14716.420216488754, 2441.326280497224], velocity: [1.0669278468091246, -2.8787138364193052, -0.10586569710711344] }, + { minutes: 600, position: [-26751.08434568564, -32515.130713906114, 1384.3884602637781], velocity: [2.3662281884992993, -1.9510323433005072, -0.1810184472438904] }, + { minutes: 720, position: [-6874.780588224229, -41530.372422532615, -46.60227125020671], velocity: [3.0274143150670074, -0.49467114501777404, -0.20733720796954172] }, + { minutes: 840, position: [14859.514354937357, -39302.5793481533, -1465.0243094182736], velocity: [2.8696092390872288, 1.1001236375230874, -0.17751438596738217] }, + { minutes: 960, position: [32553.13880835104, -26398.877588821324, -2485.457930108104], velocity: [1.9300640613100668, 2.401573978304549, -0.09925049985100207] }, + { minutes: 1080, position: [41365.664097642395, -6298.097716589323, -2828.0517395289357], velocity: [0.45974116668943465, 3.0516795471638005, 0.0064318714723138595] }, + { minutes: 1200, position: [38858.821596331676, 15523.390231297237, -2396.867783450744], velocity: [-1.140211287306589, 2.8675664797642186, 0.11063719610760721] }, + { minutes: 1320, position: [25701.451917379713, 33089.41889273434, -1308.685064899268], velocity: [-2.4287133062263906, 1.8973809091145324, 0.18460586713985475] }, + { minutes: 1440, position: [5501.077261529832, 41590.2678285724, 138.32538907203812], velocity: [-3.050691119557741, 0.409202843890525, 0.20795808005776062] } + ] + }, { satellite: 28057, line1: '1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836', line2: '2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550', gravity: 'WGS72OLD', + mode: 'improved', states: [ { minutes: 0, position: [-2715.2823740490353, -6619.264366924208, -0.013414434536107979], velocity: [-1.0085872729754288, 0.4227820026549733, 7.385272939405877] }, { minutes: 120, position: [-1816.8792088835103, -1835.7876207941226, 6661.07926265826], velocity: [2.3251400699316487, 6.655669326680901, 2.4633945108603617] }, @@ -364,6 +1410,7 @@ export const sgp4NearEarthReferences: SGP4Reference[] = [ line1: '1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836', line2: '2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550', gravity: 'WGS84', + mode: 'improved', states: [ { minutes: 0, position: [-2715.287003707291, -6619.260574810896, 0.025181077284709197], velocity: [-1.0085792691107278, 0.42280075852894716, 7.385271069499136] }, { minutes: 120, position: [-1816.8798319359091, -1835.7822929448066, 6661.098355909296], velocity: [2.3251339812304037, 6.655651908235241, 2.463383158274037] }, diff --git a/tests/sgp4.spec.ts b/tests/sgp4.spec.ts index 2b11635..9f3fa75 100644 --- a/tests/sgp4.spec.ts +++ b/tests/sgp4.spec.ts @@ -448,10 +448,6 @@ describe('SatelliteRecord', () => { ).toThrowError(/Invalid mode: "i" is not one of "improved" or "afspc"/) }) - it('should throw an SGP4Error for an orbit of the deep-space theory, which is not yet resolved', () => { - expect(() => new SatelliteRecord(geostationary)).toThrowError(SGP4Error) - expect(() => new SatelliteRecord(geostationary)).toThrowError(/deep-space theory/) - }) it('should throw an SGP4DecayedError for an element set whose orbit has decayed at its epoch', () => { // A mean motion of 17.5 revolutions per day is of an orbit whose semi-major axis is less than @@ -587,6 +583,32 @@ describe('getStateVectorAtMinutesSinceEpoch', () => { expect(Math.hypot(position.x, position.y, position.z)).toBeGreaterThan(6.6e6) }) + it('should resolve the state vector of a geostationary orbit by the deep-space theory', () => { + const { position, velocity } = new SatelliteRecord(geostationary).getStateVectorAtMinutesSinceEpoch(0) + + // A geostationary orbit is of a radius of ~42,164 km, at ~3.07 km/s: + const radius = Math.hypot(position.x, position.y, position.z) + + const speed = Math.hypot(velocity.x, velocity.y, velocity.z) + + expect(radius).toBeGreaterThan(41.9e6) + expect(radius).toBeLessThan(42.4e6) + expect(speed).toBeGreaterThan(3.0e3) + expect(speed).toBeLessThan(3.15e3) + }) + + it('should propagate a deep-space orbit differently in each mode of operation', () => { + // The mode of operation displaces the sidereal angle at the epoch, which the resonance of a + // geosynchronous orbit is resolved against: + const improved = new SatelliteRecord(geostationary, { mode: 'improved' }) + + const afspc = new SatelliteRecord(geostationary, { mode: 'afspc' }) + + expect(afspc.getStateVectorAtMinutesSinceEpoch(1440)).not.toEqual( + improved.getStateVectorAtMinutesSinceEpoch(1440) + ) + }) + it('should propagate a near-Earth orbit alike in either mode of operation', () => { // The mode of operation displaces the sidereal angle at the epoch alone, which the near-Earth // theory does not resolve the state vector from: