1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.frames;
18
19
20 import java.io.ByteArrayInputStream;
21 import java.io.ByteArrayOutputStream;
22 import java.io.IOException;
23 import java.io.ObjectInputStream;
24 import java.io.ObjectOutputStream;
25
26 import org.hipparchus.geometry.euclidean.threed.FieldVector3D;
27 import org.hipparchus.geometry.euclidean.threed.Vector3D;
28 import org.hipparchus.util.Decimal64;
29 import org.hipparchus.util.Decimal64Field;
30 import org.hipparchus.util.FastMath;
31 import org.junit.Assert;
32 import org.junit.Before;
33 import org.junit.Test;
34 import org.orekit.Utils;
35 import org.orekit.bodies.GeodeticPoint;
36 import org.orekit.bodies.OneAxisEllipsoid;
37 import org.orekit.time.AbsoluteDate;
38 import org.orekit.time.FieldAbsoluteDate;
39 import org.orekit.time.TimeScalesFactory;
40 import org.orekit.utils.Constants;
41 import org.orekit.utils.IERSConventions;
42
43 public class VersionedITRFFrameTest {
44
45 @Test
46 public void testBulletinABefore2018Jump() {
47
48 doTestBulletinA2018Jump(new AbsoluteDate(2018, 3, 20, 12, 34, 56.7,
49 TimeScalesFactory.getUTC()),
50 0.0, 2.943e-3, 1.0e-6);
51 }
52
53 @Test
54 public void testBulletinAAfter2018Jump() {
55
56 doTestBulletinA2018Jump(new AbsoluteDate(2018, 3, 26, 12, 34, 56.7,
57 TimeScalesFactory.getUTC()),
58 2.942e-3, 0.0, 1.0e-6);
59 }
60
61 private void doTestBulletinA2018Jump(AbsoluteDate date,
62 double expectedDistance2008,
63 double expectedDistance2014,
64 double tolerance)
65 {
66 Frame eme2000 = FramesFactory.getEME2000();
67 Frame unspecifiedITRF = FramesFactory.getITRF(IERSConventions.IERS_2010, false);
68 VersionedITRF itrf2008 = FramesFactory.getITRF(ITRFVersion.ITRF_2008,
69 IERSConventions.IERS_2010, false);
70 VersionedITRF itrf2014 = FramesFactory.getITRF(ITRFVersion.ITRF_2014,
71 IERSConventions.IERS_2010, false);
72 Assert.assertEquals(ITRFVersion.ITRF_2008, itrf2008.getITRFVersion());
73 Assert.assertEquals(ITRFVersion.ITRF_2014, itrf2014.getITRFVersion());
74
75 GeodeticPoint laPaz = new GeodeticPoint(FastMath.toRadians(-16.50),
76 FastMath.toRadians(-68.15),
77 3640.0);
78 OneAxisEllipsoid earth = new OneAxisEllipsoid(Constants.WGS84_EARTH_EQUATORIAL_RADIUS,
79 Constants.WGS84_EARTH_FLATTENING,
80 unspecifiedITRF);
81 Vector3D p = earth.transform(laPaz);
82
83
84 Vector3D pUnspecified = unspecifiedITRF.getTransformTo(eme2000, date).transformPosition(p);
85 Vector3D p2008 = itrf2008.getTransformTo(eme2000, date).transformPosition(p);
86 Vector3D p2014 = itrf2014.getTransformTo(eme2000, date).transformPosition(p);
87 Assert.assertEquals(expectedDistance2008, Vector3D.distance(pUnspecified, p2008), tolerance);
88 Assert.assertEquals(expectedDistance2014, Vector3D.distance(pUnspecified, p2014), tolerance);
89
90
91 Vector3D pUnspecifiedNI = FramesFactory.getNonInterpolatingTransform(unspecifiedITRF,
92 eme2000,
93 date).transformPosition(p);
94 Vector3D p2008NI = FramesFactory.getNonInterpolatingTransform(itrf2008, eme2000, date).transformPosition(p);
95 Vector3D p2014NI = FramesFactory.getNonInterpolatingTransform(itrf2014, eme2000, date).transformPosition(p);
96 Assert.assertEquals(expectedDistance2008, Vector3D.distance(pUnspecifiedNI, p2008NI), tolerance);
97 Assert.assertEquals(expectedDistance2014, Vector3D.distance(pUnspecifiedNI, p2014NI), tolerance);
98
99
100 FieldAbsoluteDate<Decimal64> dateField = new FieldAbsoluteDate<>(Decimal64Field.getInstance(), date);
101 FieldVector3D<Decimal64> pUnspecifiedField = unspecifiedITRF.getTransformTo(eme2000, dateField).transformPosition(p);
102 FieldVector3D<Decimal64> p2008Field = itrf2008.getTransformTo(eme2000, dateField).transformPosition(p);
103 FieldVector3D<Decimal64> p2014Field = itrf2014.getTransformTo(eme2000, dateField).transformPosition(p);
104 Assert.assertEquals(expectedDistance2008, FieldVector3D.distance(pUnspecifiedField, p2008Field).getReal(), tolerance);
105 Assert.assertEquals(expectedDistance2014, FieldVector3D.distance(pUnspecifiedField, p2014Field).getReal(), tolerance);
106
107 }
108
109 @Test
110 public void testSerialization() throws IOException, ClassNotFoundException {
111 VersionedITRF itrf2008 = FramesFactory.getITRF(ITRFVersion.ITRF_2008,
112 IERSConventions.IERS_2010, false);
113 ByteArrayOutputStream bos = new ByteArrayOutputStream();
114 ObjectOutputStream oos = new ObjectOutputStream(bos);
115 oos.writeObject(itrf2008);
116
117 Assert.assertTrue(bos.size() > 40000);
118 Assert.assertTrue(bos.size() < 45000);
119
120 ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
121 ObjectInputStream ois = new ObjectInputStream(bis);
122 VersionedITRF deserialized = (VersionedITRF) ois.readObject();
123 Assert.assertEquals(ITRFVersion.ITRF_2008, deserialized.getITRFVersion());
124
125 }
126
127 @Before
128 public void setUp() {
129 Utils.setDataRoot("itrf-jump");
130 }
131
132 }