diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 81355818bac12745d6c19312f9733a9882e785f8..dbe40a4c3e428af4bcfe6991ffc5b9a88f08e7a5 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 cbdc95ff112c07b8736f8879f42de3b1000f8f62..0d924b53c729cdf0e7fa942287e71567f3b3038d 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 9eb5170fa115319ce3a780460c193198afc0e693..f464ddb91e8885beacd51fa61e8cd6a3086b737e 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 0000000000000000000000000000000000000000..618f64dee593e7d09cbe6f44d9a7e5182064212a
--- /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