gnss-js 1.23.0 → 1.24.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/index.cjs CHANGED
@@ -212,6 +212,8 @@ __export(src_exports, {
212
212
  ionoFree: () => ionoFree,
213
213
  keplerPosition: () => keplerPosition,
214
214
  klobucharDelay: () => klobucharDelay,
215
+ lambdaReduction: () => lambdaReduction,
216
+ lambdaSearch: () => lambdaSearch,
215
217
  maskRadForAzimuth: () => maskRadForAzimuth,
216
218
  msmEpochToDate: () => msmEpochToDate,
217
219
  navTimesFromEph: () => navTimesFromEph,
@@ -9680,6 +9682,207 @@ function klobucharDelay(coeffs, latRad, lonRad, azRad, elRad, gpsTowSec) {
9680
9682
  return F * (5e-9 + amp * (1 - x2 / 2 + x2 * x2 / 24));
9681
9683
  }
9682
9684
 
9685
+ // src/positioning/lambda.ts
9686
+ var LOOPMAX = 1e4;
9687
+ var ROUND = (x) => Math.floor(x + 0.5);
9688
+ var SGN = (x) => x <= 0 ? -1 : 1;
9689
+ function ldFactor(n, Q, L, D) {
9690
+ const A = Float64Array.from(Q);
9691
+ for (let i = n - 1; i >= 0; i--) {
9692
+ D[i] = A[i + i * n];
9693
+ if (D[i] <= 0) return false;
9694
+ const a = Math.sqrt(D[i]);
9695
+ for (let j = 0; j <= i; j++) L[i + j * n] = A[i + j * n] / a;
9696
+ for (let j = 0; j <= i - 1; j++)
9697
+ for (let k = 0; k <= j; k++) A[j + k * n] -= L[i + k * n] * L[i + j * n];
9698
+ for (let j = 0; j <= i; j++) L[i + j * n] /= L[i + i * n];
9699
+ }
9700
+ return true;
9701
+ }
9702
+ function gauss(n, L, Z2, i, j) {
9703
+ const mu = ROUND(L[i + j * n]);
9704
+ if (mu !== 0) {
9705
+ for (let k = i; k < n; k++) L[k + n * j] -= mu * L[k + i * n];
9706
+ for (let k = 0; k < n; k++) Z2[k + n * j] -= mu * Z2[k + i * n];
9707
+ }
9708
+ }
9709
+ function perm(n, L, D, j, del, Z2) {
9710
+ const eta = D[j] / del;
9711
+ const lam = D[j + 1] * L[j + 1 + j * n] / del;
9712
+ D[j] = eta * D[j + 1];
9713
+ D[j + 1] = del;
9714
+ for (let k = 0; k <= j - 1; k++) {
9715
+ const a0 = L[j + k * n];
9716
+ const a1 = L[j + 1 + k * n];
9717
+ L[j + k * n] = -L[j + 1 + j * n] * a0 + a1;
9718
+ L[j + 1 + k * n] = eta * a0 + lam * a1;
9719
+ }
9720
+ L[j + 1 + j * n] = lam;
9721
+ for (let k = j + 2; k < n; k++) {
9722
+ const t = L[k + j * n];
9723
+ L[k + j * n] = L[k + (j + 1) * n];
9724
+ L[k + (j + 1) * n] = t;
9725
+ }
9726
+ for (let k = 0; k < n; k++) {
9727
+ const t = Z2[k + j * n];
9728
+ Z2[k + j * n] = Z2[k + (j + 1) * n];
9729
+ Z2[k + (j + 1) * n] = t;
9730
+ }
9731
+ }
9732
+ function reduction(n, L, D, Z2) {
9733
+ let j = n - 2;
9734
+ let k = n - 2;
9735
+ while (j >= 0) {
9736
+ if (j <= k) for (let i = j + 1; i < n; i++) gauss(n, L, Z2, i, j);
9737
+ const del = D[j] + L[j + 1 + j * n] * L[j + 1 + j * n] * D[j + 1];
9738
+ if (del + 1e-6 < D[j + 1]) {
9739
+ perm(n, L, D, j, del, Z2);
9740
+ k = j;
9741
+ j = n - 2;
9742
+ } else j--;
9743
+ }
9744
+ }
9745
+ function search(n, m, L, D, zs, zn, s) {
9746
+ let nn = 0;
9747
+ let imax = 0;
9748
+ let maxdist = 1e99;
9749
+ const S = new Float64Array(n * n);
9750
+ const dist = new Float64Array(n);
9751
+ const zb = new Float64Array(n);
9752
+ const z = new Float64Array(n);
9753
+ const step = new Float64Array(n);
9754
+ let k = n - 1;
9755
+ dist[k] = 0;
9756
+ zb[k] = zs[k];
9757
+ z[k] = ROUND(zb[k]);
9758
+ let y = zb[k] - z[k];
9759
+ step[k] = SGN(y);
9760
+ let c = 0;
9761
+ for (; c < LOOPMAX; c++) {
9762
+ const newdist = dist[k] + y * y / D[k];
9763
+ if (newdist < maxdist) {
9764
+ if (k !== 0) {
9765
+ dist[--k] = newdist;
9766
+ for (let i = 0; i <= k; i++)
9767
+ S[k + i * n] = S[k + 1 + i * n] + (z[k + 1] - zb[k + 1]) * L[k + 1 + i * n];
9768
+ zb[k] = zs[k] + S[k + k * n];
9769
+ z[k] = ROUND(zb[k]);
9770
+ y = zb[k] - z[k];
9771
+ step[k] = SGN(y);
9772
+ } else {
9773
+ if (nn < m) {
9774
+ if (nn === 0 || newdist > s[imax]) imax = nn;
9775
+ for (let i = 0; i < n; i++) zn[i + nn * n] = z[i];
9776
+ s[nn++] = newdist;
9777
+ } else {
9778
+ if (newdist < s[imax]) {
9779
+ for (let i = 0; i < n; i++) zn[i + imax * n] = z[i];
9780
+ s[imax] = newdist;
9781
+ imax = 0;
9782
+ for (let i = 0; i < m; i++) if (s[imax] < s[i]) imax = i;
9783
+ }
9784
+ maxdist = s[imax];
9785
+ }
9786
+ z[0] += step[0];
9787
+ y = zb[0] - z[0];
9788
+ step[0] = -step[0] - SGN(step[0]);
9789
+ }
9790
+ } else {
9791
+ if (k === n - 1) break;
9792
+ k++;
9793
+ z[k] += step[k];
9794
+ y = zb[k] - z[k];
9795
+ step[k] = -step[k] - SGN(step[k]);
9796
+ }
9797
+ }
9798
+ for (let i = 0; i < m - 1; i++) {
9799
+ for (let j = i + 1; j < m; j++) {
9800
+ if (s[i] < s[j]) continue;
9801
+ const t = s[i];
9802
+ s[i] = s[j];
9803
+ s[j] = t;
9804
+ for (let l = 0; l < n; l++) {
9805
+ const u = zn[l + i * n];
9806
+ zn[l + i * n] = zn[l + j * n];
9807
+ zn[l + j * n] = u;
9808
+ }
9809
+ }
9810
+ }
9811
+ return c < LOOPMAX;
9812
+ }
9813
+ function solveZt(n, m, Z2, E) {
9814
+ const w = n + m;
9815
+ const M = new Float64Array(n * w);
9816
+ for (let r = 0; r < n; r++) {
9817
+ for (let cIdx = 0; cIdx < n; cIdx++) M[r * w + cIdx] = Z2[cIdx + r * n];
9818
+ for (let cIdx = 0; cIdx < m; cIdx++) M[r * w + n + cIdx] = E[r + cIdx * n];
9819
+ }
9820
+ for (let col = 0; col < n; col++) {
9821
+ let piv = col;
9822
+ for (let r = col + 1; r < n; r++)
9823
+ if (Math.abs(M[r * w + col]) > Math.abs(M[piv * w + col])) piv = r;
9824
+ if (Math.abs(M[piv * w + col]) < 1e-12) return null;
9825
+ if (piv !== col) {
9826
+ for (let cIdx = col; cIdx < w; cIdx++) {
9827
+ const t = M[col * w + cIdx];
9828
+ M[col * w + cIdx] = M[piv * w + cIdx];
9829
+ M[piv * w + cIdx] = t;
9830
+ }
9831
+ }
9832
+ const d = M[col * w + col];
9833
+ for (let cIdx = col; cIdx < w; cIdx++) M[col * w + cIdx] /= d;
9834
+ for (let r = 0; r < n; r++) {
9835
+ if (r === col) continue;
9836
+ const f = M[r * w + col];
9837
+ if (f === 0) continue;
9838
+ for (let cIdx = col; cIdx < w; cIdx++)
9839
+ M[r * w + cIdx] -= f * M[col * w + cIdx];
9840
+ }
9841
+ }
9842
+ const X = new Float64Array(n * m);
9843
+ for (let r = 0; r < n; r++)
9844
+ for (let cIdx = 0; cIdx < m; cIdx++) X[r + cIdx * n] = M[r * w + n + cIdx];
9845
+ return X;
9846
+ }
9847
+ function lambdaSearch(a, Q, n, m = 2) {
9848
+ if (n <= 0 || m <= 0 || a.length < n || Q.length < n * n) return null;
9849
+ const L = new Float64Array(n * n);
9850
+ const D = new Float64Array(n);
9851
+ if (!ldFactor(n, Q, L, D)) return null;
9852
+ const Z2 = new Float64Array(n * n);
9853
+ for (let i = 0; i < n; i++) Z2[i + i * n] = 1;
9854
+ reduction(n, L, D, Z2);
9855
+ const z = new Float64Array(n);
9856
+ for (let j = 0; j < n; j++) {
9857
+ let sum = 0;
9858
+ for (let k = 0; k < n; k++) sum += Z2[k + j * n] * a[k];
9859
+ z[j] = sum;
9860
+ }
9861
+ const E = new Float64Array(n * m);
9862
+ const s = new Float64Array(m);
9863
+ if (!search(n, m, L, D, z, E, s)) return null;
9864
+ const F = solveZt(n, m, Z2, E);
9865
+ if (!F) return null;
9866
+ const candidates = [];
9867
+ for (let c = 0; c < m; c++) {
9868
+ const v = new Float64Array(n);
9869
+ for (let i = 0; i < n; i++) v[i] = ROUND(F[i + c * n]);
9870
+ candidates.push(v);
9871
+ }
9872
+ const ratio = m >= 2 && s[0] > 0 ? s[1] / s[0] : Infinity;
9873
+ return { candidates, residuals: s, ratio };
9874
+ }
9875
+ function lambdaReduction(Q, n) {
9876
+ if (n <= 0 || Q.length < n * n) return null;
9877
+ const L = new Float64Array(n * n);
9878
+ const D = new Float64Array(n);
9879
+ if (!ldFactor(n, Q, L, D)) return null;
9880
+ const Z2 = new Float64Array(n * n);
9881
+ for (let i = 0; i < n; i++) Z2[i + i * n] = 1;
9882
+ reduction(n, L, D, Z2);
9883
+ return Z2;
9884
+ }
9885
+
9683
9886
  // src/positioning/rtk.ts
9684
9887
  var L1_CODES = {
9685
9888
  G: ["1C"],
@@ -10040,7 +10243,13 @@ var RtkFloatEngine = class {
10040
10243
  maxGapMs: opts.maxGapMs ?? 1e4,
10041
10244
  codeGateM: opts.codeGateM ?? 30,
10042
10245
  slipGateM: opts.slipGateM ?? 5,
10043
- updateIterations: opts.updateIterations ?? 2
10246
+ updateIterations: opts.updateIterations ?? 2,
10247
+ ambiguityResolution: opts.ambiguityResolution ?? "off",
10248
+ ratioThreshold: opts.ratioThreshold ?? 3,
10249
+ arElevationMaskDeg: opts.arElevationMaskDeg ?? 0,
10250
+ glonassAr: opts.glonassAr ?? false,
10251
+ partialFixing: opts.partialFixing ?? true,
10252
+ minFixAmbiguities: opts.minFixAmbiguities ?? 4
10044
10253
  };
10045
10254
  }
10046
10255
  /** Clear all filter state (position, ambiguities, lock history). */
@@ -10098,6 +10307,56 @@ var RtkFloatEngine = class {
10098
10307
  const entry = this.amb[newRefIdx];
10099
10308
  entry.prn = oldRef;
10100
10309
  }
10310
+ /**
10311
+ * Try to fix the ambiguity subset `idxs` (indices into `this.amb`):
10312
+ * extract the float subvector b and covariance Q_b from the filter,
10313
+ * run MLAMBDA and, without touching the filter state, condition the
10314
+ * position on the best integer candidate,
10315
+ * xa = x − P_xb·Q_b⁻¹·(b − ǎ)
10316
+ * (RTKLIB rtkpos.c `resamb_LAMBDA`). Returns null when Q_b is not
10317
+ * positive definite / invertible or the search fails; ratio
10318
+ * validation is the caller's job.
10319
+ */
10320
+ tryFix(idxs) {
10321
+ const k = idxs.length;
10322
+ const b = new Float64Array(k);
10323
+ const Qb = new Float64Array(k * k);
10324
+ const QbRows = [];
10325
+ for (let i = 0; i < k; i++) {
10326
+ const si = 3 + idxs[i];
10327
+ b[i] = this.x[si];
10328
+ const row = [];
10329
+ for (let j = 0; j < k; j++) {
10330
+ const sj = 3 + idxs[j];
10331
+ const q = (this.P[si][sj] + this.P[sj][si]) / 2;
10332
+ Qb[i + j * k] = q;
10333
+ row.push(q);
10334
+ }
10335
+ QbRows.push(row);
10336
+ }
10337
+ const res = lambdaSearch(b, Qb, k, 2);
10338
+ if (!res) return null;
10339
+ const best = res.candidates[0];
10340
+ const QbInv = matInv(QbRows);
10341
+ if (!QbInv) return null;
10342
+ const db = [];
10343
+ for (let i = 0; i < k; i++) db.push(b[i] - best[i]);
10344
+ const position = [
10345
+ this.x[0],
10346
+ this.x[1],
10347
+ this.x[2]
10348
+ ];
10349
+ for (let r = 0; r < 3; r++) {
10350
+ let dx = 0;
10351
+ for (let i = 0; i < k; i++) {
10352
+ let yi = 0;
10353
+ for (let j = 0; j < k; j++) yi += QbInv[i][j] * db[j];
10354
+ dx += this.P[r][3 + idxs[i]] * yi;
10355
+ }
10356
+ position[r] -= dx;
10357
+ }
10358
+ return { ratio: res.ratio, position, intAmb: [...best] };
10359
+ }
10101
10360
  /**
10102
10361
  * Process one synchronized epoch (same nominal `timeMs` for both
10103
10362
  * receivers). Returns null until a first position can be
@@ -10348,6 +10607,47 @@ var RtkFloatEngine = class {
10348
10607
  Pnew[j][i] = s;
10349
10608
  }
10350
10609
  this.P = Pnew;
10610
+ let status = rows.some(
10611
+ (r) => r.kind === "phase"
10612
+ ) ? "float" : "dgnss";
10613
+ let ratio;
10614
+ let nFixed;
10615
+ let fixedPos = null;
10616
+ let fixedAmbiguities;
10617
+ if (o.ambiguityResolution === "instant") {
10618
+ const cands = [];
10619
+ for (const row of rows) {
10620
+ if (row.kind !== "phase") continue;
10621
+ if (row.g.prn[0] === "R" && !o.glonassAr) continue;
10622
+ if (row.g.elB < o.arElevationMaskDeg * Math.PI / 180) continue;
10623
+ cands.push({ idx: row.ambIdx, el: row.g.elB });
10624
+ }
10625
+ cands.sort((a, b) => b.el - a.el);
10626
+ const floor = Math.max(
10627
+ o.minFixAmbiguities,
10628
+ Math.ceil(cands.length / 2),
10629
+ 1
10630
+ );
10631
+ while (cands.length >= floor) {
10632
+ const fix = this.tryFix(cands.map((c) => c.idx));
10633
+ if (!fix) break;
10634
+ const capped = Math.min(fix.ratio, 999.9);
10635
+ ratio ??= capped;
10636
+ if (fix.ratio >= o.ratioThreshold) {
10637
+ ratio = capped;
10638
+ status = "fixed";
10639
+ nFixed = cands.length;
10640
+ fixedPos = fix.position;
10641
+ fixedAmbiguities = {};
10642
+ cands.forEach((c, i) => {
10643
+ fixedAmbiguities[this.amb[c.idx].prn] = fix.intAmb[i];
10644
+ });
10645
+ break;
10646
+ }
10647
+ if (!o.partialFixing) break;
10648
+ cands.pop();
10649
+ }
10650
+ }
10351
10651
  for (const g of geom) {
10352
10652
  if (g.cpR === null || g.cpB === null) continue;
10353
10653
  this.track.set(g.prn, { lockR: g.lockR, lockB: g.lockB, lastMs: timeMs });
@@ -10361,14 +10661,22 @@ var RtkFloatEngine = class {
10361
10661
  const nSats = new Set(rows.flatMap((r) => [r.g.prn, r.ref.prn])).size;
10362
10662
  return {
10363
10663
  timeMs,
10364
- position: [this.x[0], this.x[1], this.x[2]],
10664
+ position: fixedPos ?? [this.x[0], this.x[1], this.x[2]],
10365
10665
  floatBaseline: [
10366
10666
  this.x[0] - this.basePos[0],
10367
10667
  this.x[1] - this.basePos[1],
10368
10668
  this.x[2] - this.basePos[2]
10369
10669
  ],
10670
+ status,
10370
10671
  nSats,
10371
- ratio: void 0,
10672
+ ratio,
10673
+ nFixed,
10674
+ fixedBaseline: fixedPos ? [
10675
+ fixedPos[0] - this.basePos[0],
10676
+ fixedPos[1] - this.basePos[1],
10677
+ fixedPos[2] - this.basePos[2]
10678
+ ] : void 0,
10679
+ fixedAmbiguities,
10372
10680
  sigmas: [
10373
10681
  Math.sqrt(Math.max(this.P[0][0], 0)),
10374
10682
  Math.sqrt(Math.max(this.P[1][1], 0)),
@@ -13044,6 +13352,8 @@ function computePsdDb(centerMHz, halfSpanChips, numPoints, psdFn, f0 = 1023e3, f
13044
13352
  ionoFree,
13045
13353
  keplerPosition,
13046
13354
  klobucharDelay,
13355
+ lambdaReduction,
13356
+ lambdaSearch,
13047
13357
  maskRadForAzimuth,
13048
13358
  msmEpochToDate,
13049
13359
  navTimesFromEph,
package/dist/index.d.cts CHANGED
@@ -14,7 +14,7 @@ export { HasMessage, SbfBdsNavResult, SbfCnavEphemeris, SbfCnavResult, SbfGalEph
14
14
  export { NovatelEpoch, NovatelMeasurement, NovatelNavResult, NovatelParseResult, OEM4_HLEN, Oem4Frame, crc32, oem4Frames, parseNovatelNav, parseNovatelRange } from './novatel.cjs';
15
15
  export { AllPositionsData, AlmanacPosition, DopValues, EpochSkyData, SatAzEl, SatPoint, SatPosition, VisibilityPass, VisibilityResult, almanacEpochMs, almanacSatPosition, computeAllPositions, computeDop, computeLiveSkyPositions, computeSatPosition, computeVisibility, computeVisibilityFromPositions, dopplerHz, ecefToAzEl, ephInfoToEphemeris, glonassAlmanacEpochMs, glonassAlmanacPosition, glonassPosition, keplerPosition, maskRadForAzimuth, navTimesFromEph, rangeRate, selectEphemeris } from './orbit.cjs';
16
16
  export { Helmert14, REFERENCE_FRAMES, ReferenceFrame, applyHelmert, dateToEpoch, transformFrame } from './frames.cjs';
17
- export { DgnssOptions, DgnssSolution, EphemerisSource, KlobucharCoeffs, RawObservation, RtkEpochMeasurements, RtkFloatEngine, RtkFloatOptions, RtkFloatSolution, RtkMeasurement, SppOptions, SppSolution, ionoFree, klobucharDelay, satClockCorrection, solveDgnss, solveSpp, toRtkEpoch } from './positioning.cjs';
17
+ export { DgnssOptions, DgnssSolution, EphemerisSource, KlobucharCoeffs, LambdaResult, RawObservation, RtkEpochMeasurements, RtkFloatEngine, RtkFloatOptions, RtkFloatSolution, RtkMeasurement, SppOptions, SppSolution, ionoFree, klobucharDelay, lambdaReduction, lambdaSearch, satClockCorrection, solveDgnss, solveSpp, toRtkEpoch } from './positioning.cjs';
18
18
  export { NtripCaster, NtripConnectionInfo, NtripNetwork, NtripStream, NtripStreamConnection, NtripVersion, Sourcetable, SourcetableEntry, connectToMountpoint, fetchSourcetable, parseSourcetable } from './ntrip.cjs';
19
19
  export { CompleteSatSignal, CompleteSignalStats, CompletenessAccumulator, CompletenessResult, CycleSlipAccumulator, CycleSlipEvent, CycleSlipResult, CycleSlipSignalStats, IonoAccumulator, IonoDcbResult, IonoPoint, IonoRatePoint, IonoRateSeries, IonoResult, IonoSeries, MultipathAccumulator, MultipathPoint, MultipathResult, MultipathSeries, MultipathSignalStat, QualityResult, SatDcbMap, analyzeQuality, applyIonoDcb, computeIonoRate, detrendIonoArcs, parseSinexBiasDcb } from './analysis.cjs';
20
20
  export { AntennaEntry, AntexFile, FrequencyData, frequencyLabel, parseAntex } from './antex.cjs';
package/dist/index.d.ts CHANGED
@@ -14,7 +14,7 @@ export { HasMessage, SbfBdsNavResult, SbfCnavEphemeris, SbfCnavResult, SbfGalEph
14
14
  export { NovatelEpoch, NovatelMeasurement, NovatelNavResult, NovatelParseResult, OEM4_HLEN, Oem4Frame, crc32, oem4Frames, parseNovatelNav, parseNovatelRange } from './novatel.js';
15
15
  export { AllPositionsData, AlmanacPosition, DopValues, EpochSkyData, SatAzEl, SatPoint, SatPosition, VisibilityPass, VisibilityResult, almanacEpochMs, almanacSatPosition, computeAllPositions, computeDop, computeLiveSkyPositions, computeSatPosition, computeVisibility, computeVisibilityFromPositions, dopplerHz, ecefToAzEl, ephInfoToEphemeris, glonassAlmanacEpochMs, glonassAlmanacPosition, glonassPosition, keplerPosition, maskRadForAzimuth, navTimesFromEph, rangeRate, selectEphemeris } from './orbit.js';
16
16
  export { Helmert14, REFERENCE_FRAMES, ReferenceFrame, applyHelmert, dateToEpoch, transformFrame } from './frames.js';
17
- export { DgnssOptions, DgnssSolution, EphemerisSource, KlobucharCoeffs, RawObservation, RtkEpochMeasurements, RtkFloatEngine, RtkFloatOptions, RtkFloatSolution, RtkMeasurement, SppOptions, SppSolution, ionoFree, klobucharDelay, satClockCorrection, solveDgnss, solveSpp, toRtkEpoch } from './positioning.js';
17
+ export { DgnssOptions, DgnssSolution, EphemerisSource, KlobucharCoeffs, LambdaResult, RawObservation, RtkEpochMeasurements, RtkFloatEngine, RtkFloatOptions, RtkFloatSolution, RtkMeasurement, SppOptions, SppSolution, ionoFree, klobucharDelay, lambdaReduction, lambdaSearch, satClockCorrection, solveDgnss, solveSpp, toRtkEpoch } from './positioning.js';
18
18
  export { NtripCaster, NtripConnectionInfo, NtripNetwork, NtripStream, NtripStreamConnection, NtripVersion, Sourcetable, SourcetableEntry, connectToMountpoint, fetchSourcetable, parseSourcetable } from './ntrip.js';
19
19
  export { CompleteSatSignal, CompleteSignalStats, CompletenessAccumulator, CompletenessResult, CycleSlipAccumulator, CycleSlipEvent, CycleSlipResult, CycleSlipSignalStats, IonoAccumulator, IonoDcbResult, IonoPoint, IonoRatePoint, IonoRateSeries, IonoResult, IonoSeries, MultipathAccumulator, MultipathPoint, MultipathResult, MultipathSeries, MultipathSignalStat, QualityResult, SatDcbMap, analyzeQuality, applyIonoDcb, computeIonoRate, detrendIonoArcs, parseSinexBiasDcb } from './analysis.js';
20
20
  export { AntennaEntry, AntexFile, FrequencyData, frequencyLabel, parseAntex } from './antex.js';
package/dist/index.js CHANGED
@@ -131,11 +131,13 @@ import {
131
131
  RtkFloatEngine,
132
132
  ionoFree,
133
133
  klobucharDelay,
134
+ lambdaReduction,
135
+ lambdaSearch,
134
136
  satClockCorrection,
135
137
  solveDgnss,
136
138
  solveSpp,
137
139
  toRtkEpoch
138
- } from "./chunk-CUWF56ST.js";
140
+ } from "./chunk-T2ZMNRCY.js";
139
141
  import {
140
142
  almanacEpochMs,
141
143
  almanacSatPosition,
@@ -496,6 +498,8 @@ export {
496
498
  ionoFree,
497
499
  keplerPosition,
498
500
  klobucharDelay,
501
+ lambdaReduction,
502
+ lambdaSearch,
499
503
  maskRadForAzimuth,
500
504
  msmEpochToDate,
501
505
  navTimesFromEph,