gnss-js 1.54.0 → 1.56.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.
- package/dist/analysis.cjs +17 -15
- package/dist/analysis.js +1 -1
- package/dist/{chunk-U32IU7RO.js → chunk-BU6YC6VK.js} +30 -0
- package/dist/{chunk-Z5UZUNCB.js → chunk-KUSUN7DP.js} +17 -15
- package/dist/index.cjs +47 -15
- package/dist/index.js +2 -2
- package/dist/positioning.cjs +30 -0
- package/dist/positioning.d.cts +20 -0
- package/dist/positioning.d.ts +20 -0
- package/dist/positioning.js +1 -1
- package/package.json +1 -1
package/dist/analysis.cjs
CHANGED
|
@@ -557,21 +557,23 @@ var CycleSlipAccumulator = class {
|
|
|
557
557
|
dualChecked.add(b2);
|
|
558
558
|
}
|
|
559
559
|
}
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
560
|
+
if (sys !== "S") {
|
|
561
|
+
for (const [band, lm] of phaseM) {
|
|
562
|
+
if (dualChecked.has(band)) continue;
|
|
563
|
+
const prevLm = prev.phase.get(band);
|
|
564
|
+
if (prevLm === void 0) continue;
|
|
565
|
+
const cm = codeM.get(band);
|
|
566
|
+
const prevCm = prev.code.get(band);
|
|
567
|
+
if (cm === void 0 || prevCm === void 0) continue;
|
|
568
|
+
const dPhase = lm - prevLm;
|
|
569
|
+
const dCode = cm - prevCm;
|
|
570
|
+
const jumpM = Math.abs(dPhase - dCode);
|
|
571
|
+
const lbl = BAND_LABELS[sys]?.[band] ?? band;
|
|
572
|
+
const sigKey = `${sys}:${lbl}`;
|
|
573
|
+
this.countEpoch(sigKey);
|
|
574
|
+
if (jumpM > SF_THRESHOLD_M) {
|
|
575
|
+
this.recordSlip(sigKey, time, prn, lbl, jumpM, /* @__PURE__ */ new Set([band]));
|
|
576
|
+
}
|
|
575
577
|
}
|
|
576
578
|
}
|
|
577
579
|
}
|
package/dist/analysis.js
CHANGED
|
@@ -1551,6 +1551,36 @@ var SbasProcessor = class {
|
|
|
1551
1551
|
}
|
|
1552
1552
|
return n;
|
|
1553
1553
|
}
|
|
1554
|
+
/**
|
|
1555
|
+
* Correction-coverage census at a GPS week/time — a diagnostic funnel over
|
|
1556
|
+
* the current state, explaining how many masked satellites are actually
|
|
1557
|
+
* correctable. Each stage subsumes the requirement of the previous one for a
|
|
1558
|
+
* full range/clock correction: a satellite is `corrected` only when it has
|
|
1559
|
+
* both a fresh fast correction and (for non-SBAS satellites) a fresh
|
|
1560
|
+
* long-term correction (exactly {@link satCorrection}'s gate). `ionoGrid` is
|
|
1561
|
+
* the total number of valid grid points — the additional requirement for the
|
|
1562
|
+
* *iono*-corrected subset a solver forms per pierce point.
|
|
1563
|
+
*
|
|
1564
|
+
* Use it to tell "no corrections applied" (mask empty / products stale) apart
|
|
1565
|
+
* from "corrections applied but the pierce points aren't grid-covered yet".
|
|
1566
|
+
*/
|
|
1567
|
+
coverage(week, tow) {
|
|
1568
|
+
const now = gpsSeconds(week, tow);
|
|
1569
|
+
let masked = 0;
|
|
1570
|
+
let fast = 0;
|
|
1571
|
+
let long = 0;
|
|
1572
|
+
let corrected = 0;
|
|
1573
|
+
for (const s of this.sats) {
|
|
1574
|
+
if (!s.prn) continue;
|
|
1575
|
+
masked++;
|
|
1576
|
+
if (s.fcorr && s.fcorr.t0s !== 0 && s.fcorr.udre < 15 && Math.abs(now - s.fcorr.t0s + this.tlat) <= MAXSBSAGEF)
|
|
1577
|
+
fast++;
|
|
1578
|
+
if (s.prn[0] === "S" || s.lcorr && s.lcorr.t0s !== 0 && Math.abs(now - s.lcorr.t0s) <= MAXSBSAGEL)
|
|
1579
|
+
long++;
|
|
1580
|
+
if (this.satCorrection(s.prn, week, tow)) corrected++;
|
|
1581
|
+
}
|
|
1582
|
+
return { masked, fast, long, corrected, ionoGrid: this.ionoGridPoints() };
|
|
1583
|
+
}
|
|
1554
1584
|
/**
|
|
1555
1585
|
* Satellite range/clock correction for a PRN at a GPS week/tow, or null if
|
|
1556
1586
|
* no valid (unexpired) long-term + fast correction is available. Add `dPos`
|
|
@@ -352,21 +352,23 @@ var CycleSlipAccumulator = class {
|
|
|
352
352
|
dualChecked.add(b2);
|
|
353
353
|
}
|
|
354
354
|
}
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
355
|
+
if (sys !== "S") {
|
|
356
|
+
for (const [band, lm] of phaseM) {
|
|
357
|
+
if (dualChecked.has(band)) continue;
|
|
358
|
+
const prevLm = prev.phase.get(band);
|
|
359
|
+
if (prevLm === void 0) continue;
|
|
360
|
+
const cm = codeM.get(band);
|
|
361
|
+
const prevCm = prev.code.get(band);
|
|
362
|
+
if (cm === void 0 || prevCm === void 0) continue;
|
|
363
|
+
const dPhase = lm - prevLm;
|
|
364
|
+
const dCode = cm - prevCm;
|
|
365
|
+
const jumpM = Math.abs(dPhase - dCode);
|
|
366
|
+
const lbl = BAND_LABELS[sys]?.[band] ?? band;
|
|
367
|
+
const sigKey = `${sys}:${lbl}`;
|
|
368
|
+
this.countEpoch(sigKey);
|
|
369
|
+
if (jumpM > SF_THRESHOLD_M) {
|
|
370
|
+
this.recordSlip(sigKey, time, prn, lbl, jumpM, /* @__PURE__ */ new Set([band]));
|
|
371
|
+
}
|
|
370
372
|
}
|
|
371
373
|
}
|
|
372
374
|
}
|
package/dist/index.cjs
CHANGED
|
@@ -13637,6 +13637,36 @@ var SbasProcessor = class {
|
|
|
13637
13637
|
}
|
|
13638
13638
|
return n;
|
|
13639
13639
|
}
|
|
13640
|
+
/**
|
|
13641
|
+
* Correction-coverage census at a GPS week/time — a diagnostic funnel over
|
|
13642
|
+
* the current state, explaining how many masked satellites are actually
|
|
13643
|
+
* correctable. Each stage subsumes the requirement of the previous one for a
|
|
13644
|
+
* full range/clock correction: a satellite is `corrected` only when it has
|
|
13645
|
+
* both a fresh fast correction and (for non-SBAS satellites) a fresh
|
|
13646
|
+
* long-term correction (exactly {@link satCorrection}'s gate). `ionoGrid` is
|
|
13647
|
+
* the total number of valid grid points — the additional requirement for the
|
|
13648
|
+
* *iono*-corrected subset a solver forms per pierce point.
|
|
13649
|
+
*
|
|
13650
|
+
* Use it to tell "no corrections applied" (mask empty / products stale) apart
|
|
13651
|
+
* from "corrections applied but the pierce points aren't grid-covered yet".
|
|
13652
|
+
*/
|
|
13653
|
+
coverage(week, tow) {
|
|
13654
|
+
const now = gpsSeconds(week, tow);
|
|
13655
|
+
let masked = 0;
|
|
13656
|
+
let fast = 0;
|
|
13657
|
+
let long = 0;
|
|
13658
|
+
let corrected = 0;
|
|
13659
|
+
for (const s of this.sats) {
|
|
13660
|
+
if (!s.prn) continue;
|
|
13661
|
+
masked++;
|
|
13662
|
+
if (s.fcorr && s.fcorr.t0s !== 0 && s.fcorr.udre < 15 && Math.abs(now - s.fcorr.t0s + this.tlat) <= MAXSBSAGEF)
|
|
13663
|
+
fast++;
|
|
13664
|
+
if (s.prn[0] === "S" || s.lcorr && s.lcorr.t0s !== 0 && Math.abs(now - s.lcorr.t0s) <= MAXSBSAGEL)
|
|
13665
|
+
long++;
|
|
13666
|
+
if (this.satCorrection(s.prn, week, tow)) corrected++;
|
|
13667
|
+
}
|
|
13668
|
+
return { masked, fast, long, corrected, ionoGrid: this.ionoGridPoints() };
|
|
13669
|
+
}
|
|
13640
13670
|
/**
|
|
13641
13671
|
* Satellite range/clock correction for a PRN at a GPS week/tow, or null if
|
|
13642
13672
|
* no valid (unexpired) long-term + fast correction is available. Add `dPos`
|
|
@@ -15913,21 +15943,23 @@ var CycleSlipAccumulator = class {
|
|
|
15913
15943
|
dualChecked.add(b2);
|
|
15914
15944
|
}
|
|
15915
15945
|
}
|
|
15916
|
-
|
|
15917
|
-
|
|
15918
|
-
|
|
15919
|
-
|
|
15920
|
-
|
|
15921
|
-
|
|
15922
|
-
|
|
15923
|
-
|
|
15924
|
-
|
|
15925
|
-
|
|
15926
|
-
|
|
15927
|
-
|
|
15928
|
-
|
|
15929
|
-
|
|
15930
|
-
|
|
15946
|
+
if (sys !== "S") {
|
|
15947
|
+
for (const [band, lm] of phaseM) {
|
|
15948
|
+
if (dualChecked.has(band)) continue;
|
|
15949
|
+
const prevLm = prev.phase.get(band);
|
|
15950
|
+
if (prevLm === void 0) continue;
|
|
15951
|
+
const cm = codeM.get(band);
|
|
15952
|
+
const prevCm = prev.code.get(band);
|
|
15953
|
+
if (cm === void 0 || prevCm === void 0) continue;
|
|
15954
|
+
const dPhase = lm - prevLm;
|
|
15955
|
+
const dCode = cm - prevCm;
|
|
15956
|
+
const jumpM = Math.abs(dPhase - dCode);
|
|
15957
|
+
const lbl = BAND_LABELS[sys]?.[band] ?? band;
|
|
15958
|
+
const sigKey = `${sys}:${lbl}`;
|
|
15959
|
+
this.countEpoch(sigKey);
|
|
15960
|
+
if (jumpM > SF_THRESHOLD_M) {
|
|
15961
|
+
this.recordSlip(sigKey, time, prn, lbl, jumpM, /* @__PURE__ */ new Set([band]));
|
|
15962
|
+
}
|
|
15931
15963
|
}
|
|
15932
15964
|
}
|
|
15933
15965
|
}
|
package/dist/index.js
CHANGED
|
@@ -109,7 +109,7 @@ import {
|
|
|
109
109
|
computeIonoRate,
|
|
110
110
|
detrendIonoArcs,
|
|
111
111
|
parseSinexBiasDcb
|
|
112
|
-
} from "./chunk-
|
|
112
|
+
} from "./chunk-KUSUN7DP.js";
|
|
113
113
|
import {
|
|
114
114
|
Scale,
|
|
115
115
|
getDateFromDayOfWeek,
|
|
@@ -168,7 +168,7 @@ import {
|
|
|
168
168
|
sunEcef,
|
|
169
169
|
toRtkEpoch,
|
|
170
170
|
wlWavelength
|
|
171
|
-
} from "./chunk-
|
|
171
|
+
} from "./chunk-BU6YC6VK.js";
|
|
172
172
|
import "./chunk-WQX354KD.js";
|
|
173
173
|
import {
|
|
174
174
|
almanacEpochMs,
|
package/dist/positioning.cjs
CHANGED
|
@@ -2025,6 +2025,36 @@ var SbasProcessor = class {
|
|
|
2025
2025
|
}
|
|
2026
2026
|
return n;
|
|
2027
2027
|
}
|
|
2028
|
+
/**
|
|
2029
|
+
* Correction-coverage census at a GPS week/time — a diagnostic funnel over
|
|
2030
|
+
* the current state, explaining how many masked satellites are actually
|
|
2031
|
+
* correctable. Each stage subsumes the requirement of the previous one for a
|
|
2032
|
+
* full range/clock correction: a satellite is `corrected` only when it has
|
|
2033
|
+
* both a fresh fast correction and (for non-SBAS satellites) a fresh
|
|
2034
|
+
* long-term correction (exactly {@link satCorrection}'s gate). `ionoGrid` is
|
|
2035
|
+
* the total number of valid grid points — the additional requirement for the
|
|
2036
|
+
* *iono*-corrected subset a solver forms per pierce point.
|
|
2037
|
+
*
|
|
2038
|
+
* Use it to tell "no corrections applied" (mask empty / products stale) apart
|
|
2039
|
+
* from "corrections applied but the pierce points aren't grid-covered yet".
|
|
2040
|
+
*/
|
|
2041
|
+
coverage(week, tow) {
|
|
2042
|
+
const now = gpsSeconds(week, tow);
|
|
2043
|
+
let masked = 0;
|
|
2044
|
+
let fast = 0;
|
|
2045
|
+
let long = 0;
|
|
2046
|
+
let corrected = 0;
|
|
2047
|
+
for (const s of this.sats) {
|
|
2048
|
+
if (!s.prn) continue;
|
|
2049
|
+
masked++;
|
|
2050
|
+
if (s.fcorr && s.fcorr.t0s !== 0 && s.fcorr.udre < 15 && Math.abs(now - s.fcorr.t0s + this.tlat) <= MAXSBSAGEF)
|
|
2051
|
+
fast++;
|
|
2052
|
+
if (s.prn[0] === "S" || s.lcorr && s.lcorr.t0s !== 0 && Math.abs(now - s.lcorr.t0s) <= MAXSBSAGEL)
|
|
2053
|
+
long++;
|
|
2054
|
+
if (this.satCorrection(s.prn, week, tow)) corrected++;
|
|
2055
|
+
}
|
|
2056
|
+
return { masked, fast, long, corrected, ionoGrid: this.ionoGridPoints() };
|
|
2057
|
+
}
|
|
2028
2058
|
/**
|
|
2029
2059
|
* Satellite range/clock correction for a PRN at a GPS week/tow, or null if
|
|
2030
2060
|
* no valid (unexpired) long-term + fast correction is available. Add `dPos`
|
package/dist/positioning.d.cts
CHANGED
|
@@ -598,6 +598,26 @@ declare class SbasProcessor {
|
|
|
598
598
|
activeSats(): string[];
|
|
599
599
|
/** Number of ionospheric grid points with a valid delay across all bands. */
|
|
600
600
|
ionoGridPoints(): number;
|
|
601
|
+
/**
|
|
602
|
+
* Correction-coverage census at a GPS week/time — a diagnostic funnel over
|
|
603
|
+
* the current state, explaining how many masked satellites are actually
|
|
604
|
+
* correctable. Each stage subsumes the requirement of the previous one for a
|
|
605
|
+
* full range/clock correction: a satellite is `corrected` only when it has
|
|
606
|
+
* both a fresh fast correction and (for non-SBAS satellites) a fresh
|
|
607
|
+
* long-term correction (exactly {@link satCorrection}'s gate). `ionoGrid` is
|
|
608
|
+
* the total number of valid grid points — the additional requirement for the
|
|
609
|
+
* *iono*-corrected subset a solver forms per pierce point.
|
|
610
|
+
*
|
|
611
|
+
* Use it to tell "no corrections applied" (mask empty / products stale) apart
|
|
612
|
+
* from "corrections applied but the pierce points aren't grid-covered yet".
|
|
613
|
+
*/
|
|
614
|
+
coverage(week: number, tow: number): {
|
|
615
|
+
masked: number;
|
|
616
|
+
fast: number;
|
|
617
|
+
long: number;
|
|
618
|
+
corrected: number;
|
|
619
|
+
ionoGrid: number;
|
|
620
|
+
};
|
|
601
621
|
/**
|
|
602
622
|
* Satellite range/clock correction for a PRN at a GPS week/tow, or null if
|
|
603
623
|
* no valid (unexpired) long-term + fast correction is available. Add `dPos`
|
package/dist/positioning.d.ts
CHANGED
|
@@ -598,6 +598,26 @@ declare class SbasProcessor {
|
|
|
598
598
|
activeSats(): string[];
|
|
599
599
|
/** Number of ionospheric grid points with a valid delay across all bands. */
|
|
600
600
|
ionoGridPoints(): number;
|
|
601
|
+
/**
|
|
602
|
+
* Correction-coverage census at a GPS week/time — a diagnostic funnel over
|
|
603
|
+
* the current state, explaining how many masked satellites are actually
|
|
604
|
+
* correctable. Each stage subsumes the requirement of the previous one for a
|
|
605
|
+
* full range/clock correction: a satellite is `corrected` only when it has
|
|
606
|
+
* both a fresh fast correction and (for non-SBAS satellites) a fresh
|
|
607
|
+
* long-term correction (exactly {@link satCorrection}'s gate). `ionoGrid` is
|
|
608
|
+
* the total number of valid grid points — the additional requirement for the
|
|
609
|
+
* *iono*-corrected subset a solver forms per pierce point.
|
|
610
|
+
*
|
|
611
|
+
* Use it to tell "no corrections applied" (mask empty / products stale) apart
|
|
612
|
+
* from "corrections applied but the pierce points aren't grid-covered yet".
|
|
613
|
+
*/
|
|
614
|
+
coverage(week: number, tow: number): {
|
|
615
|
+
masked: number;
|
|
616
|
+
fast: number;
|
|
617
|
+
long: number;
|
|
618
|
+
corrected: number;
|
|
619
|
+
ionoGrid: number;
|
|
620
|
+
};
|
|
601
621
|
/**
|
|
602
622
|
* Satellite range/clock correction for a PRN at a GPS week/tow, or null if
|
|
603
623
|
* no valid (unexpired) long-term + fast correction is available. Add `dPos`
|
package/dist/positioning.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gnss-js",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.56.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,
|