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,279 @@
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 { PassType } from '../enums/PassType.js';
25
+ import { SensorParams } from '../interfaces/SensorParams.js';
26
+ import { Degrees, Kilometers, KilometersPerSecond, Lookangle, RaeVec3, SpaceObjectType } from '../types/types.js';
27
+ import { GroundObject } from './GroundObject.js';
28
+ import { Satellite } from './Satellite.js';
29
+ import { calcGmst, lla2eci, J2000, Vector3D, EpochUTC } from '../main.js';
30
+
31
+ export class Sensor extends GroundObject {
32
+ minRng: Kilometers;
33
+ minAz: Degrees;
34
+ minEl: Degrees;
35
+ maxRng: Kilometers;
36
+ maxAz: Degrees;
37
+ maxEl: Degrees;
38
+ minRng2?: Kilometers;
39
+ minAz2?: Degrees;
40
+ minEl2?: Degrees;
41
+ maxRng2?: Kilometers;
42
+ maxAz2?: Degrees;
43
+ maxEl2?: Degrees;
44
+
45
+ constructor(info: SensorParams) {
46
+ // If there is a sensor type verify it is valid
47
+ if (info.type) {
48
+ switch (info.type) {
49
+ case SpaceObjectType.OPTICAL:
50
+ case SpaceObjectType.MECHANICAL:
51
+ case SpaceObjectType.PHASED_ARRAY_RADAR:
52
+ case SpaceObjectType.OBSERVER:
53
+ case SpaceObjectType.BISTATIC_RADIO_TELESCOPE:
54
+ case SpaceObjectType.SHORT_TERM_FENCE:
55
+ break;
56
+ default:
57
+ throw new Error('Invalid sensor type');
58
+ }
59
+ }
60
+
61
+ super(info);
62
+
63
+ this.validateSensorInputData_(info);
64
+
65
+ this.minRng = info.minRng;
66
+ this.minAz = info.minAz;
67
+ this.minEl = info.minEl;
68
+ this.maxRng = info.maxRng;
69
+ this.maxAz = info.maxAz;
70
+ this.maxEl = info.maxEl;
71
+ this.minRng2 = info.minRng2;
72
+ this.minAz2 = info.minAz2;
73
+ this.minEl2 = info.minEl2;
74
+ this.maxRng2 = info.maxRng2;
75
+ this.maxAz2 = info.maxAz2;
76
+ this.maxEl2 = info.maxEl2;
77
+ }
78
+
79
+ /**
80
+ * Checks if the object is a sensor.
81
+ * @returns True if the object is a sensor, false otherwise.
82
+ */
83
+ override isSensor(): boolean {
84
+ return true;
85
+ }
86
+
87
+ calculatePasses(planningInterval: number, sat: Satellite, date: Date = new Date()) {
88
+ let isInViewLast = false;
89
+ let maxElThisPass = <Degrees>0;
90
+ const msnPlanPasses: Lookangle[] = [];
91
+ const startTime = date.getTime();
92
+
93
+ for (let timeOffset = 0; timeOffset < planningInterval; timeOffset++) {
94
+ const curTime = new Date(startTime + timeOffset * 1000);
95
+ const rae = this.rae(sat, curTime);
96
+
97
+ if (!rae) {
98
+ continue;
99
+ }
100
+
101
+ const isInView = this.isRaeInFov(rae);
102
+
103
+ if (timeOffset === 0) {
104
+ // Propagate Backwards to get the previous pass
105
+ const oldRae = this.rae(sat, new Date(date.getTime() - 1 * 1000));
106
+
107
+ if (!oldRae) {
108
+ continue;
109
+ }
110
+
111
+ isInViewLast = this.isRaeInFov(oldRae);
112
+ }
113
+
114
+ const type = Sensor.getPassType_(isInView, isInViewLast);
115
+
116
+ maxElThisPass = <Degrees>Math.max(maxElThisPass, rae.el);
117
+
118
+ if (type === PassType.ENTER || type === PassType.EXIT) {
119
+ const pass = <Lookangle>{
120
+ type,
121
+ time: curTime,
122
+ az: rae.az,
123
+ el: rae.el,
124
+ rng: rae.rng,
125
+ };
126
+
127
+ // Only set maxEl for EXIT passes
128
+ if (type === PassType.EXIT) {
129
+ pass.maxElPass = maxElThisPass;
130
+ }
131
+
132
+ msnPlanPasses.push(pass);
133
+ maxElThisPass = <Degrees>0;
134
+ }
135
+
136
+ isInViewLast = isInView;
137
+ }
138
+
139
+ return msnPlanPasses;
140
+ }
141
+
142
+ /**
143
+ * Checks if the given RAE vector is within the field of view of the sensor.
144
+ * @param rae - The RAE vector to check.
145
+ * @returns True if the RAE vector is within the field of view, false otherwise.
146
+ */
147
+ isRaeInFov(rae: RaeVec3<Kilometers, Degrees>): boolean {
148
+ if (rae.el < this.minEl || rae.el > this.maxEl) {
149
+ return false;
150
+ }
151
+
152
+ if (rae.rng < this.minRng || rae.rng > this.maxRng) {
153
+ return false;
154
+ }
155
+
156
+ if (this.minAz > this.maxAz) {
157
+ // North Facing Sensors
158
+ if (rae.az < this.minAz && rae.az > this.maxAz) {
159
+ return false;
160
+ }
161
+ // Normal Facing Sensors
162
+ } else if (rae.az < this.minAz || rae.az > this.maxAz) {
163
+ return false;
164
+ }
165
+
166
+ return true;
167
+ }
168
+
169
+ /**
170
+ * Checks if a satellite is in the field of view (FOV) of the sensor.
171
+ * @param sat - The satellite to check.
172
+ * @param date - The date to use for the calculation. Defaults to the current date.
173
+ * @returns A boolean indicating whether the satellite is in the FOV.
174
+ */
175
+ isSatInFov(sat: Satellite, date: Date = new Date()): boolean {
176
+ const rae = this.rae(sat, date);
177
+
178
+ if (!rae) {
179
+ return false;
180
+ }
181
+
182
+ return this.isRaeInFov(rae);
183
+ }
184
+
185
+ /**
186
+ * Checks if the sensor is in deep space.
187
+ * @returns True if the sensor is in deep space, false otherwise.
188
+ */
189
+ isDeepSpace(): boolean {
190
+ return this.maxRng > 6000;
191
+ }
192
+
193
+ /**
194
+ * Checks if the sensor is near Earth.
195
+ * @returns True if the sensor is near Earth, false otherwise.
196
+ */
197
+ isNearEarth(): boolean {
198
+ return this.maxRng <= 6000;
199
+ }
200
+
201
+ toJ2000(date: Date = new Date()): J2000 {
202
+ const gmst = calcGmst(date).gmst;
203
+ const position = lla2eci(this.llaRad(), gmst);
204
+
205
+ return new J2000(
206
+ EpochUTC.fromDateTime(date),
207
+ new Vector3D(position.x, position.y, position.z),
208
+ new Vector3D(0 as KilometersPerSecond, 0 as KilometersPerSecond, 0 as KilometersPerSecond),
209
+ );
210
+ }
211
+
212
+ /**
213
+ * Returns the pass type based on the current and previous visibility states.
214
+ * @param isInView - Indicates if the object is currently in view.
215
+ * @param isInViewLast - Indicates if the object was in view in the previous state.
216
+ * @returns The pass type.
217
+ */
218
+ private static getPassType_(isInView: boolean, isInViewLast: boolean) {
219
+ let type = PassType.OUT_OF_VIEW;
220
+
221
+ if (isInView && !isInViewLast) {
222
+ type = PassType.ENTER;
223
+ } else if (!isInView && isInViewLast) {
224
+ type = PassType.EXIT;
225
+ } else if (isInView && isInViewLast) {
226
+ type = PassType.IN_VIEW;
227
+ }
228
+
229
+ return type;
230
+ }
231
+
232
+ /**
233
+ * Validates the field of view (FOV) parameters of the sensor.
234
+ * @param info - The sensor parameters.
235
+ */
236
+ private validateFov_(info: SensorParams) {
237
+ this.validateParameter(info.maxAz, 0, 360, 'Invalid maximum azimuth - must be between 0 and 360');
238
+ this.validateParameter(info.minAz, 0, 360, 'Invalid maximum azimuth - must be between 0 and 360');
239
+ this.validateParameter(info.maxEl, -15, 180, 'Invalid maximum elevation - must be between 0 and 180');
240
+ this.validateParameter(info.minEl, -15, 90, 'Invalid minimum elevation - must be between 0 and 90');
241
+ this.validateParameter(info.maxRng, 0, null, 'Invalid maximum range - must be greater than 0');
242
+ this.validateParameter(info.minRng, 0, null, 'Invalid minimum range - must be greater than 0');
243
+ }
244
+
245
+ /**
246
+ * Validates the field of view parameters for the sensor.
247
+ * @param info - The sensor parameters.
248
+ */
249
+ private validateFov2_(info: SensorParams) {
250
+ this.validateParameter(info.maxAz2, 0, 360, 'Invalid maximum azimuth2 - must be between 0 and 360');
251
+ this.validateParameter(info.minAz2, 0, 360, 'Invalid maximum azimuth2 - must be between 0 and 360');
252
+ this.validateParameter(info.maxEl2, -15, 180, 'Invalid maximum elevation2 - must be between 0 and 180');
253
+ this.validateParameter(info.minEl2, -15, 90, 'Invalid minimum elevation2 - must be between 0 and 90');
254
+ this.validateParameter(info.maxRng2, 0, null, 'Invalid maximum range2 - must be greater than 0');
255
+ this.validateParameter(info.minRng2, 0, null, 'Invalid minimum range2 - must be greater than 0');
256
+ }
257
+
258
+ /**
259
+ * Validates the input data for the sensor.
260
+ * @param info - The sensor parameters.
261
+ */
262
+ private validateSensorInputData_(info: SensorParams) {
263
+ this.validateLla_(info);
264
+ this.validateFov_(info);
265
+ if (info.minAz2 || info.maxAz2 || info.minEl2 || info.maxEl2 || info.minRng2 || info.maxRng2) {
266
+ this.validateFov2_(info);
267
+ }
268
+ }
269
+
270
+ /**
271
+ * Validates the latitude, longitude, and altitude of a sensor.
272
+ * @param info - The sensor parameters containing the latitude, longitude, and altitude.
273
+ */
274
+ private validateLla_(info: SensorParams) {
275
+ this.validateParameter(info.lat, -90, 90, 'Invalid latitude - must be between -90 and 90');
276
+ this.validateParameter(info.lon, -180, 180, 'Invalid longitude - must be between -180 and 180');
277
+ this.validateParameter(info.alt, 0, null, 'Invalid altitude - must be greater than 0');
278
+ }
279
+ }
@@ -0,0 +1,96 @@
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 {
25
+ Celestial,
26
+ Degrees,
27
+ ecf2eci,
28
+ EciVec3,
29
+ GreenwichMeanSiderealTime,
30
+ jday,
31
+ Kilometers,
32
+ LlaVec3,
33
+ MILLISECONDS_TO_DAYS,
34
+ Radians,
35
+ rae2ecf,
36
+ RaeVec3,
37
+ Sgp4,
38
+ SpaceObjectType,
39
+ StarObjectParams,
40
+ } from '../main.js';
41
+ import { BaseObject } from './BaseObject.js';
42
+
43
+ export class Star extends BaseObject {
44
+ ra: Radians;
45
+ dec: Radians;
46
+ bf: string;
47
+ h: string;
48
+ pname: string;
49
+ vmag?: number;
50
+
51
+ constructor(info: StarObjectParams) {
52
+ super(info);
53
+ this.type = SpaceObjectType.STAR;
54
+
55
+ this.ra = info.ra;
56
+ this.dec = info.dec;
57
+
58
+ this.pname = info.pname ?? '';
59
+ this.bf = info.bf ?? '';
60
+ this.h = info.h ?? '';
61
+ this.vmag = info.vmag;
62
+ }
63
+
64
+ eci(lla: LlaVec3 = { lat: <Degrees>180, lon: <Degrees>0, alt: <Kilometers>0 }, date: Date = new Date()): EciVec3 {
65
+ const rae = this.rae(lla, date);
66
+ const { gmst } = Star.calculateTimeVariables_(date);
67
+
68
+ // Arbitrary distance to enable using ECI coordinates
69
+ return ecf2eci(rae2ecf(rae, { lat: <Degrees>0, lon: <Degrees>0, alt: <Kilometers>0 }), gmst);
70
+ }
71
+
72
+ rae(
73
+ lla: LlaVec3<Degrees, Kilometers> = { lat: <Degrees>180, lon: <Degrees>0, alt: <Kilometers>0 },
74
+ date: Date = new Date(),
75
+ ): RaeVec3 {
76
+ const starPos = Celestial.azEl(date, lla.lat, lla.lon, this.ra, this.dec);
77
+
78
+ return { az: starPos.az, el: starPos.el, rng: <Kilometers>250000 };
79
+ }
80
+
81
+ private static calculateTimeVariables_(date: Date): { gmst: GreenwichMeanSiderealTime; j: number } {
82
+ const j =
83
+ jday(
84
+ date.getUTCFullYear(),
85
+ date.getUTCMonth() + 1,
86
+ date.getUTCDate(),
87
+ date.getUTCHours(),
88
+ date.getUTCMinutes(),
89
+ date.getUTCSeconds(),
90
+ ) +
91
+ date.getUTCMilliseconds() * MILLISECONDS_TO_DAYS;
92
+ const gmst = Sgp4.gstime(j);
93
+
94
+ return { gmst, j };
95
+ }
96
+ }
@@ -1,3 +1,8 @@
1
+ export { BaseObject } from './BaseObject.js';
2
+ export { GroundObject } from './GroundObject.js';
3
+ export { Satellite } from './Satellite.js';
4
+ export { Sensor } from './Sensor.js';
5
+ export { Star } from './Star.js';
1
6
  export { DetailedSatellite } from './DetailedSatellite.js';
2
7
  export { DetailedSensor } from './DetailedSensor.js';
3
8
  export { LandObject } from './LandObject.js';
@@ -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
@@ -15,7 +15,7 @@
15
15
  * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
16
16
  */
17
17
 
18
- import { EpochUTC, J2000, Matrix, Vector, Vector3D } from 'ootk-core';
18
+ import { EpochUTC, J2000, Matrix, Vector, Vector3D } from '../main.js';
19
19
  import { Propagator } from '../propagator/Propagator.js';
20
20
  import { RandomGaussianSource } from './../operations/RandomGaussianSource.js';
21
21
  import { PropagatorPairs } from './PropagatorPairs.js';
@@ -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
  RIC,
28
28
  Vector,
29
29
  Vector3D,
30
- } from 'ootk-core';
30
+ } from '../main.js';
31
31
  import { RandomGaussianSource } from '../operations/RandomGaussianSource.js';
32
32
  import { Propagator } from '../propagator/Propagator.js';
33
33
  import { Observation } from './Observation.js';
@@ -38,28 +38,28 @@ import { PropagatorPairs } from './PropagatorPairs.js';
38
38
  export class ObservationOptical extends Observation {
39
39
  // / Create a new [ObservationOptical] object.
40
40
  constructor(
41
- private _site: J2000,
41
+ private readonly site_: J2000,
42
42
  public observation: RadecTopocentric,
43
- private _noise: Matrix = ObservationOptical.defaultNoise,
43
+ private readonly noise_: Matrix = ObservationOptical.defaultNoise,
44
44
  ) {
45
45
  super();
46
46
  }
47
47
 
48
48
  // / Inertial site location.
49
49
  get site(): J2000 {
50
- return this._site;
50
+ return this.site_;
51
51
  }
52
52
 
53
53
  // / Noise matrix.
54
54
  get noise(): Matrix {
55
- return this._noise;
55
+ return this.noise_;
56
56
  }
57
57
 
58
58
  /**
59
59
  * Default noise matrix _(right-ascension, declination)_.
60
60
  * Based on the Maui Optical Site noise model.
61
61
  */
62
- static defaultNoise: Matrix = ObservationOptical.noiseFromSigmas(
62
+ static readonly defaultNoise: Matrix = ObservationOptical.noiseFromSigmas(
63
63
  0.0037 * DEG2RAD as Radians,
64
64
  0.003 * DEG2RAD as Radians,
65
65
  );
@@ -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
@@ -28,7 +28,7 @@ import {
28
28
  RIC,
29
29
  Vector,
30
30
  Vector3D,
31
- } from 'ootk-core';
31
+ } from '../main.js';
32
32
  import { RandomGaussianSource } from '../operations/RandomGaussianSource.js';
33
33
  import { Propagator } from '../propagator/Propagator.js';
34
34
  import { Observation } from './Observation.js';
@@ -38,12 +38,16 @@ import { PropagatorPairs } from './PropagatorPairs.js';
38
38
  // / Radar observation data.
39
39
  export class ObservationRadar extends Observation {
40
40
  // / Create a new [ObservationRadar] object.
41
- constructor(private _site: J2000, public observation: RAE, private _noise: Matrix = ObservationRadar.defaultNoise) {
41
+ constructor(
42
+ private readonly site_: J2000,
43
+ public observation: RAE,
44
+ private readonly noise_: Matrix = ObservationRadar.defaultNoise,
45
+ ) {
42
46
  super();
43
47
  }
44
48
 
45
49
  // / Default noise matrix.
46
- private static defaultNoise: Matrix =
50
+ private static readonly defaultNoise: Matrix =
47
51
  ObservationRadar.noiseFromSigmas(0.32 as Kilometers, 0.015 * DEG2RAD as Radians, 0.015 * DEG2RAD as Radians);
48
52
 
49
53
  get epoch(): EpochUTC {
@@ -51,11 +55,11 @@ export class ObservationRadar extends Observation {
51
55
  }
52
56
 
53
57
  get site(): J2000 {
54
- return this._site;
58
+ return this.site_;
55
59
  }
56
60
 
57
61
  get noise(): Matrix {
58
- return this._noise;
62
+ return this.noise_;
59
63
  }
60
64
 
61
65
  toVector(): Vector {
@@ -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
@@ -15,7 +15,36 @@
15
15
  * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
16
16
  */
17
17
 
18
- import { Matrix } from 'ootk-core';
18
+ import { Radians, Kilometers, Vector3D, RadiansPerSecond, KilometersPerSecond, Matrix } from '../main.js';
19
+
20
+ export const radecToPosition = (ra: Radians, dec: Radians, r: Kilometers): Vector3D<Kilometers> => {
21
+ const ca = Math.cos(ra);
22
+ const sa = Math.sin(ra);
23
+ const cd = Math.cos(dec);
24
+ const sd = Math.sin(dec);
25
+
26
+ return new Vector3D(r * cd * ca as Kilometers, r * cd * sa as Kilometers, r * sd as Kilometers);
27
+ };
28
+
29
+ export const radecToVelocity = (
30
+ ra: Radians,
31
+ dec: Radians,
32
+ r: Kilometers,
33
+ raDot: RadiansPerSecond,
34
+ decDot: RadiansPerSecond,
35
+ rDot: KilometersPerSecond,
36
+ ): Vector3D<KilometersPerSecond> => {
37
+ const ca = Math.cos(ra);
38
+ const sa = Math.sin(ra);
39
+ const cd = Math.cos(dec);
40
+ const sd = Math.sin(dec);
41
+
42
+ return new Vector3D(
43
+ rDot * cd * ca - r * sd * ca * decDot - r * cd * sa * raDot as KilometersPerSecond,
44
+ rDot * cd * sa - r * sd * sa * decDot + r * cd * ca * raDot as KilometersPerSecond,
45
+ rDot * sd + r * cd * decDot as KilometersPerSecond,
46
+ );
47
+ };
19
48
 
20
49
  export const normalizeAngle = (a: number, b: number): number => {
21
50
  const x = a - b;
@@ -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
@@ -18,7 +18,7 @@
18
18
  import { Propagator } from '../propagator/Propagator.js';
19
19
 
20
20
  export class PropagatorPairs {
21
- constructor(private _posStep: number, private _velStep: number) {
21
+ constructor(private readonly posStep_: number, private readonly velStep_: number) {
22
22
  // Do nothing.
23
23
  }
24
24
 
@@ -40,6 +40,6 @@ export class PropagatorPairs {
40
40
  * @returns The step size.
41
41
  */
42
42
  step(index: number): number {
43
- return index < 3 ? this._posStep : this._velStep;
43
+ return index < 3 ? this.posStep_ : this.velStep_;
44
44
  }
45
45
  }