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,665 @@
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
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
9
+ * terms of the GNU Affero General Public License as published by the Free Software
10
+ * Foundation, either version 3 of the License, or (at your option) any later version.
11
+ *
12
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
13
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14
+ * See the GNU Affero General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU Affero General Public License along with
17
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
18
+ * @copyright (c) 2011-2015, Vladimir Agafonkin
19
+ * @copyright (c) 2022 Robert Gester https://github.com/hypnos3/suncalc3
20
+ * @see suncalc.LICENSE.md
21
+ * Some of the math in this file was originally created by Vladimir Agafonkin.
22
+ * Robert Gester's update was referenced for documentation. There were a couple
23
+ * of bugs in both versions so there will be some differences if you are
24
+ * migrating from either to this library.
25
+ *
26
+ * suncalc is a JavaScript library for calculating sun/moon position and light
27
+ * phases. https://github.com/mourner/suncalc
28
+ * It was reworked and enhanced by Robert Gester.
29
+ *
30
+ * The original suncalc is released under the terms of the BSD 2-Clause License.
31
+ */
32
+
33
+ import {
34
+ angularDiameter,
35
+ AngularDiameterMethod,
36
+ astronomicalUnit,
37
+ AzEl,
38
+ Celestial,
39
+ cKmPerSec,
40
+ DEG2RAD,
41
+ Degrees,
42
+ Earth,
43
+ EpochUTC,
44
+ Kilometers,
45
+ Meters,
46
+ MS_PER_DAY,
47
+ RAD2DEG,
48
+ RaDec,
49
+ Radians,
50
+ Seconds,
51
+ SunTime,
52
+ TAU,
53
+ Vector3D,
54
+ } from '../main.js';
55
+
56
+ /**
57
+ * Sun metrics and operations.
58
+ */
59
+ export class Sun {
60
+ private static readonly J0_ = 0.0009;
61
+ private static readonly J1970_ = 2440587.5;
62
+ private static readonly J2000_ = 2451545;
63
+ static readonly e = DEG2RAD * 23.4397;
64
+
65
+ /**
66
+ * Array representing the times for different phases of the sun. Each element
67
+ * in the array contains:
68
+ * - The angle in degrees representing the time offset from solar noon.
69
+ * - The name of the start time for the phase.
70
+ * - The name of the end time for the phase.
71
+ */
72
+ private static readonly times_ = [
73
+ [6, 'goldenHourDawnEnd', 'goldenHourDuskStart'], // GOLDEN_HOUR_2
74
+ [-0.3, 'sunriseEnd', 'sunsetStart'], // SUNRISE_END
75
+ [-0.833, 'sunriseStart', 'sunsetEnd'], // SUNRISE
76
+ [-1, 'goldenHourDawnStart', 'goldenHourDuskEnd'], // GOLDEN_HOUR_1
77
+ [-4, 'blueHourDawnEnd', 'blueHourDuskStart'], // BLUE_HOUR
78
+ [-6, 'civilDawn', 'civilDusk'], // DAWN
79
+ [-8, 'blueHourDawnStart', 'blueHourDuskEnd'], // BLUE_HOUR
80
+ [-12, 'nauticalDawn', 'nauticalDusk'], // NAUTIC_DAWN
81
+ [-15, 'amateurDawn', 'amateurDusk'],
82
+ [-18, 'astronomicalDawn', 'astronomicalDusk'], // ASTRO_DAWN
83
+ ] as [Degrees, string, string][];
84
+
85
+ /**
86
+ * Gravitational parameter of the Sun. (km³/s²)
87
+ */
88
+ static readonly mu = 1.32712428e11;
89
+ /**
90
+ * The angle of the penumbra of the Sun, in radians.
91
+ */
92
+ static readonly penumbraAngle = (0.26900424 * DEG2RAD) as Radians;
93
+ /**
94
+ * The radius of the Sun in kilometers.
95
+ */
96
+ static readonly radius = 695500.0 as Kilometers;
97
+ /**
98
+ * The mean solar flux of the Sun. (W/m²)
99
+ */
100
+ static readonly solarFlux = 1367.0;
101
+ /**
102
+ * The solar pressure exerted by the Sun. (N/m²) It is calculated as the solar
103
+ * flux divided by the speed of light.
104
+ */
105
+ static readonly solarPressure = Sun.solarFlux / (cKmPerSec * 1000);
106
+ /**
107
+ * The angle of the umbra, in radians.
108
+ */
109
+ static readonly umbraAngle = (0.26411888 * DEG2RAD) as Radians;
110
+
111
+ private constructor() {
112
+ // disable constructor
113
+ }
114
+
115
+ /**
116
+ * Calculates the azimuth and elevation of the Sun for a given date, latitude,
117
+ * and longitude.
118
+ * @param date - The date for which to calculate the azimuth and elevation.
119
+ * @param lat - The latitude in degrees.
120
+ * @param lon - The longitude in degrees.
121
+ * @param c - The right ascension and declination of the target. Defaults to
122
+ * the Sun's right ascension and declination
123
+ * @returns An object containing the azimuth and elevation of the Sun in
124
+ * radians.
125
+ */
126
+ static azEl(date: Date, lat: Degrees, lon: Degrees, c?: RaDec): AzEl<Radians> {
127
+ const lw = <Radians>(-lon * DEG2RAD);
128
+ const phi = <Radians>(lat * DEG2RAD);
129
+ const d = Sun.date2jSince2000(date);
130
+
131
+ c ??= Sun.raDec(date);
132
+ const H = Sun.siderealTime(d, lw) - c.ra;
133
+
134
+ return {
135
+ az: Celestial.azimuth(H, phi, c.dec),
136
+ el: Celestial.elevation(H, phi, c.dec),
137
+ };
138
+ }
139
+
140
+ /**
141
+ * get number of days for a dateValue since 2000
142
+ * See: https://en.wikipedia.org/wiki/Epoch_(astronomy)
143
+ * @param date date as timestamp to get days
144
+ * @returns count of days
145
+ */
146
+ static date2jSince2000(date: Date): number {
147
+ return date.getTime() / MS_PER_DAY + Sun.J1970_ - Sun.J2000_;
148
+ }
149
+
150
+ /**
151
+ * Calculates the angular diameter of the Sun given the observer's position
152
+ * and the Sun's position.
153
+ * @param obsPos The observer's position in kilometers.
154
+ * @param sunPos The Sun's position in kilometers.
155
+ * @returns The angular diameter of the Sun in radians.
156
+ */
157
+ static diameter(obsPos: Vector3D<Kilometers>, sunPos: Vector3D<Kilometers>): Radians {
158
+ return angularDiameter(
159
+ this.radius * 2,
160
+ obsPos.subtract(sunPos).magnitude(),
161
+ AngularDiameterMethod.Sphere,
162
+ ) as Radians;
163
+ }
164
+
165
+ /**
166
+ * Calculate eclipse angles given a satellite ECI position and Sun ECI
167
+ * position.
168
+ * @param satPos the satellite position
169
+ * @param sunPos the sun position
170
+ * @returns [central body angle, central body apparent radius, sun apparent]
171
+ */
172
+ static eclipseAngles(satPos: Vector3D<Kilometers>, sunPos: Vector3D<Kilometers>): [Radians, Radians, Radians] {
173
+ const satSun = sunPos.subtract(satPos);
174
+ const r = satPos.magnitude();
175
+
176
+ return [
177
+ // central body angle
178
+ satSun.angle(satPos.negate()),
179
+ // central body apparent radius
180
+ Math.asin(Earth.radiusEquator / r) as Radians,
181
+ // sun apparent radius
182
+ Math.asin(this.radius / satSun.magnitude()) as Radians,
183
+ ];
184
+ }
185
+
186
+ /**
187
+ * Ecliptic latitude measures the distance north or south of the ecliptic,
188
+ * attaining +90° at the north ecliptic pole (NEP) and -90° at the south
189
+ * ecliptic pole (SEP). The ecliptic itself is 0° latitude.
190
+ * @param B - ?
191
+ * @returns ecliptic latitude
192
+ */
193
+ static eclipticLatitude(B: number): number {
194
+ const C = TAU / 360;
195
+ const L = B - 0.00569 - 0.00478 * Math.sin(C * B);
196
+
197
+ return TAU * (L + 0.0003 * Math.sin(C * 2 * L));
198
+ }
199
+
200
+ /**
201
+ * Ecliptic longitude, also known as celestial longitude, measures the angular
202
+ * distance of an object along the ecliptic from the primary direction. It is
203
+ * measured positive eastwards in the fundamental plane (the ecliptic) from 0°
204
+ * to 360°. The primary direction (0° ecliptic longitude) points from the
205
+ * Earth towards the Sun at the vernal equinox of the Northern Hemisphere. Due
206
+ * to axial precession, the ecliptic longitude of most "fixed stars" increases
207
+ * by about 50.3 arcseconds per year, or 83.8 arcminutes per century.
208
+ * @param M - solar mean anomaly
209
+ * @returns ecliptic longitude
210
+ */
211
+ static eclipticLongitude(M: number): Radians {
212
+ const C = DEG2RAD * (1.9148 * Math.sin(M) + 0.02 * Math.sin(2 * M) + 0.0003 * Math.sin(3 * M));
213
+ const P = DEG2RAD * 102.9372; // perihelion of Earth
214
+
215
+ return <Radians>(M + C + P + Math.PI); // Sun's mean longitude
216
+ }
217
+
218
+ /**
219
+ * returns set time for the given sun altitude
220
+ * @param h - height at 0
221
+ * @param lw - rad * -lng
222
+ * @param phi - rad * lat;
223
+ * @param dec - declination
224
+ * @param n - Julian cycle
225
+ * @param M - solar mean anomal
226
+ * @param L - ecliptic longitude
227
+ * @returns set time
228
+ */
229
+ static getSetJulian(h: Meters, lw: number, phi: number, dec: number, n: number, M: number, L: number): number {
230
+ const w = Sun.hourAngle(h, phi, dec);
231
+ const a = Sun.approxTransit_(w, lw, n);
232
+
233
+ return Sun.solarTransitJulian(a, M, L);
234
+ }
235
+
236
+ /**
237
+ * Calculates the time of the sun based on the given azimuth.
238
+ * @param dateValue - The date value or Date object.
239
+ * @param lat - The latitude in degrees.
240
+ * @param lon - The longitude in degrees.
241
+ * @param az - The azimuth in radians or degrees.
242
+ * @param isDegrees - Indicates if the azimuth is in degrees. Default is false.
243
+ * @returns The calculated time of the sun.
244
+ * @throws Error if the azimuth, latitude, or longitude is missing.
245
+ */
246
+ static getSunTimeByAz(
247
+ dateValue: number | Date,
248
+ lat: Degrees,
249
+ lon: Degrees,
250
+ az: Radians | Degrees,
251
+ isDegrees = false,
252
+ ) {
253
+ if (isNaN(az)) {
254
+ throw new Error('azimuth missing');
255
+ }
256
+ if (isNaN(lat)) {
257
+ throw new Error('latitude missing');
258
+ }
259
+ if (isNaN(lon)) {
260
+ throw new Error('longitude missing');
261
+ }
262
+
263
+ if (isDegrees) {
264
+ az = <Radians>(az * DEG2RAD);
265
+ }
266
+ const date = dateValue instanceof Date ? dateValue : new Date(dateValue);
267
+ const lw = <Radians>(DEG2RAD * -lon);
268
+ const phi = <Radians>(DEG2RAD * lat);
269
+
270
+ let dateVal = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0).getTime();
271
+ let addval = MS_PER_DAY; // / 2);
272
+
273
+ dateVal += addval;
274
+
275
+ while (addval > 200) {
276
+ const newDate = new Date(dateVal);
277
+ const d = Sun.date2jSince2000(newDate);
278
+ const c = Sun.raDec(newDate);
279
+ const H = Sun.siderealTime(d, lw) - c.ra;
280
+ const newAz = Celestial.azimuth(H, phi, c.dec);
281
+
282
+ addval /= 2;
283
+ if (newAz < az) {
284
+ dateVal += addval;
285
+ } else {
286
+ dateVal -= addval;
287
+ }
288
+ }
289
+
290
+ return new Date(Math.floor(dateVal));
291
+ }
292
+
293
+ /**
294
+ * Calculates sun times for a given date and latitude/longitude
295
+ *
296
+ * Default altitude is 0 meters. If `isUtc` is `true`, the times are returned
297
+ * as UTC, otherwise in local time.
298
+ * @param dateVal - The date value or Date object.
299
+ * @param lat - The latitude in degrees.
300
+ * @param lon - The longitude in degrees.
301
+ * @param alt - The altitude in meters. Default is 0.
302
+ * @param isUtc - Indicates if the times should be returned as UTC. Default is
303
+ * false.
304
+ * @returns An object containing the times of the sun.
305
+ */
306
+ static getTimes(dateVal: Date | number, lat: Degrees, lon: Degrees, alt: Meters = <Meters>0, isUtc = false): SunTime {
307
+ if (isNaN(lat)) {
308
+ throw new Error('latitude missing');
309
+ }
310
+ if (isNaN(lon)) {
311
+ throw new Error('longitude missing');
312
+ }
313
+
314
+ // Ensure date is a Date object
315
+ const date = dateVal instanceof Date ? dateVal : new Date(dateVal);
316
+
317
+ if (isUtc) {
318
+ date.setUTCHours(12, 0, 0, 0);
319
+ } else {
320
+ date.setHours(12, 0, 0, 0);
321
+ }
322
+
323
+ let time: [Degrees, string, string];
324
+ let h0 = <Meters>0;
325
+ let Jset = 0;
326
+ let Jrise = 0;
327
+
328
+ const { Jnoon, dh, lw, phi, dec, n, M, L } = Sun.calculateJnoon_(lon, lat, alt, date);
329
+
330
+ // Determine when the sun is at its highest and lowest (darkest) points.
331
+ const result: SunTime = {
332
+ solarNoon: Sun.julian2date(Jnoon),
333
+ nadir: Sun.julian2date(Jnoon + 0.5), // https://github.com/mourner/suncalc/pull/125
334
+ } as SunTime;
335
+
336
+ // Add all other unique times using Jnoon as a reference
337
+ for (let i = 0, len = Sun.times_.length; i < len; i += 1) {
338
+ time = Sun.times_[i]!;
339
+ const angle = time[0];
340
+
341
+ h0 = <Meters>((angle + dh) * DEG2RAD);
342
+
343
+ Jset = Sun.getSetJ_(h0, lw, phi, dec, n, M, L);
344
+ Jrise = Jnoon - (Jset - Jnoon);
345
+
346
+ result[time[1] as keyof SunTime] = Sun.julian2date(Jrise);
347
+ result[time[2] as keyof SunTime] = Sun.julian2date(Jset);
348
+ }
349
+
350
+ return result;
351
+ }
352
+
353
+ /**
354
+ * hour angle
355
+ * @param h - heigh at 0
356
+ * @param phi - rad * lat;
357
+ * @param dec - declination
358
+ * @returns hour angle
359
+ */
360
+ static hourAngle(h: number, phi: number, dec: number): number {
361
+ return Math.acos((Math.sin(h) - Math.sin(phi) * Math.sin(dec)) / (Math.cos(phi) * Math.cos(dec)));
362
+ }
363
+
364
+ /**
365
+ * convert Julian calendar to date object
366
+ * @param julian day number in Julian calendar to convert
367
+ * @returns result date as timestamp
368
+ */
369
+ static julian2date(julian: number): Date {
370
+ return new Date((julian - Sun.J1970_) * MS_PER_DAY);
371
+ }
372
+
373
+ /**
374
+ * Julian cycle
375
+ *
376
+ * The Julian cycle is a period of 7980 years after which the positions of the
377
+ * Sun, Moon, and planets repeat. It is used in astronomical calculations to
378
+ * determine the position of celestial bodies.
379
+ *
380
+ * The Julian Period starts at noon on January 1, 4713 B.C.E. (Julian
381
+ * calendar) and lasts for 7980 years. This was determined because it is a
382
+ * time period long enough to include all of recorded history and includes
383
+ * some time in the future that would incorporate the three important
384
+ * calendrical cycles, the Golden Number Cycle, the Solar Cycle, and the Roman
385
+ * Indiction.
386
+ *
387
+ * The Golden Number Cycle is a cycle of 19 years, while the Solar Cycle is a
388
+ * cycle of 28 years and the Roman Indiction repeats every 15 years. Thus the
389
+ * Julian Period is calculated to be 7980 years long or 2,914,695 days because
390
+ * 19*28*15 = 7980.
391
+ * @param date - Date object for calculating julian cycle
392
+ * @param lon - Degrees longitude
393
+ * @returns julian cycle
394
+ */
395
+ static julianCycle(date: Date, lon: Degrees): number {
396
+ const lw = <Radians>(-lon * DEG2RAD);
397
+ const d = Sun.date2jSince2000(date);
398
+
399
+ return Math.round(d - Sun.J0_ - lw / ((2 * TAU) / 2));
400
+ }
401
+
402
+ /**
403
+ * Calculate the lighting ratio given a satellite ECI position [satPos] _(km)_
404
+ * and Sun ECI position [sunPos] _(km)_.
405
+ *
406
+ * Returns `1.0` if the satellite is fully illuminated and `0.0` when fully
407
+ * eclipsed.
408
+ * @param satPos - The position of the satellite.
409
+ * @param sunPos - The position of the sun.
410
+ * @returns The lighting ratio.
411
+ */
412
+ static lightingRatio(satPos: Vector3D<Kilometers>, sunPos: Vector3D<Kilometers>): number {
413
+ const [sunSatAngle, aCent, aSun] = Sun.eclipseAngles(satPos, sunPos);
414
+
415
+ if (sunSatAngle - aCent + aSun <= 1e-10) {
416
+ return 0.0;
417
+ } else if (sunSatAngle - aCent - aSun < -1e-10) {
418
+ const ssa2 = sunSatAngle * sunSatAngle;
419
+ const ssaInv = 1.0 / (2.0 * sunSatAngle);
420
+ const ac2 = aCent * aCent;
421
+ const as2 = aSun * aSun;
422
+ const acAsDiff = ac2 - as2;
423
+ const a1 = (ssa2 - acAsDiff) * ssaInv;
424
+ const a2 = (ssa2 + acAsDiff) * ssaInv;
425
+ const asr1 = a1 / aSun;
426
+ const asr2 = as2 - a1 * a1;
427
+ const acr1 = a2 / aCent;
428
+ const acr2 = ac2 - a2 * a2;
429
+ const p1 = as2 * Math.acos(asr1) - a1 * Math.sqrt(asr2);
430
+ const p2 = ac2 * Math.acos(acr1) - a2 * Math.sqrt(acr2);
431
+
432
+ return 1.0 - (p1 + p2) / (Math.PI * as2);
433
+ }
434
+
435
+ return 1.0;
436
+ }
437
+
438
+ /**
439
+ * Calculates the lighting factor based on the position of the satellite and the sun.
440
+ * @deprecated This method was previously used. It is now deprecated and will be removed
441
+ * in a future release.
442
+ * @param satPos The position of the satellite.
443
+ * @param sunPos The position of the sun.
444
+ * @returns The lighting factor.
445
+ */
446
+ static sunlightLegacy(satPos: Vector3D, sunPos: Vector3D): number {
447
+ let lighting = 1.0;
448
+
449
+ const semiDiamEarth =
450
+ Math.asin(Earth.radiusMean / Math.sqrt((-satPos.x) ** 2 + (-satPos.y) ** 2 + (-satPos.z) ** 2)) * RAD2DEG;
451
+
452
+ const semiDiamSun =
453
+ Math.asin(
454
+ Sun.radius / Math.sqrt((-satPos.x + sunPos.x) ** 2 + (-satPos.y + sunPos.y) ** 2 + (-satPos.z + sunPos.z) ** 2),
455
+ ) * RAD2DEG;
456
+
457
+ // Angle between earth and sun
458
+ const theta =
459
+ Math.acos(
460
+ satPos.negate().dot(sunPos.negate()) /
461
+ (Math.sqrt((-satPos.x) ** 2 + (-satPos.y) ** 2 + (-satPos.z) ** 2) *
462
+ Math.sqrt((-satPos.x + sunPos.x) ** 2 + (-satPos.y + sunPos.y) ** 2 + (-satPos.z + sunPos.z) ** 2)),
463
+ ) * RAD2DEG;
464
+
465
+ if (semiDiamEarth > semiDiamSun && theta < semiDiamEarth - semiDiamSun) {
466
+ lighting = 0;
467
+ }
468
+
469
+ if (Math.abs(semiDiamEarth - semiDiamSun) < theta && theta < semiDiamEarth + semiDiamSun) {
470
+ lighting = 0.5;
471
+ }
472
+
473
+ if (semiDiamSun > semiDiamEarth) {
474
+ lighting = 0.5;
475
+ }
476
+
477
+ if (theta < semiDiamSun - semiDiamEarth) {
478
+ lighting = 0.5;
479
+ }
480
+
481
+ return lighting;
482
+ }
483
+
484
+ /**
485
+ * Calculates the position vector of the Sun at a given epoch in the
486
+ * Earth-centered inertial (ECI) coordinate system.
487
+ * @param epoch - The epoch in UTC.
488
+ * @returns The position vector of the Sun in Kilometers.
489
+ */
490
+ static position(epoch: EpochUTC): Vector3D<Kilometers> {
491
+ const jc = epoch.toJulianCenturies();
492
+ const dtr = DEG2RAD;
493
+ const lamSun = 280.46 + 36000.77 * jc;
494
+ const mSun = 357.5291092 + 35999.05034 * jc;
495
+ const lamEc = lamSun + 1.914666471 * Math.sin(mSun * dtr) + 0.019994643 * Math.sin(2.0 * mSun * dtr);
496
+ const obliq = 23.439291 - 0.0130042 * jc;
497
+ const rMag = 1.000140612 - 0.016708617 * Math.cos(mSun * dtr) - 0.000139589 * Math.cos(2.0 * mSun * dtr);
498
+ const r = new Vector3D(
499
+ rMag * Math.cos(lamEc * dtr),
500
+ rMag * Math.cos(obliq * dtr) * Math.sin(lamEc * dtr),
501
+ rMag * Math.sin(obliq * dtr) * Math.sin(lamEc * dtr),
502
+ );
503
+ const rMOD = r.scale(astronomicalUnit);
504
+ const p = Earth.precession(epoch);
505
+
506
+ return rMOD
507
+ .rotZ(p.zed)
508
+ .rotY(-p.theta as Radians)
509
+ .rotZ(p.zeta) as Vector3D<Kilometers>;
510
+ }
511
+
512
+ /**
513
+ * Calculate the Sun's apparent ECI position _(km)_ from Earth for a given UTC
514
+ * [epoch].
515
+ * @param epoch - The epoch in UTC.
516
+ * @returns The Sun's apparent ECI position in kilometers.
517
+ */
518
+ static positionApparent(epoch: EpochUTC): Vector3D<Kilometers> {
519
+ const distance = Sun.position(epoch).magnitude();
520
+ const dSec = distance / cKmPerSec;
521
+
522
+ return Sun.position(epoch.roll(-dSec as Seconds));
523
+ }
524
+
525
+ /**
526
+ * Calculates the right ascension and declination of the Sun for a given date.
527
+ * @param date - The date for which to calculate the right ascension and declination.
528
+ * @returns An object containing the declination and right ascension of the Sun.
529
+ */
530
+ static raDec(date: Date): RaDec {
531
+ const d = Sun.date2jSince2000(date);
532
+ const M = Sun.solarMeanAnomaly_(d);
533
+ const L = Sun.eclipticLongitude(M);
534
+
535
+ return {
536
+ dec: Celestial.declination(L, 0),
537
+ ra: Celestial.rightAscension(L, 0),
538
+ dist: 0 as Kilometers,
539
+ };
540
+ }
541
+
542
+ /**
543
+ * Return `true` if the ECI satellite position [posSat] is in eclipse at the
544
+ * given UTC [epoch].
545
+ * @param epoch - The epoch in UTC.
546
+ * @param posSat - The ECI position of the satellite in kilometers.
547
+ * @returns `true` if the satellite is in eclipse.
548
+ */
549
+ static shadow(epoch: EpochUTC, posSat: Vector3D<Kilometers>): boolean {
550
+ const posSun = Sun.positionApparent(epoch);
551
+ let shadow = false;
552
+
553
+ if (posSun.dot(posSat) < 0) {
554
+ const angle = posSun.angle(posSat);
555
+ const r = posSat.magnitude();
556
+ const satHoriz = r * Math.cos(angle);
557
+ const satVert = r * Math.sin(angle);
558
+ const penVert = Earth.radiusEquator + Math.tan(this.penumbraAngle) * satHoriz;
559
+
560
+ if (satVert <= penVert) {
561
+ shadow = true;
562
+ }
563
+ }
564
+
565
+ return shadow;
566
+ }
567
+
568
+ /**
569
+ * side real time
570
+ * @param d - julian day
571
+ * @param lw - longitude of the observer
572
+ * @returns sidereal time
573
+ */
574
+ static siderealTime(d: number, lw: Radians): number {
575
+ return DEG2RAD * (280.16 + 360.9856235 * d) - lw;
576
+ }
577
+
578
+ /**
579
+ * solar transit in Julian
580
+ * @param ds approxTransit
581
+ * @param M solar mean anomal
582
+ * @param L ecliptic longitude
583
+ * @returns solar transit in Julian
584
+ */
585
+ static solarTransitJulian(ds: number, M: number, L: number): number {
586
+ return Sun.J2000_ + ds + 0.0053 * Math.sin(M) - 0.0069 * Math.sin(2 * L);
587
+ }
588
+
589
+ /**
590
+ * The approximate transit time
591
+ * @param Ht hourAngle
592
+ * @param lw rad * -lng
593
+ * @param n Julian cycle
594
+ * @returns approx transit
595
+ */
596
+ private static approxTransit_(Ht: number, lw: number, n: number): number {
597
+ return Sun.J0_ + (Ht + lw) / TAU + n;
598
+ }
599
+
600
+ private static calculateJnoon_(lon: Degrees, lat: Degrees, alt: Meters, date: Date) {
601
+ const lw = <Radians>(DEG2RAD * -lon);
602
+ const phi = <Radians>(DEG2RAD * lat);
603
+ const dh = Sun.observerAngle_(alt);
604
+ const d = Sun.date2jSince2000(date);
605
+
606
+ const n = Sun.julianCycle_(d, lw);
607
+ const ds = Sun.approxTransit_(0, lw, n);
608
+ const M = Sun.solarMeanAnomaly_(ds);
609
+ const L = Sun.eclipticLongitude(M);
610
+ const dec = Celestial.declination(L, 0);
611
+ const Jnoon = Sun.solarTransitJulian(ds, M, L);
612
+
613
+ return { Jnoon, dh, lw, phi, dec, n, M, L };
614
+ }
615
+
616
+ /**
617
+ * returns set time for the given sun altitude
618
+ * @param alt altitude at 0
619
+ * @param lw lng
620
+ * @param phi lat
621
+ * @param dec declination
622
+ * @param n Julian cycle
623
+ * @param M solar mean anomal
624
+ * @param L ecliptic longitude
625
+ * @returns sunset time in days since 2000
626
+ */
627
+ private static getSetJ_(
628
+ alt: Meters,
629
+ lw: Radians,
630
+ phi: Radians,
631
+ dec: Radians,
632
+ n: number,
633
+ M: number,
634
+ L: Radians,
635
+ ): number {
636
+ const w = Sun.hourAngle(alt, phi, dec);
637
+ const a = Sun.approxTransit_(w, lw, n);
638
+
639
+ return Sun.solarTransitJulian(a, M, L);
640
+ }
641
+
642
+ private static julianCycle_(d: number, lw: number): number {
643
+ const lonOffset = lw / TAU;
644
+
645
+ return Math.round(d - Sun.J0_ - lonOffset);
646
+ }
647
+
648
+ /**
649
+ * calculates the obderver angle
650
+ * @param alt the observer altitude (in meters) relative to the horizon
651
+ * @returns height for further calculations
652
+ */
653
+ private static observerAngle_(alt: Meters): Degrees {
654
+ return <Degrees>((-2.076 * Math.sqrt(alt)) / 60);
655
+ }
656
+
657
+ /**
658
+ * get solar mean anomaly
659
+ * @param d julian day
660
+ * @returns solar mean anomaly
661
+ */
662
+ private static solarMeanAnomaly_(d: number): number {
663
+ return DEG2RAD * (357.5291 + 0.98560028 * d);
664
+ }
665
+ }
@@ -0,0 +1,27 @@
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
+ export { Celestial } from './Celestial.js';
25
+ export { Earth } from './Earth.js';
26
+ export { Moon } from './Moon.js';
27
+ export { Sun } from './Sun.js';
@@ -0,0 +1,18 @@
1
+ Copyright (c) 2014, Vladimir Agafonkin All rights reserved.
2
+
3
+ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
4
+ following conditions are met:
5
+
6
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
7
+ disclaimer.
8
+
9
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
10
+ disclaimer in the documentation and/or other materials provided with the distribution.
11
+
12
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
13
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
14
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
15
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
16
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
17
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
18
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.