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,214 @@
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 { Tle, StringifiedNumber, TleParams, TleLine1, TleLine2 } from '../main.js';
25
+
26
+ /**
27
+ * A class containing static methods for formatting TLEs (Two-Line Elements).
28
+ */
29
+ export abstract class FormatTle {
30
+ private constructor() {
31
+ // Static class
32
+ }
33
+
34
+ /**
35
+ * Creates a TLE (Two-Line Element) string based on the provided TleParams.
36
+ * @param tleParams - The parameters used to generate the TLE.
37
+ * @returns An object containing the TLE strings tle1 and tle2.
38
+ */
39
+ static createTle(tleParams: TleParams): { tle1: TleLine1; tle2: TleLine2 } {
40
+ const { inc, meanmo, rasc, argPe, meana, ecen, epochyr, epochday, intl } = tleParams;
41
+ const scc = Tle.convert6DigitToA5(tleParams.scc);
42
+ const epochYrStr = epochyr.padStart(2, '0');
43
+ const epochdayStr = parseFloat(epochday).toFixed(8).padStart(12, '0');
44
+ const incStr = FormatTle.inclination(inc);
45
+ const meanmoStr = FormatTle.meanMotion(meanmo);
46
+ const rascStr = FormatTle.rightAscension(rasc);
47
+ const argPeStr = FormatTle.argumentOfPerigee(argPe);
48
+ const meanaStr = FormatTle.meanAnomaly(meana);
49
+ const ecenStr = FormatTle.eccentricity(ecen);
50
+ const intlStr = intl.padEnd(8, ' ');
51
+
52
+ // M' and M'' are both set to 0 to put the object in a perfect stable orbit
53
+ let TLE1Ending = tleParams.sat ? tleParams.sat.tle1.substring(32, 71) : ' +.00000000 +00000+0 +00000-0 0 9990';
54
+
55
+ // Add explicit positive/negative signs
56
+ TLE1Ending = TLE1Ending[1] === ' ' ? FormatTle.setCharAt(TLE1Ending, 1, '+') : TLE1Ending;
57
+ TLE1Ending = TLE1Ending[12] === ' ' ? FormatTle.setCharAt(TLE1Ending, 12, '+') : TLE1Ending;
58
+ TLE1Ending = TLE1Ending[21] === ' ' ? FormatTle.setCharAt(TLE1Ending, 21, '+') : TLE1Ending;
59
+ TLE1Ending = TLE1Ending[32] === ' ' ? FormatTle.setCharAt(TLE1Ending, 32, '0') : TLE1Ending;
60
+
61
+ const tle1 = `1 ${scc}U ${intlStr} ${epochYrStr}${epochdayStr}${TLE1Ending}`;
62
+ const tle2 = `2 ${scc} ${incStr} ${rascStr} ${ecenStr} ${argPeStr} ${meanaStr} ${meanmoStr} 00010`;
63
+
64
+ return { tle1: tle1 as TleLine1, tle2: tle2 as TleLine2 };
65
+ }
66
+
67
+ /**
68
+ * Converts the argument of perigee to a stringified number.
69
+ * @param argPe - The argument of perigee to be converted. Can be either a number or a string.
70
+ * @returns The argument of perigee as a stringified number.
71
+ * @throws Error if the length of the argument of perigee is not 8.
72
+ */
73
+ static argumentOfPerigee(argPe: number | string): StringifiedNumber {
74
+ if (typeof argPe === 'number') {
75
+ argPe = argPe.toString();
76
+ }
77
+
78
+ const argPeNum = parseFloat(argPe).toFixed(4);
79
+ const argPe0 = argPeNum.padStart(8, '0');
80
+
81
+ if (argPe0.length !== 8) {
82
+ throw new Error('argPe length is not 8');
83
+ }
84
+
85
+ return argPe0 as StringifiedNumber;
86
+ }
87
+
88
+ /**
89
+ * Returns the eccentricity value of a given string.
90
+ * @param ecen - The string representing the eccentricity.
91
+ * @returns The eccentricity value.
92
+ * @throws Error if the length of the eccentricity string is not 7.
93
+ */
94
+ static eccentricity(ecen: string): string {
95
+ let ecen0 = ecen.padEnd(9, '0');
96
+
97
+ if (ecen0[1] === '.') {
98
+ ecen0 = ecen0.substring(2);
99
+ } else {
100
+ ecen0 = ecen0.substring(0, 7);
101
+ }
102
+ if (ecen0.length !== 7) {
103
+ throw new Error('ecen length is not 7');
104
+ }
105
+
106
+ return ecen0;
107
+ }
108
+
109
+ /**
110
+ * Converts the inclination value to a string representation.
111
+ * @param inc - The inclination value to be converted.
112
+ * @returns The string representation of the inclination value.
113
+ * @throws Error if the length of the converted value is not 8.
114
+ */
115
+ static inclination(inc: number | string): StringifiedNumber {
116
+ if (typeof inc === 'number') {
117
+ inc = inc.toString();
118
+ }
119
+
120
+ const incNum = parseFloat(inc).toFixed(4);
121
+ const inc0 = incNum.padStart(8, '0');
122
+
123
+ if (inc0.length !== 8) {
124
+ throw new Error('inc length is not 8');
125
+ }
126
+
127
+ return inc0 as StringifiedNumber;
128
+ }
129
+
130
+ /**
131
+ * Converts the mean anomaly to a string representation with 8 digits, padded with leading zeros.
132
+ * @param meana - The mean anomaly to be converted. Can be either a number or a string.
133
+ * @returns The mean anomaly as a string with 8 digits, padded with leading zeros.
134
+ * @throws Error if the length of the mean anomaly is not 8.
135
+ */
136
+ static meanAnomaly(meana: number | string): StringifiedNumber {
137
+ if (typeof meana === 'number') {
138
+ meana = meana.toString();
139
+ }
140
+
141
+ const meanaNum = parseFloat(meana).toFixed(4);
142
+ const meana0 = meanaNum.padStart(8, '0');
143
+
144
+ if (meana0.length !== 8) {
145
+ throw new Error('meana length is not 8');
146
+ }
147
+
148
+ return meana0 as StringifiedNumber;
149
+ }
150
+
151
+ /**
152
+ * Converts the mean motion value to a string representation with 8 decimal
153
+ * places. If the input is a number, it is converted to a string. If the input
154
+ * is already a string, it is parsed as a float and then converted to a string
155
+ * with 8 decimal places. The resulting string is padded with leading zeros to
156
+ * ensure a length of 11 characters. Throws an error if the resulting string
157
+ * does not have a length of 11 characters.
158
+ * @param meanmo - The mean motion value to be converted.
159
+ * @returns The string representation of the mean motion value with 8 decimal
160
+ * places and padded with leading zeros.
161
+ * @throws Error if the resulting string does not have a length of 11
162
+ * characters.
163
+ */
164
+ static meanMotion(meanmo: number | string): StringifiedNumber {
165
+ if (typeof meanmo === 'number') {
166
+ meanmo = meanmo.toString();
167
+ }
168
+
169
+ const meanmoNum = parseFloat(meanmo).toFixed(8);
170
+ const meanmo0 = meanmoNum.padStart(11, '0');
171
+
172
+ if (meanmo0.length !== 11) {
173
+ throw new Error('meanmo length is not 11');
174
+ }
175
+
176
+ return meanmo0 as StringifiedNumber;
177
+ }
178
+
179
+ /**
180
+ * Converts the right ascension value to a stringified number.
181
+ * @param rasc - The right ascension value to convert.
182
+ * @returns The stringified number representation of the right ascension.
183
+ * @throws Error if the length of the converted right ascension is not 8.
184
+ */
185
+ static rightAscension(rasc: number | string): StringifiedNumber {
186
+ if (typeof rasc === 'number') {
187
+ rasc = rasc.toString();
188
+ }
189
+
190
+ const rascNum = parseFloat(rasc).toFixed(4);
191
+ const rasc0 = rascNum.padStart(8, '0');
192
+
193
+ if (rasc0.length !== 8) {
194
+ throw new Error('rasc length is not 8');
195
+ }
196
+
197
+ return rasc0 as StringifiedNumber;
198
+ }
199
+
200
+ /**
201
+ * Sets a character at a specific index in a string. If the index is out of range, the original string is returned.
202
+ * @param str - The input string.
203
+ * @param index - The index at which to set the character.
204
+ * @param chr - The character to set at the specified index.
205
+ * @returns The modified string with the character set at the specified index.
206
+ */
207
+ static setCharAt(str: string, index: number, chr: string): string {
208
+ if (index > str.length - 1) {
209
+ return str;
210
+ }
211
+
212
+ return `${str.substring(0, index)}${chr}${str.substring(index + 1)}`;
213
+ }
214
+ }
@@ -0,0 +1,186 @@
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 { Earth } from '../body/Earth.js';
25
+ import { AngularDistanceMethod, Degrees, GroundObject, Kilometers, KilometersPerSecond, Radians } from '../main.js';
26
+ import { Vector3D } from '../operations/Vector3D.js';
27
+ import { EpochUTC } from '../time/EpochUTC.js';
28
+ import { DEG2RAD, RAD2DEG } from '../utils/constants.js';
29
+ import { angularDistance } from '../utils/functions.js';
30
+ import { ITRF } from './ITRF.js';
31
+
32
+ /**
33
+ * This Geodetic class represents a geodetic coordinate in three-dimensional
34
+ * space, consisting of latitude, longitude, and altitude. It provides various
35
+ * methods to perform calculations and operations related to geodetic
36
+ * coordinates.
37
+ *
38
+ * This is a class for geodetic coordinates. This is related to the GroundObject
39
+ * class, which is used to represent an object on the surface of the Earth.
40
+ */
41
+ export class Geodetic {
42
+ lat: Radians;
43
+ lon: Radians;
44
+ alt: Kilometers;
45
+
46
+ constructor(latitude: Radians, longitude: Radians, altitude: Kilometers) {
47
+ if (Math.abs(latitude) > Math.PI / 2) {
48
+ throw new RangeError('Latitude must be between -90° and 90° in Radians.');
49
+ }
50
+
51
+ if (Math.abs(longitude) > Math.PI) {
52
+ throw new RangeError('Longitude must be between -180° and 180° in Radians.');
53
+ }
54
+
55
+ if (altitude < -Earth.radiusMean) {
56
+ throw new RangeError(`Altitude must be greater than ${-Earth.radiusMean} km. Got ${altitude} km.`);
57
+ }
58
+
59
+ this.lat = latitude;
60
+ this.lon = longitude;
61
+ this.alt = altitude;
62
+ }
63
+
64
+ /**
65
+ * Creates a Geodetic object from latitude, longitude, and altitude values in
66
+ * degrees.
67
+ * @param latitude The latitude value in degrees.
68
+ * @param longitude The longitude value in degrees.
69
+ * @param altitude The altitude value in kilometers.
70
+ * @returns A Geodetic object representing the specified latitude, longitude,
71
+ * and altitude.
72
+ */
73
+ static fromDegrees(latitude: Degrees, longitude: Degrees, altitude: Kilometers): Geodetic {
74
+ return new Geodetic((latitude * DEG2RAD) as Radians, (longitude * DEG2RAD) as Radians, altitude);
75
+ }
76
+
77
+ /**
78
+ * Returns a string representation of the Geodetic object.
79
+ * @returns A string containing the latitude, longitude, and altitude of the Geodetic object.
80
+ */
81
+ toString(): string {
82
+ return [
83
+ 'Geodetic',
84
+ ` Latitude: ${this.latDeg.toFixed(4)}°`,
85
+ ` Longitude: ${this.lonDeg.toFixed(4)}°`,
86
+ ` Altitude: ${this.alt.toFixed(3)} km`,
87
+ ].join('\n');
88
+ }
89
+
90
+ /**
91
+ * Gets the latitude in degrees.
92
+ * @returns The latitude in degrees.
93
+ */
94
+ get latDeg(): number {
95
+ return this.lat * RAD2DEG;
96
+ }
97
+
98
+ /**
99
+ * Gets the longitude in degrees.
100
+ * @returns The longitude in degrees.
101
+ */
102
+ get lonDeg(): number {
103
+ return this.lon * RAD2DEG;
104
+ }
105
+
106
+ /**
107
+ * Converts the geodetic coordinates to a ground position.
108
+ * @returns The ground position object.
109
+ */
110
+ toGroundObject(): GroundObject {
111
+ return new GroundObject({
112
+ lat: this.latDeg as Degrees,
113
+ lon: this.lonDeg as Degrees,
114
+ alt: this.alt,
115
+ });
116
+ }
117
+
118
+ /**
119
+ * Converts the geodetic coordinates to the International Terrestrial
120
+ * Reference Frame (ITRF) coordinates.
121
+ * @param epoch The epoch in UTC.
122
+ * @returns The ITRF coordinates.
123
+ */
124
+ toITRF(epoch: EpochUTC): ITRF {
125
+ const sLat = Math.sin(this.lat);
126
+ const cLat = Math.cos(this.lat);
127
+ const nVal = Earth.radiusEquator / Math.sqrt(1 - Earth.eccentricitySquared * sLat * sLat);
128
+ const r = new Vector3D<Kilometers>(
129
+ ((nVal + this.alt) * cLat * Math.cos(this.lon)) as Kilometers,
130
+ ((nVal + this.alt) * cLat * Math.sin(this.lon)) as Kilometers,
131
+ ((nVal * (1 - Earth.eccentricitySquared) + this.alt) * sLat) as Kilometers,
132
+ );
133
+
134
+ return new ITRF(epoch, r, Vector3D.origin as Vector3D<KilometersPerSecond>);
135
+ }
136
+
137
+ /**
138
+ * Calculates the angle between two geodetic coordinates.
139
+ * @param g The geodetic coordinate to calculate the angle to.
140
+ * @param method The method to use for calculating the angular distance (optional, default is Haversine).
141
+ * @returns The angle between the two geodetic coordinates in radians.
142
+ */
143
+ angle(g: Geodetic, method: AngularDistanceMethod = AngularDistanceMethod.Haversine): Radians {
144
+ return angularDistance(this.lon, this.lat, g.lon, g.lat, method);
145
+ }
146
+
147
+ /**
148
+ * Calculates the angle in degrees between two Geodetic coordinates.
149
+ * @param g The Geodetic coordinate to calculate the angle with.
150
+ * @param method The method to use for calculating the angular distance (optional, default is Haversine).
151
+ * @returns The angle in degrees.
152
+ */
153
+ angleDeg(g: Geodetic, method: AngularDistanceMethod = AngularDistanceMethod.Haversine): Degrees {
154
+ return (this.angle(g, method) * RAD2DEG) as Degrees;
155
+ }
156
+
157
+ /**
158
+ * Calculates the distance between two geodetic coordinates.
159
+ * @param g The geodetic coordinates to calculate the distance to.
160
+ * @param method The method to use for calculating the angular distance. Default is Haversine.
161
+ * @returns The distance between the two geodetic coordinates in kilometers.
162
+ */
163
+ distance(g: Geodetic, method: AngularDistanceMethod = AngularDistanceMethod.Haversine): Kilometers {
164
+ return (this.angle(g, method) * Earth.radiusMean) as Kilometers;
165
+ }
166
+
167
+ /**
168
+ * Calculates the field of view based on the altitude of the Geodetic object.
169
+ * @returns The field of view in radians.
170
+ */
171
+ fieldOfView(): Radians {
172
+ return Math.acos(Earth.radiusMean / (Earth.radiusMean + this.alt)) as Radians;
173
+ }
174
+
175
+ /**
176
+ * Determines if the current geodetic coordinate can see another geodetic coordinate.
177
+ * @param g The geodetic coordinate to check for visibility.
178
+ * @param method The method to use for calculating the angular distance (optional, default is Haversine).
179
+ * @returns A boolean indicating if the current coordinate can see the other coordinate.
180
+ */
181
+ isInView(g: Geodetic, method: AngularDistanceMethod = AngularDistanceMethod.Haversine): boolean {
182
+ const fov = Math.max(this.fieldOfView(), g.fieldOfView());
183
+
184
+ return this.angle(g, method) <= fov;
185
+ }
186
+ }
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @author @thkruz Theodore Kruczek
3
3
  * @license AGPL-3.0-or-later
4
- * @copyright (c) 2020-2024 Theodore Kruczek
4
+ * @copyright (c) 2025 Kruczek Labs LLC
5
5
  *
6
6
  * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
7
7
  * terms of the GNU Affero General Public License as published by the Free Software
@@ -27,7 +27,7 @@ import {
27
27
  RelativeState,
28
28
  Seconds,
29
29
  Vector3D,
30
- } from 'ootk-core';
30
+ } from '../main.js';
31
31
  import { Thrust } from './../force/Thrust.js';
32
32
  import { Waypoint } from './../maneuver/Waypoint.js';
33
33
 
@@ -0,0 +1,146 @@
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
+ /* eslint-disable class-methods-use-this */
25
+ import { Kilometers, KilometersPerSecond, Radians, Vector3D } from '../main.js';
26
+ import { Earth } from '../body/Earth.js';
27
+ import { Geodetic } from './Geodetic.js';
28
+ import { J2000 } from './J2000.js';
29
+ import { StateVector } from './StateVector.js';
30
+
31
+ /**
32
+ * The International Terrestrial Reference Frame (ITRF) is a geocentric reference frame for the Earth. It is the
33
+ * successor to the International Terrestrial Reference System (ITRS). The ITRF definition is maintained by the
34
+ * International Earth Rotation and Reference Systems Service (IERS). Several versions of ITRF exist, each with a
35
+ * different epoch, to address the issue of crustal motion. The latest version is ITRF2014, based on data collected from
36
+ * 1980 to 2014.
37
+ * @see https://en.wikipedia.org/wiki/International_Terrestrial_Reference_Frame
38
+ *
39
+ * This is a geocentric coordinate system, also referenced as ECF/ECEF (Earth Centered Earth Fixed). It is a Cartesian
40
+ * coordinate system with the origin at the center of the Earth. The x-axis intersects the sphere of the Earth at 0°
41
+ * latitude (the equator) and 0° longitude (the Prime Meridian). The z-axis goes through the North Pole. The y-axis goes
42
+ * through 90° East longitude.
43
+ * @see https://en.wikipedia.org/wiki/Earth-centered,_Earth-fixed_coordinate_system
44
+ */
45
+ export class ITRF extends StateVector {
46
+ /**
47
+ * Gets the name of the ITRF coordinate system.
48
+ * @returns The name of the coordinate system.
49
+ */
50
+ get name(): string {
51
+ return 'ITRF';
52
+ }
53
+
54
+ /**
55
+ * Gets a value indicating whether the coordinate system is inertial.
56
+ * @returns A boolean value indicating whether the coordinate system is inertial.
57
+ */
58
+ get inertial(): boolean {
59
+ return false;
60
+ }
61
+
62
+ /**
63
+ * Gets the height of the ITRF coordinate above the surface of the Earth in kilometers.
64
+ * @returns The height in kilometers.
65
+ */
66
+ get height(): Kilometers {
67
+ const a = Earth.radiusEquator;
68
+ const e2 = Earth.eccentricitySquared;
69
+ const r = this.position.magnitude();
70
+ const sl = this.position.z / r;
71
+ const cl2 = 1 - sl * sl;
72
+ const coeff = Math.sqrt((1 - e2) / (1 - e2 * cl2));
73
+
74
+ return (r - a * coeff) as Kilometers;
75
+ }
76
+
77
+ /**
78
+ * Gets the altitude in kilometers.
79
+ * @returns The altitude in kilometers.
80
+ */
81
+ get alt(): Kilometers {
82
+ return this.height;
83
+ }
84
+
85
+ /**
86
+ * Converts the current coordinate to the J2000 coordinate system. This is an Earth-Centered Inertial (ECI) coordinate
87
+ * system with the origin at the center of the Earth.
88
+ * @see https://en.wikipedia.org/wiki/Epoch_(astronomy)#Julian_years_and_J2000
89
+ * @returns The coordinate in the J2000 coordinate system.
90
+ */
91
+ toJ2000(): J2000 {
92
+ const p = Earth.precession(this.epoch);
93
+ const n = Earth.nutation(this.epoch);
94
+ const ast = this.epoch.gmstAngle() + n.eqEq;
95
+ const rTOD = this.position.rotZ(-ast as Radians);
96
+ const vTOD = this.velocity
97
+ .add(Earth.rotation.cross(this.position) as unknown as Vector3D<KilometersPerSecond>)
98
+ .rotZ(-ast as Radians);
99
+ const rMOD = rTOD.rotX(n.eps).rotZ(n.dPsi).rotX(-n.mEps);
100
+ const vMOD = vTOD.rotX(n.eps).rotZ(n.dPsi).rotX(-n.mEps);
101
+ const rJ2000 = rMOD
102
+ .rotZ(p.zed)
103
+ .rotY(-p.theta as Radians)
104
+ .rotZ(p.zeta) as Vector3D<Kilometers>;
105
+ const vJ2000 = vMOD
106
+ .rotZ(p.zed)
107
+ .rotY(-p.theta as Radians)
108
+ .rotZ(p.zeta) as Vector3D<KilometersPerSecond>;
109
+
110
+ return new J2000(this.epoch, rJ2000, vJ2000);
111
+ }
112
+
113
+ /**
114
+ * Converts the current ITRF coordinate to Geodetic coordinate. This is a coordinate system for latitude, longitude,
115
+ * and altitude.
116
+ * @returns The converted Geodetic coordinate.
117
+ */
118
+ toGeodetic(): Geodetic {
119
+ const sma = Earth.radiusEquator;
120
+ const esq = Earth.eccentricitySquared;
121
+ const x = this.position.x;
122
+ const y = this.position.y;
123
+ const z = this.position.z;
124
+ const lon = Math.atan2(y, x);
125
+ const r = Math.sqrt(x * x + y * y);
126
+ const phi = Math.atan(z / r);
127
+ let lat = phi;
128
+ let alt: Kilometers;
129
+ let c = 0.0;
130
+
131
+ if (x === 0 && y === 0) {
132
+ lat = phi;
133
+ alt = z > 0 ? ((z - Earth.radiusPolar) as Kilometers) : ((z + Earth.radiusPolar) as Kilometers);
134
+ } else {
135
+ for (let i = 0; i < 20; i++) {
136
+ const slat = Math.sin(lat);
137
+
138
+ c = 1 / Math.sqrt(1 - esq * slat * slat);
139
+ lat = Math.atan((z + sma * c * esq * slat) / r);
140
+ }
141
+ alt = (r / Math.cos(lat) - sma * c) as Kilometers;
142
+ }
143
+
144
+ return new Geodetic(lat as Radians, lon as Radians, alt);
145
+ }
146
+ }
@@ -0,0 +1,130 @@
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 { Kilometers, KilometersPerSecond, Radians, Vector3D } from '../main.js';
25
+ import { Earth } from '../body/Earth.js';
26
+ import { ClassicalElements } from './ClassicalElements.js';
27
+ import { ITRF } from './ITRF.js';
28
+ import { StateVector } from './StateVector.js';
29
+ import { TEME } from './TEME.js';
30
+
31
+ /**
32
+ * Represents a position and velocity in the J2000 coordinate system. This is an Earth-centered inertial (ECI)
33
+ * coordinate system.
34
+ *
35
+ * Commonly used ECI frame is defined with the Earth's Mean Equator and Mean Equinox (MEME) at 12:00 Terrestrial Time on
36
+ * 1 January 2000. It can be referred to as J2K, J2000 or EME2000. The x-axis is aligned with the mean vernal equinox.
37
+ * The z-axis is aligned with the Earth's rotation axis (or equivalently, the celestial North Pole) as it was at that
38
+ * time. The y-axis is rotated by 90° East about the celestial equator.
39
+ * @see https://en.wikipedia.org/wiki/Earth-centered_inertial
40
+ */
41
+ export class J2000 extends StateVector {
42
+ /**
43
+ * Creates a J2000 coordinate from classical elements.
44
+ * @param elements The classical elements.
45
+ * @returns The J2000 coordinate.
46
+ */
47
+ static fromClassicalElements(elements: ClassicalElements): J2000 {
48
+ const rv = elements.toPositionVelocity();
49
+
50
+ return new J2000(elements.epoch, rv.position, rv.velocity);
51
+ }
52
+
53
+ /**
54
+ * Gets the name of the coordinate system.
55
+ * @returns The name of the coordinate system.
56
+ */
57
+ get name(): string {
58
+ return 'J2000';
59
+ }
60
+
61
+ /**
62
+ * Gets a value indicating whether the coordinate system is inertial.
63
+ * @returns A boolean value indicating whether the coordinate system is inertial.
64
+ */
65
+ get inertial(): boolean {
66
+ return true;
67
+ }
68
+
69
+ /**
70
+ * Converts the coordinates from J2000 to the International Terrestrial Reference Frame (ITRF).
71
+ * This is an ECI to ECF transformation.
72
+ * @returns The ITRF coordinates.
73
+ */
74
+ toITRF(): ITRF {
75
+ const p = Earth.precession(this.epoch);
76
+ const n = Earth.nutation(this.epoch);
77
+ const ast = (this.epoch.gmstAngle() + n.eqEq) as Radians;
78
+ const rMOD = this.position
79
+ .rotZ(-p.zeta as Radians)
80
+ .rotY(p.theta)
81
+ .rotZ(-p.zed as Radians);
82
+ const vMOD = this.velocity
83
+ .rotZ(-p.zeta as Radians)
84
+ .rotY(p.theta)
85
+ .rotZ(-p.zed as Radians);
86
+ const rTOD = rMOD
87
+ .rotX(n.mEps)
88
+ .rotZ(-n.dPsi as Radians)
89
+ .rotX(-n.eps);
90
+ const vTOD = vMOD
91
+ .rotX(n.mEps)
92
+ .rotZ(-n.dPsi as Radians)
93
+ .rotX(-n.eps);
94
+ const rPEF = rTOD.rotZ(ast) as Vector3D<Kilometers>;
95
+ const vPEF = vTOD.rotZ(ast).add(Earth.rotation.negate().cross(rPEF)) as Vector3D<KilometersPerSecond>;
96
+
97
+ return new ITRF(this.epoch, rPEF, vPEF);
98
+ }
99
+
100
+ /**
101
+ * Converts the J2000 coordinate to the TEME coordinate.
102
+ * @returns The TEME coordinate.
103
+ */
104
+ toTEME(): TEME {
105
+ const p = Earth.precession(this.epoch);
106
+ const n = Earth.nutation(this.epoch);
107
+ const eps = n.mEps + n.dEps;
108
+ const dPsiCosEps = (n.dPsi * Math.cos(eps)) as Radians;
109
+ const rMOD = this.position
110
+ .rotZ(-p.zeta as Radians)
111
+ .rotY(p.theta)
112
+ .rotZ(-p.zed as Radians);
113
+ const vMOD = this.velocity
114
+ .rotZ(-p.zeta as Radians)
115
+ .rotY(p.theta)
116
+ .rotZ(-p.zed as Radians);
117
+ const rTEME = rMOD
118
+ .rotX(n.mEps)
119
+ .rotZ(-n.dPsi as Radians)
120
+ .rotX(-eps)
121
+ .rotZ(dPsiCosEps) as Vector3D<Kilometers>;
122
+ const vTEME = vMOD
123
+ .rotX(n.mEps)
124
+ .rotZ(-n.dPsi as Radians)
125
+ .rotX(-eps)
126
+ .rotZ(dPsiCosEps) as Vector3D<KilometersPerSecond>;
127
+
128
+ return new TEME(this.epoch, rTEME, vTEME);
129
+ }
130
+ }