gnss-js 2.8.1 → 2.8.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.
@@ -409,12 +409,18 @@ function dopClock(prn) {
409
409
  return sys === "J" || sys === "S" ? "G" : sys;
410
410
  }
411
411
  function computeDop(satAzEls) {
412
- const n = satAzEls.length;
413
- const clocks = [...new Set(satAzEls.map((s) => dopClock(s.prn)))];
412
+ const perClock = /* @__PURE__ */ new Map();
413
+ for (const s of satAzEls) {
414
+ const c = dopClock(s.prn);
415
+ perClock.set(c, (perClock.get(c) ?? 0) + 1);
416
+ }
417
+ const sats = perClock.size > 1 ? satAzEls.filter((s) => perClock.get(dopClock(s.prn)) > 1) : satAzEls;
418
+ const n = sats.length;
419
+ const clocks = [...new Set(sats.map((s) => dopClock(s.prn)))];
414
420
  const m = 3 + clocks.length;
415
421
  if (n < Math.max(4, m)) return null;
416
422
  const H = [];
417
- for (const { az, el, prn } of satAzEls) {
423
+ for (const { az, el, prn } of sats) {
418
424
  const cosEl = Math.cos(el);
419
425
  const row = [cosEl * Math.sin(az), cosEl * Math.cos(az), Math.sin(el)];
420
426
  const clock = dopClock(prn);
@@ -7,7 +7,7 @@ import {
7
7
  ecefToAzEl,
8
8
  invertMatrix,
9
9
  selectEphemeris
10
- } from "./chunk-T5M3LVBJ.js";
10
+ } from "./chunk-5OWRCF56.js";
11
11
  import {
12
12
  ecefToGeodetic,
13
13
  getAer,
package/dist/index.cjs CHANGED
@@ -12684,12 +12684,18 @@ function dopClock(prn) {
12684
12684
  return sys === "J" || sys === "S" ? "G" : sys;
12685
12685
  }
12686
12686
  function computeDop(satAzEls) {
12687
- const n = satAzEls.length;
12688
- const clocks = [...new Set(satAzEls.map((s) => dopClock(s.prn)))];
12687
+ const perClock = /* @__PURE__ */ new Map();
12688
+ for (const s of satAzEls) {
12689
+ const c = dopClock(s.prn);
12690
+ perClock.set(c, (perClock.get(c) ?? 0) + 1);
12691
+ }
12692
+ const sats = perClock.size > 1 ? satAzEls.filter((s) => perClock.get(dopClock(s.prn)) > 1) : satAzEls;
12693
+ const n = sats.length;
12694
+ const clocks = [...new Set(sats.map((s) => dopClock(s.prn)))];
12689
12695
  const m = 3 + clocks.length;
12690
12696
  if (n < Math.max(4, m)) return null;
12691
12697
  const H3 = [];
12692
- for (const { az, el, prn } of satAzEls) {
12698
+ for (const { az, el, prn } of sats) {
12693
12699
  const cosEl = Math.cos(el);
12694
12700
  const row = [cosEl * Math.sin(az), cosEl * Math.cos(az), Math.sin(el)];
12695
12701
  const clock = dopClock(prn);
package/dist/index.js CHANGED
@@ -213,7 +213,7 @@ import {
213
213
  sunEcef,
214
214
  toRtkEpoch,
215
215
  wlWavelength
216
- } from "./chunk-F6KOFOXN.js";
216
+ } from "./chunk-CLNLOYBX.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-T5M3LVBJ.js";
238
+ } from "./chunk-5OWRCF56.js";
239
239
  import {
240
240
  getBdsTime,
241
241
  getDateFromBdsTime,
package/dist/orbit.cjs CHANGED
@@ -570,12 +570,18 @@ function dopClock(prn) {
570
570
  return sys === "J" || sys === "S" ? "G" : sys;
571
571
  }
572
572
  function computeDop(satAzEls) {
573
- const n = satAzEls.length;
574
- const clocks = [...new Set(satAzEls.map((s) => dopClock(s.prn)))];
573
+ const perClock = /* @__PURE__ */ new Map();
574
+ for (const s of satAzEls) {
575
+ const c = dopClock(s.prn);
576
+ perClock.set(c, (perClock.get(c) ?? 0) + 1);
577
+ }
578
+ const sats = perClock.size > 1 ? satAzEls.filter((s) => perClock.get(dopClock(s.prn)) > 1) : satAzEls;
579
+ const n = sats.length;
580
+ const clocks = [...new Set(sats.map((s) => dopClock(s.prn)))];
575
581
  const m = 3 + clocks.length;
576
582
  if (n < Math.max(4, m)) return null;
577
583
  const H = [];
578
- for (const { az, el, prn } of satAzEls) {
584
+ for (const { az, el, prn } of sats) {
579
585
  const cosEl = Math.cos(el);
580
586
  const row = [cosEl * Math.sin(az), cosEl * Math.cos(az), Math.sin(el)];
581
587
  const clock = dopClock(prn);
package/dist/orbit.d.cts CHANGED
@@ -164,8 +164,11 @@ declare function ecefToAzEl(rxX: number, rxY: number, rxZ: number, satX: number,
164
164
  * constellation time scale, as a multi-GNSS receiver solves: every extra
165
165
  * time scale costs one observation. QZSS and SBAS share the GPS clock —
166
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
168
- * satellites share a single clock (the classic single-system model).
167
+ * same) — so a lone SBAS GEO doesn't inflate TDOP/GDOP. A time scale
168
+ * with a single satellite in view is left out: that satellite only fixes
169
+ * its own clock, adding nothing to PDOP/HDOP/VDOP and an unrecoverable ~1
170
+ * to TDOP². Untagged satellites share a single clock (the classic
171
+ * single-system model).
169
172
  *
170
173
  * @param satAzEls Satellite azimuth/elevation pairs (radians), optionally
171
174
  * tagged with their PRN.
package/dist/orbit.d.ts CHANGED
@@ -164,8 +164,11 @@ declare function ecefToAzEl(rxX: number, rxY: number, rxZ: number, satX: number,
164
164
  * constellation time scale, as a multi-GNSS receiver solves: every extra
165
165
  * time scale costs one observation. QZSS and SBAS share the GPS clock —
166
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
168
- * satellites share a single clock (the classic single-system model).
167
+ * same) — so a lone SBAS GEO doesn't inflate TDOP/GDOP. A time scale
168
+ * with a single satellite in view is left out: that satellite only fixes
169
+ * its own clock, adding nothing to PDOP/HDOP/VDOP and an unrecoverable ~1
170
+ * to TDOP². Untagged satellites share a single clock (the classic
171
+ * single-system model).
169
172
  *
170
173
  * @param satAzEls Satellite azimuth/elevation pairs (radians), optionally
171
174
  * tagged with their PRN.
package/dist/orbit.js CHANGED
@@ -18,7 +18,7 @@ import {
18
18
  navTimesFromEph,
19
19
  rangeRate,
20
20
  selectEphemeris
21
- } from "./chunk-T5M3LVBJ.js";
21
+ } from "./chunk-5OWRCF56.js";
22
22
  import "./chunk-HVXYFUCB.js";
23
23
  import {
24
24
  ecefToGeodetic,
@@ -442,12 +442,18 @@ function dopClock(prn) {
442
442
  return sys === "J" || sys === "S" ? "G" : sys;
443
443
  }
444
444
  function computeDop(satAzEls) {
445
- const n = satAzEls.length;
446
- const clocks = [...new Set(satAzEls.map((s) => dopClock(s.prn)))];
445
+ const perClock = /* @__PURE__ */ new Map();
446
+ for (const s of satAzEls) {
447
+ const c = dopClock(s.prn);
448
+ perClock.set(c, (perClock.get(c) ?? 0) + 1);
449
+ }
450
+ const sats = perClock.size > 1 ? satAzEls.filter((s) => perClock.get(dopClock(s.prn)) > 1) : satAzEls;
451
+ const n = sats.length;
452
+ const clocks = [...new Set(sats.map((s) => dopClock(s.prn)))];
447
453
  const m = 3 + clocks.length;
448
454
  if (n < Math.max(4, m)) return null;
449
455
  const H = [];
450
- for (const { az, el, prn } of satAzEls) {
456
+ for (const { az, el, prn } of sats) {
451
457
  const cosEl = Math.cos(el);
452
458
  const row = [cosEl * Math.sin(az), cosEl * Math.cos(az), Math.sin(el)];
453
459
  const clock = dopClock(prn);
@@ -40,9 +40,9 @@ import {
40
40
  sunEcef,
41
41
  toRtkEpoch,
42
42
  wlWavelength
43
- } from "./chunk-F6KOFOXN.js";
43
+ } from "./chunk-CLNLOYBX.js";
44
44
  import "./chunk-WQX354KD.js";
45
- import "./chunk-T5M3LVBJ.js";
45
+ import "./chunk-5OWRCF56.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.1",
3
+ "version": "2.8.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,