1 package org.orekit.estimation;
2
3 import java.util.List;
4
5 import org.hipparchus.geometry.euclidean.threed.Vector3D;
6 import org.hipparchus.util.FastMath;
7 import org.orekit.bodies.CelestialBody;
8 import org.orekit.bodies.GeodeticPoint;
9 import org.orekit.bodies.OneAxisEllipsoid;
10 import org.orekit.estimation.measurements.GroundStation;
11 import org.orekit.frames.TopocentricFrame;
12 import org.orekit.models.earth.displacement.StationDisplacement;
13 import org.orekit.orbits.CartesianOrbit;
14 import org.orekit.orbits.Orbit;
15 import org.orekit.orbits.PositionAngle;
16 import org.orekit.propagation.conversion.KeplerianPropagatorBuilder;
17 import org.orekit.time.TimeScale;
18 import org.orekit.time.UT1Scale;
19 import org.orekit.utils.IERSConventions;
20 import org.orekit.utils.PVCoordinates;
21
22 public class KeplerianContext implements StationDataProvider {
23
24 public IERSConventions conventions;
25 public OneAxisEllipsoid earth;
26 public CelestialBody sun;
27 public CelestialBody moon;
28 public TimeScale utc;
29 public UT1Scale ut1;
30 public Orbit initialOrbit;
31 public StationDisplacement[] displacements;
32 public List<GroundStation> stations;
33
34 public KeplerianPropagatorBuilder createBuilder(final PositionAngle angleType, final boolean perfectStart, final double dP) {
35
36 final Orbit startOrbit;
37 if (perfectStart) {
38
39 startOrbit = initialOrbit;
40 } else {
41
42 final Vector3D initialPosition = initialOrbit.getPVCoordinates().getPosition();
43 final Vector3D initialVelocity = initialOrbit.getPVCoordinates().getVelocity();
44 final Vector3D wrongPosition = initialPosition.add(new Vector3D(1000.0, 0, 0));
45 final Vector3D wrongVelocity = initialVelocity.add(new Vector3D(0, 0, 0.01));
46 startOrbit = new CartesianOrbit(new PVCoordinates(wrongPosition, wrongVelocity),
47 initialOrbit.getFrame(),
48 initialOrbit.getDate(),
49 initialOrbit.getMu());
50 }
51
52
53 final KeplerianPropagatorBuilder propagatorBuilder =
54 new KeplerianPropagatorBuilder(startOrbit, angleType, dP);
55
56
57 return propagatorBuilder;
58
59 }
60
61 GroundStation createStation(double latitudeInDegrees, double longitudeInDegrees,
62 double altitude, String name) {
63 final GeodeticPoint gp = new GeodeticPoint(FastMath.toRadians(latitudeInDegrees),
64 FastMath.toRadians(longitudeInDegrees),
65 altitude);
66 return new GroundStation(new TopocentricFrame(earth, gp, name),
67 ut1.getEOPHistory(), displacements);
68 }
69
70 @Override
71 public List<GroundStation> getStations() {
72 return stations;
73 }
74
75 }