gnss-js 2.8.0 → 2.8.1

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.
@@ -7,7 +7,7 @@ import {
7
7
  ecefToAzEl,
8
8
  invertMatrix,
9
9
  selectEphemeris
10
- } from "./chunk-GLMQRZDL.js";
10
+ } from "./chunk-T5M3LVBJ.js";
11
11
  import {
12
12
  ecefToGeodetic,
13
13
  getAer,
@@ -404,17 +404,21 @@ function ecefToAzEl(rxX, rxY, rxZ, satX, satY, satZ) {
404
404
  const el = Math.atan2(up, Math.sqrt(east * east + north * north));
405
405
  return { az: (az + TWO_PI) % TWO_PI, el };
406
406
  }
407
+ function dopClock(prn) {
408
+ const sys = prn?.[0] ?? "";
409
+ return sys === "J" || sys === "S" ? "G" : sys;
410
+ }
407
411
  function computeDop(satAzEls) {
408
412
  const n = satAzEls.length;
409
- const clocks = [...new Set(satAzEls.map((s) => s.prn?.[0] ?? ""))];
413
+ const clocks = [...new Set(satAzEls.map((s) => dopClock(s.prn)))];
410
414
  const m = 3 + clocks.length;
411
415
  if (n < Math.max(4, m)) return null;
412
416
  const H = [];
413
417
  for (const { az, el, prn } of satAzEls) {
414
418
  const cosEl = Math.cos(el);
415
419
  const row = [cosEl * Math.sin(az), cosEl * Math.cos(az), Math.sin(el)];
416
- const sys = prn?.[0] ?? "";
417
- for (const c of clocks) row.push(c === sys ? 1 : 0);
420
+ const clock = dopClock(prn);
421
+ for (const c of clocks) row.push(c === clock ? 1 : 0);
418
422
  H.push(row);
419
423
  }
420
424
  const HtH = Array.from({ length: m }, () => new Array(m).fill(0));
package/dist/index.cjs CHANGED
@@ -12679,17 +12679,21 @@ function ecefToAzEl(rxX, rxY, rxZ, satX, satY, satZ) {
12679
12679
  const el = Math.atan2(up, Math.sqrt(east * east + north * north));
12680
12680
  return { az: (az + TWO_PI) % TWO_PI, el };
12681
12681
  }
12682
+ function dopClock(prn) {
12683
+ const sys = prn?.[0] ?? "";
12684
+ return sys === "J" || sys === "S" ? "G" : sys;
12685
+ }
12682
12686
  function computeDop(satAzEls) {
12683
12687
  const n = satAzEls.length;
12684
- const clocks = [...new Set(satAzEls.map((s) => s.prn?.[0] ?? ""))];
12688
+ const clocks = [...new Set(satAzEls.map((s) => dopClock(s.prn)))];
12685
12689
  const m = 3 + clocks.length;
12686
12690
  if (n < Math.max(4, m)) return null;
12687
12691
  const H3 = [];
12688
12692
  for (const { az, el, prn } of satAzEls) {
12689
12693
  const cosEl = Math.cos(el);
12690
12694
  const row = [cosEl * Math.sin(az), cosEl * Math.cos(az), Math.sin(el)];
12691
- const sys = prn?.[0] ?? "";
12692
- for (const c of clocks) row.push(c === sys ? 1 : 0);
12695
+ const clock = dopClock(prn);
12696
+ for (const c of clocks) row.push(c === clock ? 1 : 0);
12693
12697
  H3.push(row);
12694
12698
  }
12695
12699
  const HtH = Array.from({ length: m }, () => new Array(m).fill(0));
package/dist/index.js CHANGED
@@ -213,7 +213,7 @@ import {
213
213
  sunEcef,
214
214
  toRtkEpoch,
215
215
  wlWavelength
216
- } from "./chunk-PHS7OFHN.js";
216
+ } from "./chunk-F6KOFOXN.js";
217
217
  import "./chunk-WQX354KD.js";
218
218
  import {
219
219
  almanacEpochMs,
@@ -235,7 +235,7 @@ import {
235
235
  navTimesFromEph,
236
236
  rangeRate,
237
237
  selectEphemeris
238
- } from "./chunk-GLMQRZDL.js";
238
+ } from "./chunk-T5M3LVBJ.js";
239
239
  import {
240
240
  getBdsTime,
241
241
  getDateFromBdsTime,
package/dist/orbit.cjs CHANGED
@@ -565,17 +565,21 @@ function ecefToAzEl(rxX, rxY, rxZ, satX, satY, satZ) {
565
565
  const el = Math.atan2(up, Math.sqrt(east * east + north * north));
566
566
  return { az: (az + TWO_PI) % TWO_PI, el };
567
567
  }
568
+ function dopClock(prn) {
569
+ const sys = prn?.[0] ?? "";
570
+ return sys === "J" || sys === "S" ? "G" : sys;
571
+ }
568
572
  function computeDop(satAzEls) {
569
573
  const n = satAzEls.length;
570
- const clocks = [...new Set(satAzEls.map((s) => s.prn?.[0] ?? ""))];
574
+ const clocks = [...new Set(satAzEls.map((s) => dopClock(s.prn)))];
571
575
  const m = 3 + clocks.length;
572
576
  if (n < Math.max(4, m)) return null;
573
577
  const H = [];
574
578
  for (const { az, el, prn } of satAzEls) {
575
579
  const cosEl = Math.cos(el);
576
580
  const row = [cosEl * Math.sin(az), cosEl * Math.cos(az), Math.sin(el)];
577
- const sys = prn?.[0] ?? "";
578
- for (const c of clocks) row.push(c === sys ? 1 : 0);
581
+ const clock = dopClock(prn);
582
+ for (const c of clocks) row.push(c === clock ? 1 : 0);
579
583
  H.push(row);
580
584
  }
581
585
  const HtH = Array.from({ length: m }, () => new Array(m).fill(0));
package/dist/orbit.d.cts CHANGED
@@ -161,9 +161,10 @@ declare function ecefToAzEl(rxX: number, rxY: number, rxZ: number, satX: number,
161
161
  * Compute DOP values from a set of satellite az/el.
162
162
  *
163
163
  * Satellites tagged with a `prn` get one receiver-clock unknown per
164
- * constellation (the PRN's system letter), matching how a multi-GNSS
165
- * receiver solves and how `solveSpp` does: each system runs on its own
166
- * time scale, so every extra constellation costs one observation. Untagged
164
+ * constellation time scale, as a multi-GNSS receiver solves: every extra
165
+ * time scale costs one observation. QZSS and SBAS share the GPS clock —
166
+ * QZSST and SBAS network time are steered to GPST (RTKLIB pntpos does the
167
+ * same) — so a lone SBAS GEO doesn't inflate TDOP/GDOP. Untagged
167
168
  * satellites share a single clock (the classic single-system model).
168
169
  *
169
170
  * @param satAzEls Satellite azimuth/elevation pairs (radians), optionally
package/dist/orbit.d.ts CHANGED
@@ -161,9 +161,10 @@ declare function ecefToAzEl(rxX: number, rxY: number, rxZ: number, satX: number,
161
161
  * Compute DOP values from a set of satellite az/el.
162
162
  *
163
163
  * Satellites tagged with a `prn` get one receiver-clock unknown per
164
- * constellation (the PRN's system letter), matching how a multi-GNSS
165
- * receiver solves and how `solveSpp` does: each system runs on its own
166
- * time scale, so every extra constellation costs one observation. Untagged
164
+ * constellation time scale, as a multi-GNSS receiver solves: every extra
165
+ * time scale costs one observation. QZSS and SBAS share the GPS clock —
166
+ * QZSST and SBAS network time are steered to GPST (RTKLIB pntpos does the
167
+ * same) — so a lone SBAS GEO doesn't inflate TDOP/GDOP. Untagged
167
168
  * satellites share a single clock (the classic single-system model).
168
169
  *
169
170
  * @param satAzEls Satellite azimuth/elevation pairs (radians), optionally
package/dist/orbit.js CHANGED
@@ -18,7 +18,7 @@ import {
18
18
  navTimesFromEph,
19
19
  rangeRate,
20
20
  selectEphemeris
21
- } from "./chunk-GLMQRZDL.js";
21
+ } from "./chunk-T5M3LVBJ.js";
22
22
  import "./chunk-HVXYFUCB.js";
23
23
  import {
24
24
  ecefToGeodetic,
@@ -437,17 +437,21 @@ function ecefToAzEl(rxX, rxY, rxZ, satX, satY, satZ) {
437
437
  const el = Math.atan2(up, Math.sqrt(east * east + north * north));
438
438
  return { az: (az + TWO_PI) % TWO_PI, el };
439
439
  }
440
+ function dopClock(prn) {
441
+ const sys = prn?.[0] ?? "";
442
+ return sys === "J" || sys === "S" ? "G" : sys;
443
+ }
440
444
  function computeDop(satAzEls) {
441
445
  const n = satAzEls.length;
442
- const clocks = [...new Set(satAzEls.map((s) => s.prn?.[0] ?? ""))];
446
+ const clocks = [...new Set(satAzEls.map((s) => dopClock(s.prn)))];
443
447
  const m = 3 + clocks.length;
444
448
  if (n < Math.max(4, m)) return null;
445
449
  const H = [];
446
450
  for (const { az, el, prn } of satAzEls) {
447
451
  const cosEl = Math.cos(el);
448
452
  const row = [cosEl * Math.sin(az), cosEl * Math.cos(az), Math.sin(el)];
449
- const sys = prn?.[0] ?? "";
450
- for (const c of clocks) row.push(c === sys ? 1 : 0);
453
+ const clock = dopClock(prn);
454
+ for (const c of clocks) row.push(c === clock ? 1 : 0);
451
455
  H.push(row);
452
456
  }
453
457
  const HtH = Array.from({ length: m }, () => new Array(m).fill(0));
@@ -40,9 +40,9 @@ import {
40
40
  sunEcef,
41
41
  toRtkEpoch,
42
42
  wlWavelength
43
- } from "./chunk-PHS7OFHN.js";
43
+ } from "./chunk-F6KOFOXN.js";
44
44
  import "./chunk-WQX354KD.js";
45
- import "./chunk-GLMQRZDL.js";
45
+ import "./chunk-T5M3LVBJ.js";
46
46
  import "./chunk-HVXYFUCB.js";
47
47
  import "./chunk-CVCTRIWU.js";
48
48
  import "./chunk-37QNKGTC.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gnss-js",
3
- "version": "2.8.0",
3
+ "version": "2.8.1",
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,