1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.propagation.conversion.averaging.converters;
18
19 import org.orekit.annotation.DefaultDataContext;
20 import org.orekit.data.DataContext;
21 import org.orekit.frames.Frame;
22 import org.orekit.orbits.Orbit;
23 import org.orekit.propagation.SpacecraftState;
24 import org.orekit.propagation.analytical.tle.TLE;
25 import org.orekit.propagation.analytical.tle.generation.FixedPointTleGenerationAlgorithm;
26 import org.orekit.time.UTCScale;
27 import org.orekit.propagation.conversion.averaging.SGP4OrbitalState;
28
29
30
31
32
33
34
35
36
37
38 public class OsculatingToSGP4Converter
39 extends FixedPointOsculatingToAveragedConverter<SGP4OrbitalState> {
40
41
42 private static final String TEMPLATE_LINE_1 = "1 27421U 02021A 02124.48976499 -.00021470 00000-0 -89879-2 0 20";
43
44 private static final String TEMPLATE_LINE_2 = "2 27421 98.7490 199.5121 0001333 133.9522 226.1918 14.26113993 62";
45
46
47 private final double scale;
48
49 private final UTCScale utc;
50
51 private final Frame teme;
52
53
54
55
56 @DefaultDataContext
57 public OsculatingToSGP4Converter() {
58 this(DataContext.getDefault());
59 }
60
61
62
63
64
65 public OsculatingToSGP4Converter(final DataContext dataContext) {
66 this(DEFAULT_EPSILON, DEFAULT_MAX_ITERATIONS, FixedPointTleGenerationAlgorithm.SCALE_DEFAULT,
67 dataContext);
68 }
69
70
71
72
73
74
75
76
77 public OsculatingToSGP4Converter(final double epsilon, final int maxIterations,
78 final double scale, final DataContext dataContext) {
79 super(epsilon, maxIterations);
80 this.scale = scale;
81 this.utc = dataContext.getTimeScales().getUTC();
82 this.teme = dataContext.getFrames().getTEME();
83 }
84
85
86 @Override
87 public SGP4OrbitalState convertToAveraged(final Orbit osculatingOrbit) {
88 final FixedPointTleGenerationAlgorithm fixedPointAlgorithm = new FixedPointTleGenerationAlgorithm(getEpsilon(),
89 getMaxIterations(), scale, utc, teme);
90 final SpacecraftState osculatingState = new SpacecraftState(osculatingOrbit);
91 final TLE templateTLe = new TLE(TEMPLATE_LINE_1, TEMPLATE_LINE_2, utc);
92 final TLE tle = fixedPointAlgorithm.generate(osculatingState, templateTLe);
93 return SGP4OrbitalState.of(tle, teme);
94 }
95 }