ootk 4.0.9 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (583) hide show
  1. package/README.md +0 -15
  2. package/dist/body/Celestial.d.ts +96 -0
  3. package/dist/body/Celestial.js +124 -0
  4. package/dist/body/Celestial.js.map +1 -0
  5. package/dist/body/Earth.d.ts +68 -0
  6. package/dist/body/Earth.js +198 -0
  7. package/dist/body/Earth.js.map +1 -0
  8. package/dist/body/Moon.d.ts +137 -0
  9. package/dist/body/Moon.js +464 -0
  10. package/dist/body/Moon.js.map +1 -0
  11. package/dist/body/NutationAngles.d.ts +38 -0
  12. package/dist/body/NutationAngles.js +24 -0
  13. package/dist/body/NutationAngles.js.map +1 -0
  14. package/dist/body/PrecessionAngles.d.ts +29 -0
  15. package/dist/body/PrecessionAngles.js +24 -0
  16. package/dist/body/PrecessionAngles.js.map +1 -0
  17. package/dist/body/Sun.d.ts +301 -0
  18. package/dist/body/Sun.js +544 -0
  19. package/dist/body/Sun.js.map +1 -0
  20. package/dist/body/index.d.ts +26 -0
  21. package/dist/body/index.js +27 -0
  22. package/dist/body/index.js.map +1 -0
  23. package/dist/coordinate/ClassicalElements.d.ts +132 -0
  24. package/dist/coordinate/ClassicalElements.js +279 -0
  25. package/dist/coordinate/ClassicalElements.js.map +1 -0
  26. package/dist/coordinate/EquinoctialElements.d.ts +114 -0
  27. package/dist/coordinate/EquinoctialElements.js +172 -0
  28. package/dist/coordinate/EquinoctialElements.js.map +1 -0
  29. package/dist/coordinate/FormatTle.d.ts +95 -0
  30. package/dist/coordinate/FormatTle.js +184 -0
  31. package/dist/coordinate/FormatTle.js.map +1 -0
  32. package/dist/coordinate/Geodetic.d.ts +110 -0
  33. package/dist/coordinate/Geodetic.js +163 -0
  34. package/dist/coordinate/Geodetic.js.map +1 -0
  35. package/dist/coordinate/Hill.d.ts +2 -2
  36. package/dist/coordinate/Hill.js +2 -2
  37. package/dist/coordinate/Hill.js.map +1 -1
  38. package/dist/coordinate/ITRF.d.ts +75 -0
  39. package/dist/coordinate/ITRF.js +134 -0
  40. package/dist/coordinate/ITRF.js.map +1 -0
  41. package/dist/coordinate/J2000.d.ts +65 -0
  42. package/dist/coordinate/J2000.js +120 -0
  43. package/dist/coordinate/J2000.js.map +1 -0
  44. package/dist/coordinate/RIC.d.ts +64 -0
  45. package/dist/coordinate/RIC.js +79 -0
  46. package/dist/coordinate/RIC.js.map +1 -0
  47. package/dist/coordinate/RelativeState.d.ts +70 -0
  48. package/dist/coordinate/RelativeState.js +79 -0
  49. package/dist/coordinate/RelativeState.js.map +1 -0
  50. package/dist/coordinate/StateVector.d.ts +76 -0
  51. package/dist/coordinate/StateVector.js +97 -0
  52. package/dist/coordinate/StateVector.js.map +1 -0
  53. package/dist/coordinate/TEME.d.ts +57 -0
  54. package/dist/coordinate/TEME.js +89 -0
  55. package/dist/coordinate/TEME.js.map +1 -0
  56. package/dist/coordinate/Tle.d.ts +429 -0
  57. package/dist/coordinate/Tle.js +865 -0
  58. package/dist/coordinate/Tle.js.map +1 -0
  59. package/dist/coordinate/index.d.ts +11 -0
  60. package/dist/coordinate/index.js +11 -0
  61. package/dist/coordinate/index.js.map +1 -1
  62. package/dist/coordinate/tle-format-data.d.ts +41 -0
  63. package/dist/coordinate/tle-format-data.js +46 -0
  64. package/dist/coordinate/tle-format-data.js.map +1 -0
  65. package/dist/covariance/CovarianceSample.d.ts +9 -6
  66. package/dist/covariance/CovarianceSample.js +92 -18
  67. package/dist/covariance/CovarianceSample.js.map +1 -1
  68. package/dist/covariance/StateCovariance.d.ts +2 -2
  69. package/dist/covariance/StateCovariance.js +2 -2
  70. package/dist/covariance/StateCovariance.js.map +1 -1
  71. package/dist/covariance/index.d.ts +2 -0
  72. package/dist/covariance/index.js +3 -0
  73. package/dist/covariance/index.js.map +1 -0
  74. package/dist/data/DataHandler.d.ts +66 -0
  75. package/dist/data/DataHandler.js +80 -0
  76. package/dist/data/DataHandler.js.map +1 -0
  77. package/dist/data/values/Egm96Data.d.ts +37 -0
  78. package/dist/data/values/Egm96Data.js +63 -0
  79. package/dist/data/values/Egm96Data.js.map +1 -0
  80. package/dist/data/values/HpAtmosphereData.d.ts +33 -0
  81. package/dist/data/values/HpAtmosphereData.js +58 -0
  82. package/dist/data/values/HpAtmosphereData.js.map +1 -0
  83. package/dist/data/values/HpAtmosphereResult.d.ts +29 -0
  84. package/dist/data/values/HpAtmosphereResult.js +38 -0
  85. package/dist/data/values/HpAtmosphereResult.js.map +1 -0
  86. package/dist/data/values/Iau1980Data.d.ts +36 -0
  87. package/dist/data/values/Iau1980Data.js +52 -0
  88. package/dist/data/values/Iau1980Data.js.map +1 -0
  89. package/dist/data/values/LeapSecond.d.ts +27 -0
  90. package/dist/data/values/LeapSecond.js +35 -0
  91. package/dist/data/values/LeapSecond.js.map +1 -0
  92. package/dist/data/values/LeapSecondData.d.ts +41 -0
  93. package/dist/data/values/LeapSecondData.js +103 -0
  94. package/dist/data/values/LeapSecondData.js.map +1 -0
  95. package/dist/data/values/egm96.d.ts +24 -0
  96. package/dist/data/values/egm96.js +726 -0
  97. package/dist/data/values/egm96.js.map +1 -0
  98. package/dist/data/values/hpAtmosphere.d.ts +24 -0
  99. package/dist/data/values/hpAtmosphere.js +76 -0
  100. package/dist/data/values/hpAtmosphere.js.map +1 -0
  101. package/dist/data/values/iau1980.d.ts +24 -0
  102. package/dist/data/values/iau1980.js +30 -0
  103. package/dist/data/values/iau1980.js.map +1 -0
  104. package/dist/enums/AngularDiameterMethod.d.ts +27 -0
  105. package/dist/enums/AngularDiameterMethod.js +29 -0
  106. package/dist/enums/AngularDiameterMethod.js.map +1 -0
  107. package/dist/enums/AngularDistanceMethod.d.ts +27 -0
  108. package/dist/enums/AngularDistanceMethod.js +29 -0
  109. package/dist/enums/AngularDistanceMethod.js.map +1 -0
  110. package/dist/enums/OrbitRegime.d.ts +30 -0
  111. package/dist/enums/OrbitRegime.js +32 -0
  112. package/dist/enums/OrbitRegime.js.map +1 -0
  113. package/dist/enums/PassType.d.ts +28 -0
  114. package/dist/enums/PassType.js +30 -0
  115. package/dist/enums/PassType.js.map +1 -0
  116. package/dist/enums/Sgp4OpsMode.d.ts +26 -0
  117. package/dist/enums/Sgp4OpsMode.js +28 -0
  118. package/dist/enums/Sgp4OpsMode.js.map +1 -0
  119. package/dist/enums/index.d.ts +5 -0
  120. package/dist/enums/index.js +5 -0
  121. package/dist/enums/index.js.map +1 -1
  122. package/dist/force/AtmosphericDrag.d.ts +2 -2
  123. package/dist/force/AtmosphericDrag.js +3 -6
  124. package/dist/force/AtmosphericDrag.js.map +1 -1
  125. package/dist/force/EarthGravity.d.ts +2 -2
  126. package/dist/force/EarthGravity.js +2 -2
  127. package/dist/force/EarthGravity.js.map +1 -1
  128. package/dist/force/Force.d.ts +2 -2
  129. package/dist/force/Force.js +1 -1
  130. package/dist/force/ForceModel.d.ts +2 -2
  131. package/dist/force/ForceModel.js +2 -2
  132. package/dist/force/ForceModel.js.map +1 -1
  133. package/dist/force/Gravity.d.ts +2 -2
  134. package/dist/force/Gravity.js +2 -2
  135. package/dist/force/Gravity.js.map +1 -1
  136. package/dist/force/SolarRadiationPressure.d.ts +2 -2
  137. package/dist/force/SolarRadiationPressure.js +2 -2
  138. package/dist/force/SolarRadiationPressure.js.map +1 -1
  139. package/dist/force/ThirdBodyGravity.d.ts +2 -2
  140. package/dist/force/ThirdBodyGravity.js +2 -2
  141. package/dist/force/ThirdBodyGravity.js.map +1 -1
  142. package/dist/force/Thrust.d.ts +2 -2
  143. package/dist/force/Thrust.js +2 -2
  144. package/dist/force/Thrust.js.map +1 -1
  145. package/dist/interfaces/BaseObjectParams.d.ts +31 -0
  146. package/dist/interfaces/BaseObjectParams.js +24 -0
  147. package/dist/interfaces/BaseObjectParams.js.map +1 -0
  148. package/dist/interfaces/ClassicalElementsParams.d.ts +33 -0
  149. package/dist/interfaces/ClassicalElementsParams.js +24 -0
  150. package/dist/interfaces/ClassicalElementsParams.js.map +1 -0
  151. package/dist/interfaces/EquinoctialElementsParams.d.ts +35 -0
  152. package/dist/interfaces/EquinoctialElementsParams.js +24 -0
  153. package/dist/interfaces/EquinoctialElementsParams.js.map +1 -0
  154. package/dist/interfaces/GroundPositionParams.d.ts +28 -0
  155. package/dist/interfaces/GroundPositionParams.js +24 -0
  156. package/dist/interfaces/GroundPositionParams.js.map +1 -0
  157. package/dist/interfaces/OmmFormat.d.ts +62 -0
  158. package/dist/interfaces/OmmFormat.js +2 -0
  159. package/dist/interfaces/OmmFormat.js.map +1 -0
  160. package/dist/interfaces/OptionsParams.d.ts +3 -0
  161. package/dist/interfaces/OptionsParams.js +2 -0
  162. package/dist/interfaces/OptionsParams.js.map +1 -0
  163. package/dist/interfaces/RfSensorParams.d.ts +1 -1
  164. package/dist/interfaces/SatelliteParams.d.ts +18 -0
  165. package/dist/interfaces/SatelliteParams.js +2 -0
  166. package/dist/interfaces/SatelliteParams.js.map +1 -0
  167. package/dist/interfaces/SensorParams.d.ts +38 -0
  168. package/dist/interfaces/SensorParams.js +2 -0
  169. package/dist/interfaces/SensorParams.js.map +1 -0
  170. package/dist/interfaces/StarObjectParams.d.ts +10 -0
  171. package/dist/interfaces/StarObjectParams.js +2 -0
  172. package/dist/interfaces/StarObjectParams.js.map +1 -0
  173. package/dist/interfaces/TimeVariables.d.ts +6 -0
  174. package/dist/interfaces/TimeVariables.js +2 -0
  175. package/dist/interfaces/TimeVariables.js.map +1 -0
  176. package/dist/interfaces/index.d.ts +8 -0
  177. package/dist/interpolator/ChebyshevCoefficients.d.ts +5 -5
  178. package/dist/interpolator/ChebyshevCoefficients.js +2 -2
  179. package/dist/interpolator/ChebyshevCoefficients.js.map +1 -1
  180. package/dist/interpolator/ChebyshevInterpolator.d.ts +3 -3
  181. package/dist/interpolator/ChebyshevInterpolator.js +9 -9
  182. package/dist/interpolator/ChebyshevInterpolator.js.map +1 -1
  183. package/dist/interpolator/CubicSpline.d.ts +2 -2
  184. package/dist/interpolator/CubicSpline.js +1 -1
  185. package/dist/interpolator/CubicSplineInterpolator.d.ts +4 -4
  186. package/dist/interpolator/CubicSplineInterpolator.js +10 -10
  187. package/dist/interpolator/CubicSplineInterpolator.js.map +1 -1
  188. package/dist/interpolator/FieldInterpolator.d.ts +1 -1
  189. package/dist/interpolator/FieldInterpolator.js +1 -1
  190. package/dist/interpolator/Interpolator.d.ts +2 -2
  191. package/dist/interpolator/Interpolator.js +2 -2
  192. package/dist/interpolator/Interpolator.js.map +1 -1
  193. package/dist/interpolator/LagrangeInterpolator.d.ts +7 -7
  194. package/dist/interpolator/LagrangeInterpolator.js +2 -2
  195. package/dist/interpolator/LagrangeInterpolator.js.map +1 -1
  196. package/dist/interpolator/StateInterpolator.d.ts +2 -2
  197. package/dist/interpolator/StateInterpolator.js +1 -1
  198. package/dist/interpolator/VerletBlendInterpolator.d.ts +2 -2
  199. package/dist/interpolator/VerletBlendInterpolator.js +2 -2
  200. package/dist/interpolator/VerletBlendInterpolator.js.map +1 -1
  201. package/dist/main.d.ts +15 -5
  202. package/dist/main.js +15 -5
  203. package/dist/main.js.map +1 -1
  204. package/dist/maneuver/TwoBurnOrbitTransfer.d.ts +2 -2
  205. package/dist/maneuver/TwoBurnOrbitTransfer.js +2 -2
  206. package/dist/maneuver/TwoBurnOrbitTransfer.js.map +1 -1
  207. package/dist/maneuver/Waypoint.d.ts +2 -2
  208. package/dist/maneuver/Waypoint.js +2 -2
  209. package/dist/maneuver/Waypoint.js.map +1 -1
  210. package/dist/objects/BaseObject.d.ts +74 -0
  211. package/dist/objects/BaseObject.js +151 -0
  212. package/dist/objects/BaseObject.js.map +1 -0
  213. package/dist/objects/DetailedSatellite.d.ts +3 -2
  214. package/dist/objects/DetailedSatellite.js +6 -4
  215. package/dist/objects/DetailedSatellite.js.map +1 -1
  216. package/dist/objects/DetailedSensor.d.ts +3 -2
  217. package/dist/objects/DetailedSensor.js +2 -2
  218. package/dist/objects/DetailedSensor.js.map +1 -1
  219. package/dist/objects/GroundObject.d.ts +85 -0
  220. package/dist/objects/GroundObject.js +143 -0
  221. package/dist/objects/GroundObject.js.map +1 -0
  222. package/dist/objects/LandObject.d.ts +3 -2
  223. package/dist/objects/LandObject.js +2 -2
  224. package/dist/objects/LandObject.js.map +1 -1
  225. package/dist/objects/Marker.d.ts +2 -2
  226. package/dist/objects/Marker.js +2 -2
  227. package/dist/objects/Marker.js.map +1 -1
  228. package/dist/objects/RfSensor.d.ts +1 -2
  229. package/dist/objects/RfSensor.js +1 -2
  230. package/dist/objects/RfSensor.js.map +1 -1
  231. package/dist/objects/Satellite.d.ts +226 -0
  232. package/dist/objects/Satellite.js +443 -0
  233. package/dist/objects/Satellite.js.map +1 -0
  234. package/dist/objects/Sensor.d.ts +99 -0
  235. package/dist/objects/Sensor.js +238 -0
  236. package/dist/objects/Sensor.js.map +1 -0
  237. package/dist/objects/Star.d.ts +36 -0
  238. package/dist/objects/Star.js +59 -0
  239. package/dist/objects/Star.js.map +1 -0
  240. package/dist/objects/index.d.ts +5 -0
  241. package/dist/objects/index.js +5 -0
  242. package/dist/objects/index.js.map +1 -1
  243. package/dist/observation/Observation.d.ts +2 -2
  244. package/dist/observation/Observation.js +1 -1
  245. package/dist/observation/ObservationOptical.d.ts +6 -6
  246. package/dist/observation/ObservationOptical.js +9 -9
  247. package/dist/observation/ObservationOptical.js.map +1 -1
  248. package/dist/observation/ObservationRadar.d.ts +6 -6
  249. package/dist/observation/ObservationRadar.js +9 -9
  250. package/dist/observation/ObservationRadar.js.map +1 -1
  251. package/dist/observation/ObservationUtils.d.ts +4 -2
  252. package/dist/observation/ObservationUtils.js +16 -2
  253. package/dist/observation/ObservationUtils.js.map +1 -1
  254. package/dist/observation/PropagatorPairs.d.ts +4 -4
  255. package/dist/observation/PropagatorPairs.js +7 -7
  256. package/dist/observation/PropagatorPairs.js.map +1 -1
  257. package/dist/observation/RAE.d.ts +111 -0
  258. package/dist/observation/RAE.js +214 -0
  259. package/dist/observation/RAE.js.map +1 -0
  260. package/dist/observation/RadecGeocentric.d.ts +111 -0
  261. package/dist/observation/RadecGeocentric.js +169 -0
  262. package/dist/observation/RadecGeocentric.js.map +1 -0
  263. package/dist/observation/RadecTopocentric.d.ts +123 -0
  264. package/dist/observation/RadecTopocentric.js +196 -0
  265. package/dist/observation/RadecTopocentric.js.map +1 -0
  266. package/dist/observation/index.d.ts +26 -0
  267. package/dist/observation/index.js +27 -0
  268. package/dist/observation/index.js.map +1 -0
  269. package/dist/operations/BoxMuller.d.ts +2 -2
  270. package/dist/operations/BoxMuller.js +2 -2
  271. package/dist/operations/BoxMuller.js.map +1 -1
  272. package/dist/operations/EulerAngles.d.ts +2 -2
  273. package/dist/operations/EulerAngles.js +2 -2
  274. package/dist/operations/EulerAngles.js.map +1 -1
  275. package/dist/operations/Matrix.d.ts +170 -0
  276. package/dist/operations/Matrix.js +405 -0
  277. package/dist/operations/Matrix.js.map +1 -0
  278. package/dist/operations/Quaternion.d.ts +7 -7
  279. package/dist/operations/Quaternion.js +2 -2
  280. package/dist/operations/Quaternion.js.map +1 -1
  281. package/dist/operations/Random.d.ts +40 -0
  282. package/dist/operations/Random.js +50 -0
  283. package/dist/operations/Random.js.map +1 -0
  284. package/dist/operations/RandomGaussianSource.d.ts +3 -3
  285. package/dist/operations/RandomGaussianSource.js +5 -5
  286. package/dist/operations/RandomGaussianSource.js.map +1 -1
  287. package/dist/operations/Vector.d.ts +262 -0
  288. package/dist/operations/Vector.js +415 -0
  289. package/dist/operations/Vector.js.map +1 -0
  290. package/dist/operations/Vector3D.d.ts +86 -0
  291. package/dist/operations/Vector3D.js +241 -0
  292. package/dist/operations/Vector3D.js.map +1 -0
  293. package/dist/operations/operations.d.ts +26 -0
  294. package/dist/operations/operations.js +27 -0
  295. package/dist/operations/operations.js.map +1 -0
  296. package/dist/optimize/ChebyshevCompressor.d.ts +3 -3
  297. package/dist/optimize/ChebyshevCompressor.js +8 -8
  298. package/dist/optimize/ChebyshevCompressor.js.map +1 -1
  299. package/dist/optimize/DownhillSimplex.d.ts +1 -1
  300. package/dist/optimize/DownhillSimplex.js +1 -1
  301. package/dist/optimize/GoldenSection.d.ts +2 -2
  302. package/dist/optimize/GoldenSection.js +3 -3
  303. package/dist/optimize/PolynomialRegression.d.ts +1 -1
  304. package/dist/optimize/PolynomialRegression.js +2 -2
  305. package/dist/optimize/PolynomialRegression.js.map +1 -1
  306. package/dist/optimize/PolynomicalRegressionResult.d.ts +1 -1
  307. package/dist/optimize/PolynomicalRegressionResult.js +1 -1
  308. package/dist/optimize/SimpleLinearRegression.d.ts +1 -1
  309. package/dist/optimize/SimpleLinearRegression.js +1 -1
  310. package/dist/optimize/SimplexEntry.d.ts +4 -4
  311. package/dist/optimize/SimplexEntry.js +11 -11
  312. package/dist/optimize/SimplexEntry.js.map +1 -1
  313. package/dist/orbit_determination/BatchLeastSquaresOD.d.ts +11 -11
  314. package/dist/orbit_determination/BatchLeastSquaresOD.js +2 -2
  315. package/dist/orbit_determination/BatchLeastSquaresOD.js.map +1 -1
  316. package/dist/orbit_determination/BatchLeastSquaresResult.d.ts +2 -2
  317. package/dist/orbit_determination/BatchLeastSquaresResult.js +1 -1
  318. package/dist/orbit_determination/GibbsIOD.d.ts +2 -2
  319. package/dist/orbit_determination/GibbsIOD.js +2 -2
  320. package/dist/orbit_determination/GibbsIOD.js.map +1 -1
  321. package/dist/orbit_determination/GoodingIOD.d.ts +2 -2
  322. package/dist/orbit_determination/GoodingIOD.js +2 -2
  323. package/dist/orbit_determination/GoodingIOD.js.map +1 -1
  324. package/dist/orbit_determination/HerrickGibbsIOD.d.ts +2 -2
  325. package/dist/orbit_determination/HerrickGibbsIOD.js +2 -2
  326. package/dist/orbit_determination/HerrickGibbsIOD.js.map +1 -1
  327. package/dist/orbit_determination/LambertIOD.d.ts +2 -2
  328. package/dist/orbit_determination/LambertIOD.js +2 -2
  329. package/dist/orbit_determination/LambertIOD.js.map +1 -1
  330. package/dist/orbit_determination/ModifiedGoodingIOD.d.ts +4 -4
  331. package/dist/orbit_determination/ModifiedGoodingIOD.js +2 -2
  332. package/dist/orbit_determination/ModifiedGoodingIOD.js.map +1 -1
  333. package/dist/orbit_determination/index.d.ts +7 -0
  334. package/dist/orbit_determination/index.js +8 -0
  335. package/dist/orbit_determination/index.js.map +1 -0
  336. package/dist/propagator/DormandPrince54Propagator.d.ts +5 -5
  337. package/dist/propagator/DormandPrince54Propagator.js +9 -9
  338. package/dist/propagator/DormandPrince54Propagator.js.map +1 -1
  339. package/dist/propagator/KeplerPropagator.d.ts +6 -6
  340. package/dist/propagator/KeplerPropagator.js +31 -31
  341. package/dist/propagator/KeplerPropagator.js.map +1 -1
  342. package/dist/propagator/Propagator.d.ts +2 -2
  343. package/dist/propagator/Propagator.js +2 -2
  344. package/dist/propagator/Propagator.js.map +1 -1
  345. package/dist/propagator/RkCheckpoint.d.ts +2 -2
  346. package/dist/propagator/RkCheckpoint.js +1 -1
  347. package/dist/propagator/RkResult.d.ts +2 -2
  348. package/dist/propagator/RkResult.js +1 -1
  349. package/dist/propagator/RungeKutta4Propagator.d.ts +3 -3
  350. package/dist/propagator/RungeKutta4Propagator.js +2 -2
  351. package/dist/propagator/RungeKutta4Propagator.js.map +1 -1
  352. package/dist/propagator/RungeKutta89Propagator.d.ts +5 -5
  353. package/dist/propagator/RungeKutta89Propagator.js +1 -1
  354. package/dist/propagator/RungeKutta89Propagator.js.map +1 -1
  355. package/dist/propagator/RungeKuttaAdaptive.d.ts +4 -4
  356. package/dist/propagator/RungeKuttaAdaptive.js +2 -2
  357. package/dist/propagator/RungeKuttaAdaptive.js.map +1 -1
  358. package/dist/propagator/Sgp4Propagator.d.ts +6 -6
  359. package/dist/propagator/Sgp4Propagator.js +15 -15
  360. package/dist/propagator/Sgp4Propagator.js.map +1 -1
  361. package/dist/sgp4/index.d.ts +23 -0
  362. package/dist/sgp4/index.js +24 -0
  363. package/dist/sgp4/index.js.map +1 -0
  364. package/dist/sgp4/sgp4-error.d.ts +22 -0
  365. package/dist/sgp4/sgp4-error.js +44 -0
  366. package/dist/sgp4/sgp4-error.js.map +1 -0
  367. package/dist/sgp4/sgp4.d.ts +99 -0
  368. package/dist/sgp4/sgp4.js +3164 -0
  369. package/dist/sgp4/sgp4.js.map +1 -0
  370. package/dist/smoothing/ExponentialSmoothing.d.ts +2 -2
  371. package/dist/smoothing/ExponentialSmoothing.js +1 -1
  372. package/dist/time/Epoch.d.ts +44 -0
  373. package/dist/time/Epoch.js +109 -0
  374. package/dist/time/Epoch.js.map +1 -0
  375. package/dist/time/EpochGPS.d.ts +42 -0
  376. package/dist/time/EpochGPS.js +70 -0
  377. package/dist/time/EpochGPS.js.map +1 -0
  378. package/dist/time/EpochTAI.d.ts +26 -0
  379. package/dist/time/EpochTAI.js +27 -0
  380. package/dist/time/EpochTAI.js.map +1 -0
  381. package/dist/time/EpochTDB.d.ts +26 -0
  382. package/dist/time/EpochTDB.js +27 -0
  383. package/dist/time/EpochTDB.js.map +1 -0
  384. package/dist/time/EpochTT.d.ts +26 -0
  385. package/dist/time/EpochTT.js +27 -0
  386. package/dist/time/EpochTT.js.map +1 -0
  387. package/dist/time/EpochUTC.d.ts +59 -0
  388. package/dist/time/EpochUTC.js +137 -0
  389. package/dist/time/EpochUTC.js.map +1 -0
  390. package/dist/time/EpochWindow.d.ts +28 -0
  391. package/dist/time/EpochWindow.js +31 -0
  392. package/dist/time/EpochWindow.js.map +1 -0
  393. package/dist/time/TimeStamped.d.ts +39 -0
  394. package/dist/time/TimeStamped.js +42 -0
  395. package/dist/time/TimeStamped.js.map +1 -0
  396. package/dist/time/index.d.ts +8 -0
  397. package/dist/time/index.js +9 -0
  398. package/dist/time/index.js.map +1 -0
  399. package/dist/transforms/TransformCache.d.ts +27 -0
  400. package/dist/transforms/TransformCache.js +41 -0
  401. package/dist/transforms/TransformCache.js.map +1 -0
  402. package/dist/transforms/conversions.d.ts +63 -0
  403. package/dist/transforms/conversions.js +88 -0
  404. package/dist/transforms/conversions.js.map +1 -0
  405. package/dist/transforms/index.d.ts +1 -0
  406. package/dist/transforms/index.js +1 -0
  407. package/dist/transforms/index.js.map +1 -1
  408. package/dist/transforms/transforms.d.ts +166 -2
  409. package/dist/transforms/transforms.js +372 -1
  410. package/dist/transforms/transforms.js.map +1 -1
  411. package/dist/types/types.d.ts +675 -3
  412. package/dist/types/types.js +37 -1
  413. package/dist/types/types.js.map +1 -1
  414. package/dist/utils/constants.d.ts +80 -0
  415. package/dist/utils/constants.js +87 -0
  416. package/dist/utils/constants.js.map +1 -0
  417. package/dist/utils/create-covariance-from-tle.d.ts +18 -0
  418. package/dist/utils/create-covariance-from-tle.js +57 -0
  419. package/dist/utils/create-covariance-from-tle.js.map +1 -0
  420. package/dist/utils/functions.d.ts +228 -0
  421. package/dist/utils/functions.js +476 -0
  422. package/dist/utils/functions.js.map +1 -1
  423. package/dist/utils/index.d.ts +4 -1
  424. package/dist/utils/index.js +4 -1
  425. package/dist/utils/index.js.map +1 -1
  426. package/dist/utils/jacobian.d.ts +7 -1
  427. package/dist/utils/jacobian.js +7 -2
  428. package/dist/utils/jacobian.js.map +1 -1
  429. package/dist/utils/linearDistance.d.ts +8 -0
  430. package/dist/utils/linearDistance.js +10 -0
  431. package/dist/utils/linearDistance.js.map +1 -0
  432. package/package.json +5 -8
  433. package/src/body/Celestial.ts +134 -0
  434. package/src/body/Earth.ts +260 -0
  435. package/src/body/Moon.ts +556 -0
  436. package/src/body/NutationAngles.ts +40 -0
  437. package/src/body/PrecessionAngles.ts +31 -0
  438. package/src/body/Sun.ts +665 -0
  439. package/src/body/index.ts +27 -0
  440. package/src/body/suncalc.LICENSE.md +18 -0
  441. package/src/coordinate/ClassicalElements.ts +327 -0
  442. package/src/coordinate/EquinoctialElements.ts +189 -0
  443. package/src/coordinate/FormatTle.ts +214 -0
  444. package/src/coordinate/Geodetic.ts +186 -0
  445. package/src/coordinate/Hill.ts +2 -2
  446. package/src/coordinate/ITRF.ts +146 -0
  447. package/src/coordinate/J2000.ts +130 -0
  448. package/src/coordinate/RIC.ts +87 -0
  449. package/src/coordinate/RelativeState.ts +101 -0
  450. package/src/coordinate/StateVector.ts +123 -0
  451. package/src/coordinate/TEME.ts +97 -0
  452. package/src/coordinate/Tle.ts +1024 -0
  453. package/src/coordinate/index.ts +11 -0
  454. package/src/coordinate/tle-format-data.ts +47 -0
  455. package/src/covariance/CovarianceSample.ts +117 -19
  456. package/src/covariance/StateCovariance.ts +2 -2
  457. package/src/covariance/index.ts +2 -0
  458. package/src/data/DataHandler.ts +88 -0
  459. package/src/data/values/Egm96Data.ts +75 -0
  460. package/src/data/values/HpAtmosphereData.ts +76 -0
  461. package/src/data/values/HpAtmosphereResult.ts +41 -0
  462. package/src/data/values/Iau1980Data.ts +63 -0
  463. package/src/data/values/LeapSecond.ts +37 -0
  464. package/src/data/values/LeapSecondData.ts +113 -0
  465. package/src/data/values/egm96.ts +728 -0
  466. package/src/data/values/hpAtmosphere.ts +79 -0
  467. package/src/data/values/iau1980.ts +32 -0
  468. package/src/enums/AngularDiameterMethod.ts +28 -0
  469. package/src/enums/AngularDistanceMethod.ts +28 -0
  470. package/src/enums/OrbitRegime.ts +31 -0
  471. package/src/enums/PassType.ts +29 -0
  472. package/src/enums/Sgp4OpsMode.ts +27 -0
  473. package/src/enums/index.ts +5 -0
  474. package/src/force/AtmosphericDrag.ts +2 -4
  475. package/src/force/EarthGravity.ts +2 -2
  476. package/src/force/Force.ts +2 -2
  477. package/src/force/ForceModel.ts +2 -2
  478. package/src/force/Gravity.ts +2 -2
  479. package/src/force/SolarRadiationPressure.ts +2 -2
  480. package/src/force/ThirdBodyGravity.ts +2 -2
  481. package/src/force/Thrust.ts +2 -2
  482. package/src/interfaces/BaseObjectParams.ts +33 -0
  483. package/src/interfaces/ClassicalElementsParams.ts +35 -0
  484. package/src/interfaces/EquinoctialElementsParams.ts +37 -0
  485. package/src/interfaces/GroundPositionParams.ts +30 -0
  486. package/src/interfaces/OmmFormat.ts +63 -0
  487. package/src/interfaces/OptionsParams.ts +3 -0
  488. package/src/interfaces/RfSensorParams.ts +1 -1
  489. package/src/interfaces/SatelliteParams.ts +20 -0
  490. package/src/interfaces/SensorParams.ts +39 -0
  491. package/src/interfaces/StarObjectParams.ts +11 -0
  492. package/src/interfaces/TimeVariables.ts +7 -0
  493. package/src/interfaces/index.ts +8 -0
  494. package/src/interpolator/ChebyshevCoefficients.ts +5 -5
  495. package/src/interpolator/ChebyshevInterpolator.ts +10 -10
  496. package/src/interpolator/CubicSpline.ts +2 -2
  497. package/src/interpolator/CubicSplineInterpolator.ts +8 -8
  498. package/src/interpolator/FieldInterpolator.ts +1 -1
  499. package/src/interpolator/Interpolator.ts +2 -2
  500. package/src/interpolator/LagrangeInterpolator.ts +7 -7
  501. package/src/interpolator/StateInterpolator.ts +2 -2
  502. package/src/interpolator/VerletBlendInterpolator.ts +2 -2
  503. package/src/main.ts +15 -5
  504. package/src/maneuver/TwoBurnOrbitTransfer.ts +2 -2
  505. package/src/maneuver/Waypoint.ts +2 -2
  506. package/src/objects/BaseObject.ts +171 -0
  507. package/src/objects/DetailedSatellite.ts +5 -4
  508. package/src/objects/DetailedSensor.ts +3 -2
  509. package/src/objects/GroundObject.ts +176 -0
  510. package/src/objects/LandObject.ts +3 -2
  511. package/src/objects/Marker.ts +2 -2
  512. package/src/objects/RfSensor.ts +1 -2
  513. package/src/objects/Satellite.ts +552 -0
  514. package/src/objects/Sensor.ts +279 -0
  515. package/src/objects/Star.ts +96 -0
  516. package/src/objects/index.ts +5 -0
  517. package/src/observation/Observation.ts +2 -2
  518. package/src/observation/ObservationOptical.ts +7 -7
  519. package/src/observation/ObservationRadar.ts +10 -6
  520. package/src/observation/ObservationUtils.ts +31 -2
  521. package/src/observation/PropagatorPairs.ts +3 -3
  522. package/src/observation/RAE.ts +261 -0
  523. package/src/observation/RadecGeocentric.ts +206 -0
  524. package/src/observation/RadecTopocentric.ts +241 -0
  525. package/src/observation/index.ts +27 -0
  526. package/src/operations/BoxMuller.ts +2 -2
  527. package/src/operations/EulerAngles.ts +2 -2
  528. package/src/operations/Matrix.ts +473 -0
  529. package/src/operations/Quaternion.ts +7 -7
  530. package/src/operations/Random.ts +54 -0
  531. package/src/operations/RandomGaussianSource.ts +5 -5
  532. package/src/operations/Vector.ts +484 -0
  533. package/src/operations/Vector3D.ts +289 -0
  534. package/src/operations/operations.ts +27 -0
  535. package/src/optimize/ChebyshevCompressor.ts +6 -6
  536. package/src/optimize/DownhillSimplex.ts +1 -1
  537. package/src/optimize/GoldenSection.ts +3 -3
  538. package/src/optimize/PolynomialRegression.ts +2 -2
  539. package/src/optimize/PolynomicalRegressionResult.ts +1 -1
  540. package/src/optimize/SimpleLinearRegression.ts +1 -1
  541. package/src/optimize/SimplexEntry.ts +9 -9
  542. package/src/orbit_determination/BatchLeastSquaresOD.ts +11 -11
  543. package/src/orbit_determination/BatchLeastSquaresResult.ts +2 -2
  544. package/src/orbit_determination/GibbsIOD.ts +4 -2
  545. package/src/orbit_determination/GoodingIOD.ts +2 -2
  546. package/src/orbit_determination/HerrickGibbsIOD.ts +2 -2
  547. package/src/orbit_determination/LambertIOD.ts +2 -2
  548. package/src/orbit_determination/ModifiedGoodingIOD.ts +4 -4
  549. package/src/orbit_determination/index.ts +7 -0
  550. package/src/propagator/DormandPrince54Propagator.ts +9 -9
  551. package/src/propagator/KeplerPropagator.ts +31 -31
  552. package/src/propagator/Propagator.ts +2 -2
  553. package/src/propagator/RkCheckpoint.ts +2 -2
  554. package/src/propagator/RkResult.ts +2 -2
  555. package/src/propagator/RungeKutta4Propagator.ts +3 -3
  556. package/src/propagator/RungeKutta89Propagator.ts +5 -5
  557. package/src/propagator/RungeKuttaAdaptive.ts +4 -4
  558. package/src/propagator/Sgp4Propagator.ts +14 -14
  559. package/src/sgp4/index.ts +24 -0
  560. package/src/sgp4/sgp4-error.ts +53 -0
  561. package/src/sgp4/sgp4.LICENSE.md +28 -0
  562. package/src/sgp4/sgp4.ts +3983 -0
  563. package/src/smoothing/ExponentialSmoothing.ts +2 -2
  564. package/src/time/Epoch.ts +128 -0
  565. package/src/time/EpochGPS.ts +76 -0
  566. package/src/time/EpochTAI.ts +27 -0
  567. package/src/time/EpochTDB.ts +27 -0
  568. package/src/time/EpochTT.ts +27 -0
  569. package/src/time/EpochUTC.ts +188 -0
  570. package/src/time/EpochWindow.ts +33 -0
  571. package/src/time/TimeStamped.ts +46 -0
  572. package/src/time/index.ts +8 -0
  573. package/src/transforms/TransformCache.ts +46 -0
  574. package/src/transforms/conversions.ts +98 -0
  575. package/src/transforms/index.ts +1 -0
  576. package/src/transforms/transforms.ts +478 -2
  577. package/src/types/types.ts +722 -3
  578. package/src/utils/constants.ts +113 -0
  579. package/src/utils/create-covariance-from-tle.ts +75 -0
  580. package/src/utils/functions.ts +562 -0
  581. package/src/utils/index.ts +4 -1
  582. package/src/utils/jacobian.ts +7 -3
  583. package/src/utils/linearDistance.ts +11 -0
@@ -0,0 +1,552 @@
1
+ /**
2
+ * @author @thkruz Theodore Kruczek
3
+ * @description Orbital Object ToolKit (ootk) is a collection of tools for working
4
+ * with satellites and other orbital objects.
5
+ * @license AGPL-3.0-or-later
6
+ * @copyright (c) 2025 Kruczek Labs LLC
7
+ *
8
+ * Many of the classes are based off of the work of @david-rc-dayton and his
9
+ * Pious Squid library (https://github.com/david-rc-dayton/pious_squid) which
10
+ * is licensed under the MIT license.
11
+ *
12
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
13
+ * terms of the GNU Affero General Public License as published by the Free Software
14
+ * Foundation, either version 3 of the License, or (at your option) any later version.
15
+ *
16
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
17
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18
+ * See the GNU Affero General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU Affero General Public License along with
21
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
22
+ */
23
+
24
+ import type { ClassicalElements } from '../coordinate/index.js';
25
+ import { Geodetic } from '../coordinate/Geodetic.js';
26
+ import { ITRF } from '../coordinate/ITRF.js';
27
+ import { J2000 } from '../coordinate/J2000.js';
28
+ import { RIC } from '../coordinate/RIC.js';
29
+ import { Tle } from '../coordinate/Tle.js';
30
+ import { OptionsParams } from '../interfaces/OptionsParams.js';
31
+ import { SatelliteParams } from '../interfaces/SatelliteParams.js';
32
+ import { RAE } from '../observation/RAE.js';
33
+ import { Vector3D } from '../operations/Vector3D.js';
34
+ import { EpochUTC } from '../time/EpochUTC.js';
35
+ import { ecf2rae, eci2ecf, eci2lla, jday } from '../transforms/index.js';
36
+ import {
37
+ Degrees,
38
+ EcfVec3,
39
+ EciVec3,
40
+ GreenwichMeanSiderealTime,
41
+ Kilometers,
42
+ KilometersPerSecond,
43
+ LlaVec3,
44
+ Minutes,
45
+ PosVel,
46
+ Radians,
47
+ RaeVec3,
48
+ SatelliteRecord,
49
+ Seconds,
50
+ TleLine1,
51
+ TleLine2,
52
+ } from '../types/types.js';
53
+ import { DEG2RAD, MILLISECONDS_TO_DAYS, MINUTES_PER_DAY, RAD2DEG } from '../utils/constants.js';
54
+ import { dopplerFactor } from './../utils/functions.js';
55
+ import { BaseObject } from './BaseObject.js';
56
+ import { GroundObject } from './GroundObject.js';
57
+ import { OmmDataFormat, OmmParsedDataFormat } from '../interfaces/OmmFormat.js';
58
+ import { Sgp4 } from '../main.js';
59
+
60
+ /**
61
+ * Represents a satellite object with orbital information and methods for
62
+ * calculating its position and other properties.
63
+ */
64
+ export class Satellite extends BaseObject {
65
+ apogee!: Kilometers;
66
+ argOfPerigee!: Degrees;
67
+ bstar!: number;
68
+ eccentricity!: number;
69
+ epochDay!: number;
70
+ epochYear!: number;
71
+ inclination!: Degrees;
72
+ intlDes!: string;
73
+ meanAnomaly!: Degrees;
74
+ meanMoDev1!: number;
75
+ meanMoDev2!: number;
76
+ meanMotion!: number;
77
+ options: OptionsParams;
78
+ perigee!: Kilometers;
79
+ period!: Minutes;
80
+ rightAscension!: Degrees;
81
+ satrec!: SatelliteRecord;
82
+ /** The satellite catalog number as listed in the TLE. */
83
+ sccNum!: string;
84
+ /** The 5 digit alpha-numeric satellite catalog number. */
85
+ sccNum5!: string;
86
+ /** The 6 digit numeric satellite catalog number. */
87
+ sccNum6!: string;
88
+ tle1!: TleLine1;
89
+ tle2!: TleLine2;
90
+ /** The semi-major axis of the satellite's orbit. */
91
+ semiMajorAxis!: Kilometers;
92
+ /** The semi-minor axis of the satellite's orbit. */
93
+ semiMinorAxis!: Kilometers;
94
+
95
+ constructor(info: SatelliteParams, options?: OptionsParams) {
96
+ super(info);
97
+
98
+ if (info.tle1 && info.tle2) {
99
+ this.parseTleAndUpdateOrbit_(info.tle1, info.tle2, info.sccNum);
100
+ } else if (info.omm) {
101
+ this.parseOmmAndUpdateOrbit_(info.omm);
102
+ } else {
103
+ throw new Error('tle1 and tle2 or omm must be provided to create a Satellite object.');
104
+ }
105
+
106
+ this.options = options ?? {
107
+ notes: '',
108
+ };
109
+ }
110
+
111
+ private parseTleAndUpdateOrbit_(tle1: TleLine1, tle2: TleLine2, sccNum?: string) {
112
+ const tleData = Tle.parse(tle1, tle2);
113
+
114
+ this.tle1 = tle1;
115
+ this.tle2 = tle2;
116
+
117
+ this.sccNum = sccNum ?? tleData.satNum.toString();
118
+ this.sccNum5 = Tle.convert6DigitToA5(this.sccNum);
119
+ this.sccNum6 = Tle.convertA5to6Digit(this.sccNum5);
120
+ this.intlDes = tleData.intlDes;
121
+ this.epochYear = tleData.epochYear;
122
+ this.epochDay = tleData.epochDay;
123
+ this.meanMoDev1 = tleData.meanMoDev1;
124
+ this.meanMoDev2 = tleData.meanMoDev2;
125
+ this.bstar = tleData.bstar;
126
+ this.inclination = tleData.inclination;
127
+ this.rightAscension = tleData.rightAscension;
128
+ this.eccentricity = tleData.eccentricity;
129
+ this.argOfPerigee = tleData.argOfPerigee;
130
+ this.meanAnomaly = tleData.meanAnomaly;
131
+ this.meanMotion = tleData.meanMotion;
132
+ this.period = tleData.period;
133
+ this.semiMajorAxis = ((8681663.653 / this.meanMotion) ** (2 / 3)) as Kilometers;
134
+ this.semiMinorAxis = (this.semiMajorAxis * Math.sqrt(1 - this.eccentricity ** 2)) as Kilometers;
135
+ this.apogee = (this.semiMajorAxis * (1 + this.eccentricity) - 6371) as Kilometers;
136
+ this.perigee = (this.semiMajorAxis * (1 - this.eccentricity) - 6371) as Kilometers;
137
+ this.satrec = Sgp4.createSatrec(tle1, tle2);
138
+ }
139
+
140
+ private parseOmmAndUpdateOrbit_(omm: OmmDataFormat) {
141
+ this.sccNum = omm.NORAD_CAT_ID.padStart(5, '0');
142
+ this.sccNum5 = Tle.convert6DigitToA5(omm.NORAD_CAT_ID);
143
+ this.sccNum6 = Tle.convertA5to6Digit(this.sccNum5);
144
+ this.intlDes = omm.OBJECT_ID;
145
+ const YYYY = omm.EPOCH.slice(0, 4);
146
+ const MM = omm.EPOCH.slice(5, 7);
147
+ const DD = omm.EPOCH.slice(8, 10);
148
+ const hh = omm.EPOCH.slice(11, 13);
149
+ const mm = omm.EPOCH.slice(14, 16);
150
+ const ss = omm.EPOCH.slice(17, 23);
151
+ const epochDateObj = Date.UTC(Number(YYYY), Number(MM) - 1, Number(DD), Number(hh), Number(mm), Number(ss));
152
+ const dayOfYear = (epochDateObj - Date.UTC(Number(YYYY), 0, 0)) / 86400000;
153
+
154
+ const ommParsed: OmmParsedDataFormat = {
155
+ ...omm,
156
+ epoch: {
157
+ year: Number(YYYY),
158
+ month: Number(MM),
159
+ day: Number(DD),
160
+ hour: Number(hh),
161
+ minute: Number(mm),
162
+ second: Number(ss),
163
+ doy: dayOfYear,
164
+ },
165
+ };
166
+
167
+ this.epochYear = parseInt(YYYY.slice(2, 4));
168
+ this.epochDay = dayOfYear;
169
+ this.meanMoDev1 = parseFloat(omm.MEAN_MOTION_DOT);
170
+ this.meanMoDev2 = parseFloat(omm.MEAN_MOTION_DDOT);
171
+ this.bstar = parseFloat(omm.BSTAR);
172
+ this.inclination = parseFloat(omm.INCLINATION) as Degrees;
173
+ this.rightAscension = parseFloat(omm.RA_OF_ASC_NODE) as Degrees;
174
+ this.eccentricity = parseFloat(omm.ECCENTRICITY);
175
+ this.argOfPerigee = parseFloat(omm.ARG_OF_PERICENTER) as Degrees;
176
+ this.meanAnomaly = parseFloat(omm.MEAN_ANOMALY) as Degrees;
177
+ this.meanMotion = parseFloat(omm.MEAN_MOTION);
178
+ this.period = 1440 / this.meanMotion as Minutes;
179
+ this.semiMajorAxis = ((8681663.653 / this.meanMotion) ** (2 / 3)) as Kilometers;
180
+ this.semiMinorAxis = (this.semiMajorAxis * Math.sqrt(1 - this.eccentricity ** 2)) as Kilometers;
181
+ this.apogee = (this.semiMajorAxis * (1 + this.eccentricity) - 6371) as Kilometers;
182
+ this.perigee = (this.semiMajorAxis * (1 - this.eccentricity) - 6371) as Kilometers;
183
+ this.satrec = Sgp4.createSatrecFromOmm(ommParsed);
184
+ }
185
+
186
+ /**
187
+ * Checks if the object is a satellite.
188
+ * @returns True if the object is a satellite, false otherwise.
189
+ */
190
+ override isSatellite(): boolean {
191
+ return true;
192
+ }
193
+
194
+ /**
195
+ * Returns whether the satellite is static or not.
196
+ * @returns True if the satellite is static, false otherwise.
197
+ */
198
+ override isStatic(): boolean {
199
+ return false;
200
+ }
201
+
202
+ /**
203
+ * Checks if the given SatelliteRecord object is valid by checking if its properties are all numbers.
204
+ * @param satrec - The SatelliteRecord object to check.
205
+ * @returns True if the SatelliteRecord object is valid, false otherwise.
206
+ */
207
+ static isValidSatrec(satrec: SatelliteRecord): boolean {
208
+ if (
209
+ isNaN(satrec.a) ||
210
+ isNaN(satrec.am) ||
211
+ isNaN(satrec.alta) ||
212
+ isNaN(satrec.em) ||
213
+ isNaN(satrec.mo) ||
214
+ isNaN(satrec.ecco) ||
215
+ isNaN(satrec.no)
216
+ ) {
217
+ return false;
218
+ }
219
+
220
+ return true;
221
+ }
222
+
223
+ ageOfElset(nowInput?: Date, outputUnits: 'days' | 'hours' | 'minutes' | 'seconds' = 'days'): number {
224
+ return Tle.calcElsetAge(this.tle1, nowInput, outputUnits);
225
+ }
226
+
227
+ editTle(tle1: TleLine1, tle2: TleLine2, sccNum?: string): void {
228
+ this.parseTleAndUpdateOrbit_(tle1, tle2, sccNum);
229
+ }
230
+
231
+ /**
232
+ * Calculates the azimuth angle of the satellite relative to the given sensor at the specified date. If no date is
233
+ * provided, the current time of the satellite is used.
234
+ * @variation optimized
235
+ * @param observer - The observer's position on the ground.
236
+ * @param date - The date at which to calculate the azimuth angle. Optional, defaults to the current date.
237
+ * @returns The azimuth angle of the satellite relative to the given sensor at the specified date.
238
+ */
239
+ az(observer: GroundObject, date: Date = new Date()): Degrees | null {
240
+ const rae = this.rae(observer, date);
241
+
242
+ if (!rae) {
243
+ return null;
244
+ }
245
+
246
+ return (rae.az * RAD2DEG) as Degrees;
247
+ }
248
+
249
+ /**
250
+ * Calculates the RAE (Range, Azimuth, Elevation) values for a given sensor and date. If no date is provided, the
251
+ * current time is used.
252
+ * @variation expanded
253
+ * @param observer - The observer's position on the ground.
254
+ * @param date - The date at which to calculate the RAE values. Optional, defaults to the current date.
255
+ * @returns The RAE values for the given sensor and date.
256
+ */
257
+ toRae(observer: GroundObject, date: Date = new Date()): RAE | null {
258
+ const rae = this.rae(observer, date);
259
+
260
+ if (!rae) {
261
+ return null;
262
+ }
263
+
264
+ const rae2 = this.rae(observer, new Date(date.getTime() + 1000));
265
+
266
+ if (!rae2) {
267
+ return null;
268
+ }
269
+
270
+ const epoch = new EpochUTC(date.getTime() / 1000 as Seconds);
271
+ const rangeRate = rae2.rng - rae.rng;
272
+ const azimuthRate = rae2.az - rae.az;
273
+ const elevationRate = rae2.el - rae.el;
274
+
275
+ return new RAE(
276
+ epoch,
277
+ rae.rng,
278
+ (rae.az * DEG2RAD) as Radians,
279
+ (rae.el * DEG2RAD) as Radians,
280
+ rangeRate,
281
+ azimuthRate,
282
+ elevationRate,
283
+ );
284
+ }
285
+
286
+ /**
287
+ * Calculates ECF position at a given time.
288
+ * @variation optimized
289
+ * @param date - The date at which to calculate the ECF position. Optional, defaults to the current date.
290
+ * @returns The ECF position at the specified date.
291
+ */
292
+ ecf(date: Date = new Date()): EcfVec3<Kilometers> | null {
293
+ const { gmst } = Satellite.calculateTimeVariables(date);
294
+ const eci = this.eci(date);
295
+
296
+ if (!eci) {
297
+ return null;
298
+ }
299
+
300
+ return eci2ecf(eci.position, gmst);
301
+ }
302
+
303
+ /**
304
+ * Calculates ECI position at a given time.
305
+ * @variation optimized
306
+ * @param date - The date at which to calculate the ECI position. Optional, defaults to the current date.
307
+ * @param j - Julian date. Optional, defaults to null.
308
+ * @param gmst - Greenwich Mean Sidereal Time. Optional, defaults to null.
309
+ * @returns The ECI position at the specified date.
310
+ */
311
+ eci(date?: Date, j?: number, gmst?: GreenwichMeanSiderealTime): PosVel | null {
312
+ date ??= new Date();
313
+ const { m } = Satellite.calculateTimeVariables(date, this.satrec, j, gmst);
314
+
315
+ if (!m) {
316
+ return null;
317
+ }
318
+ const pv = Sgp4.propagate(this.satrec, m);
319
+
320
+ if (!pv.position || !pv.velocity) {
321
+ return null;
322
+ }
323
+
324
+ return pv as PosVel;
325
+ }
326
+
327
+ /**
328
+ * Calculates the J2000 coordinates for a given date. If no date is provided, the current time is used.
329
+ * @variation expanded
330
+ * @param date - The date for which to calculate the J2000 coordinates, defaults to the current date.
331
+ * @returns The J2000 coordinates for the specified date.
332
+ * @throws Error if propagation fails.
333
+ */
334
+ toJ2000(date: Date = new Date()): J2000 {
335
+ const { m } = Satellite.calculateTimeVariables(date, this.satrec);
336
+
337
+ if (!m) {
338
+ throw new Error('Propagation failed!');
339
+ }
340
+ const pv = Sgp4.propagate(this.satrec, m);
341
+
342
+ if (!pv.position) {
343
+ throw new Error('Propagation failed!');
344
+ } else {
345
+ const p = pv.position as EciVec3;
346
+ const v = pv.velocity as EciVec3<KilometersPerSecond>;
347
+
348
+ const epoch = new EpochUTC(date.getTime() / 1000 as Seconds);
349
+ const pos = new Vector3D(p.x, p.y, p.z);
350
+ const vel = new Vector3D(v.x, v.y, v.z);
351
+
352
+ return new J2000(epoch, pos, vel);
353
+ }
354
+ }
355
+
356
+ /**
357
+ * Returns the elevation angle of the satellite as seen by the given sensor at the specified time.
358
+ * @variation optimized
359
+ * @param observer - The observer's position on the ground.
360
+ * @param date - The date at which to calculate the elevation angle. Optional, defaults to the current date.
361
+ * @returns The elevation angle of the satellite as seen by the given sensor at the specified time.
362
+ */
363
+ el(observer: GroundObject, date: Date = new Date()): Degrees | null {
364
+ const rae = this.rae(observer, date);
365
+
366
+ if (!rae) {
367
+ return null;
368
+ }
369
+
370
+ return (rae.el * RAD2DEG) as Degrees;
371
+ }
372
+
373
+ /**
374
+ * Calculates LLA position at a given time.
375
+ * @variation optimized
376
+ * @param date - The date at which to calculate the LLA position. Optional, defaults to the current date.
377
+ * @param j - Julian date. Optional, defaults to null.
378
+ * @param gmst - Greenwich Mean Sidereal Time. Optional, defaults to null.
379
+ * @returns The LLA position at the specified date.
380
+ */
381
+ lla(date?: Date, j?: number, gmst?: GreenwichMeanSiderealTime):
382
+ LlaVec3<Degrees, Kilometers> | null {
383
+ date ??= new Date();
384
+ if (!j || !gmst) {
385
+ const timeVar = Satellite.calculateTimeVariables(date, this.satrec);
386
+
387
+ j = timeVar.j;
388
+ gmst = timeVar.gmst;
389
+ }
390
+
391
+ const eci = this.eci(date, j, gmst);
392
+
393
+ if (!eci) {
394
+ return null;
395
+ }
396
+
397
+ const pos = eci.position;
398
+ const lla = eci2lla(pos, gmst);
399
+
400
+ return lla;
401
+ }
402
+
403
+ /**
404
+ * Converts the satellite's position to geodetic coordinates.
405
+ * @variation expanded
406
+ * @param date The date for which to calculate the geodetic coordinates. Defaults to the current date.
407
+ * @returns The geodetic coordinates of the satellite.
408
+ */
409
+ toGeodetic(date: Date = new Date()): Geodetic {
410
+ return this.toJ2000(date).toITRF().toGeodetic();
411
+ }
412
+
413
+ /**
414
+ * Converts the satellite's position to the International Terrestrial Reference Frame (ITRF) at the specified date.
415
+ * If no date is provided, the current date is used.
416
+ * @variation expanded
417
+ * @param date The date for which to convert the position. Defaults to the current date.
418
+ * @returns The satellite's position in the ITRF at the specified date.
419
+ */
420
+ toITRF(date: Date = new Date()): ITRF {
421
+ return this.toJ2000(date).toITRF();
422
+ }
423
+
424
+ /**
425
+ * Converts the current satellite's position to the Reference-Inertial-Celestial (RIC) frame
426
+ * relative to the specified reference satellite at the given date.
427
+ * @variation expanded
428
+ * @param reference The reference satellite.
429
+ * @param date The date for which to calculate the RIC frame. Defaults to the current date.
430
+ * @returns The RIC frame representing the current satellite's position relative to the reference satellite.
431
+ */
432
+ toRIC(reference: Satellite, date: Date = new Date()): RIC {
433
+ return RIC.fromJ2000(this.toJ2000(date), reference.toJ2000(date));
434
+ }
435
+
436
+ /**
437
+ * Converts the satellite object to a TLE (Two-Line Element) object.
438
+ * @returns The TLE object representing the satellite.
439
+ */
440
+ toTle(): Tle {
441
+ return new Tle(this.tle1, this.tle2);
442
+ }
443
+
444
+ /**
445
+ * Converts the satellite's position to classical orbital elements.
446
+ * @param date The date for which to calculate the classical elements. Defaults to the current date.
447
+ * @returns The classical orbital elements of the satellite.
448
+ */
449
+ toClassicalElements(date: Date = new Date()): ClassicalElements {
450
+ return this.toJ2000(date).toClassicalElements();
451
+ }
452
+
453
+ /**
454
+ * Calculates the RAE (Range, Azimuth, Elevation) vector for a given sensor and time.
455
+ * @variation optimized
456
+ * @param observer - The observer's position on the ground.
457
+ * @param date - The date at which to calculate the RAE vector. Optional, defaults to the current date.
458
+ * @param j - Julian date. Optional, defaults to null.
459
+ * @param gmst - Greenwich Mean Sidereal Time. Optional, defaults to null.
460
+ * @returns The RAE vector for the given sensor and time.
461
+ */
462
+ rae(observer: GroundObject, date?: Date, j?: number, gmst?: GreenwichMeanSiderealTime):
463
+ RaeVec3<Kilometers, Degrees> | null {
464
+ date ??= new Date();
465
+ gmst ??= Satellite.calculateTimeVariables(date, this.satrec).gmst;
466
+ const eci = this.eci(date, j, gmst);
467
+
468
+ if (!eci) {
469
+ return null;
470
+ }
471
+
472
+ const ecf = eci2ecf(eci.position, gmst);
473
+
474
+ return ecf2rae(observer, ecf);
475
+ }
476
+
477
+ /**
478
+ * Returns the range of the satellite from the given sensor at the specified time.
479
+ * @variation optimized
480
+ * @param observer - The observer's position on the ground.
481
+ * @param date - The date at which to calculate the range. Optional, defaults to the current date.
482
+ * @returns The range of the satellite from the given sensor at the specified time.
483
+ */
484
+ rng(observer: GroundObject, date: Date = new Date()): Kilometers | null {
485
+ const rae = this.rae(observer, date);
486
+
487
+ if (!rae) {
488
+ return null;
489
+ }
490
+
491
+ return rae.rng;
492
+ }
493
+
494
+ /**
495
+ * Applies the Doppler effect to the given frequency based on the observer's position and the date.
496
+ * @param freq - The frequency to apply the Doppler effect to.
497
+ * @param observer - The observer's position on the ground.
498
+ * @param date - The date at which to calculate the Doppler effect. Optional, defaults to the current date.
499
+ * @returns The frequency after applying the Doppler effect.
500
+ */
501
+ applyDoppler(freq: number, observer: GroundObject, date?: Date): number | null {
502
+ const doppler = this.dopplerFactor(observer, date);
503
+
504
+ if (!doppler) {
505
+ return null;
506
+ }
507
+
508
+ return freq * doppler;
509
+ }
510
+
511
+ /**
512
+ * Calculates the Doppler factor for the satellite.
513
+ * @param observer The observer's ground position.
514
+ * @param date The optional date for which to calculate the Doppler factor. If not provided, the current date is used.
515
+ * @returns The calculated Doppler factor.
516
+ */
517
+ dopplerFactor(observer: GroundObject, date?: Date): number | null {
518
+ const position = this.eci(date);
519
+
520
+ if (!position) {
521
+ return null;
522
+ }
523
+
524
+ return dopplerFactor(observer.eci(date), position.position, position.velocity);
525
+ }
526
+
527
+ /**
528
+ * Calculates the time variables for a given date relative to the TLE epoch.
529
+ * @param date Date to calculate
530
+ * @param satrec Satellite orbital information
531
+ * @param j Julian date
532
+ * @param gmst Greenwich Mean Sidereal Time
533
+ * @returns Time variables
534
+ */
535
+ private static calculateTimeVariables(
536
+ date: Date, satrec?: SatelliteRecord, j?: number, gmst?: GreenwichMeanSiderealTime,
537
+ ) {
538
+ j ??= jday(
539
+ date.getUTCFullYear(),
540
+ date.getUTCMonth() + 1,
541
+ date.getUTCDate(),
542
+ date.getUTCHours(),
543
+ date.getUTCMinutes(),
544
+ date.getUTCSeconds(),
545
+ ) + date.getUTCMilliseconds() * MILLISECONDS_TO_DAYS;
546
+ gmst ??= Sgp4.gstime(j);
547
+
548
+ const m = satrec ? (j - satrec.jdsatepoch) * MINUTES_PER_DAY : null;
549
+
550
+ return { gmst, m, j };
551
+ }
552
+ }