From 4841cd5a8ecf601a102be7e3657ba21925c28ba2 Mon Sep 17 00:00:00 2001 From: Bryan Cazabonne Date: Fri, 15 May 2020 10:44:43 +0200 Subject: [PATCH] Added support for Rinex C0, L0, S0 and D0 observation types. --- src/changes/changes.xml | 3 ++ .../java/org/orekit/gnss/ObservationType.java | 12 +++++++ .../java/org/orekit/gnss/RinexLoaderTest.java | 19 +++++++++- src/test/resources/rinex/embe083.06o | 36 +++++++++++++++++++ 4 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 src/test/resources/rinex/embe083.06o diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 81355818b..dbe40a4c3 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -21,6 +21,9 @@ + + Added support for Rinex C0, L0, S0 and D0 observation types. + Allow Pattern functionalities instead of String.replaceAll() and String.split(). diff --git a/src/main/java/org/orekit/gnss/ObservationType.java b/src/main/java/org/orekit/gnss/ObservationType.java index cbdc95ff1..0d924b53c 100644 --- a/src/main/java/org/orekit/gnss/ObservationType.java +++ b/src/main/java/org/orekit/gnss/ObservationType.java @@ -296,6 +296,9 @@ public enum ObservationType { /** Pseudorange IRNSS S B+C for Rinex3. */ C9X(MeasurementType.PSEUDO_RANGE, SignalCode.X, Frequency.I09), + /** Pseudorange for Rinex3. */ + C0(MeasurementType.PSEUDO_RANGE, SignalCode.CODELESS), + /** Pseudorange GPS L1 C/A / GLONASS G1 C/A for Rinex2. */ CA(MeasurementType.PSEUDO_RANGE, SignalCode.C, Frequency.G01, Frequency.R01), @@ -488,6 +491,9 @@ public enum ObservationType { /** Doppler IRNSS S B+C for Rinex3. */ D9X(MeasurementType.DOPPLER, SignalCode.X, Frequency.I09), + /** Doppler for Rinex3. */ + D0(MeasurementType.DOPPLER, SignalCode.CODELESS), + /** Doppler GPS L1 C/A / GLONASS G1 C/A for Rinex2. */ DA(MeasurementType.DOPPLER, SignalCode.C, Frequency.G01, Frequency.R01), @@ -680,6 +686,9 @@ public enum ObservationType { /** Carrier-phase IRNSS S B+C for Rinex3. */ L9X(MeasurementType.CARRIER_PHASE, SignalCode.X, Frequency.I09), + /** Carrier-phase for Rinex3. */ + L0(MeasurementType.CARRIER_PHASE, SignalCode.CODELESS), + /** Signal-strength Galileo E1 A for Rinex3. */ S1A(MeasurementType.SIGNAL_STRENGTH, SignalCode.A, Frequency.E01), @@ -860,6 +869,9 @@ public enum ObservationType { /** Signal-strength IRNSS S B+C for Rinex3. */ S9X(MeasurementType.SIGNAL_STRENGTH, SignalCode.X, Frequency.I09), + /** Signal-strength for Rinex3. */ + S0(MeasurementType.SIGNAL_STRENGTH, SignalCode.CODELESS), + /** Signal-strength GPS L1 C/A / GLONASS G1 C/A for Rinex2. */ SA(MeasurementType.SIGNAL_STRENGTH, SignalCode.C, Frequency.G01, Frequency.R01), diff --git a/src/test/java/org/orekit/gnss/RinexLoaderTest.java b/src/test/java/org/orekit/gnss/RinexLoaderTest.java index 9eb5170fa..f464ddb91 100644 --- a/src/test/java/org/orekit/gnss/RinexLoaderTest.java +++ b/src/test/java/org/orekit/gnss/RinexLoaderTest.java @@ -712,7 +712,24 @@ public class RinexLoaderTest { Assert.assertEquals(0.0, ods.get(4).getDate().durationFrom(t0), 1.0e-15); Assert.assertEquals(ObservationType.L1C, ods.get(4).getObservationData().get(1).getObservationType()); Assert.assertEquals(335849.135, ods.get(4).getObservationData().get(1).getValue(), 1.0e-15); - + } + + @Test + public void testIssue605() { + // Test observation type C0, L0, S0 and D0 + RinexLoader loader = load("rinex/embe083.06o"); + AbsoluteDate t0 = new AbsoluteDate(2016, 3, 24, 13, 10, 36.0, TimeScalesFactory.getGPS()); + List ods = loader.getObservationDataSets(); + Assert.assertEquals(5, ods.size()); + + // Test Glonass + Assert.assertEquals(SatelliteSystem.GLONASS, ods.get(3).getSatelliteSystem()); + Assert.assertEquals(12, ods.get(3).getPrnNumber()); + Assert.assertEquals(0.0, ods.get(3).getDate().durationFrom(t0), 1.0e-15); + Assert.assertEquals(20427680.259, ods.get(3).getObservationData().get(0).getValue(), 1.0e-15); + Assert.assertEquals(-885349.430, ods.get(3).getObservationData().get(1).getValue(), 1.0e-15); + Assert.assertEquals(22397545.647, ods.get(3).getObservationData().get(3).getValue(), 1.0e-15); + Assert.assertEquals(37.594, ods.get(3).getObservationData().get(4).getValue(), 1.0e-15); } private void checkObservation(final ObservationDataSet obser, diff --git a/src/test/resources/rinex/embe083.06o b/src/test/resources/rinex/embe083.06o new file mode 100644 index 000000000..618f64dee --- /dev/null +++ b/src/test/resources/rinex/embe083.06o @@ -0,0 +1,36 @@ + 3.00 OBSERVATION DATA M RINEX VERSION / TYPE +G = GPS R = GLONASS E = GALILEO S = GEO M = MIXED COMMENT +XXRINEXO V9.9 AIUB 20060324 144333 UTC PGM / RUN BY / DATE +A 9080 MARKER NAME +9080.1.34 MARKER NUMBER +BILL SMITH ABC INSTITUTE OBSERVER / AGENCY +X1234A123 GEODETIC 1.3.1 REC # / TYPE / VERS +G1234 ROVER ANT # / TYPE + 2104228. -5642017. 2095406. APPROX POSITION XYZ + .9030 .0000 .0000 ANTENNA: DELTA H/E/N + 0 RCV CLOCK OFFS APPL +G 5 C1C L1W L2W C1W S2W SYS / # / OBS TYPES +R 5 C0 L0 C1C L1C S0 SYS / # / OBS TYPES +E 2 L1B L5I SYS / # / OBS TYPES +S 2 C1C L1C SYS / # / OBS TYPES + 18.000 INTERVAL +DBHZ SIGNAL STRENGTH UNIT + 2006 03 24 13 10 36.0000000 GPS TIME OF FIRST OBS + 18 R01 1 R02 2 R03 3 R04 4 R05 5 R06 -6 R07 -5 R08 -4 GLONASS SLOT / FRQ # + R09 -3 R10 -2 R11 -1 R12 0 R13 1 R14 2 R15 0 R16 4 GLONASS SLOT / FRQ # + R17 5 R18 -5 GLONASS SLOT / FRQ # +G L1C SYS / PHASE SHIFT +G L1W SYS / PHASE SHIFT +G L2W 0.00000 SYS / PHASE SHIFT +R L1C 0.00000 SYS / PHASE SHIFT +E L1B 0.00000 SYS / PHASE SHIFT +E L5I 0.00000 SYS / PHASE SHIFT +S L1C 0.00000 SYS / PHASE SHIFT + C1C 0.000 C2C 0.000 C2P 0.000 GLONASS COD/PHS/BIS + END OF HEADER +> 2016 03 24 13 10 36.0000000 0 5 0.000000000000 +G06 23629347.915 651379.300 8 23629347.158 24.158 +G09 20891534.648 -453349.120 9 20891545.292 38.123 +G12 20607600.189 -756349.430 9 20891545.848 35.234 +R12 20427680.259 -885349.430 9 22397545.647 37.594 +E11 20742800.324 8 378849.178 7 \ No newline at end of file -- GitLab