Can't write ITRF OEM, or OEM without interpolation order
In Orekit 10 it was possible to use the StreamingOemWriter
to write a OEM file in a Earth fixed frame. This appears to be impossible in Orekit 11. Similarly Orekit 10 could write a OEM without the optional interpolationDegree
field, which appears to be impossible in Orekit 11. It seems that the current code ignores the value of metadata.getReferenceFrame()
when writing. Perhaps there is a better way to set the output reference frame?
Test case for StreamingOemWriterTest
belowOEMExample5ITRF.txt and expected file attached.
@Test
public void testWriteOemEcfTaiNoInterpolation() {
// setup
String path = "/ccsds/odm/oem/OEMExample5.txt";
DataSource source = new DataSource(path, () -> getClass().getResourceAsStream(path));
final OemParser oemParser = new ParserBuilder().buildOemParser();
final Oem original = oemParser.parse(source);
final OemSatelliteEphemeris originalEphem =
original.getSatellites().values().iterator().next();
final BoundedPropagator propagator = originalEphem.getPropagator();
StringBuilder buffer = new StringBuilder();
Header header = original.getHeader();
OemMetadata metadata = original.getSegments().get(0).getMetadata();
metadata.setTimeSystem(TimeSystem.TAI);
metadata.setReferenceFrame(FrameFacade.map(FramesFactory.getITRF(IERSConventions.IERS_2010, true)));
metadata.setInterpolationMethod(null);
metadata.setInterpolationDegree(-1);
// action
StreamingOemWriter writer =
new StreamingOemWriter(new KvnGenerator(buffer, OemWriter.KVN_PADDING_WIDTH, "out", 0),
new WriterBuilder().buildOemWriter(),
header, metadata);
propagator.setStepHandler(30 * 60, writer.newSegment());
propagator.propagate(propagator.getMinDate(), propagator.getMaxDate());
// verify
System.out.println(buffer.toString());
String expectedPath = "/ccsds/odm/oem/OEMExample5ITRF.txt";
Oem expected = oemParser.parse(
new DataSource(expectedPath, () -> getClass().getResourceAsStream(expectedPath)));
Oem actual = oemParser.parse(
new DataSource("mem", () -> new StringReader(buffer.toString())));
compareOems(expected, actual, 1e-6, 1e-9);
}
Edited by Evan Ward