gnss-js 1.3.1 → 1.3.2

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.
package/dist/analysis.cjs CHANGED
@@ -215,6 +215,14 @@ var ARC_GAP_FACTOR = 5;
215
215
 
216
216
  // src/analysis/multipath.ts
217
217
  var MIN_ARC_LENGTH = 10;
218
+ var MP_JUMP_M = 1.25;
219
+ var MP_JUMP_WINDOW = 5;
220
+ var MP_EDIT_SIGMA = 3;
221
+ function median(values) {
222
+ const s = [...values].sort((a, b) => a - b);
223
+ const m = s.length >> 1;
224
+ return s.length % 2 ? s[m] : (s[m - 1] + s[m]) / 2;
225
+ }
218
226
  var MultipathAccumulator = class {
219
227
  state = /* @__PURE__ */ new Map();
220
228
  results = [];
@@ -271,6 +279,11 @@ var MultipathAccumulator = class {
271
279
  const gap = bandState.lastTime > 0 ? (time - bandState.lastTime) / 1e3 : 0;
272
280
  if (bandState.lastTime > 0 && gap > this.interval * ARC_GAP_FACTOR) {
273
281
  this.closeArc(prn, band, refBand, bandState);
282
+ } else if (bandState.arc.rawMp.length > 0) {
283
+ const recent = bandState.arc.rawMp.slice(-MP_JUMP_WINDOW);
284
+ if (Math.abs(mp - median(recent)) > MP_JUMP_M) {
285
+ this.closeArc(prn, band, refBand, bandState);
286
+ }
274
287
  }
275
288
  bandState.arc.times.push(time);
276
289
  bandState.arc.rawMp.push(mp);
@@ -290,13 +303,25 @@ var MultipathAccumulator = class {
290
303
  closeArc(prn, band, refBand, state) {
291
304
  const arc = state.arc;
292
305
  if (arc.times.length >= MIN_ARC_LENGTH) {
293
- const mean = arc.rawMp.reduce((a, b) => a + b, 0) / arc.rawMp.length;
306
+ let keep = arc.times.map((_, i) => i);
307
+ let mean = 0;
308
+ for (let pass = 0; pass < 3; pass++) {
309
+ mean = keep.reduce((s, i) => s + arc.rawMp[i], 0) / keep.length;
310
+ const sigma = Math.sqrt(
311
+ keep.reduce((s, i) => s + (arc.rawMp[i] - mean) ** 2, 0) / keep.length
312
+ );
313
+ const kept = keep.filter(
314
+ (i) => Math.abs(arc.rawMp[i] - mean) <= MP_EDIT_SIGMA * sigma
315
+ );
316
+ if (kept.length === keep.length || kept.length < MIN_ARC_LENGTH) break;
317
+ keep = kept;
318
+ }
294
319
  const sys = prn[0];
295
320
  const bLabel = BAND_LABELS[sys]?.[band] ?? band;
296
321
  const rLabel = BAND_LABELS[sys]?.[refBand] ?? refBand;
297
322
  const label = `${prn} MP ${bLabel}-${rLabel}`;
298
- const points = arc.times.map((t, i) => ({
299
- time: t,
323
+ const points = keep.map((i) => ({
324
+ time: arc.times[i],
300
325
  mp: arc.rawMp[i] - mean
301
326
  }));
302
327
  const rms = Math.sqrt(
@@ -350,7 +375,7 @@ var MultipathAccumulator = class {
350
375
  refBand,
351
376
  rms,
352
377
  count,
353
- satellites: seriesList.length
378
+ satellites: new Set(seriesList.map((s) => s.prn)).size
354
379
  });
355
380
  }
356
381
  const sysOrder = "GRECIJS";
@@ -1,5 +1,5 @@
1
1
  import { R as RinexHeader } from './parser-JPjjFgeP.cjs';
2
- import { O as OnSlipDetected } from './gnss-BT6ulR17.cjs';
2
+ import { i as OnSlipDetected } from './gnss-BtXrG3zH.cjs';
3
3
 
4
4
  /**
5
5
  * Multipath analysis from RINEX dual-frequency observations.
@@ -1,5 +1,5 @@
1
1
  import { R as RinexHeader } from './parser-JPjjFgeP.js';
2
- import { O as OnSlipDetected } from './gnss-C-tgoYNa.js';
2
+ import { i as OnSlipDetected } from './gnss-DhnEr0Dy.js';
3
3
 
4
4
  /**
5
5
  * Multipath analysis from RINEX dual-frequency observations.
package/dist/analysis.js CHANGED
@@ -3,9 +3,9 @@ import {
3
3
  CycleSlipAccumulator,
4
4
  MultipathAccumulator,
5
5
  analyzeQuality
6
- } from "./chunk-G3N4S3DM.js";
7
- import "./chunk-OZCYOM5D.js";
8
- import "./chunk-W5WKEV7U.js";
6
+ } from "./chunk-AW6BORTZ.js";
7
+ import "./chunk-3U5AX7PY.js";
8
+ import "./chunk-FIEWO4J4.js";
9
9
  export {
10
10
  CompletenessAccumulator,
11
11
  CycleSlipAccumulator,
@@ -4,7 +4,7 @@ import {
4
4
  GLO_F1_STEP,
5
5
  GLO_F2_BASE,
6
6
  GLO_F2_STEP
7
- } from "./chunk-W5WKEV7U.js";
7
+ } from "./chunk-FIEWO4J4.js";
8
8
 
9
9
  // src/signals/definitions.ts
10
10
  var MHz = 1e6;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  SYSTEM_NAMES
3
- } from "./chunk-W5WKEV7U.js";
3
+ } from "./chunk-FIEWO4J4.js";
4
4
 
5
5
  // src/rinex/crx.ts
6
6
  function crxRepair(old, diff) {
@@ -10,7 +10,7 @@ import {
10
10
  GLO_F1_STEP,
11
11
  GLO_F2_BASE,
12
12
  GLO_F2_STEP
13
- } from "./chunk-W5WKEV7U.js";
13
+ } from "./chunk-FIEWO4J4.js";
14
14
 
15
15
  // src/rtcm3/decoder.ts
16
16
  var debugHandler = null;
@@ -1258,6 +1258,7 @@ var RTCM3_MESSAGE_NAMES = {
1258
1258
  1031: "GLONASS Network RTK Residual",
1259
1259
  1032: "Physical Reference Station",
1260
1260
  1033: "Receiver+Antenna Descriptor",
1261
+ 1041: "NavIC Ephemeris",
1261
1262
  1042: "BeiDou Ephemeris",
1262
1263
  1043: "SBAS Ephemeris",
1263
1264
  1044: "QZSS Ephemeris",
@@ -1322,6 +1323,8 @@ var RTCM3_MESSAGE_NAMES = {
1322
1323
  1064: "GLONASS SSR Clock",
1323
1324
  1065: "GLONASS SSR Code Bias",
1324
1325
  1066: "GLONASS SSR Orbit+Clock",
1326
+ // Biases
1327
+ 1230: "GLONASS Code-Phase Biases",
1325
1328
  // IGS SSR
1326
1329
  4076: "IGS SSR"
1327
1330
  };
@@ -1330,6 +1333,7 @@ function rtcm3Constellation(msgType) {
1330
1333
  if (msgType >= 1009 && msgType <= 1012) return "GLONASS";
1331
1334
  if (msgType === 1019) return "GPS";
1332
1335
  if (msgType === 1020) return "GLONASS";
1336
+ if (msgType === 1041) return "NavIC";
1333
1337
  if (msgType === 1042) return "BeiDou";
1334
1338
  if (msgType === 1043) return "SBAS";
1335
1339
  if (msgType === 1044) return "QZSS";
@@ -1341,6 +1345,7 @@ function rtcm3Constellation(msgType) {
1341
1345
  if (msgType >= 1111 && msgType <= 1117) return "QZSS";
1342
1346
  if (msgType >= 1121 && msgType <= 1127) return "BeiDou";
1343
1347
  if (msgType >= 1131 && msgType <= 1137) return "NavIC";
1348
+ if (msgType === 1230) return "GLONASS";
1344
1349
  return null;
1345
1350
  }
1346
1351
  function createStreamStats() {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  parseRinexStream
3
- } from "./chunk-OZCYOM5D.js";
3
+ } from "./chunk-3U5AX7PY.js";
4
4
  import {
5
5
  ARC_GAP_FACTOR,
6
6
  BAND_LABELS,
@@ -11,10 +11,18 @@ import {
11
11
  buildGloChannelMap,
12
12
  buildObsIndices,
13
13
  getFreq
14
- } from "./chunk-W5WKEV7U.js";
14
+ } from "./chunk-FIEWO4J4.js";
15
15
 
16
16
  // src/analysis/multipath.ts
17
17
  var MIN_ARC_LENGTH = 10;
18
+ var MP_JUMP_M = 1.25;
19
+ var MP_JUMP_WINDOW = 5;
20
+ var MP_EDIT_SIGMA = 3;
21
+ function median(values) {
22
+ const s = [...values].sort((a, b) => a - b);
23
+ const m = s.length >> 1;
24
+ return s.length % 2 ? s[m] : (s[m - 1] + s[m]) / 2;
25
+ }
18
26
  var MultipathAccumulator = class {
19
27
  state = /* @__PURE__ */ new Map();
20
28
  results = [];
@@ -71,6 +79,11 @@ var MultipathAccumulator = class {
71
79
  const gap = bandState.lastTime > 0 ? (time - bandState.lastTime) / 1e3 : 0;
72
80
  if (bandState.lastTime > 0 && gap > this.interval * ARC_GAP_FACTOR) {
73
81
  this.closeArc(prn, band, refBand, bandState);
82
+ } else if (bandState.arc.rawMp.length > 0) {
83
+ const recent = bandState.arc.rawMp.slice(-MP_JUMP_WINDOW);
84
+ if (Math.abs(mp - median(recent)) > MP_JUMP_M) {
85
+ this.closeArc(prn, band, refBand, bandState);
86
+ }
74
87
  }
75
88
  bandState.arc.times.push(time);
76
89
  bandState.arc.rawMp.push(mp);
@@ -90,13 +103,25 @@ var MultipathAccumulator = class {
90
103
  closeArc(prn, band, refBand, state) {
91
104
  const arc = state.arc;
92
105
  if (arc.times.length >= MIN_ARC_LENGTH) {
93
- const mean = arc.rawMp.reduce((a, b) => a + b, 0) / arc.rawMp.length;
106
+ let keep = arc.times.map((_, i) => i);
107
+ let mean = 0;
108
+ for (let pass = 0; pass < 3; pass++) {
109
+ mean = keep.reduce((s, i) => s + arc.rawMp[i], 0) / keep.length;
110
+ const sigma = Math.sqrt(
111
+ keep.reduce((s, i) => s + (arc.rawMp[i] - mean) ** 2, 0) / keep.length
112
+ );
113
+ const kept = keep.filter(
114
+ (i) => Math.abs(arc.rawMp[i] - mean) <= MP_EDIT_SIGMA * sigma
115
+ );
116
+ if (kept.length === keep.length || kept.length < MIN_ARC_LENGTH) break;
117
+ keep = kept;
118
+ }
94
119
  const sys = prn[0];
95
120
  const bLabel = BAND_LABELS[sys]?.[band] ?? band;
96
121
  const rLabel = BAND_LABELS[sys]?.[refBand] ?? refBand;
97
122
  const label = `${prn} MP ${bLabel}-${rLabel}`;
98
- const points = arc.times.map((t, i) => ({
99
- time: t,
123
+ const points = keep.map((i) => ({
124
+ time: arc.times[i],
100
125
  mp: arc.rawMp[i] - mean
101
126
  }));
102
127
  const rms = Math.sqrt(
@@ -150,7 +175,7 @@ var MultipathAccumulator = class {
150
175
  refBand,
151
176
  rms,
152
177
  count,
153
- satellites: seriesList.length
178
+ satellites: new Set(seriesList.map((s) => s.prn)).size
154
179
  });
155
180
  }
156
181
  const sysOrder = "GRECIJS";
@@ -18,6 +18,7 @@ var SYS_SHORT = {
18
18
  S: "SBS"
19
19
  };
20
20
  var C_LIGHT = 299792458;
21
+ var OMEGA_E = 72921151467e-15;
21
22
  var FREQ = {
22
23
  G: { "1": 157542e4, "2": 12276e5, "5": 117645e4 },
23
24
  // R bands 4/6 are the CDMA L1OC/L2OC center frequencies
@@ -249,6 +250,7 @@ export {
249
250
  SYSTEM_NAMES,
250
251
  SYS_SHORT,
251
252
  C_LIGHT,
253
+ OMEGA_E,
252
254
  FREQ,
253
255
  BAND_LABELS,
254
256
  DUAL_FREQ_PAIRS,
@@ -8,13 +8,15 @@ import {
8
8
  START_BDS_TIME,
9
9
  START_GPS_TIME
10
10
  } from "./chunk-LEEU5OIO.js";
11
+ import {
12
+ OMEGA_E
13
+ } from "./chunk-FIEWO4J4.js";
11
14
 
12
15
  // src/orbit/index.ts
13
16
  var GM_GPS = 3986005e8;
14
17
  var GM_GAL = 3986004418e5;
15
18
  var GM_BDS = 3986004418e5;
16
19
  var GM_GLO = 39860044e7;
17
- var OMEGA_E = 72921151467e-15;
18
20
  var BDS_GEO_MAX_INCLINATION_RAD = 0.1;
19
21
  var BDS_GEO_MIN_SEMIMAJOR_AXIS_M = 4e7;
20
22
  var AE_GLO = 6378136;
@@ -2,10 +2,11 @@ import {
2
2
  computeDop,
3
3
  computeSatPosition,
4
4
  ecefToAzEl
5
- } from "./chunk-CC2R4JGS.js";
5
+ } from "./chunk-PQYBTE42.js";
6
6
  import {
7
- C_LIGHT
8
- } from "./chunk-W5WKEV7U.js";
7
+ C_LIGHT,
8
+ OMEGA_E
9
+ } from "./chunk-FIEWO4J4.js";
9
10
 
10
11
  // src/positioning/index.ts
11
12
  var GM_GPS = 3986005e8;
@@ -38,7 +39,6 @@ function tropoDelay(elevationRad) {
38
39
  return 2.47 / (sinEl + 0.0121);
39
40
  }
40
41
  function sagnac(pos, travelTimeS) {
41
- const OMEGA_E = 72921151467e-15;
42
42
  const theta = OMEGA_E * travelTimeS;
43
43
  const c = Math.cos(theta);
44
44
  const s = Math.sin(theta);
@@ -42,6 +42,7 @@ __export(constants_exports, {
42
42
  MILLISECONDS_IN_SECOND: () => MILLISECONDS_IN_SECOND,
43
43
  MILLISECONDS_IN_WEEK: () => MILLISECONDS_IN_WEEK,
44
44
  MILLISECONDS_TT_TAI: () => MILLISECONDS_TT_TAI,
45
+ OMEGA_E: () => OMEGA_E,
45
46
  RINEX_CODES: () => RINEX_CODES,
46
47
  SECONDS_IN_DAY: () => SECONDS_IN_DAY,
47
48
  SECONDS_IN_HOUR: () => SECONDS_IN_HOUR,
@@ -146,6 +147,7 @@ var SYS_SHORT = {
146
147
  S: "SBS"
147
148
  };
148
149
  var C_LIGHT = 299792458;
150
+ var OMEGA_E = 72921151467e-15;
149
151
  var FREQ = {
150
152
  G: { "1": 157542e4, "2": 12276e5, "5": 117645e4 },
151
153
  // R bands 4/6 are the CDMA L1OC/L2OC center frequencies
@@ -396,6 +398,7 @@ function formatUTCTime(d) {
396
398
  MILLISECONDS_IN_SECOND,
397
399
  MILLISECONDS_IN_WEEK,
398
400
  MILLISECONDS_TT_TAI,
401
+ OMEGA_E,
399
402
  RINEX_CODES,
400
403
  SECONDS_IN_DAY,
401
404
  SECONDS_IN_HOUR,
@@ -1,5 +1,5 @@
1
1
  export { D as DAYS_MJD2000_MJD, a as DAYS_MJD_JULIAN, M as MILLISECONDS_GPS_TAI, b as MILLISECONDS_IN_DAY, c as MILLISECONDS_IN_HOUR, d as MILLISECONDS_IN_MINUTE, e as MILLISECONDS_IN_SECOND, f as MILLISECONDS_IN_WEEK, g as MILLISECONDS_TT_TAI, R as RINEX_CODES, S as SECONDS_IN_DAY, h as SECONDS_IN_HOUR, i as SECONDS_IN_MINUTE, j as SECONDS_IN_WEEK, k as START_BDS_TIME, l as START_GAL_TIME, m as START_GLO_LEAP, n as START_GPS_TIME, o as START_JULIAN_TAI, p as START_MJD_UNIX_SECONDS, q as START_NTP_TIME, r as START_TAI_TIME, s as START_UNIX_TIME } from './time-DnI1VpE8.cjs';
2
- export { A as ARC_GAP_FACTOR, B as BAND_LABELS, a as BDS_SATELLITES, b as BdsSatellite, C as C_LIGHT, D as DEFAULT_ELEV_MASK_DEG, c as DUAL_FREQ_PAIRS, F as FREQ, G as GLO_CHANNEL_FALLBACK, d as GLO_F1_BASE, e as GLO_F1_STEP, f as GLO_F2_BASE, g as GLO_F2_STEP, h as GLO_F3, O as OnSlipDetected, S as SYSTEM_NAMES, i as SYS_SHORT, j as buildGloChannelMap, k as buildObsIndices, l as formatUTCTime, m as getFreq, n as gloFreq } from './gnss-BT6ulR17.cjs';
2
+ export { A as ARC_GAP_FACTOR, B as BAND_LABELS, a as BDS_SATELLITES, b as BdsSatellite, C as C_LIGHT, D as DEFAULT_ELEV_MASK_DEG, c as DUAL_FREQ_PAIRS, F as FREQ, G as GLO_CHANNEL_FALLBACK, d as GLO_F1_BASE, e as GLO_F1_STEP, f as GLO_F2_BASE, g as GLO_F2_STEP, h as GLO_F3, O as OMEGA_E, i as OnSlipDetected, S as SYSTEM_NAMES, j as SYS_SHORT, k as buildGloChannelMap, l as buildObsIndices, m as formatUTCTime, n as getFreq, o as gloFreq } from './gnss-BtXrG3zH.cjs';
3
3
  import './parser-JPjjFgeP.cjs';
4
4
 
5
5
  /** WGS84 semi-major axis in meters. */
@@ -1,5 +1,5 @@
1
1
  export { D as DAYS_MJD2000_MJD, a as DAYS_MJD_JULIAN, M as MILLISECONDS_GPS_TAI, b as MILLISECONDS_IN_DAY, c as MILLISECONDS_IN_HOUR, d as MILLISECONDS_IN_MINUTE, e as MILLISECONDS_IN_SECOND, f as MILLISECONDS_IN_WEEK, g as MILLISECONDS_TT_TAI, R as RINEX_CODES, S as SECONDS_IN_DAY, h as SECONDS_IN_HOUR, i as SECONDS_IN_MINUTE, j as SECONDS_IN_WEEK, k as START_BDS_TIME, l as START_GAL_TIME, m as START_GLO_LEAP, n as START_GPS_TIME, o as START_JULIAN_TAI, p as START_MJD_UNIX_SECONDS, q as START_NTP_TIME, r as START_TAI_TIME, s as START_UNIX_TIME } from './time-DnI1VpE8.js';
2
- export { A as ARC_GAP_FACTOR, B as BAND_LABELS, a as BDS_SATELLITES, b as BdsSatellite, C as C_LIGHT, D as DEFAULT_ELEV_MASK_DEG, c as DUAL_FREQ_PAIRS, F as FREQ, G as GLO_CHANNEL_FALLBACK, d as GLO_F1_BASE, e as GLO_F1_STEP, f as GLO_F2_BASE, g as GLO_F2_STEP, h as GLO_F3, O as OnSlipDetected, S as SYSTEM_NAMES, i as SYS_SHORT, j as buildGloChannelMap, k as buildObsIndices, l as formatUTCTime, m as getFreq, n as gloFreq } from './gnss-C-tgoYNa.js';
2
+ export { A as ARC_GAP_FACTOR, B as BAND_LABELS, a as BDS_SATELLITES, b as BdsSatellite, C as C_LIGHT, D as DEFAULT_ELEV_MASK_DEG, c as DUAL_FREQ_PAIRS, F as FREQ, G as GLO_CHANNEL_FALLBACK, d as GLO_F1_BASE, e as GLO_F1_STEP, f as GLO_F2_BASE, g as GLO_F2_STEP, h as GLO_F3, O as OMEGA_E, i as OnSlipDetected, S as SYSTEM_NAMES, j as SYS_SHORT, k as buildGloChannelMap, l as buildObsIndices, m as formatUTCTime, n as getFreq, o as gloFreq } from './gnss-DhnEr0Dy.js';
3
3
  import './parser-JPjjFgeP.js';
4
4
 
5
5
  /** WGS84 semi-major axis in meters. */
package/dist/constants.js CHANGED
@@ -44,6 +44,7 @@ import {
44
44
  GLO_F2_BASE,
45
45
  GLO_F2_STEP,
46
46
  GLO_F3,
47
+ OMEGA_E,
47
48
  SYSTEM_NAMES,
48
49
  SYS_SHORT,
49
50
  buildGloChannelMap,
@@ -51,7 +52,7 @@ import {
51
52
  formatUTCTime,
52
53
  getFreq,
53
54
  gloFreq
54
- } from "./chunk-W5WKEV7U.js";
55
+ } from "./chunk-FIEWO4J4.js";
55
56
  export {
56
57
  ARC_GAP_FACTOR,
57
58
  BAND_LABELS,
@@ -75,6 +76,7 @@ export {
75
76
  MILLISECONDS_IN_SECOND,
76
77
  MILLISECONDS_IN_WEEK,
77
78
  MILLISECONDS_TT_TAI,
79
+ OMEGA_E,
78
80
  RINEX_CODES,
79
81
  SECONDS_IN_DAY,
80
82
  SECONDS_IN_HOUR,
@@ -9,6 +9,8 @@ declare const SYSTEM_NAMES: Record<string, string>;
9
9
  declare const SYS_SHORT: Record<string, string>;
10
10
  /** Speed of light in m/s. */
11
11
  declare const C_LIGHT = 299792458;
12
+ /** Earth rotation rate in rad/s (WGS84/PZ-90 value). */
13
+ declare const OMEGA_E = 0.000072921151467;
12
14
  /** Carrier frequencies (Hz) per system letter, per RINEX band digit. GLONASS FDMA bands 1/2 use gloFreq(). */
13
15
  declare const FREQ: Record<string, Record<string, number>>;
14
16
  declare const BAND_LABELS: Record<string, Record<string, string>>;
@@ -53,4 +55,4 @@ declare const DEFAULT_ELEV_MASK_DEG = 5;
53
55
  /** Format a Date as HH:MM:SS UTC string. */
54
56
  declare function formatUTCTime(d: Date): string;
55
57
 
56
- export { ARC_GAP_FACTOR as A, BAND_LABELS as B, C_LIGHT as C, DEFAULT_ELEV_MASK_DEG as D, FREQ as F, GLO_CHANNEL_FALLBACK as G, type OnSlipDetected as O, SYSTEM_NAMES as S, BDS_SATELLITES as a, type BdsSatellite as b, DUAL_FREQ_PAIRS as c, GLO_F1_BASE as d, GLO_F1_STEP as e, GLO_F2_BASE as f, GLO_F2_STEP as g, GLO_F3 as h, SYS_SHORT as i, buildGloChannelMap as j, buildObsIndices as k, formatUTCTime as l, getFreq as m, gloFreq as n };
58
+ export { ARC_GAP_FACTOR as A, BAND_LABELS as B, C_LIGHT as C, DEFAULT_ELEV_MASK_DEG as D, FREQ as F, GLO_CHANNEL_FALLBACK as G, OMEGA_E as O, SYSTEM_NAMES as S, BDS_SATELLITES as a, type BdsSatellite as b, DUAL_FREQ_PAIRS as c, GLO_F1_BASE as d, GLO_F1_STEP as e, GLO_F2_BASE as f, GLO_F2_STEP as g, GLO_F3 as h, type OnSlipDetected as i, SYS_SHORT as j, buildGloChannelMap as k, buildObsIndices as l, formatUTCTime as m, getFreq as n, gloFreq as o };
@@ -9,6 +9,8 @@ declare const SYSTEM_NAMES: Record<string, string>;
9
9
  declare const SYS_SHORT: Record<string, string>;
10
10
  /** Speed of light in m/s. */
11
11
  declare const C_LIGHT = 299792458;
12
+ /** Earth rotation rate in rad/s (WGS84/PZ-90 value). */
13
+ declare const OMEGA_E = 0.000072921151467;
12
14
  /** Carrier frequencies (Hz) per system letter, per RINEX band digit. GLONASS FDMA bands 1/2 use gloFreq(). */
13
15
  declare const FREQ: Record<string, Record<string, number>>;
14
16
  declare const BAND_LABELS: Record<string, Record<string, string>>;
@@ -53,4 +55,4 @@ declare const DEFAULT_ELEV_MASK_DEG = 5;
53
55
  /** Format a Date as HH:MM:SS UTC string. */
54
56
  declare function formatUTCTime(d: Date): string;
55
57
 
56
- export { ARC_GAP_FACTOR as A, BAND_LABELS as B, C_LIGHT as C, DEFAULT_ELEV_MASK_DEG as D, FREQ as F, GLO_CHANNEL_FALLBACK as G, type OnSlipDetected as O, SYSTEM_NAMES as S, BDS_SATELLITES as a, type BdsSatellite as b, DUAL_FREQ_PAIRS as c, GLO_F1_BASE as d, GLO_F1_STEP as e, GLO_F2_BASE as f, GLO_F2_STEP as g, GLO_F3 as h, SYS_SHORT as i, buildGloChannelMap as j, buildObsIndices as k, formatUTCTime as l, getFreq as m, gloFreq as n };
58
+ export { ARC_GAP_FACTOR as A, BAND_LABELS as B, C_LIGHT as C, DEFAULT_ELEV_MASK_DEG as D, FREQ as F, GLO_CHANNEL_FALLBACK as G, OMEGA_E as O, SYSTEM_NAMES as S, BDS_SATELLITES as a, type BdsSatellite as b, DUAL_FREQ_PAIRS as c, GLO_F1_BASE as d, GLO_F1_STEP as e, GLO_F2_BASE as f, GLO_F2_STEP as g, GLO_F3 as h, type OnSlipDetected as i, SYS_SHORT as j, buildGloChannelMap as k, buildObsIndices as l, formatUTCTime as m, getFreq as n, gloFreq as o };
package/dist/index.cjs CHANGED
@@ -75,6 +75,7 @@ __export(src_exports, {
75
75
  MILLISECONDS_IN_WEEK: () => MILLISECONDS_IN_WEEK,
76
76
  MILLISECONDS_TT_TAI: () => MILLISECONDS_TT_TAI,
77
77
  MultipathAccumulator: () => MultipathAccumulator,
78
+ OMEGA_E: () => OMEGA_E,
78
79
  REFERENCE_FRAMES: () => REFERENCE_FRAMES,
79
80
  RINEX_CODES: () => RINEX_CODES,
80
81
  RTCM3_MESSAGE_NAMES: () => RTCM3_MESSAGE_NAMES,
@@ -308,6 +309,7 @@ var SYS_SHORT = {
308
309
  S: "SBS"
309
310
  };
310
311
  var C_LIGHT = 299792458;
312
+ var OMEGA_E = 72921151467e-15;
311
313
  var FREQ = {
312
314
  G: { "1": 157542e4, "2": 12276e5, "5": 117645e4 },
313
315
  // R bands 4/6 are the CDMA L1OC/L2OC center frequencies
@@ -3814,6 +3816,7 @@ var RTCM3_MESSAGE_NAMES = {
3814
3816
  1031: "GLONASS Network RTK Residual",
3815
3817
  1032: "Physical Reference Station",
3816
3818
  1033: "Receiver+Antenna Descriptor",
3819
+ 1041: "NavIC Ephemeris",
3817
3820
  1042: "BeiDou Ephemeris",
3818
3821
  1043: "SBAS Ephemeris",
3819
3822
  1044: "QZSS Ephemeris",
@@ -3878,6 +3881,8 @@ var RTCM3_MESSAGE_NAMES = {
3878
3881
  1064: "GLONASS SSR Clock",
3879
3882
  1065: "GLONASS SSR Code Bias",
3880
3883
  1066: "GLONASS SSR Orbit+Clock",
3884
+ // Biases
3885
+ 1230: "GLONASS Code-Phase Biases",
3881
3886
  // IGS SSR
3882
3887
  4076: "IGS SSR"
3883
3888
  };
@@ -3886,6 +3891,7 @@ function rtcm3Constellation(msgType) {
3886
3891
  if (msgType >= 1009 && msgType <= 1012) return "GLONASS";
3887
3892
  if (msgType === 1019) return "GPS";
3888
3893
  if (msgType === 1020) return "GLONASS";
3894
+ if (msgType === 1041) return "NavIC";
3889
3895
  if (msgType === 1042) return "BeiDou";
3890
3896
  if (msgType === 1043) return "SBAS";
3891
3897
  if (msgType === 1044) return "QZSS";
@@ -3897,6 +3903,7 @@ function rtcm3Constellation(msgType) {
3897
3903
  if (msgType >= 1111 && msgType <= 1117) return "QZSS";
3898
3904
  if (msgType >= 1121 && msgType <= 1127) return "BeiDou";
3899
3905
  if (msgType >= 1131 && msgType <= 1137) return "NavIC";
3906
+ if (msgType === 1230) return "GLONASS";
3900
3907
  return null;
3901
3908
  }
3902
3909
  function createStreamStats() {
@@ -3991,7 +3998,6 @@ var GM_GPS = 3986005e8;
3991
3998
  var GM_GAL = 3986004418e5;
3992
3999
  var GM_BDS = 3986004418e5;
3993
4000
  var GM_GLO = 39860044e7;
3994
- var OMEGA_E = 72921151467e-15;
3995
4001
  var BDS_GEO_MAX_INCLINATION_RAD = 0.1;
3996
4002
  var BDS_GEO_MIN_SEMIMAJOR_AXIS_M = 4e7;
3997
4003
  var AE_GLO = 6378136;
@@ -4726,8 +4732,7 @@ function tropoDelay(elevationRad) {
4726
4732
  return 2.47 / (sinEl + 0.0121);
4727
4733
  }
4728
4734
  function sagnac(pos, travelTimeS) {
4729
- const OMEGA_E2 = 72921151467e-15;
4730
- const theta = OMEGA_E2 * travelTimeS;
4735
+ const theta = OMEGA_E * travelTimeS;
4731
4736
  const c = Math.cos(theta);
4732
4737
  const s = Math.sin(theta);
4733
4738
  return [pos.x * c + pos.y * s, -pos.x * s + pos.y * c, pos.z];
@@ -5038,6 +5043,14 @@ async function connectToMountpoint(proxyUrl, info, signal) {
5038
5043
 
5039
5044
  // src/analysis/multipath.ts
5040
5045
  var MIN_ARC_LENGTH = 10;
5046
+ var MP_JUMP_M = 1.25;
5047
+ var MP_JUMP_WINDOW = 5;
5048
+ var MP_EDIT_SIGMA = 3;
5049
+ function median(values) {
5050
+ const s = [...values].sort((a, b) => a - b);
5051
+ const m = s.length >> 1;
5052
+ return s.length % 2 ? s[m] : (s[m - 1] + s[m]) / 2;
5053
+ }
5041
5054
  var MultipathAccumulator = class {
5042
5055
  state = /* @__PURE__ */ new Map();
5043
5056
  results = [];
@@ -5094,6 +5107,11 @@ var MultipathAccumulator = class {
5094
5107
  const gap = bandState.lastTime > 0 ? (time - bandState.lastTime) / 1e3 : 0;
5095
5108
  if (bandState.lastTime > 0 && gap > this.interval * ARC_GAP_FACTOR) {
5096
5109
  this.closeArc(prn, band, refBand, bandState);
5110
+ } else if (bandState.arc.rawMp.length > 0) {
5111
+ const recent = bandState.arc.rawMp.slice(-MP_JUMP_WINDOW);
5112
+ if (Math.abs(mp - median(recent)) > MP_JUMP_M) {
5113
+ this.closeArc(prn, band, refBand, bandState);
5114
+ }
5097
5115
  }
5098
5116
  bandState.arc.times.push(time);
5099
5117
  bandState.arc.rawMp.push(mp);
@@ -5113,13 +5131,25 @@ var MultipathAccumulator = class {
5113
5131
  closeArc(prn, band, refBand, state) {
5114
5132
  const arc = state.arc;
5115
5133
  if (arc.times.length >= MIN_ARC_LENGTH) {
5116
- const mean = arc.rawMp.reduce((a, b) => a + b, 0) / arc.rawMp.length;
5134
+ let keep = arc.times.map((_, i) => i);
5135
+ let mean = 0;
5136
+ for (let pass = 0; pass < 3; pass++) {
5137
+ mean = keep.reduce((s, i) => s + arc.rawMp[i], 0) / keep.length;
5138
+ const sigma = Math.sqrt(
5139
+ keep.reduce((s, i) => s + (arc.rawMp[i] - mean) ** 2, 0) / keep.length
5140
+ );
5141
+ const kept = keep.filter(
5142
+ (i) => Math.abs(arc.rawMp[i] - mean) <= MP_EDIT_SIGMA * sigma
5143
+ );
5144
+ if (kept.length === keep.length || kept.length < MIN_ARC_LENGTH) break;
5145
+ keep = kept;
5146
+ }
5117
5147
  const sys = prn[0];
5118
5148
  const bLabel = BAND_LABELS[sys]?.[band] ?? band;
5119
5149
  const rLabel = BAND_LABELS[sys]?.[refBand] ?? refBand;
5120
5150
  const label2 = `${prn} MP ${bLabel}-${rLabel}`;
5121
- const points = arc.times.map((t, i) => ({
5122
- time: t,
5151
+ const points = keep.map((i) => ({
5152
+ time: arc.times[i],
5123
5153
  mp: arc.rawMp[i] - mean
5124
5154
  }));
5125
5155
  const rms = Math.sqrt(
@@ -5173,7 +5203,7 @@ var MultipathAccumulator = class {
5173
5203
  refBand,
5174
5204
  rms,
5175
5205
  count,
5176
- satellites: seriesList.length
5206
+ satellites: new Set(seriesList.map((s) => s.prn)).size
5177
5207
  });
5178
5208
  }
5179
5209
  const sysOrder = "GRECIJS";
@@ -6763,6 +6793,7 @@ function computePsdDb(centerMHz, halfSpanChips, numPoints, psdFn, f0 = 1023e3, f
6763
6793
  MILLISECONDS_IN_WEEK,
6764
6794
  MILLISECONDS_TT_TAI,
6765
6795
  MultipathAccumulator,
6796
+ OMEGA_E,
6766
6797
  REFERENCE_FRAMES,
6767
6798
  RINEX_CODES,
6768
6799
  RTCM3_MESSAGE_NAMES,
package/dist/index.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { D as DAYS_MJD2000_MJD, a as DAYS_MJD_JULIAN, H as HourCode, M as MILLISECONDS_GPS_TAI, b as MILLISECONDS_IN_DAY, c as MILLISECONDS_IN_HOUR, d as MILLISECONDS_IN_MINUTE, e as MILLISECONDS_IN_SECOND, f as MILLISECONDS_IN_WEEK, g as MILLISECONDS_TT_TAI, R as RINEX_CODES, S as SECONDS_IN_DAY, h as SECONDS_IN_HOUR, i as SECONDS_IN_MINUTE, j as SECONDS_IN_WEEK, k as START_BDS_TIME, l as START_GAL_TIME, m as START_GLO_LEAP, n as START_GPS_TIME, o as START_JULIAN_TAI, p as START_MJD_UNIX_SECONDS, q as START_NTP_TIME, r as START_TAI_TIME, s as START_UNIX_TIME, T as TimeDifference } from './time-DnI1VpE8.cjs';
2
2
  export { WGS84_ECCENTRICITY_SQUARED, WGS84_FLATTENING, WGS84_SEMI_MAJOR_AXIS, WGS84_SEMI_MINOR_AXIS } from './constants.cjs';
3
- export { A as ARC_GAP_FACTOR, B as BAND_LABELS, a as BDS_SATELLITES, b as BdsSatellite, C as C_LIGHT, D as DEFAULT_ELEV_MASK_DEG, c as DUAL_FREQ_PAIRS, F as FREQ, G as GLO_CHANNEL_FALLBACK, d as GLO_F1_BASE, e as GLO_F1_STEP, f as GLO_F2_BASE, g as GLO_F2_STEP, h as GLO_F3, O as OnSlipDetected, S as SYSTEM_NAMES, i as SYS_SHORT, j as buildGloChannelMap, k as buildObsIndices, l as formatUTCTime, m as getFreq, n as gloFreq } from './gnss-BT6ulR17.cjs';
3
+ export { A as ARC_GAP_FACTOR, B as BAND_LABELS, a as BDS_SATELLITES, b as BdsSatellite, C as C_LIGHT, D as DEFAULT_ELEV_MASK_DEG, c as DUAL_FREQ_PAIRS, F as FREQ, G as GLO_CHANNEL_FALLBACK, d as GLO_F1_BASE, e as GLO_F1_STEP, f as GLO_F2_BASE, g as GLO_F2_STEP, h as GLO_F3, O as OMEGA_E, i as OnSlipDetected, S as SYSTEM_NAMES, j as SYS_SHORT, k as buildGloChannelMap, l as buildObsIndices, m as formatUTCTime, n as getFreq, o as gloFreq } from './gnss-BtXrG3zH.cjs';
4
4
  export { Scale, getBdsTime, getDateFromBdsTime, getDateFromDayOfWeek, getDateFromDayOfYear, getDateFromGalTime, getDateFromGloN, getDateFromGpsData, getDateFromGpsTime, getDateFromHourCode, getDateFromJulianDate, getDateFromMJD, getDateFromMJD2000, getDateFromRINEX, getDateFromTai, getDateFromTimeOfDay, getDateFromTt, getDateFromUnixTime, getDateFromUtc, getDayOfWeek, getDayOfYear, getGalTime, getGloN4, getGloNA, getGpsLeap, getGpsTime, getHourCode, getHoursFromTimeDifference, getJulianDate, getLeap, getMJD, getMJD2000, getMinutesFromTimeDifference, getNtpTime, getRINEX, getSecondsFromTimeDifference, getTaiDate, getTimeDifference, getTimeDifferenceFromDays, getTimeDifferenceFromHours, getTimeDifferenceFromMinutes, getTimeDifferenceFromObject, getTimeDifferenceFromSeconds, getTimeOfDay, getTimeOfWeek, getTotalDaysFromTimeDifference, getTtDate, getUnixTime, getUtcDate, getWeekNumber, getWeekOfYear } from './time.cjs';
5
5
  export { deg2dms, deg2rad, euclidean3D, geodeticToGeohash, geodeticToMaidenhead, geodeticToUtm, greatCircleMidpoint, horizonDistance, rad2deg, rhumbLine, vincenty } from './coordinates.cjs';
6
6
  export { c as clampUnit, e as ecefToGeodetic, g as geodeticToEcef, a as getAer, b as getEnuDifference } from './ecef-CF0uAysr.cjs';
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { D as DAYS_MJD2000_MJD, a as DAYS_MJD_JULIAN, H as HourCode, M as MILLISECONDS_GPS_TAI, b as MILLISECONDS_IN_DAY, c as MILLISECONDS_IN_HOUR, d as MILLISECONDS_IN_MINUTE, e as MILLISECONDS_IN_SECOND, f as MILLISECONDS_IN_WEEK, g as MILLISECONDS_TT_TAI, R as RINEX_CODES, S as SECONDS_IN_DAY, h as SECONDS_IN_HOUR, i as SECONDS_IN_MINUTE, j as SECONDS_IN_WEEK, k as START_BDS_TIME, l as START_GAL_TIME, m as START_GLO_LEAP, n as START_GPS_TIME, o as START_JULIAN_TAI, p as START_MJD_UNIX_SECONDS, q as START_NTP_TIME, r as START_TAI_TIME, s as START_UNIX_TIME, T as TimeDifference } from './time-DnI1VpE8.js';
2
2
  export { WGS84_ECCENTRICITY_SQUARED, WGS84_FLATTENING, WGS84_SEMI_MAJOR_AXIS, WGS84_SEMI_MINOR_AXIS } from './constants.js';
3
- export { A as ARC_GAP_FACTOR, B as BAND_LABELS, a as BDS_SATELLITES, b as BdsSatellite, C as C_LIGHT, D as DEFAULT_ELEV_MASK_DEG, c as DUAL_FREQ_PAIRS, F as FREQ, G as GLO_CHANNEL_FALLBACK, d as GLO_F1_BASE, e as GLO_F1_STEP, f as GLO_F2_BASE, g as GLO_F2_STEP, h as GLO_F3, O as OnSlipDetected, S as SYSTEM_NAMES, i as SYS_SHORT, j as buildGloChannelMap, k as buildObsIndices, l as formatUTCTime, m as getFreq, n as gloFreq } from './gnss-C-tgoYNa.js';
3
+ export { A as ARC_GAP_FACTOR, B as BAND_LABELS, a as BDS_SATELLITES, b as BdsSatellite, C as C_LIGHT, D as DEFAULT_ELEV_MASK_DEG, c as DUAL_FREQ_PAIRS, F as FREQ, G as GLO_CHANNEL_FALLBACK, d as GLO_F1_BASE, e as GLO_F1_STEP, f as GLO_F2_BASE, g as GLO_F2_STEP, h as GLO_F3, O as OMEGA_E, i as OnSlipDetected, S as SYSTEM_NAMES, j as SYS_SHORT, k as buildGloChannelMap, l as buildObsIndices, m as formatUTCTime, n as getFreq, o as gloFreq } from './gnss-DhnEr0Dy.js';
4
4
  export { Scale, getBdsTime, getDateFromBdsTime, getDateFromDayOfWeek, getDateFromDayOfYear, getDateFromGalTime, getDateFromGloN, getDateFromGpsData, getDateFromGpsTime, getDateFromHourCode, getDateFromJulianDate, getDateFromMJD, getDateFromMJD2000, getDateFromRINEX, getDateFromTai, getDateFromTimeOfDay, getDateFromTt, getDateFromUnixTime, getDateFromUtc, getDayOfWeek, getDayOfYear, getGalTime, getGloN4, getGloNA, getGpsLeap, getGpsTime, getHourCode, getHoursFromTimeDifference, getJulianDate, getLeap, getMJD, getMJD2000, getMinutesFromTimeDifference, getNtpTime, getRINEX, getSecondsFromTimeDifference, getTaiDate, getTimeDifference, getTimeDifferenceFromDays, getTimeDifferenceFromHours, getTimeDifferenceFromMinutes, getTimeDifferenceFromObject, getTimeDifferenceFromSeconds, getTimeOfDay, getTimeOfWeek, getTotalDaysFromTimeDifference, getTtDate, getUnixTime, getUtcDate, getWeekNumber, getWeekOfYear } from './time.js';
5
5
  export { deg2dms, deg2rad, euclidean3D, geodeticToGeohash, geodeticToMaidenhead, geodeticToUtm, greatCircleMidpoint, horizonDistance, rad2deg, rhumbLine, vincenty } from './coordinates.js';
6
6
  export { c as clampUnit, e as ecefToGeodetic, g as geodeticToEcef, a as getAer, b as getEnuDifference } from './ecef-CF0uAysr.js';
package/dist/index.js CHANGED
@@ -8,7 +8,7 @@ import {
8
8
  CycleSlipAccumulator,
9
9
  MultipathAccumulator,
10
10
  analyzeQuality
11
- } from "./chunk-G3N4S3DM.js";
11
+ } from "./chunk-AW6BORTZ.js";
12
12
  import {
13
13
  frequencyLabel,
14
14
  parseAntex
@@ -53,7 +53,7 @@ import {
53
53
  phiBOCc,
54
54
  phiBOCs,
55
55
  phiBPSK
56
- } from "./chunk-5SPJH4MG.js";
56
+ } from "./chunk-2K3FCJBX.js";
57
57
  import {
58
58
  Scale,
59
59
  getDateFromDayOfWeek,
@@ -97,7 +97,7 @@ import {
97
97
  ionoFree,
98
98
  satClockCorrection,
99
99
  solveSpp
100
- } from "./chunk-USHP4IND.js";
100
+ } from "./chunk-PX7TPPTQ.js";
101
101
  import {
102
102
  computeAllPositions,
103
103
  computeDop,
@@ -110,7 +110,7 @@ import {
110
110
  keplerPosition,
111
111
  navTimesFromEph,
112
112
  selectEphemeris
113
- } from "./chunk-CC2R4JGS.js";
113
+ } from "./chunk-PQYBTE42.js";
114
114
  import {
115
115
  getBdsTime,
116
116
  getDateFromBdsTime,
@@ -178,7 +178,7 @@ import {
178
178
  parseRinexStream,
179
179
  systemCmp,
180
180
  systemName
181
- } from "./chunk-OZCYOM5D.js";
181
+ } from "./chunk-3U5AX7PY.js";
182
182
  import {
183
183
  BitReader,
184
184
  RTCM3_MESSAGE_NAMES,
@@ -196,7 +196,7 @@ import {
196
196
  setRtcm3DebugHandler,
197
197
  updateStationMeta,
198
198
  updateStreamStats
199
- } from "./chunk-7EEWQ5DU.js";
199
+ } from "./chunk-65CQINSB.js";
200
200
  import {
201
201
  DAYS_MJD2000_MJD,
202
202
  DAYS_MJD_JULIAN,
@@ -236,6 +236,7 @@ import {
236
236
  GLO_F2_BASE,
237
237
  GLO_F2_STEP,
238
238
  GLO_F3,
239
+ OMEGA_E,
239
240
  SYSTEM_NAMES,
240
241
  SYS_SHORT,
241
242
  buildGloChannelMap,
@@ -243,7 +244,7 @@ import {
243
244
  formatUTCTime,
244
245
  getFreq,
245
246
  gloFreq
246
- } from "./chunk-W5WKEV7U.js";
247
+ } from "./chunk-FIEWO4J4.js";
247
248
  export {
248
249
  ARC_GAP_FACTOR,
249
250
  BAND_LABELS,
@@ -300,6 +301,7 @@ export {
300
301
  MILLISECONDS_IN_WEEK,
301
302
  MILLISECONDS_TT_TAI,
302
303
  MultipathAccumulator,
304
+ OMEGA_E,
303
305
  REFERENCE_FRAMES,
304
306
  RINEX_CODES,
305
307
  RTCM3_MESSAGE_NAMES,
package/dist/orbit.cjs CHANGED
@@ -80,6 +80,9 @@ var START_GPS_TIME = /* @__PURE__ */ new Date("1980-01-06T00:00:00Z");
80
80
  var START_BDS_TIME = /* @__PURE__ */ new Date("2006-01-01T00:00:14Z");
81
81
  var START_NTP_TIME = /* @__PURE__ */ new Date("1900-01-01T00:00:00Z");
82
82
 
83
+ // src/constants/gnss.ts
84
+ var OMEGA_E = 72921151467e-15;
85
+
83
86
  // src/time/gnss.ts
84
87
  function getTaiDate(date) {
85
88
  return new Date(date.getTime() + MILLISECONDS_GPS_TAI);
@@ -167,7 +170,6 @@ var GM_GPS = 3986005e8;
167
170
  var GM_GAL = 3986004418e5;
168
171
  var GM_BDS = 3986004418e5;
169
172
  var GM_GLO = 39860044e7;
170
- var OMEGA_E = 72921151467e-15;
171
173
  var BDS_GEO_MAX_INCLINATION_RAD = 0.1;
172
174
  var BDS_GEO_MIN_SEMIMAJOR_AXIS_M = 4e7;
173
175
  var AE_GLO = 6378136;
package/dist/orbit.js CHANGED
@@ -10,7 +10,7 @@ import {
10
10
  keplerPosition,
11
11
  navTimesFromEph,
12
12
  selectEphemeris
13
- } from "./chunk-CC2R4JGS.js";
13
+ } from "./chunk-PQYBTE42.js";
14
14
  import "./chunk-HVXYFUCB.js";
15
15
  import {
16
16
  ecefToGeodetic,
@@ -18,6 +18,7 @@ import {
18
18
  } from "./chunk-37QNKGTC.js";
19
19
  import "./chunk-6FAL6P4G.js";
20
20
  import "./chunk-LEEU5OIO.js";
21
+ import "./chunk-FIEWO4J4.js";
21
22
  export {
22
23
  computeAllPositions,
23
24
  computeDop,
@@ -63,6 +63,10 @@ var START_GPS_TIME = /* @__PURE__ */ new Date("1980-01-06T00:00:00Z");
63
63
  var START_BDS_TIME = /* @__PURE__ */ new Date("2006-01-01T00:00:14Z");
64
64
  var START_NTP_TIME = /* @__PURE__ */ new Date("1900-01-01T00:00:00Z");
65
65
 
66
+ // src/constants/gnss.ts
67
+ var C_LIGHT = 299792458;
68
+ var OMEGA_E = 72921151467e-15;
69
+
66
70
  // src/time/gnss.ts
67
71
  function getTaiDate(date) {
68
72
  return new Date(date.getTime() + MILLISECONDS_GPS_TAI);
@@ -150,7 +154,6 @@ var GM_GPS = 3986005e8;
150
154
  var GM_GAL = 3986004418e5;
151
155
  var GM_BDS = 3986004418e5;
152
156
  var GM_GLO = 39860044e7;
153
- var OMEGA_E = 72921151467e-15;
154
157
  var BDS_GEO_MAX_INCLINATION_RAD = 0.1;
155
158
  var BDS_GEO_MIN_SEMIMAJOR_AXIS_M = 4e7;
156
159
  var AE_GLO = 6378136;
@@ -366,9 +369,6 @@ function computeSatPosition(eph, timeMs) {
366
369
  var GPS_EPOCH_MS = START_GPS_TIME.getTime();
367
370
  var BDS_EPOCH_MS = START_BDS_TIME.getTime();
368
371
 
369
- // src/constants/gnss.ts
370
- var C_LIGHT = 299792458;
371
-
372
372
  // src/positioning/index.ts
373
373
  var GM_GPS2 = 3986005e8;
374
374
  var F_REL = -4442807633e-19;
@@ -400,8 +400,7 @@ function tropoDelay(elevationRad) {
400
400
  return 2.47 / (sinEl + 0.0121);
401
401
  }
402
402
  function sagnac(pos, travelTimeS) {
403
- const OMEGA_E2 = 72921151467e-15;
404
- const theta = OMEGA_E2 * travelTimeS;
403
+ const theta = OMEGA_E * travelTimeS;
405
404
  const c = Math.cos(theta);
406
405
  const s = Math.sin(theta);
407
406
  return [pos.x * c + pos.y * s, -pos.x * s + pos.y * c, pos.z];
@@ -2,13 +2,13 @@ import {
2
2
  ionoFree,
3
3
  satClockCorrection,
4
4
  solveSpp
5
- } from "./chunk-USHP4IND.js";
6
- import "./chunk-CC2R4JGS.js";
5
+ } from "./chunk-PX7TPPTQ.js";
6
+ import "./chunk-PQYBTE42.js";
7
7
  import "./chunk-HVXYFUCB.js";
8
8
  import "./chunk-37QNKGTC.js";
9
9
  import "./chunk-6FAL6P4G.js";
10
10
  import "./chunk-LEEU5OIO.js";
11
- import "./chunk-W5WKEV7U.js";
11
+ import "./chunk-FIEWO4J4.js";
12
12
  export {
13
13
  ionoFree,
14
14
  satClockCorrection,
package/dist/rinex.js CHANGED
@@ -16,8 +16,8 @@ import {
16
16
  parseRinexStream,
17
17
  systemCmp,
18
18
  systemName
19
- } from "./chunk-OZCYOM5D.js";
20
- import "./chunk-W5WKEV7U.js";
19
+ } from "./chunk-3U5AX7PY.js";
20
+ import "./chunk-FIEWO4J4.js";
21
21
  export {
22
22
  EMPTY_WARNINGS,
23
23
  SYSTEM_ORDER,
package/dist/rtcm3.cjs CHANGED
@@ -1319,6 +1319,7 @@ var RTCM3_MESSAGE_NAMES = {
1319
1319
  1031: "GLONASS Network RTK Residual",
1320
1320
  1032: "Physical Reference Station",
1321
1321
  1033: "Receiver+Antenna Descriptor",
1322
+ 1041: "NavIC Ephemeris",
1322
1323
  1042: "BeiDou Ephemeris",
1323
1324
  1043: "SBAS Ephemeris",
1324
1325
  1044: "QZSS Ephemeris",
@@ -1383,6 +1384,8 @@ var RTCM3_MESSAGE_NAMES = {
1383
1384
  1064: "GLONASS SSR Clock",
1384
1385
  1065: "GLONASS SSR Code Bias",
1385
1386
  1066: "GLONASS SSR Orbit+Clock",
1387
+ // Biases
1388
+ 1230: "GLONASS Code-Phase Biases",
1386
1389
  // IGS SSR
1387
1390
  4076: "IGS SSR"
1388
1391
  };
@@ -1391,6 +1394,7 @@ function rtcm3Constellation(msgType) {
1391
1394
  if (msgType >= 1009 && msgType <= 1012) return "GLONASS";
1392
1395
  if (msgType === 1019) return "GPS";
1393
1396
  if (msgType === 1020) return "GLONASS";
1397
+ if (msgType === 1041) return "NavIC";
1394
1398
  if (msgType === 1042) return "BeiDou";
1395
1399
  if (msgType === 1043) return "SBAS";
1396
1400
  if (msgType === 1044) return "QZSS";
@@ -1402,6 +1406,7 @@ function rtcm3Constellation(msgType) {
1402
1406
  if (msgType >= 1111 && msgType <= 1117) return "QZSS";
1403
1407
  if (msgType >= 1121 && msgType <= 1127) return "BeiDou";
1404
1408
  if (msgType >= 1131 && msgType <= 1137) return "NavIC";
1409
+ if (msgType === 1230) return "GLONASS";
1405
1410
  return null;
1406
1411
  }
1407
1412
  function createStreamStats() {
package/dist/rtcm3.js CHANGED
@@ -15,9 +15,9 @@ import {
15
15
  setRtcm3DebugHandler,
16
16
  updateStationMeta,
17
17
  updateStreamStats
18
- } from "./chunk-7EEWQ5DU.js";
18
+ } from "./chunk-65CQINSB.js";
19
19
  import "./chunk-LEEU5OIO.js";
20
- import "./chunk-W5WKEV7U.js";
20
+ import "./chunk-FIEWO4J4.js";
21
21
  export {
22
22
  BitReader,
23
23
  RTCM3_MESSAGE_NAMES,
package/dist/signals.js CHANGED
@@ -32,8 +32,8 @@ import {
32
32
  phiBOCc,
33
33
  phiBOCs,
34
34
  phiBPSK
35
- } from "./chunk-5SPJH4MG.js";
36
- import "./chunk-W5WKEV7U.js";
35
+ } from "./chunk-2K3FCJBX.js";
36
+ import "./chunk-FIEWO4J4.js";
37
37
  export {
38
38
  BAND_PRESETS,
39
39
  CONSTELLATIONS,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gnss-js",
3
- "version": "1.3.1",
3
+ "version": "1.3.2",
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,