ootk 5.1.0 → 6.0.0-rc.2

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 (599) hide show
  1. package/.claude/PROMPT.md +13 -0
  2. package/.claude/hooks/post-tool-use.ts +33 -0
  3. package/.claude/hooks/user-prompt-submit.ts +138 -0
  4. package/.claude/settings.local.json +13 -0
  5. package/.claude/skill-rules.json +11 -0
  6. package/.claude/skills/ootk-dev/SKILL.md +16 -0
  7. package/ADVANCED_FEATURES_GUIDE.md +1025 -0
  8. package/CHANGELOG.md +42 -3
  9. package/README.md +77 -45
  10. package/dist/body/Celestial.d.ts +2 -2
  11. package/dist/body/Celestial.js +2 -2
  12. package/dist/body/Celestial.js.map +1 -1
  13. package/dist/body/Earth.d.ts +4 -4
  14. package/dist/body/Earth.js +2 -2
  15. package/dist/body/Earth.js.map +1 -1
  16. package/dist/body/Moon.d.ts +3 -3
  17. package/dist/body/Moon.js +7 -7
  18. package/dist/body/Moon.js.map +1 -1
  19. package/dist/body/NutationAngles.d.ts +2 -2
  20. package/dist/body/NutationAngles.js +1 -1
  21. package/dist/body/PrecessionAngles.d.ts +2 -2
  22. package/dist/body/PrecessionAngles.js +1 -1
  23. package/dist/body/Sun.d.ts +2 -2
  24. package/dist/body/Sun.js +3 -3
  25. package/dist/body/Sun.js.map +1 -1
  26. package/dist/body/index.d.ts +5 -5
  27. package/dist/body/index.js +5 -5
  28. package/dist/body/index.js.map +1 -1
  29. package/dist/conjunction/ConjunctionAssessment.d.ts +156 -0
  30. package/dist/conjunction/ConjunctionAssessment.js +281 -0
  31. package/dist/conjunction/ConjunctionAssessment.js.map +1 -0
  32. package/dist/conjunction/ConjunctionEvent.d.ts +104 -0
  33. package/dist/conjunction/ConjunctionEvent.js +156 -0
  34. package/dist/conjunction/ConjunctionEvent.js.map +1 -0
  35. package/dist/conjunction/ProbabilityOfCollision.d.ts +102 -0
  36. package/dist/conjunction/ProbabilityOfCollision.js +240 -0
  37. package/dist/conjunction/ProbabilityOfCollision.js.map +1 -0
  38. package/dist/conjunction/index.d.ts +19 -0
  39. package/dist/conjunction/index.js +20 -0
  40. package/dist/conjunction/index.js.map +1 -0
  41. package/dist/coordinate/ClassicalElements.d.ts +7 -7
  42. package/dist/coordinate/ClassicalElements.js +7 -7
  43. package/dist/coordinate/ClassicalElements.js.map +1 -1
  44. package/dist/coordinate/EquinoctialElements.d.ts +5 -5
  45. package/dist/coordinate/EquinoctialElements.js +4 -4
  46. package/dist/coordinate/EquinoctialElements.js.map +1 -1
  47. package/dist/coordinate/FormatTle.d.ts +2 -2
  48. package/dist/coordinate/FormatTle.js +2 -2
  49. package/dist/coordinate/FormatTle.js.map +1 -1
  50. package/dist/coordinate/Geodetic.d.ts +4 -4
  51. package/dist/coordinate/Geodetic.js +7 -7
  52. package/dist/coordinate/Geodetic.js.map +1 -1
  53. package/dist/coordinate/Hill.d.ts +4 -4
  54. package/dist/coordinate/Hill.js +3 -3
  55. package/dist/coordinate/Hill.js.map +1 -1
  56. package/dist/coordinate/ITRF.d.ts +5 -5
  57. package/dist/coordinate/ITRF.js +6 -5
  58. package/dist/coordinate/ITRF.js.map +1 -1
  59. package/dist/coordinate/J2000.d.ts +5 -5
  60. package/dist/coordinate/J2000.js +5 -5
  61. package/dist/coordinate/J2000.js.map +1 -1
  62. package/dist/coordinate/RIC.d.ts +4 -4
  63. package/dist/coordinate/RIC.js +3 -3
  64. package/dist/coordinate/RIC.js.map +1 -1
  65. package/dist/coordinate/RelativeState.d.ts +5 -5
  66. package/dist/coordinate/RelativeState.js +2 -2
  67. package/dist/coordinate/RelativeState.js.map +1 -1
  68. package/dist/coordinate/StateVector.d.ts +2 -2
  69. package/dist/coordinate/StateVector.js +2 -2
  70. package/dist/coordinate/StateVector.js.map +1 -1
  71. package/dist/coordinate/TEME.d.ts +4 -4
  72. package/dist/coordinate/TEME.js +4 -4
  73. package/dist/coordinate/TEME.js.map +1 -1
  74. package/dist/coordinate/Tle.d.ts +5 -5
  75. package/dist/coordinate/Tle.js +9 -9
  76. package/dist/coordinate/Tle.js.map +1 -1
  77. package/dist/coordinate/index.d.ts +12 -12
  78. package/dist/coordinate/index.js +12 -12
  79. package/dist/coordinate/index.js.map +1 -1
  80. package/dist/coordinate/tle-format-data.d.ts +1 -1
  81. package/dist/coordinate/tle-format-data.js +1 -1
  82. package/dist/covariance/CovarianceSample.d.ts +5 -5
  83. package/dist/covariance/CovarianceSample.js +5 -5
  84. package/dist/covariance/CovarianceSample.js.map +1 -1
  85. package/dist/covariance/StateCovariance.d.ts +2 -2
  86. package/dist/covariance/StateCovariance.js +2 -2
  87. package/dist/covariance/StateCovariance.js.map +1 -1
  88. package/dist/covariance/index.d.ts +2 -2
  89. package/dist/covariance/index.js +2 -2
  90. package/dist/covariance/index.js.map +1 -1
  91. package/dist/data/DataHandler.d.ts +4 -4
  92. package/dist/data/DataHandler.js +5 -5
  93. package/dist/data/DataHandler.js.map +1 -1
  94. package/dist/data/values/Egm96Data.d.ts +1 -1
  95. package/dist/data/values/Egm96Data.js +3 -3
  96. package/dist/data/values/Egm96Data.js.map +1 -1
  97. package/dist/data/values/HpAtmosphereData.d.ts +2 -2
  98. package/dist/data/values/HpAtmosphereData.js +3 -3
  99. package/dist/data/values/HpAtmosphereData.js.map +1 -1
  100. package/dist/data/values/HpAtmosphereResult.d.ts +2 -2
  101. package/dist/data/values/HpAtmosphereResult.js +1 -1
  102. package/dist/data/values/Iau1980Data.d.ts +1 -1
  103. package/dist/data/values/Iau1980Data.js +2 -2
  104. package/dist/data/values/Iau1980Data.js.map +1 -1
  105. package/dist/data/values/LeapSecond.d.ts +1 -1
  106. package/dist/data/values/LeapSecond.js +1 -1
  107. package/dist/data/values/LeapSecondData.d.ts +2 -2
  108. package/dist/data/values/LeapSecondData.js +2 -2
  109. package/dist/data/values/LeapSecondData.js.map +1 -1
  110. package/dist/data/values/egm96.d.ts +2 -2
  111. package/dist/data/values/egm96.js +1 -1
  112. package/dist/data/values/hpAtmosphere.d.ts +2 -2
  113. package/dist/data/values/hpAtmosphere.js +1 -1
  114. package/dist/data/values/iau1980.d.ts +2 -2
  115. package/dist/data/values/iau1980.js +1 -1
  116. package/dist/enums/AngularDiameterMethod.d.ts +1 -1
  117. package/dist/enums/AngularDiameterMethod.js +1 -1
  118. package/dist/enums/AngularDistanceMethod.d.ts +1 -1
  119. package/dist/enums/AngularDistanceMethod.js +1 -1
  120. package/dist/enums/OrbitRegime.d.ts +1 -1
  121. package/dist/enums/OrbitRegime.js +1 -1
  122. package/dist/enums/PassType.d.ts +1 -1
  123. package/dist/enums/PassType.js +1 -1
  124. package/dist/enums/Sgp4OpsMode.d.ts +1 -1
  125. package/dist/enums/Sgp4OpsMode.js +1 -1
  126. package/dist/enums/index.d.ts +7 -7
  127. package/dist/enums/index.js +7 -7
  128. package/dist/enums/index.js.map +1 -1
  129. package/dist/fetch/horizons-constants.d.ts +43 -0
  130. package/dist/fetch/horizons-constants.js +50 -0
  131. package/dist/fetch/horizons-constants.js.map +1 -0
  132. package/dist/fetch/horizons-interfaces.d.ts +37 -0
  133. package/dist/fetch/horizons-interfaces.js +2 -0
  134. package/dist/fetch/horizons-interfaces.js.map +1 -0
  135. package/dist/fetch/horizons.d.ts +86 -0
  136. package/dist/fetch/horizons.js +237 -0
  137. package/dist/fetch/horizons.js.map +1 -0
  138. package/dist/force/AtmosphericDrag.d.ts +3 -3
  139. package/dist/force/AtmosphericDrag.js +2 -2
  140. package/dist/force/AtmosphericDrag.js.map +1 -1
  141. package/dist/force/EarthGravity.d.ts +3 -3
  142. package/dist/force/EarthGravity.js +2 -2
  143. package/dist/force/EarthGravity.js.map +1 -1
  144. package/dist/force/Force.d.ts +3 -3
  145. package/dist/force/Force.js +1 -10
  146. package/dist/force/Force.js.map +1 -1
  147. package/dist/force/ForceModel.d.ts +3 -3
  148. package/dist/force/ForceModel.js +7 -7
  149. package/dist/force/ForceModel.js.map +1 -1
  150. package/dist/force/Gravity.d.ts +3 -3
  151. package/dist/force/Gravity.js +2 -2
  152. package/dist/force/Gravity.js.map +1 -1
  153. package/dist/force/SolarRadiationPressure.d.ts +3 -3
  154. package/dist/force/SolarRadiationPressure.js +4 -4
  155. package/dist/force/SolarRadiationPressure.js.map +1 -1
  156. package/dist/force/ThirdBodyGravity.d.ts +3 -3
  157. package/dist/force/ThirdBodyGravity.js +2 -2
  158. package/dist/force/ThirdBodyGravity.js.map +1 -1
  159. package/dist/force/Thrust.d.ts +3 -3
  160. package/dist/force/Thrust.js +2 -2
  161. package/dist/force/Thrust.js.map +1 -1
  162. package/dist/force/index.d.ts +1 -1
  163. package/dist/force/index.js +1 -1
  164. package/dist/force/index.js.map +1 -1
  165. package/dist/interfaces/BaseObjectParams.d.ts +2 -2
  166. package/dist/interfaces/BaseObjectParams.js +1 -1
  167. package/dist/interfaces/ClassicalElementsParams.d.ts +2 -2
  168. package/dist/interfaces/ClassicalElementsParams.js +1 -1
  169. package/dist/interfaces/EquinoctialElementsParams.d.ts +2 -2
  170. package/dist/interfaces/EquinoctialElementsParams.js +1 -1
  171. package/dist/interfaces/GroundPositionParams.d.ts +2 -2
  172. package/dist/interfaces/GroundPositionParams.js +1 -1
  173. package/dist/interfaces/RfSensorParams.d.ts +2 -2
  174. package/dist/interfaces/SatelliteParams.d.ts +2 -2
  175. package/dist/interfaces/SensorParams.d.ts +2 -2
  176. package/dist/interfaces/StarObjectParams.d.ts +1 -1
  177. package/dist/interfaces/TimeVariables.d.ts +1 -1
  178. package/dist/interfaces/index.d.ts +9 -9
  179. package/dist/interpolator/ChebyshevCoefficients.d.ts +2 -2
  180. package/dist/interpolator/ChebyshevCoefficients.js +2 -2
  181. package/dist/interpolator/ChebyshevCoefficients.js.map +1 -1
  182. package/dist/interpolator/ChebyshevInterpolator.d.ts +4 -4
  183. package/dist/interpolator/ChebyshevInterpolator.js +3 -3
  184. package/dist/interpolator/ChebyshevInterpolator.js.map +1 -1
  185. package/dist/interpolator/CubicSpline.d.ts +2 -2
  186. package/dist/interpolator/CubicSpline.js +1 -1
  187. package/dist/interpolator/CubicSplineInterpolator.d.ts +4 -4
  188. package/dist/interpolator/CubicSplineInterpolator.js +4 -4
  189. package/dist/interpolator/CubicSplineInterpolator.js.map +1 -1
  190. package/dist/interpolator/FieldInterpolator.d.ts +3 -3
  191. package/dist/interpolator/FieldInterpolator.js +2 -12
  192. package/dist/interpolator/FieldInterpolator.js.map +1 -1
  193. package/dist/interpolator/Interpolator.d.ts +2 -2
  194. package/dist/interpolator/Interpolator.js +2 -2
  195. package/dist/interpolator/Interpolator.js.map +1 -1
  196. package/dist/interpolator/LagrangeInterpolator.d.ts +3 -3
  197. package/dist/interpolator/LagrangeInterpolator.js +3 -3
  198. package/dist/interpolator/LagrangeInterpolator.js.map +1 -1
  199. package/dist/interpolator/StateInterpolator.d.ts +4 -4
  200. package/dist/interpolator/StateInterpolator.js +2 -10
  201. package/dist/interpolator/StateInterpolator.js.map +1 -1
  202. package/dist/interpolator/VerletBlendInterpolator.d.ts +5 -5
  203. package/dist/interpolator/VerletBlendInterpolator.js +5 -5
  204. package/dist/interpolator/VerletBlendInterpolator.js.map +1 -1
  205. package/dist/main.d.ts +20 -20
  206. package/dist/main.js +21 -20
  207. package/dist/main.js.map +1 -1
  208. package/dist/maneuver/TwoBurnOrbitTransfer.d.ts +3 -3
  209. package/dist/maneuver/TwoBurnOrbitTransfer.js +3 -3
  210. package/dist/maneuver/TwoBurnOrbitTransfer.js.map +1 -1
  211. package/dist/maneuver/Waypoint.d.ts +5 -5
  212. package/dist/maneuver/Waypoint.js +7 -7
  213. package/dist/maneuver/Waypoint.js.map +1 -1
  214. package/dist/objects/BaseObject.d.ts +3 -3
  215. package/dist/objects/BaseObject.js +2 -2
  216. package/dist/objects/BaseObject.js.map +1 -1
  217. package/dist/objects/DetailedSatellite.d.ts +4 -4
  218. package/dist/objects/DetailedSatellite.js +4 -4
  219. package/dist/objects/DetailedSatellite.js.map +1 -1
  220. package/dist/objects/DetailedSensor.d.ts +5 -5
  221. package/dist/objects/DetailedSensor.js +2 -2
  222. package/dist/objects/DetailedSensor.js.map +1 -1
  223. package/dist/objects/GroundObject.d.ts +4 -4
  224. package/dist/objects/GroundObject.js +3 -3
  225. package/dist/objects/GroundObject.js.map +1 -1
  226. package/dist/objects/LandObject.d.ts +3 -3
  227. package/dist/objects/LandObject.js +2 -2
  228. package/dist/objects/LandObject.js.map +1 -1
  229. package/dist/objects/Marker.d.ts +2 -2
  230. package/dist/objects/Marker.js +2 -2
  231. package/dist/objects/Marker.js.map +1 -1
  232. package/dist/objects/RfSensor.d.ts +2 -2
  233. package/dist/objects/RfSensor.js +2 -2
  234. package/dist/objects/RfSensor.js.map +1 -1
  235. package/dist/objects/Satellite.d.ts +12 -12
  236. package/dist/objects/Satellite.js +14 -14
  237. package/dist/objects/Satellite.js.map +1 -1
  238. package/dist/objects/Sensor.d.ts +6 -6
  239. package/dist/objects/Sensor.js +5 -5
  240. package/dist/objects/Sensor.js.map +1 -1
  241. package/dist/objects/Star.d.ts +3 -3
  242. package/dist/objects/Star.js +3 -3
  243. package/dist/objects/Star.js.map +1 -1
  244. package/dist/objects/index.d.ts +10 -10
  245. package/dist/objects/index.js +10 -10
  246. package/dist/objects/index.js.map +1 -1
  247. package/dist/observation/Observation.d.ts +11 -11
  248. package/dist/observation/Observation.js +1 -52
  249. package/dist/observation/Observation.js.map +1 -1
  250. package/dist/observation/ObservationOptical.d.ts +6 -6
  251. package/dist/observation/ObservationOptical.js +4 -4
  252. package/dist/observation/ObservationOptical.js.map +1 -1
  253. package/dist/observation/ObservationRadar.d.ts +6 -6
  254. package/dist/observation/ObservationRadar.js +4 -4
  255. package/dist/observation/ObservationRadar.js.map +1 -1
  256. package/dist/observation/ObservationUtils.d.ts +2 -2
  257. package/dist/observation/ObservationUtils.js +2 -2
  258. package/dist/observation/ObservationUtils.js.map +1 -1
  259. package/dist/observation/PropagatorPairs.d.ts +2 -2
  260. package/dist/observation/PropagatorPairs.js +1 -1
  261. package/dist/observation/RAE.d.ts +6 -6
  262. package/dist/observation/RAE.js +6 -6
  263. package/dist/observation/RAE.js.map +1 -1
  264. package/dist/observation/RadecGeocentric.d.ts +6 -6
  265. package/dist/observation/RadecGeocentric.js +5 -5
  266. package/dist/observation/RadecGeocentric.js.map +1 -1
  267. package/dist/observation/RadecTopocentric.d.ts +6 -6
  268. package/dist/observation/RadecTopocentric.js +9 -7
  269. package/dist/observation/RadecTopocentric.js.map +1 -1
  270. package/dist/observation/index.d.ts +5 -5
  271. package/dist/observation/index.js +5 -5
  272. package/dist/observation/index.js.map +1 -1
  273. package/dist/operations/BoxMuller.d.ts +2 -2
  274. package/dist/operations/BoxMuller.js +2 -2
  275. package/dist/operations/BoxMuller.js.map +1 -1
  276. package/dist/operations/EulerAngles.d.ts +2 -2
  277. package/dist/operations/EulerAngles.js +2 -2
  278. package/dist/operations/EulerAngles.js.map +1 -1
  279. package/dist/operations/Matrix.d.ts +2 -2
  280. package/dist/operations/Matrix.js +2 -2
  281. package/dist/operations/Matrix.js.map +1 -1
  282. package/dist/operations/Quaternion.d.ts +2 -2
  283. package/dist/operations/Quaternion.js +2 -2
  284. package/dist/operations/Quaternion.js.map +1 -1
  285. package/dist/operations/Random.d.ts +1 -1
  286. package/dist/operations/Random.js +1 -1
  287. package/dist/operations/RandomGaussianSource.d.ts +2 -2
  288. package/dist/operations/RandomGaussianSource.js +3 -3
  289. package/dist/operations/RandomGaussianSource.js.map +1 -1
  290. package/dist/operations/Vector.d.ts +2 -2
  291. package/dist/operations/Vector.js +2 -2
  292. package/dist/operations/Vector.js.map +1 -1
  293. package/dist/operations/Vector3D.d.ts +5 -4
  294. package/dist/operations/Vector3D.js +5 -4
  295. package/dist/operations/Vector3D.js.map +1 -1
  296. package/dist/operations/index.d.ts +4 -4
  297. package/dist/operations/index.js +4 -4
  298. package/dist/operations/index.js.map +1 -1
  299. package/dist/operations/operations.d.ts +5 -5
  300. package/dist/operations/operations.js +5 -5
  301. package/dist/operations/operations.js.map +1 -1
  302. package/dist/optimize/ChebyshevCompressor.d.ts +3 -3
  303. package/dist/optimize/ChebyshevCompressor.js +4 -4
  304. package/dist/optimize/ChebyshevCompressor.js.map +1 -1
  305. package/dist/optimize/DownhillSimplex.d.ts +2 -2
  306. package/dist/optimize/DownhillSimplex.js +2 -2
  307. package/dist/optimize/DownhillSimplex.js.map +1 -1
  308. package/dist/optimize/GoldenSection.d.ts +2 -2
  309. package/dist/optimize/GoldenSection.js +1 -1
  310. package/dist/optimize/PolynomialRegression.d.ts +2 -2
  311. package/dist/optimize/PolynomialRegression.js +4 -4
  312. package/dist/optimize/PolynomialRegression.js.map +1 -1
  313. package/dist/optimize/PolynomicalRegressionResult.d.ts +1 -1
  314. package/dist/optimize/PolynomicalRegressionResult.js +1 -1
  315. package/dist/optimize/SimpleLinearRegression.d.ts +1 -1
  316. package/dist/optimize/SimpleLinearRegression.js +1 -1
  317. package/dist/optimize/SimplexEntry.d.ts +1 -1
  318. package/dist/optimize/SimplexEntry.js +2 -2
  319. package/dist/optimize/SimplexEntry.js.map +1 -1
  320. package/dist/orbit_determination/BatchLeastSquaresOD.d.ts +5 -5
  321. package/dist/orbit_determination/BatchLeastSquaresOD.js +8 -8
  322. package/dist/orbit_determination/BatchLeastSquaresOD.js.map +1 -1
  323. package/dist/orbit_determination/BatchLeastSquaresResult.d.ts +3 -3
  324. package/dist/orbit_determination/BatchLeastSquaresResult.js +1 -1
  325. package/dist/orbit_determination/GaussIOD.d.ts +98 -0
  326. package/dist/orbit_determination/GaussIOD.js +291 -0
  327. package/dist/orbit_determination/GaussIOD.js.map +1 -0
  328. package/dist/orbit_determination/GibbsIOD.d.ts +2 -2
  329. package/dist/orbit_determination/GibbsIOD.js +4 -4
  330. package/dist/orbit_determination/GibbsIOD.js.map +1 -1
  331. package/dist/orbit_determination/GoodingIOD.d.ts +58 -8
  332. package/dist/orbit_determination/GoodingIOD.js +225 -35
  333. package/dist/orbit_determination/GoodingIOD.js.map +1 -1
  334. package/dist/orbit_determination/HerrickGibbsIOD.d.ts +2 -2
  335. package/dist/orbit_determination/HerrickGibbsIOD.js +2 -2
  336. package/dist/orbit_determination/HerrickGibbsIOD.js.map +1 -1
  337. package/dist/orbit_determination/LambertIOD.d.ts +2 -2
  338. package/dist/orbit_determination/LambertIOD.js +2 -2
  339. package/dist/orbit_determination/LambertIOD.js.map +1 -1
  340. package/dist/orbit_determination/ModifiedGoodingIOD.d.ts +3 -3
  341. package/dist/orbit_determination/ModifiedGoodingIOD.js +8 -8
  342. package/dist/orbit_determination/ModifiedGoodingIOD.js.map +1 -1
  343. package/dist/orbit_determination/index.d.ts +7 -7
  344. package/dist/orbit_determination/index.js +7 -7
  345. package/dist/orbit_determination/index.js.map +1 -1
  346. package/dist/propagator/DormandPrince54Propagator.d.ts +2 -2
  347. package/dist/propagator/DormandPrince54Propagator.js +2 -2
  348. package/dist/propagator/DormandPrince54Propagator.js.map +1 -1
  349. package/dist/propagator/KeplerPropagator.d.ts +6 -6
  350. package/dist/propagator/KeplerPropagator.js +6 -7
  351. package/dist/propagator/KeplerPropagator.js.map +1 -1
  352. package/dist/propagator/Propagator.d.ts +5 -5
  353. package/dist/propagator/Propagator.js +5 -5
  354. package/dist/propagator/Propagator.js.map +1 -1
  355. package/dist/propagator/RkCheckpoint.d.ts +2 -2
  356. package/dist/propagator/RkCheckpoint.js +1 -1
  357. package/dist/propagator/RkResult.d.ts +2 -2
  358. package/dist/propagator/RkResult.js +1 -1
  359. package/dist/propagator/RungeKutta4Propagator.d.ts +6 -6
  360. package/dist/propagator/RungeKutta4Propagator.js +5 -5
  361. package/dist/propagator/RungeKutta4Propagator.js.map +1 -1
  362. package/dist/propagator/RungeKutta89Propagator.d.ts +2 -2
  363. package/dist/propagator/RungeKutta89Propagator.js +2 -2
  364. package/dist/propagator/RungeKutta89Propagator.js.map +1 -1
  365. package/dist/propagator/RungeKuttaAdaptive.d.ts +6 -6
  366. package/dist/propagator/RungeKuttaAdaptive.js +52 -9
  367. package/dist/propagator/RungeKuttaAdaptive.js.map +1 -1
  368. package/dist/propagator/Sgp4Propagator.d.ts +7 -7
  369. package/dist/propagator/Sgp4Propagator.js +4 -4
  370. package/dist/propagator/Sgp4Propagator.js.map +1 -1
  371. package/dist/propagator/index.d.ts +3 -3
  372. package/dist/propagator/index.js +3 -3
  373. package/dist/propagator/index.js.map +1 -1
  374. package/dist/sgp4/index.d.ts +2 -2
  375. package/dist/sgp4/index.js +2 -2
  376. package/dist/sgp4/index.js.map +1 -1
  377. package/dist/sgp4/sgp4.d.ts +3 -3
  378. package/dist/sgp4/sgp4.js +11 -5
  379. package/dist/sgp4/sgp4.js.map +1 -1
  380. package/dist/smoothing/ExponentialSmoothing.d.ts +2 -2
  381. package/dist/smoothing/ExponentialSmoothing.js +1 -1
  382. package/dist/time/Epoch.d.ts +2 -2
  383. package/dist/time/Epoch.js +2 -2
  384. package/dist/time/Epoch.js.map +1 -1
  385. package/dist/time/EpochGPS.d.ts +3 -3
  386. package/dist/time/EpochGPS.js +3 -3
  387. package/dist/time/EpochGPS.js.map +1 -1
  388. package/dist/time/EpochTAI.d.ts +2 -2
  389. package/dist/time/EpochTAI.js +2 -2
  390. package/dist/time/EpochTAI.js.map +1 -1
  391. package/dist/time/EpochTDB.d.ts +2 -2
  392. package/dist/time/EpochTDB.js +2 -2
  393. package/dist/time/EpochTDB.js.map +1 -1
  394. package/dist/time/EpochTT.d.ts +2 -2
  395. package/dist/time/EpochTT.js +2 -2
  396. package/dist/time/EpochTT.js.map +1 -1
  397. package/dist/time/EpochUTC.d.ts +7 -7
  398. package/dist/time/EpochUTC.js +9 -9
  399. package/dist/time/EpochUTC.js.map +1 -1
  400. package/dist/time/EpochWindow.d.ts +2 -2
  401. package/dist/time/EpochWindow.js +1 -1
  402. package/dist/time/TimeStamped.d.ts +2 -2
  403. package/dist/time/TimeStamped.js +1 -1
  404. package/dist/time/index.d.ts +8 -8
  405. package/dist/time/index.js +8 -8
  406. package/dist/time/index.js.map +1 -1
  407. package/dist/transforms/TransformCache.d.ts +1 -1
  408. package/dist/transforms/TransformCache.js +1 -1
  409. package/dist/transforms/conversions.d.ts +2 -2
  410. package/dist/transforms/conversions.js +2 -2
  411. package/dist/transforms/conversions.js.map +1 -1
  412. package/dist/transforms/index.d.ts +2 -2
  413. package/dist/transforms/index.js +2 -2
  414. package/dist/transforms/index.js.map +1 -1
  415. package/dist/transforms/transforms.d.ts +1 -1
  416. package/dist/transforms/transforms.js +1 -1
  417. package/dist/transforms/transforms.js.map +1 -1
  418. package/dist/types/types.d.ts +8 -3
  419. package/dist/types/types.js +6 -1
  420. package/dist/types/types.js.map +1 -1
  421. package/dist/utils/constants.d.ts +2 -2
  422. package/dist/utils/constants.js +1 -1
  423. package/dist/utils/constants.js.map +1 -1
  424. package/dist/utils/create-covariance-from-tle.d.ts +1 -1
  425. package/dist/utils/create-covariance-from-tle.js +1 -1
  426. package/dist/utils/create-covariance-from-tle.js.map +1 -1
  427. package/dist/utils/functions.d.ts +4 -4
  428. package/dist/utils/functions.js +9 -4
  429. package/dist/utils/functions.js.map +1 -1
  430. package/dist/utils/index.d.ts +5 -5
  431. package/dist/utils/index.js +5 -5
  432. package/dist/utils/index.js.map +1 -1
  433. package/dist/utils/jacobian.d.ts +2 -2
  434. package/dist/utils/jacobian.js +1 -1
  435. package/dist/utils/jacobian.js.map +1 -1
  436. package/dist/utils/linearDistance.d.ts +1 -1
  437. package/docs/README.md +132 -0
  438. package/docs/getting-started.md +792 -0
  439. package/docs/lambert-satellite-integration-guide.md +766 -0
  440. package/docs/user-guide.md +1935 -0
  441. package/jest.config.mjs +28 -0
  442. package/package.json +3 -4
  443. package/src/body/Celestial.ts +2 -2
  444. package/src/body/Earth.ts +4 -4
  445. package/src/body/Moon.ts +7 -7
  446. package/src/body/NutationAngles.ts +2 -2
  447. package/src/body/PrecessionAngles.ts +2 -2
  448. package/src/body/Sun.ts +4 -4
  449. package/src/body/index.ts +6 -5
  450. package/src/conjunction/ConjunctionAssessment.ts +417 -0
  451. package/src/conjunction/ConjunctionEvent.ts +149 -0
  452. package/src/conjunction/ProbabilityOfCollision.ts +300 -0
  453. package/src/conjunction/index.ts +24 -0
  454. package/src/coordinate/ClassicalElements.ts +16 -11
  455. package/src/coordinate/EquinoctialElements.ts +7 -7
  456. package/src/coordinate/FormatTle.ts +2 -2
  457. package/src/coordinate/Geodetic.ts +8 -8
  458. package/src/coordinate/Hill.ts +4 -4
  459. package/src/coordinate/ITRF.ts +6 -6
  460. package/src/coordinate/J2000.ts +7 -7
  461. package/src/coordinate/RIC.ts +4 -4
  462. package/src/coordinate/RelativeState.ts +5 -5
  463. package/src/coordinate/StateVector.ts +8 -3
  464. package/src/coordinate/TEME.ts +6 -6
  465. package/src/coordinate/Tle.ts +9 -9
  466. package/src/coordinate/index.ts +13 -12
  467. package/src/coordinate/tle-format-data.ts +1 -1
  468. package/src/covariance/CovarianceSample.ts +13 -13
  469. package/src/covariance/StateCovariance.ts +2 -2
  470. package/src/covariance/index.ts +3 -2
  471. package/src/data/DataHandler.ts +6 -6
  472. package/src/data/values/Egm96Data.ts +3 -3
  473. package/src/data/values/HpAtmosphereData.ts +3 -3
  474. package/src/data/values/HpAtmosphereResult.ts +2 -2
  475. package/src/data/values/Iau1980Data.ts +2 -2
  476. package/src/data/values/LeapSecond.ts +1 -1
  477. package/src/data/values/LeapSecondData.ts +2 -2
  478. package/src/data/values/egm96.ts +2 -2
  479. package/src/data/values/hpAtmosphere.ts +2 -2
  480. package/src/data/values/iau1980.ts +2 -2
  481. package/src/enums/AngularDiameterMethod.ts +1 -1
  482. package/src/enums/AngularDistanceMethod.ts +1 -1
  483. package/src/enums/OrbitRegime.ts +1 -1
  484. package/src/enums/PassType.ts +1 -1
  485. package/src/enums/Sgp4OpsMode.ts +1 -1
  486. package/src/enums/index.ts +8 -7
  487. package/src/fetch/horizons-constants.ts +53 -0
  488. package/src/fetch/horizons-interfaces.ts +38 -0
  489. package/src/fetch/horizons.ts +300 -0
  490. package/src/force/AtmosphericDrag.ts +3 -3
  491. package/src/force/EarthGravity.ts +3 -3
  492. package/src/force/Force.ts +3 -5
  493. package/src/force/ForceModel.ts +9 -9
  494. package/src/force/Gravity.ts +3 -3
  495. package/src/force/SolarRadiationPressure.ts +4 -4
  496. package/src/force/ThirdBodyGravity.ts +3 -3
  497. package/src/force/Thrust.ts +3 -3
  498. package/src/force/index.ts +2 -1
  499. package/src/interfaces/BaseObjectParams.ts +2 -2
  500. package/src/interfaces/ClassicalElementsParams.ts +2 -2
  501. package/src/interfaces/EquinoctialElementsParams.ts +2 -2
  502. package/src/interfaces/GroundPositionParams.ts +2 -2
  503. package/src/interfaces/RfSensorParams.ts +2 -2
  504. package/src/interfaces/SatelliteParams.ts +2 -2
  505. package/src/interfaces/SensorParams.ts +3 -3
  506. package/src/interfaces/StarObjectParams.ts +1 -1
  507. package/src/interfaces/TimeVariables.ts +1 -1
  508. package/src/interfaces/index.ts +10 -9
  509. package/src/interpolator/ChebyshevCoefficients.ts +2 -2
  510. package/src/interpolator/ChebyshevInterpolator.ts +4 -4
  511. package/src/interpolator/CubicSpline.ts +2 -2
  512. package/src/interpolator/CubicSplineInterpolator.ts +4 -4
  513. package/src/interpolator/FieldInterpolator.ts +3 -5
  514. package/src/interpolator/Interpolator.ts +2 -2
  515. package/src/interpolator/LagrangeInterpolator.ts +3 -3
  516. package/src/interpolator/StateInterpolator.ts +4 -6
  517. package/src/interpolator/VerletBlendInterpolator.ts +5 -5
  518. package/src/main.ts +41 -20
  519. package/src/maneuver/TwoBurnOrbitTransfer.ts +3 -3
  520. package/src/maneuver/Waypoint.ts +8 -8
  521. package/src/objects/BaseObject.ts +3 -3
  522. package/src/objects/DetailedSatellite.ts +9 -9
  523. package/src/objects/DetailedSensor.ts +5 -5
  524. package/src/objects/GroundObject.ts +9 -9
  525. package/src/objects/LandObject.ts +3 -3
  526. package/src/objects/Marker.ts +2 -2
  527. package/src/objects/RfSensor.ts +2 -2
  528. package/src/objects/Satellite.ts +21 -21
  529. package/src/objects/Sensor.ts +7 -7
  530. package/src/objects/Star.ts +3 -3
  531. package/src/objects/index.ts +11 -10
  532. package/src/observation/Observation.ts +11 -23
  533. package/src/observation/ObservationOptical.ts +7 -7
  534. package/src/observation/ObservationRadar.ts +7 -7
  535. package/src/observation/ObservationUtils.ts +2 -2
  536. package/src/observation/PropagatorPairs.ts +2 -2
  537. package/src/observation/RAE.ts +9 -9
  538. package/src/observation/RadecGeocentric.ts +9 -9
  539. package/src/observation/RadecTopocentric.ts +13 -10
  540. package/src/observation/index.ts +6 -5
  541. package/src/operations/BoxMuller.ts +2 -2
  542. package/src/operations/EulerAngles.ts +2 -2
  543. package/src/operations/Matrix.ts +2 -2
  544. package/src/operations/Quaternion.ts +2 -2
  545. package/src/operations/Random.ts +1 -1
  546. package/src/operations/RandomGaussianSource.ts +3 -3
  547. package/src/operations/Vector.ts +2 -2
  548. package/src/operations/Vector3D.ts +6 -4
  549. package/src/operations/index.ts +5 -4
  550. package/src/operations/operations.ts +6 -5
  551. package/src/optimize/ChebyshevCompressor.ts +5 -5
  552. package/src/optimize/DownhillSimplex.ts +2 -2
  553. package/src/optimize/GoldenSection.ts +2 -2
  554. package/src/optimize/PolynomialRegression.ts +4 -4
  555. package/src/optimize/PolynomicalRegressionResult.ts +1 -1
  556. package/src/optimize/SimpleLinearRegression.ts +1 -1
  557. package/src/optimize/SimplexEntry.ts +2 -2
  558. package/src/orbit_determination/BatchLeastSquaresOD.ts +10 -10
  559. package/src/orbit_determination/BatchLeastSquaresResult.ts +3 -3
  560. package/src/orbit_determination/GaussIOD.ts +393 -0
  561. package/src/orbit_determination/GibbsIOD.ts +4 -4
  562. package/src/orbit_determination/GoodingIOD.ts +458 -160
  563. package/src/orbit_determination/HerrickGibbsIOD.ts +2 -2
  564. package/src/orbit_determination/LambertIOD.ts +2 -2
  565. package/src/orbit_determination/ModifiedGoodingIOD.ts +33 -22
  566. package/src/orbit_determination/index.ts +8 -7
  567. package/src/propagator/DormandPrince54Propagator.ts +2 -2
  568. package/src/propagator/KeplerPropagator.ts +7 -8
  569. package/src/propagator/Propagator.ts +6 -6
  570. package/src/propagator/RkCheckpoint.ts +2 -2
  571. package/src/propagator/RkResult.ts +2 -2
  572. package/src/propagator/RungeKutta4Propagator.ts +6 -6
  573. package/src/propagator/RungeKutta89Propagator.ts +2 -2
  574. package/src/propagator/RungeKuttaAdaptive.ts +62 -12
  575. package/src/propagator/Sgp4Propagator.ts +7 -7
  576. package/src/propagator/index.ts +4 -3
  577. package/src/sgp4/index.ts +3 -2
  578. package/src/sgp4/sgp4.ts +6 -6
  579. package/src/smoothing/ExponentialSmoothing.ts +2 -2
  580. package/src/time/Epoch.ts +3 -3
  581. package/src/time/EpochGPS.ts +5 -5
  582. package/src/time/EpochTAI.ts +2 -2
  583. package/src/time/EpochTDB.ts +2 -2
  584. package/src/time/EpochTT.ts +2 -2
  585. package/src/time/EpochUTC.ts +10 -10
  586. package/src/time/EpochWindow.ts +2 -2
  587. package/src/time/TimeStamped.ts +2 -2
  588. package/src/time/index.ts +9 -8
  589. package/src/transforms/TransformCache.ts +1 -1
  590. package/src/transforms/conversions.ts +2 -2
  591. package/src/transforms/index.ts +3 -2
  592. package/src/transforms/transforms.ts +4 -4
  593. package/src/types/types.ts +8 -3
  594. package/src/utils/constants.ts +2 -2
  595. package/src/utils/create-covariance-from-tle.ts +1 -1
  596. package/src/utils/functions.ts +10 -5
  597. package/src/utils/index.ts +6 -5
  598. package/src/utils/jacobian.ts +2 -2
  599. package/src/utils/linearDistance.ts +1 -1
@@ -0,0 +1,792 @@
1
+ # Getting Started with OOTK
2
+
3
+ Welcome to the Orbital Object Toolkit (OOTK)! This guide will help you get started with orbital mechanics programming, whether you're a beginner or an experienced developer new to this library.
4
+
5
+ ---
6
+
7
+ ## Table of Contents
8
+
9
+ 1. [What is OOTK?](#what-is-ootk)
10
+ 2. [Installation](#installation)
11
+ 3. [Your First Satellite](#your-first-satellite)
12
+ 4. [Understanding Coordinates](#understanding-coordinates)
13
+ 5. [Working with Sensors](#working-with-sensors)
14
+ 6. [Common Use Cases](#common-use-cases)
15
+ 7. [Next Steps](#next-steps)
16
+
17
+ ---
18
+
19
+ ## What is OOTK?
20
+
21
+ OOTK (Orbital Object Toolkit) is a comprehensive library for orbital mechanics calculations in TypeScript/JavaScript. Think of it as your Swiss Army knife for:
22
+
23
+ - **Tracking satellites** from TLE data
24
+ - **Predicting satellite passes** over ground stations
25
+ - **Converting between coordinate systems** (latitude/longitude, ECI, ECF)
26
+ - **Calculating orbital parameters** (altitude, velocity, period)
27
+ - **Determining orbits from observations**
28
+ - **Planning orbital maneuvers**
29
+
30
+ ### Who is this for?
31
+
32
+ - Web developers building satellite tracking applications
33
+ - Researchers doing orbital mechanics analysis
34
+ - Students learning astrodynamics
35
+ - Hobbyists interested in space and satellites
36
+
37
+ ### What makes OOTK different?
38
+
39
+ - **Type-safe**: Uses TypeScript for catching errors at compile time
40
+ - **Unit types**: Prevents mixing degrees with radians, kilometers with meters
41
+ - **Browser-friendly**: Works in web browsers and Node.js
42
+ - **Comprehensive**: Everything from simple tracking to advanced orbit determination
43
+
44
+ ---
45
+
46
+ ## Installation
47
+
48
+ ### Prerequisites
49
+
50
+ You'll need:
51
+ - **Node.js** (version 14 or higher)
52
+ - **npm** (comes with Node.js)
53
+
54
+ ### Install OOTK
55
+
56
+ ```bash
57
+ npm install ootk
58
+ ```
59
+
60
+ ### Verify Installation
61
+
62
+ Create a test file `test.js`:
63
+
64
+ ```javascript
65
+ import { Earth } from 'ootk';
66
+ console.log('Earth radius:', Earth.radiusMean, 'km');
67
+ ```
68
+
69
+ Run it:
70
+
71
+ ```bash
72
+ node test.js
73
+ ```
74
+
75
+ You should see: `Earth radius: 6371 km`
76
+
77
+ ### TypeScript Setup (Optional but Recommended)
78
+
79
+ If using TypeScript:
80
+
81
+ ```bash
82
+ npm install --save-dev typescript @types/node
83
+ ```
84
+
85
+ Create `tsconfig.json`:
86
+
87
+ ```json
88
+ {
89
+ "compilerOptions": {
90
+ "target": "ES2020",
91
+ "module": "ES2020",
92
+ "moduleResolution": "node",
93
+ "strict": true,
94
+ "esModuleInterop": true
95
+ }
96
+ }
97
+ ```
98
+
99
+ ---
100
+
101
+ ## Your First Satellite
102
+
103
+ Let's track the International Space Station (ISS)!
104
+
105
+ ### Step 1: Get TLE Data
106
+
107
+ TLE (Two-Line Element) sets describe a satellite's orbit. You can get them from:
108
+ - https://celestrak.org/
109
+ - https://www.space-track.org/
110
+ - https://api.keeptrack.space/
111
+
112
+ Example ISS TLE:
113
+ ```
114
+ ISS (ZARYA)
115
+ 1 25544U 98067A 24028.54545847 .00031576 00000-0 57240-3 0 9991
116
+ 2 25544 51.6418 292.2590 0002595 167.5319 252.0460 15.49326324436741
117
+ ```
118
+
119
+ ### Step 2: Create a Satellite Object
120
+
121
+ ```typescript
122
+ import { Satellite, TleLine1, TleLine2 } from 'ootk';
123
+
124
+ // ISS TLE data
125
+ const tle1 = '1 25544U 98067A 24028.54545847 .00031576 00000-0 57240-3 0 9991' as TleLine1;
126
+ const tle2 = '2 25544 51.6418 292.2590 0002595 167.5319 252.0460 15.49326324436741' as TleLine2;
127
+
128
+ // Create satellite object
129
+ const iss = new Satellite({ tle1, tle2 });
130
+
131
+ console.log('ISS created successfully!');
132
+ ```
133
+
134
+ ### Step 3: Get Current Position
135
+
136
+ ```typescript
137
+ // Get position now
138
+ const eci = iss.eci();
139
+
140
+ console.log('Position (ECI):');
141
+ console.log(' X:', eci.position.x, 'km');
142
+ console.log(' Y:', eci.position.y, 'km');
143
+ console.log(' Z:', eci.position.z, 'km');
144
+
145
+ console.log('Velocity (ECI):');
146
+ console.log(' X:', eci.velocity.x, 'km/s');
147
+ console.log(' Y:', eci.velocity.y, 'km/s');
148
+ console.log(' Z:', eci.velocity.z, 'km/s');
149
+ ```
150
+
151
+ **Output Example:**
152
+ ```
153
+ Position (ECI):
154
+ X: 3590.123 km
155
+ Y: -5234.789 km
156
+ Z: 2100.456 km
157
+ Velocity (ECI):
158
+ X: 4.567 km/s
159
+ Y: 3.210 km/s
160
+ Z: 5.432 km/s
161
+ ```
162
+
163
+ ### Step 4: Get Latitude/Longitude
164
+
165
+ ```typescript
166
+ const lla = iss.lla();
167
+
168
+ console.log('Latitude:', lla.lat, '°');
169
+ console.log('Longitude:', lla.lon, '°');
170
+ console.log('Altitude:', lla.alt, 'km');
171
+ ```
172
+
173
+ **Output Example:**
174
+ ```
175
+ Latitude: 23.456 °
176
+ Longitude: -45.678 °
177
+ Altitude: 418.234 km
178
+ ```
179
+
180
+ ### Step 5: Get Orbital Parameters
181
+
182
+ ```typescript
183
+ console.log('Orbital Parameters:');
184
+ console.log(' Inclination:', iss.inclination, '°');
185
+ console.log(' Eccentricity:', iss.eccentricity);
186
+ console.log(' Period:', iss.period, 'minutes');
187
+ console.log(' Apogee:', iss.apogee, 'km');
188
+ console.log(' Perigee:', iss.perigee, 'km');
189
+ ```
190
+
191
+ **Congratulations!** You've just tracked your first satellite with OOTK!
192
+
193
+ ---
194
+
195
+ ## Understanding Coordinates
196
+
197
+ OOTK uses several coordinate systems. Here's a simple explanation:
198
+
199
+ ### 1. Geodetic (Latitude/Longitude/Altitude)
200
+
201
+ **What**: The coordinates you're familiar with from maps.
202
+
203
+ **When to use**: Displaying positions on a map, human-readable locations.
204
+
205
+ ```typescript
206
+ const lla = iss.lla();
207
+ // { lat: 23.456°, lon: -45.678°, alt: 418 km }
208
+ ```
209
+
210
+ ### 2. ECI (Earth-Centered Inertial)
211
+
212
+ **What**: X, Y, Z coordinates in a non-rotating reference frame.
213
+
214
+ **When to use**: Physics calculations, propagating orbits.
215
+
216
+ ```typescript
217
+ const eci = iss.eci();
218
+ // { position: {x, y, z}, velocity: {x, y, z} }
219
+ ```
220
+
221
+ ### 3. ECF (Earth-Centered Fixed)
222
+
223
+ **What**: X, Y, Z coordinates that rotate with Earth.
224
+
225
+ **When to use**: Ground station calculations, terrain modeling.
226
+
227
+ ```typescript
228
+ const ecf = iss.ecf();
229
+ // { position: {x, y, z}, velocity: {x, y, z} }
230
+ ```
231
+
232
+ ### Quick Conversions
233
+
234
+ ```typescript
235
+ // Satellite gives you all of them:
236
+ const lla = satellite.lla(); // Geodetic
237
+ const eci = satellite.eci(); // ECI
238
+ const ecf = satellite.ecf(); // ECF
239
+ const j2000 = satellite.toJ2000(); // J2000 (specific ECI frame)
240
+ ```
241
+
242
+ ---
243
+
244
+ ## Working with Sensors
245
+
246
+ A "sensor" in OOTK is a ground station or observation point that tracks satellites.
247
+
248
+ ### Create a Sensor
249
+
250
+ Let's create a sensor for Cape Cod:
251
+
252
+ ```typescript
253
+ import { Sensor, Degrees, Kilometers } from 'ootk';
254
+
255
+ const capeCod = new Sensor({
256
+ lat: 41.754785 as Degrees,
257
+ lon: -70.539151 as Degrees,
258
+ alt: 0.060966 as Kilometers,
259
+ minEl: 5 as Degrees, // Don't track below 5° elevation
260
+ maxEl: 85 as Degrees, // Don't track above 85°
261
+ minRng: 0 as Kilometers,
262
+ maxRng: 5000 as Kilometers // Maximum tracking range
263
+ });
264
+ ```
265
+
266
+ **Note**: The `as Degrees` and `as Kilometers` are TypeScript type casts that ensure you're using the right units.
267
+
268
+ ### Calculate Look Angles
269
+
270
+ Get Range, Azimuth, Elevation from sensor to satellite:
271
+
272
+ ```typescript
273
+ const rae = capeCod.rae(iss);
274
+
275
+ console.log('Range:', rae.rng, 'km');
276
+ console.log('Azimuth:', rae.az, '° (0=North, 90=East)');
277
+ console.log('Elevation:', rae.el, '° (0=horizon, 90=zenith)');
278
+ console.log('Range Rate:', rae.rngRate, 'km/s');
279
+ ```
280
+
281
+ **Interpretation**:
282
+ - **Range**: Distance to satellite
283
+ - **Azimuth**: Which direction to point (compass heading)
284
+ - **Elevation**: How high to look up
285
+ - **Range Rate**: How fast distance is changing (negative = approaching)
286
+
287
+ ### Check Visibility
288
+
289
+ ```typescript
290
+ const isVisible = capeCod.isSatInFov(iss);
291
+
292
+ if (isVisible) {
293
+ console.log('ISS is currently visible from Cape Cod!');
294
+ const rae = capeCod.rae(iss);
295
+ console.log('Look', rae.az.toFixed(1), '° at', rae.el.toFixed(1), '° elevation');
296
+ } else {
297
+ console.log('ISS is not visible right now.');
298
+ }
299
+ ```
300
+
301
+ ### Predict Passes
302
+
303
+ Find when satellite will be visible:
304
+
305
+ ```typescript
306
+ // Calculate passes over next 24 hours, checking every 10 seconds
307
+ const passes = capeCod.calculatePasses(10, iss, {
308
+ startDate: new Date(),
309
+ lengthDays: 1
310
+ });
311
+
312
+ console.log(`Found ${passes.length} passes in the next 24 hours:`);
313
+
314
+ passes.forEach((pass, index) => {
315
+ console.log(`\nPass ${index + 1}:`);
316
+ console.log(' Rise:', pass.rise.toLocaleString());
317
+ console.log(' Peak:', pass.culmination.toLocaleString());
318
+ console.log(' Set:', pass.set.toLocaleString());
319
+ console.log(' Max Elevation:', pass.maxEl.toFixed(1), '°');
320
+ console.log(' Duration:', (pass.duration / 60).toFixed(1), 'minutes');
321
+ });
322
+ ```
323
+
324
+ **Output Example**:
325
+ ```
326
+ Found 3 passes in the next 24 hours:
327
+
328
+ Pass 1:
329
+ Rise: 1/28/2024, 6:23:45 PM
330
+ Peak: 1/28/2024, 6:28:12 PM
331
+ Set: 1/28/2024, 6:32:51 PM
332
+ Max Elevation: 45.3 °
333
+ Duration: 9.1 minutes
334
+
335
+ Pass 2:
336
+ Rise: 1/28/2024, 8:01:23 PM
337
+ Peak: 1/28/2024, 8:05:45 PM
338
+ Set: 1/28/2024, 8:10:12 PM
339
+ Max Elevation: 78.6 °
340
+ Duration: 8.8 minutes
341
+ ...
342
+ ```
343
+
344
+ ---
345
+
346
+ ## Common Use Cases
347
+
348
+ ### 1. Real-Time Satellite Tracker
349
+
350
+ ```typescript
351
+ import { Satellite, TleLine1, TleLine2 } from 'ootk';
352
+
353
+ class SatelliteTracker {
354
+ private satellite: Satellite;
355
+
356
+ constructor(tle1: TleLine1, tle2: TleLine2) {
357
+ this.satellite = new Satellite({ tle1, tle2 });
358
+ }
359
+
360
+ getCurrentPosition() {
361
+ const lla = this.satellite.lla();
362
+ return {
363
+ latitude: lla.lat,
364
+ longitude: lla.lon,
365
+ altitude: lla.alt
366
+ };
367
+ }
368
+
369
+ getVelocity() {
370
+ const eci = this.satellite.eci();
371
+ const speed = Math.sqrt(
372
+ eci.velocity.x ** 2 +
373
+ eci.velocity.y ** 2 +
374
+ eci.velocity.z ** 2
375
+ );
376
+ return speed; // km/s
377
+ }
378
+ }
379
+
380
+ // Usage
381
+ const tracker = new SatelliteTracker(tle1, tle2);
382
+
383
+ setInterval(() => {
384
+ const pos = tracker.getCurrentPosition();
385
+ const speed = tracker.getVelocity();
386
+
387
+ console.log(
388
+ `Lat: ${pos.latitude.toFixed(2)}°, ` +
389
+ `Lon: ${pos.longitude.toFixed(2)}°, ` +
390
+ `Alt: ${pos.altitude.toFixed(1)} km, ` +
391
+ `Speed: ${speed.toFixed(2)} km/s`
392
+ );
393
+ }, 1000); // Update every second
394
+ ```
395
+
396
+ ### 2. Ground Station Pass Predictor
397
+
398
+ ```typescript
399
+ import { Sensor, Satellite, Degrees, Kilometers } from 'ootk';
400
+
401
+ function predictPasses(
402
+ sensorLat: number,
403
+ sensorLon: number,
404
+ sensorAlt: number,
405
+ tle1: TleLine1,
406
+ tle2: TleLine2,
407
+ days: number = 7
408
+ ) {
409
+ const sensor = new Sensor({
410
+ lat: sensorLat as Degrees,
411
+ lon: sensorLon as Degrees,
412
+ alt: sensorAlt as Kilometers,
413
+ minEl: 10 as Degrees, // Only show passes above 10°
414
+ maxEl: 90 as Degrees,
415
+ minRng: 0 as Kilometers,
416
+ maxRng: 5000 as Kilometers
417
+ });
418
+
419
+ const satellite = new Satellite({ tle1, tle2 });
420
+
421
+ const passes = sensor.calculatePasses(30, satellite, {
422
+ startDate: new Date(),
423
+ lengthDays: days
424
+ });
425
+
426
+ return passes.map(pass => ({
427
+ riseTime: pass.rise,
428
+ setTime: pass.set,
429
+ peakTime: pass.culmination,
430
+ maxElevation: pass.maxEl,
431
+ durationMinutes: pass.duration / 60
432
+ }));
433
+ }
434
+
435
+ // Usage
436
+ const myPasses = predictPasses(
437
+ 40.7128, // New York City latitude
438
+ -74.0060, // longitude
439
+ 0.010, // altitude (km)
440
+ isstle1,
441
+ isstle2,
442
+ 7 // next 7 days
443
+ );
444
+
445
+ console.log('Upcoming passes:', myPasses);
446
+ ```
447
+
448
+ ### 3. Multi-Satellite Tracker
449
+
450
+ ```typescript
451
+ class MultiSatelliteTracker {
452
+ private satellites: Map<string, Satellite> = new Map();
453
+
454
+ addSatellite(name: string, tle1: TleLine1, tle2: TleLine2) {
455
+ this.satellites.set(name, new Satellite({ tle1, tle2 }));
456
+ }
457
+
458
+ getAllPositions() {
459
+ const positions = {};
460
+ this.satellites.forEach((sat, name) => {
461
+ const lla = sat.lla();
462
+ positions[name] = {
463
+ lat: lla.lat,
464
+ lon: lla.lon,
465
+ alt: lla.alt
466
+ };
467
+ });
468
+ return positions;
469
+ }
470
+
471
+ findVisible(sensorLat: number, sensorLon: number) {
472
+ const sensor = new Sensor({
473
+ lat: sensorLat as Degrees,
474
+ lon: sensorLon as Degrees,
475
+ alt: 0 as Kilometers,
476
+ minEl: 5 as Degrees,
477
+ maxEl: 85 as Degrees,
478
+ minRng: 0 as Kilometers,
479
+ maxRng: 5000 as Kilometers
480
+ });
481
+
482
+ const visible = [];
483
+ this.satellites.forEach((sat, name) => {
484
+ if (sensor.isSatInFov(sat)) {
485
+ const rae = sensor.rae(sat);
486
+ visible.push({
487
+ name,
488
+ azimuth: rae.az,
489
+ elevation: rae.el,
490
+ range: rae.rng
491
+ });
492
+ }
493
+ });
494
+
495
+ return visible;
496
+ }
497
+ }
498
+
499
+ // Usage
500
+ const tracker = new MultiSatelliteTracker();
501
+ tracker.addSatellite('ISS', isstle1, isstle2);
502
+ tracker.addSatellite('HUBBLE', hubbleTle1, hubbleTle2);
503
+ tracker.addSatellite('GPS-1', gpsTle1, gpsTle2);
504
+
505
+ // Get all positions
506
+ const allPositions = tracker.getAllPositions();
507
+ console.log(allPositions);
508
+
509
+ // Find what's visible from your location
510
+ const visibleSats = tracker.findVisible(40.7128, -74.0060);
511
+ console.log('Currently visible:', visibleSats);
512
+ ```
513
+
514
+ ### 4. Satellite Position at Specific Time
515
+
516
+ ```typescript
517
+ import { Satellite, EpochUTC } from 'ootk';
518
+
519
+ const satellite = new Satellite({ tle1, tle2 });
520
+
521
+ // Position at a specific time
522
+ const specificDate = new Date('2024-12-31T00:00:00Z');
523
+ const eci = satellite.eci(specificDate);
524
+ const lla = satellite.lla(specificDate);
525
+
526
+ console.log('Position on New Year 2024:');
527
+ console.log(' Lat:', lla.lat, '°');
528
+ console.log(' Lon:', lla.lon, '°');
529
+ console.log(' Alt:', lla.alt, 'km');
530
+ ```
531
+
532
+ ### 5. Calculate Orbit Period
533
+
534
+ ```typescript
535
+ function analyzeSatellite(tle1: TleLine1, tle2: TleLine2) {
536
+ const sat = new Satellite({ tle1, tle2 });
537
+
538
+ console.log('Orbital Analysis:');
539
+ console.log(' Period:', sat.period.toFixed(2), 'minutes');
540
+ console.log(' Apogee:', sat.apogee.toFixed(1), 'km');
541
+ console.log(' Perigee:', sat.perigee.toFixed(1), 'km');
542
+ console.log(' Inclination:', sat.inclination.toFixed(2), '°');
543
+ console.log(' Eccentricity:', sat.eccentricity.toFixed(6));
544
+
545
+ // Classify orbit
546
+ const avgAlt = (sat.apogee + sat.perigee) / 2;
547
+ let orbitType;
548
+ if (avgAlt < 2000) orbitType = 'LEO (Low Earth Orbit)';
549
+ else if (avgAlt < 35786) orbitType = 'MEO (Medium Earth Orbit)';
550
+ else if (Math.abs(avgAlt - 35786) < 100) orbitType = 'GEO (Geostationary)';
551
+ else orbitType = 'HEO (High Earth Orbit)';
552
+
553
+ console.log(' Classification:', orbitType);
554
+
555
+ // Orbits per day
556
+ const orbitsPerDay = (24 * 60) / sat.period;
557
+ console.log(' Orbits per day:', orbitsPerDay.toFixed(2));
558
+ }
559
+
560
+ analyzeSatellite(isstle1, isstle2);
561
+ ```
562
+
563
+ ---
564
+
565
+ ## Next Steps
566
+
567
+ ### Beginner Level
568
+
569
+ Now that you understand the basics:
570
+
571
+ 1. **Try different satellites**: Get TLEs from https://celestrak.org/
572
+ 2. **Change sensor locations**: Track from your city
573
+ 3. **Experiment with times**: Look at positions in the past or future
574
+ 4. **Build a web interface**: Display positions on a map
575
+
576
+ ### Intermediate Level
577
+
578
+ Ready for more? Explore:
579
+
580
+ 1. **Different propagators**: Try `RungeKutta4Propagator` for higher accuracy
581
+ 2. **Coordinate transformations**: Convert between J2000, TEME, ITRF
582
+ 3. **Time systems**: Work with UTC, GPS time, Julian dates
583
+ 4. **Force models**: Add gravity harmonics, drag, solar radiation pressure
584
+
585
+ See the [User Guide](./user-guide.md) sections:
586
+ - [Orbit Propagation](./user-guide.md#orbit-propagation)
587
+ - [Coordinate Systems](./user-guide.md#coordinate-systems)
588
+ - [Time Systems](./user-guide.md#time-systems)
589
+
590
+ ### Advanced Level
591
+
592
+ For advanced orbital mechanics:
593
+
594
+ 1. **Initial Orbit Determination**: Determine orbits from observations
595
+ 2. **Maneuver Planning**: Calculate delta-v for orbit changes
596
+ 3. **Covariance Propagation**: Track uncertainty in orbits
597
+ 4. **Custom Propagators**: Create your own propagation methods
598
+
599
+ See the [User Guide](./user-guide.md) sections:
600
+ - [Initial Orbit Determination](./user-guide.md#initial-orbit-determination)
601
+ - [Maneuvers](./user-guide.md#maneuvers)
602
+ - [Force Models](./user-guide.md#force-models)
603
+ - [Advanced Topics](./user-guide.md#advanced-topics)
604
+
605
+ ---
606
+
607
+ ## Troubleshooting
608
+
609
+ ### Common Issues
610
+
611
+ #### 1. "Cannot find module 'ootk'"
612
+
613
+ **Problem**: Import error
614
+
615
+ **Solution**: Make sure you've installed OOTK:
616
+ ```bash
617
+ npm install ootk
618
+ ```
619
+
620
+ And that your `package.json` has `"type": "module"` for ES modules.
621
+
622
+ #### 2. Type errors with numbers
623
+
624
+ **Problem**: TypeScript complains about number types
625
+
626
+ **Solution**: Cast to appropriate types:
627
+ ```typescript
628
+ // Wrong
629
+ const lat = 41.7;
630
+
631
+ // Correct
632
+ const lat = 41.7 as Degrees;
633
+ ```
634
+
635
+ #### 3. Satellite position seems wrong
636
+
637
+ **Problem**: Position doesn't match expected values
638
+
639
+ **Solutions**:
640
+ - Check TLE is current (TLEs expire quickly, especially for LEO)
641
+ - Verify the time (use `new Date()` for current time)
642
+ - Ensure TLE lines are correct (no extra spaces or truncation)
643
+
644
+ #### 4. No passes found
645
+
646
+ **Problem**: `calculatePasses()` returns empty array
647
+
648
+ **Solutions**:
649
+ - Increase `lengthDays` parameter (satellite may not pass for several days)
650
+ - Lower `minEl` on sensor (try 0 degrees)
651
+ - Increase `maxRng` on sensor
652
+ - Check satellite orbit (geostationary satellites don't "pass")
653
+
654
+ ### Getting Help
655
+
656
+ - **Documentation**: See [User Guide](./user-guide.md)
657
+ - **Examples**: Check `/examples` folder in repository
658
+ - **Issues**: https://github.com/thkruz/ootk/issues
659
+ - **Discussions**: https://github.com/thkruz/ootk/discussions
660
+
661
+ ---
662
+
663
+ ## Quick Reference
664
+
665
+ ### Essential Imports
666
+
667
+ ```typescript
668
+ // Basic tracking
669
+ import { Satellite, TleLine1, TleLine2 } from 'ootk';
670
+
671
+ // Sensors
672
+ import { Sensor, Degrees, Kilometers } from 'ootk';
673
+
674
+ // Advanced
675
+ import {
676
+ Satellite,
677
+ Sensor,
678
+ EpochUTC,
679
+ J2000,
680
+ ClassicalElements,
681
+ RungeKutta4Propagator,
682
+ ForceModel
683
+ } from 'ootk';
684
+ ```
685
+
686
+ ### Common Patterns
687
+
688
+ ```typescript
689
+ // Create satellite
690
+ const sat = new Satellite({ tle1, tle2 });
691
+
692
+ // Get position now
693
+ const lla = sat.lla();
694
+ const eci = sat.eci();
695
+
696
+ // Get position at specific time
697
+ const date = new Date('2024-12-31T00:00:00Z');
698
+ const llaFuture = sat.lla(date);
699
+
700
+ // Create sensor
701
+ const sensor = new Sensor({
702
+ lat: latitude as Degrees,
703
+ lon: longitude as Degrees,
704
+ alt: altitude as Kilometers,
705
+ minEl: 5 as Degrees,
706
+ maxEl: 85 as Degrees,
707
+ minRng: 0 as Kilometers,
708
+ maxRng: 5000 as Kilometers
709
+ });
710
+
711
+ // Check visibility
712
+ const visible = sensor.isSatInFov(sat);
713
+
714
+ // Get look angles
715
+ const rae = sensor.rae(sat);
716
+
717
+ // Find passes
718
+ const passes = sensor.calculatePasses(30, sat, {
719
+ startDate: new Date(),
720
+ lengthDays: 7
721
+ });
722
+ ```
723
+
724
+ ---
725
+
726
+ ## Example Projects to Build
727
+
728
+ ### 1. ISS Notifier
729
+ Build a program that alerts you when the ISS will pass overhead.
730
+
731
+ **Skills**: Satellite tracking, pass prediction, notifications
732
+
733
+ ### 2. Satellite Constellation Visualizer
734
+ Display multiple satellites on a map in real-time.
735
+
736
+ **Skills**: Multi-satellite tracking, web development, visualization
737
+
738
+ ### 3. Ground Station Planner
739
+ Determine the best location for a ground station to maximize satellite contact time.
740
+
741
+ **Skills**: Sensor placement, pass analysis, optimization
742
+
743
+ ### 4. Orbit Comparator
744
+ Compare different satellites' orbits and find close approaches.
745
+
746
+ **Skills**: Coordinate transformations, distance calculations
747
+
748
+ ### 5. TLE Age Checker
749
+ Monitor a catalog of TLEs and alert when they're getting old.
750
+
751
+ **Skills**: TLE parsing, date handling, automation
752
+
753
+ ---
754
+
755
+ ## Resources
756
+
757
+ ### Where to Get TLE Data
758
+
759
+ - **CelesTrak**: https://celestrak.org/ (free, no account needed)
760
+ - **Space-Track**: https://www.space-track.org/ (free account required)
761
+ - **KeepTrack API**: https://api.keeptrack.space/ (simple REST API)
762
+
763
+ ### Learning More
764
+
765
+ - **Orbital Mechanics**: "Fundamentals of Astrodynamics" by Bate, Mueller, White
766
+ - **SGP4**: "Revisiting Spacetrack Report #3" by Vallado et al.
767
+ - **OOTK Repository**: https://github.com/thkruz/ootk
768
+ - **Full Documentation**: [User Guide](./user-guide.md)
769
+
770
+ ### Related Projects
771
+
772
+ - **KeepTrack**: https://github.com/thkruz/keeptrack.space
773
+ - **satellite.js**: Alternative JavaScript satellite library
774
+ - **Skyfield**: Python satellite library
775
+
776
+ ---
777
+
778
+ ## Congratulations!
779
+
780
+ You're now ready to start building with OOTK. Start simple with satellite tracking, then explore more advanced features as you need them.
781
+
782
+ **Happy coding!**
783
+
784
+ If you build something cool with OOTK, consider sharing it with the community!
785
+
786
+ ---
787
+
788
+ **License**: AGPL-3.0
789
+
790
+ **Version**: 5.1.1
791
+
792
+ **Last Updated**: January 2024