gnss-js 2.1.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
1
  import { E as Ephemeris } from './nav-DImXUdbp.cjs';
2
2
  import { DopValues } from './orbit.cjs';
3
3
  import { I as IonexGrid, C as ClkFile, S as Sp3File } from './clk-DGVBGRzA.cjs';
4
- import { a as HasOrbitCorrection, b as HasClockCorrection } from './has-BaXnQarR.cjs';
5
4
  import { AntexFile } from './antex.cjs';
5
+ import { a as HasOrbitCorrection, b as HasClockCorrection } from './has-BaXnQarR.cjs';
6
6
  import './ephemeris-BAnBLLB9.cjs';
7
7
  import './ecef-CF0uAysr.cjs';
8
8
  import './nav-BYmYoh9A.cjs';
@@ -83,6 +83,87 @@ declare function gimVerticalTec(grid: IonexGrid, timeMs: number, latDeg: number,
83
83
  */
84
84
  declare function gimSlantIonoDelayL1(grid: IonexGrid, latRad: number, lonRad: number, azRad: number, elRad: number, timeMs: number): number | null;
85
85
 
86
+ /**
87
+ * ANTEX phase-centre application for PPP: satellite and receiver antenna
88
+ * PCO (offset) + PCV (elevation-dependent variation), ionosphere-free
89
+ * combined, with the nominal yaw-steering satellite attitude used to
90
+ * rotate the satellite PCO from the body frame into ECEF.
91
+ */
92
+
93
+ interface AntennaOffset {
94
+ /** IF-combined PCO (m): satellite → body-frame [X,Y,Z]; receiver → ENU. */
95
+ pco: [number, number, number];
96
+ /** IF-combined no-azimuth PCV samples (m) over zenith/nadir angle. */
97
+ pcvZen1Deg: number;
98
+ pcvDzenDeg: number;
99
+ pcvNoazi: number[];
100
+ }
101
+ interface PppAntennaModel {
102
+ satOffset(prn: string, dateMs: number, band1: string, band2: string, f1: number, f2: number): AntennaOffset | null;
103
+ rcvOffset(antType: string, band1: string, band2: string, f1: number, f2: number): AntennaOffset | null;
104
+ }
105
+ declare function buildPppAntenna(antex: AntexFile): PppAntennaModel;
106
+
107
+ /**
108
+ * Per-frequency receiver antenna corrections for RTK.
109
+ *
110
+ * RTK forms double differences per signal (L1, L2, … separately), so — unlike
111
+ * PPP, which works on the ionosphere-free combination — it needs the antenna
112
+ * phase-centre offset (PCO) and no-azimuth phase-centre variation (PCV) for
113
+ * each frequency in isolation, not IF-combined. This module is therefore a
114
+ * deliberately separate model from {@link buildPppAntenna}.
115
+ *
116
+ * The satellite antenna cancels in the base↔rover double difference, so only
117
+ * the *receiver* antennas matter — and only when base and rover differ (same
118
+ * antenna type + orientation cancels too). The correction is the same range
119
+ * quantity the PPP receiver term applies (PCO projected on the line of sight +
120
+ * elevation PCV + marker→ARP delta), added to the modelled geometric range.
121
+ */
122
+
123
+ /** A single-frequency receiver antenna offset (PCO in ENU metres + no-azimuth
124
+ * PCV over zenith). Shares {@link AntennaOffset}'s shape so {@link interpPcv}
125
+ * applies directly. */
126
+ type RtkAntennaOffset = AntennaOffset;
127
+ interface RtkAntennaModel {
128
+ /** Receiver PCO + PCV for one ANTEX frequency code (e.g. 'G01', 'E05'), or
129
+ * null when the antenna type or that frequency isn't calibrated. */
130
+ rcvOffset(antType: string, freq: string): RtkAntennaOffset | null;
131
+ }
132
+ /**
133
+ * Build a per-frequency receiver antenna model from an ANTEX file (e.g.
134
+ * igs20.atx). Receiver antennas are keyed by their 20-char type (RINEX header
135
+ * "ANT # / TYPE"); satellite entries are ignored (they cancel in the DD).
136
+ */
137
+ declare function buildRtkAntenna(antex: AntexFile): RtkAntennaModel;
138
+ /**
139
+ * Additive range correction (m) for one receiver observing one satellite,
140
+ * matching the PPP receiver-antenna convention: it is *added to the modelled
141
+ * geometric range* (marker→satellite). `losRcvToSat` is the unit line of sight
142
+ * from the receiver to the satellite; `antDeltaEnu` is the marker→ARP offset
143
+ * in local ENU (m).
144
+ */
145
+ declare function rcvAntennaRangeM(off: RtkAntennaOffset, losRcvToSat: [number, number, number], latRad: number, lonRad: number, elRad: number, antDeltaEnu?: readonly [number, number, number]): number;
146
+ /** Per-receiver antenna configuration for {@link RtkFloatOptions.antenna}. */
147
+ interface RtkReceiverAntenna {
148
+ /** RINEX antenna type (20-char "ANT # / TYPE"), keyed into the model. */
149
+ type: string;
150
+ /** Marker→ARP offset in local ENU (m). RINEX "ANTENNA: DELTA H/E/N" is
151
+ * [Up, East, North] → pass as [E, N, U]. Default [0,0,0]. */
152
+ deltaEnu?: [number, number, number];
153
+ }
154
+ /** RTK antenna configuration: a per-frequency model + the base/rover antennas.
155
+ * Corrections are applied only for a receiver whose antenna is supplied and
156
+ * found in the model; the satellite antenna is never needed (cancels in the
157
+ * double difference). */
158
+ interface RtkAntennaConfig {
159
+ model: RtkAntennaModel;
160
+ base?: RtkReceiverAntenna;
161
+ rover?: RtkReceiverAntenna;
162
+ }
163
+ /** ANTEX frequency code for an RTK signal group ("G1C" → "G01"): system letter
164
+ * + '0' + band digit. */
165
+ declare function antexFreqOfGroup(group: string): string;
166
+
86
167
  /**
87
168
  * RTK positioning, stage 1: epoch-wise double-differenced (DD)
88
169
  * processing of a base/rover receiver pair.
@@ -306,6 +387,14 @@ interface RtkFloatOptions {
306
387
  partialFixing?: boolean;
307
388
  /** Minimum DD ambiguities to attempt/accept a fix. Default 4. */
308
389
  minFixAmbiguities?: number;
390
+ /**
391
+ * Receiver antenna phase-centre corrections (per-frequency PCO + PCV) for
392
+ * the base and rover. Only worthwhile on mixed-antenna baselines — with the
393
+ * same antenna type + orientation at both ends the correction cancels in the
394
+ * double difference. The satellite antenna is never needed (it cancels too).
395
+ * Build the model with {@link buildRtkAntenna}. Default: none.
396
+ */
397
+ antenna?: RtkAntennaConfig | null;
309
398
  }
310
399
  interface RtkFloatSolution {
311
400
  /** Epoch, GPS-scale milliseconds. */
@@ -778,27 +867,6 @@ declare function applyOrbitClock(eph: Ephemeris, corr: OrbitClockCorrection, tim
778
867
  */
779
868
  declare function hasToOrbitClock(orbit: HasOrbitCorrection, clock: HasClockCorrection | undefined, refTimeMs: number, validitySeconds: number | null): OrbitClockCorrection | null;
780
869
 
781
- /**
782
- * ANTEX phase-centre application for PPP: satellite and receiver antenna
783
- * PCO (offset) + PCV (elevation-dependent variation), ionosphere-free
784
- * combined, with the nominal yaw-steering satellite attitude used to
785
- * rotate the satellite PCO from the body frame into ECEF.
786
- */
787
-
788
- interface AntennaOffset {
789
- /** IF-combined PCO (m): satellite → body-frame [X,Y,Z]; receiver → ENU. */
790
- pco: [number, number, number];
791
- /** IF-combined no-azimuth PCV samples (m) over zenith/nadir angle. */
792
- pcvZen1Deg: number;
793
- pcvDzenDeg: number;
794
- pcvNoazi: number[];
795
- }
796
- interface PppAntennaModel {
797
- satOffset(prn: string, dateMs: number, band1: string, band2: string, f1: number, f2: number): AntennaOffset | null;
798
- rcvOffset(antType: string, band1: string, band2: string, f1: number, f2: number): AntennaOffset | null;
799
- }
800
- declare function buildPppAntenna(antex: AntexFile): PppAntennaModel;
801
-
802
870
  /**
803
871
  * Optional PPP range corrections: satellite & receiver antenna phase-centre
804
872
  * offsets, phase wind-up, and solid-earth tides. These take a converged
@@ -1567,4 +1635,4 @@ declare function sbasProtectionLevels(sats: readonly {
1567
1635
  */
1568
1636
  declare function solveSpp(pseudoranges: Map<string, number>, ephemerides: Map<string, Ephemeris>, timeMs: number, opts?: SppOptions): SppSolution | null;
1569
1637
 
1570
- export { type AntennaOffset, type AppliedOrbitClock, type ArFixedSat, type ArOptions, type ArResult, type ArSat, type CorrectionResult, type Degradation, type DgnssOptions, type DgnssSolution, type EphemerisSource, type FixedPositionResult, IONO_L1_M_PER_TECU, type KlobucharCoeffs, type LambdaResult, type NetworkFcbResult, type NetworkFcbSummary, type NlArc, type NlFcbResult, type OrbitClockCorrection, type PppAntennaModel, type PppArc, type PppCorrectionConfig, type PppCorrections, PppEngine, type PppEphemerisSource, type PppEpoch, type PppEpochContext, type PppEpochResult, type PppFixState, type PppOptions, type PppSatObs, type PppSolution, type RawObservation, type RtkEpochMeasurements, RtkFloatEngine, type RtkFloatOptions, type RtkFloatSolution, type RtkMeasurement, type RtkObsEpoch, type RtkObsInput, type RtkPostProcessOptions, type RtkPostProcessResult, type RtkTrackPoint, type SatGeom, type SatSample, type SbasCorrectionSource, type SbasIgp, type SbasIonoDelay, SbasProcessor, type SbasSatCorrection, Sp3EphemerisSource, type SppOptions, type SppSolution, type TropoMapping, type WlArc, type WlFcbOptions, type WlFcbResult, type WlObs, applyOrbitClock, buildPppAntenna, createPppCorrections, estimateNarrowlaneFcb, estimateNetworkFcbs, estimateWidelaneFcb, extractWidelaneArcs, fixPppPosition, gimSlantIonoDelayL1, gimVerticalTec, gmst, hasToOrbitClock, ionoFree, klobucharDelay, lambdaReduction, lambdaSearch, moonEcef, niellMapping, nlWavelength, postProcessRtk, resolvePppAmbiguities, satClockCorrection, sbasIonoDeg, sbasLongTermDeg, sbasProtectionLevels, solidEarthTide, solveDgnss, solvePpp, solveSpp, sunEcef, toRtkEpoch, wlWavelength };
1638
+ export { type AntennaOffset, type AppliedOrbitClock, type ArFixedSat, type ArOptions, type ArResult, type ArSat, type CorrectionResult, type Degradation, type DgnssOptions, type DgnssSolution, type EphemerisSource, type FixedPositionResult, IONO_L1_M_PER_TECU, type KlobucharCoeffs, type LambdaResult, type NetworkFcbResult, type NetworkFcbSummary, type NlArc, type NlFcbResult, type OrbitClockCorrection, type PppAntennaModel, type PppArc, type PppCorrectionConfig, type PppCorrections, PppEngine, type PppEphemerisSource, type PppEpoch, type PppEpochContext, type PppEpochResult, type PppFixState, type PppOptions, type PppSatObs, type PppSolution, type RawObservation, type RtkAntennaConfig, type RtkAntennaModel, type RtkAntennaOffset, type RtkEpochMeasurements, RtkFloatEngine, type RtkFloatOptions, type RtkFloatSolution, type RtkMeasurement, type RtkObsEpoch, type RtkObsInput, type RtkPostProcessOptions, type RtkPostProcessResult, type RtkReceiverAntenna, type RtkTrackPoint, type SatGeom, type SatSample, type SbasCorrectionSource, type SbasIgp, type SbasIonoDelay, SbasProcessor, type SbasSatCorrection, Sp3EphemerisSource, type SppOptions, type SppSolution, type TropoMapping, type WlArc, type WlFcbOptions, type WlFcbResult, type WlObs, antexFreqOfGroup, applyOrbitClock, buildPppAntenna, buildRtkAntenna, createPppCorrections, estimateNarrowlaneFcb, estimateNetworkFcbs, estimateWidelaneFcb, extractWidelaneArcs, fixPppPosition, gimSlantIonoDelayL1, gimVerticalTec, gmst, hasToOrbitClock, ionoFree, klobucharDelay, lambdaReduction, lambdaSearch, moonEcef, niellMapping, nlWavelength, postProcessRtk, rcvAntennaRangeM, resolvePppAmbiguities, satClockCorrection, sbasIonoDeg, sbasLongTermDeg, sbasProtectionLevels, solidEarthTide, solveDgnss, solvePpp, solveSpp, sunEcef, toRtkEpoch, wlWavelength };
@@ -1,8 +1,8 @@
1
1
  import { E as Ephemeris } from './nav-DImXUdbp.js';
2
2
  import { DopValues } from './orbit.js';
3
3
  import { I as IonexGrid, C as ClkFile, S as Sp3File } from './clk-DGVBGRzA.js';
4
- import { a as HasOrbitCorrection, b as HasClockCorrection } from './has-BaXnQarR.js';
5
4
  import { AntexFile } from './antex.js';
5
+ import { a as HasOrbitCorrection, b as HasClockCorrection } from './has-BaXnQarR.js';
6
6
  import './ephemeris-BAnBLLB9.js';
7
7
  import './ecef-CF0uAysr.js';
8
8
  import './nav-CN8rxL4h.js';
@@ -83,6 +83,87 @@ declare function gimVerticalTec(grid: IonexGrid, timeMs: number, latDeg: number,
83
83
  */
84
84
  declare function gimSlantIonoDelayL1(grid: IonexGrid, latRad: number, lonRad: number, azRad: number, elRad: number, timeMs: number): number | null;
85
85
 
86
+ /**
87
+ * ANTEX phase-centre application for PPP: satellite and receiver antenna
88
+ * PCO (offset) + PCV (elevation-dependent variation), ionosphere-free
89
+ * combined, with the nominal yaw-steering satellite attitude used to
90
+ * rotate the satellite PCO from the body frame into ECEF.
91
+ */
92
+
93
+ interface AntennaOffset {
94
+ /** IF-combined PCO (m): satellite → body-frame [X,Y,Z]; receiver → ENU. */
95
+ pco: [number, number, number];
96
+ /** IF-combined no-azimuth PCV samples (m) over zenith/nadir angle. */
97
+ pcvZen1Deg: number;
98
+ pcvDzenDeg: number;
99
+ pcvNoazi: number[];
100
+ }
101
+ interface PppAntennaModel {
102
+ satOffset(prn: string, dateMs: number, band1: string, band2: string, f1: number, f2: number): AntennaOffset | null;
103
+ rcvOffset(antType: string, band1: string, band2: string, f1: number, f2: number): AntennaOffset | null;
104
+ }
105
+ declare function buildPppAntenna(antex: AntexFile): PppAntennaModel;
106
+
107
+ /**
108
+ * Per-frequency receiver antenna corrections for RTK.
109
+ *
110
+ * RTK forms double differences per signal (L1, L2, … separately), so — unlike
111
+ * PPP, which works on the ionosphere-free combination — it needs the antenna
112
+ * phase-centre offset (PCO) and no-azimuth phase-centre variation (PCV) for
113
+ * each frequency in isolation, not IF-combined. This module is therefore a
114
+ * deliberately separate model from {@link buildPppAntenna}.
115
+ *
116
+ * The satellite antenna cancels in the base↔rover double difference, so only
117
+ * the *receiver* antennas matter — and only when base and rover differ (same
118
+ * antenna type + orientation cancels too). The correction is the same range
119
+ * quantity the PPP receiver term applies (PCO projected on the line of sight +
120
+ * elevation PCV + marker→ARP delta), added to the modelled geometric range.
121
+ */
122
+
123
+ /** A single-frequency receiver antenna offset (PCO in ENU metres + no-azimuth
124
+ * PCV over zenith). Shares {@link AntennaOffset}'s shape so {@link interpPcv}
125
+ * applies directly. */
126
+ type RtkAntennaOffset = AntennaOffset;
127
+ interface RtkAntennaModel {
128
+ /** Receiver PCO + PCV for one ANTEX frequency code (e.g. 'G01', 'E05'), or
129
+ * null when the antenna type or that frequency isn't calibrated. */
130
+ rcvOffset(antType: string, freq: string): RtkAntennaOffset | null;
131
+ }
132
+ /**
133
+ * Build a per-frequency receiver antenna model from an ANTEX file (e.g.
134
+ * igs20.atx). Receiver antennas are keyed by their 20-char type (RINEX header
135
+ * "ANT # / TYPE"); satellite entries are ignored (they cancel in the DD).
136
+ */
137
+ declare function buildRtkAntenna(antex: AntexFile): RtkAntennaModel;
138
+ /**
139
+ * Additive range correction (m) for one receiver observing one satellite,
140
+ * matching the PPP receiver-antenna convention: it is *added to the modelled
141
+ * geometric range* (marker→satellite). `losRcvToSat` is the unit line of sight
142
+ * from the receiver to the satellite; `antDeltaEnu` is the marker→ARP offset
143
+ * in local ENU (m).
144
+ */
145
+ declare function rcvAntennaRangeM(off: RtkAntennaOffset, losRcvToSat: [number, number, number], latRad: number, lonRad: number, elRad: number, antDeltaEnu?: readonly [number, number, number]): number;
146
+ /** Per-receiver antenna configuration for {@link RtkFloatOptions.antenna}. */
147
+ interface RtkReceiverAntenna {
148
+ /** RINEX antenna type (20-char "ANT # / TYPE"), keyed into the model. */
149
+ type: string;
150
+ /** Marker→ARP offset in local ENU (m). RINEX "ANTENNA: DELTA H/E/N" is
151
+ * [Up, East, North] → pass as [E, N, U]. Default [0,0,0]. */
152
+ deltaEnu?: [number, number, number];
153
+ }
154
+ /** RTK antenna configuration: a per-frequency model + the base/rover antennas.
155
+ * Corrections are applied only for a receiver whose antenna is supplied and
156
+ * found in the model; the satellite antenna is never needed (cancels in the
157
+ * double difference). */
158
+ interface RtkAntennaConfig {
159
+ model: RtkAntennaModel;
160
+ base?: RtkReceiverAntenna;
161
+ rover?: RtkReceiverAntenna;
162
+ }
163
+ /** ANTEX frequency code for an RTK signal group ("G1C" → "G01"): system letter
164
+ * + '0' + band digit. */
165
+ declare function antexFreqOfGroup(group: string): string;
166
+
86
167
  /**
87
168
  * RTK positioning, stage 1: epoch-wise double-differenced (DD)
88
169
  * processing of a base/rover receiver pair.
@@ -306,6 +387,14 @@ interface RtkFloatOptions {
306
387
  partialFixing?: boolean;
307
388
  /** Minimum DD ambiguities to attempt/accept a fix. Default 4. */
308
389
  minFixAmbiguities?: number;
390
+ /**
391
+ * Receiver antenna phase-centre corrections (per-frequency PCO + PCV) for
392
+ * the base and rover. Only worthwhile on mixed-antenna baselines — with the
393
+ * same antenna type + orientation at both ends the correction cancels in the
394
+ * double difference. The satellite antenna is never needed (it cancels too).
395
+ * Build the model with {@link buildRtkAntenna}. Default: none.
396
+ */
397
+ antenna?: RtkAntennaConfig | null;
309
398
  }
310
399
  interface RtkFloatSolution {
311
400
  /** Epoch, GPS-scale milliseconds. */
@@ -778,27 +867,6 @@ declare function applyOrbitClock(eph: Ephemeris, corr: OrbitClockCorrection, tim
778
867
  */
779
868
  declare function hasToOrbitClock(orbit: HasOrbitCorrection, clock: HasClockCorrection | undefined, refTimeMs: number, validitySeconds: number | null): OrbitClockCorrection | null;
780
869
 
781
- /**
782
- * ANTEX phase-centre application for PPP: satellite and receiver antenna
783
- * PCO (offset) + PCV (elevation-dependent variation), ionosphere-free
784
- * combined, with the nominal yaw-steering satellite attitude used to
785
- * rotate the satellite PCO from the body frame into ECEF.
786
- */
787
-
788
- interface AntennaOffset {
789
- /** IF-combined PCO (m): satellite → body-frame [X,Y,Z]; receiver → ENU. */
790
- pco: [number, number, number];
791
- /** IF-combined no-azimuth PCV samples (m) over zenith/nadir angle. */
792
- pcvZen1Deg: number;
793
- pcvDzenDeg: number;
794
- pcvNoazi: number[];
795
- }
796
- interface PppAntennaModel {
797
- satOffset(prn: string, dateMs: number, band1: string, band2: string, f1: number, f2: number): AntennaOffset | null;
798
- rcvOffset(antType: string, band1: string, band2: string, f1: number, f2: number): AntennaOffset | null;
799
- }
800
- declare function buildPppAntenna(antex: AntexFile): PppAntennaModel;
801
-
802
870
  /**
803
871
  * Optional PPP range corrections: satellite & receiver antenna phase-centre
804
872
  * offsets, phase wind-up, and solid-earth tides. These take a converged
@@ -1567,4 +1635,4 @@ declare function sbasProtectionLevels(sats: readonly {
1567
1635
  */
1568
1636
  declare function solveSpp(pseudoranges: Map<string, number>, ephemerides: Map<string, Ephemeris>, timeMs: number, opts?: SppOptions): SppSolution | null;
1569
1637
 
1570
- export { type AntennaOffset, type AppliedOrbitClock, type ArFixedSat, type ArOptions, type ArResult, type ArSat, type CorrectionResult, type Degradation, type DgnssOptions, type DgnssSolution, type EphemerisSource, type FixedPositionResult, IONO_L1_M_PER_TECU, type KlobucharCoeffs, type LambdaResult, type NetworkFcbResult, type NetworkFcbSummary, type NlArc, type NlFcbResult, type OrbitClockCorrection, type PppAntennaModel, type PppArc, type PppCorrectionConfig, type PppCorrections, PppEngine, type PppEphemerisSource, type PppEpoch, type PppEpochContext, type PppEpochResult, type PppFixState, type PppOptions, type PppSatObs, type PppSolution, type RawObservation, type RtkEpochMeasurements, RtkFloatEngine, type RtkFloatOptions, type RtkFloatSolution, type RtkMeasurement, type RtkObsEpoch, type RtkObsInput, type RtkPostProcessOptions, type RtkPostProcessResult, type RtkTrackPoint, type SatGeom, type SatSample, type SbasCorrectionSource, type SbasIgp, type SbasIonoDelay, SbasProcessor, type SbasSatCorrection, Sp3EphemerisSource, type SppOptions, type SppSolution, type TropoMapping, type WlArc, type WlFcbOptions, type WlFcbResult, type WlObs, applyOrbitClock, buildPppAntenna, createPppCorrections, estimateNarrowlaneFcb, estimateNetworkFcbs, estimateWidelaneFcb, extractWidelaneArcs, fixPppPosition, gimSlantIonoDelayL1, gimVerticalTec, gmst, hasToOrbitClock, ionoFree, klobucharDelay, lambdaReduction, lambdaSearch, moonEcef, niellMapping, nlWavelength, postProcessRtk, resolvePppAmbiguities, satClockCorrection, sbasIonoDeg, sbasLongTermDeg, sbasProtectionLevels, solidEarthTide, solveDgnss, solvePpp, solveSpp, sunEcef, toRtkEpoch, wlWavelength };
1638
+ export { type AntennaOffset, type AppliedOrbitClock, type ArFixedSat, type ArOptions, type ArResult, type ArSat, type CorrectionResult, type Degradation, type DgnssOptions, type DgnssSolution, type EphemerisSource, type FixedPositionResult, IONO_L1_M_PER_TECU, type KlobucharCoeffs, type LambdaResult, type NetworkFcbResult, type NetworkFcbSummary, type NlArc, type NlFcbResult, type OrbitClockCorrection, type PppAntennaModel, type PppArc, type PppCorrectionConfig, type PppCorrections, PppEngine, type PppEphemerisSource, type PppEpoch, type PppEpochContext, type PppEpochResult, type PppFixState, type PppOptions, type PppSatObs, type PppSolution, type RawObservation, type RtkAntennaConfig, type RtkAntennaModel, type RtkAntennaOffset, type RtkEpochMeasurements, RtkFloatEngine, type RtkFloatOptions, type RtkFloatSolution, type RtkMeasurement, type RtkObsEpoch, type RtkObsInput, type RtkPostProcessOptions, type RtkPostProcessResult, type RtkReceiverAntenna, type RtkTrackPoint, type SatGeom, type SatSample, type SbasCorrectionSource, type SbasIgp, type SbasIonoDelay, SbasProcessor, type SbasSatCorrection, Sp3EphemerisSource, type SppOptions, type SppSolution, type TropoMapping, type WlArc, type WlFcbOptions, type WlFcbResult, type WlObs, antexFreqOfGroup, applyOrbitClock, buildPppAntenna, buildRtkAntenna, createPppCorrections, estimateNarrowlaneFcb, estimateNetworkFcbs, estimateWidelaneFcb, extractWidelaneArcs, fixPppPosition, gimSlantIonoDelayL1, gimVerticalTec, gmst, hasToOrbitClock, ionoFree, klobucharDelay, lambdaReduction, lambdaSearch, moonEcef, niellMapping, nlWavelength, postProcessRtk, rcvAntennaRangeM, resolvePppAmbiguities, satClockCorrection, sbasIonoDeg, sbasLongTermDeg, sbasProtectionLevels, solidEarthTide, solveDgnss, solvePpp, solveSpp, sunEcef, toRtkEpoch, wlWavelength };
@@ -4,8 +4,10 @@ import {
4
4
  RtkFloatEngine,
5
5
  SbasProcessor,
6
6
  Sp3EphemerisSource,
7
+ antexFreqOfGroup,
7
8
  applyOrbitClock,
8
9
  buildPppAntenna,
10
+ buildRtkAntenna,
9
11
  createPppCorrections,
10
12
  estimateNarrowlaneFcb,
11
13
  estimateNetworkFcbs,
@@ -24,6 +26,7 @@ import {
24
26
  niellMapping,
25
27
  nlWavelength,
26
28
  postProcessRtk,
29
+ rcvAntennaRangeM,
27
30
  resolvePppAmbiguities,
28
31
  satClockCorrection,
29
32
  sbasIonoDeg,
@@ -36,7 +39,7 @@ import {
36
39
  sunEcef,
37
40
  toRtkEpoch,
38
41
  wlWavelength
39
- } from "./chunk-DWUQRJ37.js";
42
+ } from "./chunk-TYJNN77C.js";
40
43
  import "./chunk-WQX354KD.js";
41
44
  import "./chunk-JYWYQ7DW.js";
42
45
  import "./chunk-HVXYFUCB.js";
@@ -54,8 +57,10 @@ export {
54
57
  RtkFloatEngine,
55
58
  SbasProcessor,
56
59
  Sp3EphemerisSource,
60
+ antexFreqOfGroup,
57
61
  applyOrbitClock,
58
62
  buildPppAntenna,
63
+ buildRtkAntenna,
59
64
  createPppCorrections,
60
65
  estimateNarrowlaneFcb,
61
66
  estimateNetworkFcbs,
@@ -74,6 +79,7 @@ export {
74
79
  niellMapping,
75
80
  nlWavelength,
76
81
  postProcessRtk,
82
+ rcvAntennaRangeM,
77
83
  resolvePppAmbiguities,
78
84
  satClockCorrection,
79
85
  sbasIonoDeg,
package/dist/rtcm3.cjs CHANGED
@@ -1988,7 +1988,8 @@ function updateStreamStats(stats, frames, rawBytes) {
1988
1988
  stats.satellites.set(obs.prn, {
1989
1989
  prn: obs.prn,
1990
1990
  system: obs.system,
1991
- cn0: bestCn0,
1991
+ cn0: bestCn0 > 0 ? bestCn0 : null,
1992
+ // null = no C/N0 reported
1992
1993
  lastSeen: now,
1993
1994
  signals
1994
1995
  });
package/dist/rtcm3.d.cts CHANGED
@@ -280,7 +280,10 @@ interface SignalCn0 {
280
280
  interface SatCn0 {
281
281
  prn: string;
282
282
  system: string;
283
- cn0: number;
283
+ /** Best C/N0 across all codes (dB-Hz), or null when the source reports no
284
+ * C/N0 at all (legacy RTCM3 obs 1001-1012, RTCM 2.x) — the satellite is
285
+ * still tracked, its signal strength is simply unknown. */
286
+ cn0: number | null;
284
287
  lastSeen: number;
285
288
  /** Per-signal C/N0 values */
286
289
  signals: SignalCn0[];
package/dist/rtcm3.d.ts CHANGED
@@ -280,7 +280,10 @@ interface SignalCn0 {
280
280
  interface SatCn0 {
281
281
  prn: string;
282
282
  system: string;
283
- cn0: number;
283
+ /** Best C/N0 across all codes (dB-Hz), or null when the source reports no
284
+ * C/N0 at all (legacy RTCM3 obs 1001-1012, RTCM 2.x) — the satellite is
285
+ * still tracked, its signal strength is simply unknown. */
286
+ cn0: number | null;
284
287
  lastSeen: number;
285
288
  /** Per-signal C/N0 values */
286
289
  signals: SignalCn0[];
package/dist/rtcm3.js CHANGED
@@ -21,7 +21,7 @@ import {
21
21
  setRtcm3DebugHandler,
22
22
  updateStationMeta,
23
23
  updateStreamStats
24
- } from "./chunk-WVTDVPKA.js";
24
+ } from "./chunk-XPQ4BU6W.js";
25
25
  import "./chunk-HVXYFUCB.js";
26
26
  import "./chunk-LEEU5OIO.js";
27
27
  import "./chunk-FIEWO4J4.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gnss-js",
3
- "version": "2.1.0",
3
+ "version": "2.3.0",
4
4
  "description": "Comprehensive GNSS library for JavaScript — time scales, coordinates, RINEX parsing, RTCM3 decoding, orbit computation, and signal analysis",
5
5
  "type": "module",
6
6
  "sideEffects": false,