gnss-js 1.66.0 → 2.0.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/README.md +144 -132
- package/dist/{chunk-REULRNJ5.js → chunk-WVTDVPKA.js} +151 -188
- package/dist/{ephemeris-Ohl6NAfw.d.cts → ephemeris-BAnBLLB9.d.cts} +0 -1
- package/dist/{ephemeris-Ohl6NAfw.d.ts → ephemeris-BAnBLLB9.d.ts} +0 -1
- package/dist/index.cjs +152 -188
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +5 -3
- package/dist/orbit.d.cts +1 -1
- package/dist/orbit.d.ts +1 -1
- package/dist/positioning.d.cts +1 -1
- package/dist/positioning.d.ts +1 -1
- package/dist/rtcm3.cjs +181 -217
- package/dist/rtcm3.d.cts +28 -15
- package/dist/rtcm3.d.ts +28 -15
- package/dist/rtcm3.js +5 -3
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -149,6 +149,7 @@ __export(src_exports, {
|
|
|
149
149
|
decodeIgsSsr: () => decodeIgsSsr,
|
|
150
150
|
decodeLegacyObs: () => decodeLegacyObs,
|
|
151
151
|
decodeMsmFull: () => decodeMsmFull,
|
|
152
|
+
decodeObs: () => decodeObs,
|
|
152
153
|
decodeSbfNavigation: () => decodeSbfNavigation,
|
|
153
154
|
decodeSsr: () => decodeSsr,
|
|
154
155
|
decodeSystemParams: () => decodeSystemParams,
|
|
@@ -252,11 +253,11 @@ __export(src_exports, {
|
|
|
252
253
|
looksLikeRtcm2: () => looksLikeRtcm2,
|
|
253
254
|
maskRadForAzimuth: () => maskRadForAzimuth,
|
|
254
255
|
moonEcef: () => moonEcef,
|
|
255
|
-
msmEpochToDate: () => msmEpochToDate,
|
|
256
256
|
navTimesFromEph: () => navTimesFromEph,
|
|
257
257
|
niellMapping: () => niellMapping,
|
|
258
258
|
nlWavelength: () => nlWavelength,
|
|
259
259
|
nmeaCoordToDecimal: () => nmeaCoordToDecimal,
|
|
260
|
+
obsEpochToDate: () => obsEpochToDate,
|
|
260
261
|
oem4Frames: () => oem4Frames,
|
|
261
262
|
padL: () => padL,
|
|
262
263
|
padR: () => padR,
|
|
@@ -4787,9 +4788,6 @@ var BitReader = class {
|
|
|
4787
4788
|
skip(n) {
|
|
4788
4789
|
this.bitPos += n;
|
|
4789
4790
|
}
|
|
4790
|
-
get bitsLeft() {
|
|
4791
|
-
return this.data.length * 8 - this.bitPos;
|
|
4792
|
-
}
|
|
4793
4791
|
};
|
|
4794
4792
|
function crc24q2(data, length) {
|
|
4795
4793
|
let crc = 0;
|
|
@@ -5291,7 +5289,7 @@ function decodeEphemeris(frame) {
|
|
|
5291
5289
|
}
|
|
5292
5290
|
}
|
|
5293
5291
|
|
|
5294
|
-
// src/rtcm3/
|
|
5292
|
+
// src/rtcm3/ssr-common.ts
|
|
5295
5293
|
var UPDATE_INTERVAL_S = [
|
|
5296
5294
|
1,
|
|
5297
5295
|
2,
|
|
@@ -5310,6 +5308,28 @@ var UPDATE_INTERVAL_S = [
|
|
|
5310
5308
|
7200,
|
|
5311
5309
|
10800
|
|
5312
5310
|
];
|
|
5311
|
+
function ssrUraMm(v) {
|
|
5312
|
+
if (v === 0) return null;
|
|
5313
|
+
const cls = v >> 3 & 7;
|
|
5314
|
+
const val = v & 7;
|
|
5315
|
+
return 3 ** cls * (1 + val / 4) - 1;
|
|
5316
|
+
}
|
|
5317
|
+
function readSsrOrbit(r, sat) {
|
|
5318
|
+
sat.iode = r.readU(8);
|
|
5319
|
+
sat.deltaRadial = r.readS(22) * 1e-4;
|
|
5320
|
+
sat.deltaAlongTrack = r.readS(20) * 4e-4;
|
|
5321
|
+
sat.deltaCrossTrack = r.readS(20) * 4e-4;
|
|
5322
|
+
sat.dotRadial = r.readS(21) * 1e-6;
|
|
5323
|
+
sat.dotAlongTrack = r.readS(19) * 4e-6;
|
|
5324
|
+
sat.dotCrossTrack = r.readS(19) * 4e-6;
|
|
5325
|
+
}
|
|
5326
|
+
function readSsrClock(r, sat) {
|
|
5327
|
+
sat.c0 = r.readS(22) * 1e-4;
|
|
5328
|
+
sat.c1 = r.readS(21) * 1e-6;
|
|
5329
|
+
sat.c2 = r.readS(27) * 2e-8;
|
|
5330
|
+
}
|
|
5331
|
+
|
|
5332
|
+
// src/rtcm3/igs-ssr.ts
|
|
5313
5333
|
var SYSTEM_BY_BASE = {
|
|
5314
5334
|
20: "G",
|
|
5315
5335
|
40: "R",
|
|
@@ -5333,12 +5353,6 @@ function prnFor(system, id) {
|
|
|
5333
5353
|
if (system === "S") return `S${two(19 + id)}`;
|
|
5334
5354
|
return `${system}${two(id)}`;
|
|
5335
5355
|
}
|
|
5336
|
-
function ssrUraMm(v) {
|
|
5337
|
-
if (v === 0) return null;
|
|
5338
|
-
const cls = v >> 3 & 7;
|
|
5339
|
-
const val = v & 7;
|
|
5340
|
-
return 3 ** cls * (1 + val / 4) - 1;
|
|
5341
|
-
}
|
|
5342
5356
|
function decodeIgsSsr(frame) {
|
|
5343
5357
|
if (frame.messageType !== 4076) return null;
|
|
5344
5358
|
const r = new BitReader(frame.payload);
|
|
@@ -5365,26 +5379,12 @@ function decodeIgsSsr(frame) {
|
|
|
5365
5379
|
mwConsistency = r.readU(1) === 1;
|
|
5366
5380
|
}
|
|
5367
5381
|
const nsat = r.readU(6);
|
|
5368
|
-
const readOrbit = (s) => {
|
|
5369
|
-
s.iode = r.readU(8);
|
|
5370
|
-
s.deltaRadial = r.readS(22) * 1e-4;
|
|
5371
|
-
s.deltaAlongTrack = r.readS(20) * 4e-4;
|
|
5372
|
-
s.deltaCrossTrack = r.readS(20) * 4e-4;
|
|
5373
|
-
s.dotRadial = r.readS(21) * 1e-6;
|
|
5374
|
-
s.dotAlongTrack = r.readS(19) * 4e-6;
|
|
5375
|
-
s.dotCrossTrack = r.readS(19) * 4e-6;
|
|
5376
|
-
};
|
|
5377
|
-
const readClock2 = (s) => {
|
|
5378
|
-
s.c0 = r.readS(22) * 1e-4;
|
|
5379
|
-
s.c1 = r.readS(21) * 1e-6;
|
|
5380
|
-
s.c2 = r.readS(27) * 2e-8;
|
|
5381
|
-
};
|
|
5382
5382
|
const satellites = [];
|
|
5383
5383
|
for (let i = 0; i < nsat; i++) {
|
|
5384
5384
|
const id = r.readU(6);
|
|
5385
5385
|
const sat = { prn: prnFor(system, id) };
|
|
5386
|
-
if (kind === "orbit" || kind === "combined")
|
|
5387
|
-
if (kind === "clock" || kind === "combined")
|
|
5386
|
+
if (kind === "orbit" || kind === "combined") readSsrOrbit(r, sat);
|
|
5387
|
+
if (kind === "clock" || kind === "combined") readSsrClock(r, sat);
|
|
5388
5388
|
else if (kind === "ura")
|
|
5389
5389
|
sat.uraMm = ssrUraMm(r.readU(6));
|
|
5390
5390
|
else if (kind === "highRateClock")
|
|
@@ -5477,116 +5477,6 @@ function decodeIono(r, version, im) {
|
|
|
5477
5477
|
};
|
|
5478
5478
|
}
|
|
5479
5479
|
|
|
5480
|
-
// src/rtcm3/legacy-obs.ts
|
|
5481
|
-
var PRUNIT_GPS = 299792.458;
|
|
5482
|
-
var PRUNIT_GLO = 599584.916;
|
|
5483
|
-
var LAM_GPS_L1 = C_LIGHT / 157542e4;
|
|
5484
|
-
var LAM_GPS_L2 = C_LIGHT / 12276e5;
|
|
5485
|
-
var PPR_INVALID = -(2 ** 19);
|
|
5486
|
-
var PR21_INVALID = -(2 ** 13);
|
|
5487
|
-
function legacyLockSec(i) {
|
|
5488
|
-
if (i < 24) return i;
|
|
5489
|
-
if (i < 48) return 2 * i - 24;
|
|
5490
|
-
if (i < 72) return 4 * i - 120;
|
|
5491
|
-
if (i < 96) return 8 * i - 408;
|
|
5492
|
-
if (i < 120) return 16 * i - 1176;
|
|
5493
|
-
if (i < 127) return 32 * i - 3096;
|
|
5494
|
-
return 937;
|
|
5495
|
-
}
|
|
5496
|
-
var two2 = (n) => n.toString().padStart(2, "0");
|
|
5497
|
-
function decodeLegacyObs(frame) {
|
|
5498
|
-
const type = frame.messageType;
|
|
5499
|
-
const gps = type >= 1001 && type <= 1004;
|
|
5500
|
-
const glo = type >= 1009 && type <= 1012;
|
|
5501
|
-
if (!gps && !glo) return null;
|
|
5502
|
-
const ext = type === 1002 || type === 1004 || type === 1010 || type === 1012;
|
|
5503
|
-
const dual = type === 1003 || type === 1004 || type === 1011 || type === 1012;
|
|
5504
|
-
const system = gps ? "G" : "R";
|
|
5505
|
-
const r = new BitReader(frame.payload);
|
|
5506
|
-
r.readU(12);
|
|
5507
|
-
r.readU(12);
|
|
5508
|
-
let epochMs;
|
|
5509
|
-
let nsat;
|
|
5510
|
-
if (gps) {
|
|
5511
|
-
epochMs = r.readU(30);
|
|
5512
|
-
r.readU(1);
|
|
5513
|
-
nsat = r.readU(5);
|
|
5514
|
-
r.readU(1);
|
|
5515
|
-
r.readU(3);
|
|
5516
|
-
} else {
|
|
5517
|
-
const tk = r.readU(27);
|
|
5518
|
-
r.readU(1);
|
|
5519
|
-
nsat = r.readU(5);
|
|
5520
|
-
r.readU(1);
|
|
5521
|
-
r.readU(3);
|
|
5522
|
-
const gloDow = new Date(Date.now() + 3 * 36e5).getUTCDay();
|
|
5523
|
-
epochMs = (gloDow << 27 | tk) >>> 0;
|
|
5524
|
-
}
|
|
5525
|
-
const observations = [];
|
|
5526
|
-
for (let s = 0; s < nsat; s++) {
|
|
5527
|
-
const satId = r.readU(6);
|
|
5528
|
-
const code1 = r.readU(1);
|
|
5529
|
-
const freqCh = glo ? r.readU(5) : 0;
|
|
5530
|
-
const pr1raw = r.readU(gps ? 24 : 25);
|
|
5531
|
-
const ppr1 = r.readS(20);
|
|
5532
|
-
const lock1 = r.readU(7);
|
|
5533
|
-
let amb = 0;
|
|
5534
|
-
let cnr1 = 0;
|
|
5535
|
-
if (ext) {
|
|
5536
|
-
amb = r.readU(gps ? 8 : 7);
|
|
5537
|
-
cnr1 = r.readU(8);
|
|
5538
|
-
}
|
|
5539
|
-
let code2 = 0;
|
|
5540
|
-
let pr21 = 0;
|
|
5541
|
-
let ppr2 = 0;
|
|
5542
|
-
let lock2 = 0;
|
|
5543
|
-
let cnr2 = 0;
|
|
5544
|
-
if (dual) {
|
|
5545
|
-
code2 = r.readU(2);
|
|
5546
|
-
pr21 = r.readS(14);
|
|
5547
|
-
ppr2 = r.readS(20);
|
|
5548
|
-
lock2 = r.readU(7);
|
|
5549
|
-
if (ext) cnr2 = r.readU(8);
|
|
5550
|
-
}
|
|
5551
|
-
if (gps && (satId < 1 || satId > 32)) continue;
|
|
5552
|
-
if (glo && (satId < 1 || satId > 24)) continue;
|
|
5553
|
-
const prunit = gps ? PRUNIT_GPS : PRUNIT_GLO;
|
|
5554
|
-
const pr1 = pr1raw * 0.02 + amb * prunit;
|
|
5555
|
-
const k = freqCh - 7;
|
|
5556
|
-
const lamL1 = gps ? LAM_GPS_L1 : C_LIGHT / (GLO_F1_BASE + k * GLO_F1_STEP);
|
|
5557
|
-
const lamL2 = gps ? LAM_GPS_L2 : C_LIGHT / (GLO_F2_BASE + k * GLO_F2_STEP);
|
|
5558
|
-
const signals = [];
|
|
5559
|
-
{
|
|
5560
|
-
const sig = {
|
|
5561
|
-
rinexCode: gps ? code1 ? "1W" : "1C" : code1 ? "1P" : "1C",
|
|
5562
|
-
pseudorange: pr1,
|
|
5563
|
-
wavelength: lamL1,
|
|
5564
|
-
lockTime: legacyLockSec(lock1)
|
|
5565
|
-
};
|
|
5566
|
-
if (ppr1 !== PPR_INVALID) sig.phase = (pr1 + ppr1 * 5e-4) / lamL1;
|
|
5567
|
-
if (ext && cnr1 > 0) sig.cn0 = cnr1 * 0.25;
|
|
5568
|
-
signals.push(sig);
|
|
5569
|
-
}
|
|
5570
|
-
if (dual) {
|
|
5571
|
-
const sig = {
|
|
5572
|
-
rinexCode: gps ? code2 === 0 ? "2X" : "2W" : code2 === 0 ? "2C" : "2P",
|
|
5573
|
-
wavelength: lamL2,
|
|
5574
|
-
lockTime: legacyLockSec(lock2)
|
|
5575
|
-
};
|
|
5576
|
-
if (pr21 !== PR21_INVALID) sig.pseudorange = pr1 + pr21 * 0.02;
|
|
5577
|
-
if (ppr2 !== PPR_INVALID) sig.phase = (pr1 + ppr2 * 5e-4) / lamL2;
|
|
5578
|
-
if (ext && cnr2 > 0) sig.cn0 = cnr2 * 0.25;
|
|
5579
|
-
signals.push(sig);
|
|
5580
|
-
}
|
|
5581
|
-
observations.push({
|
|
5582
|
-
prn: `${system}${two2(satId)}`,
|
|
5583
|
-
system,
|
|
5584
|
-
signals
|
|
5585
|
-
});
|
|
5586
|
-
}
|
|
5587
|
-
return { messageType: type, epochMs, system, observations };
|
|
5588
|
-
}
|
|
5589
|
-
|
|
5590
5480
|
// src/rtcm3/msm.ts
|
|
5591
5481
|
var GPS_L1 = FREQ.G["1"];
|
|
5592
5482
|
var GPS_L2 = FREQ.G["2"];
|
|
@@ -6085,7 +5975,7 @@ function decodeMsmFull(frame) {
|
|
|
6085
5975
|
}
|
|
6086
5976
|
var GPS_EPOCH = START_GPS_TIME.getTime();
|
|
6087
5977
|
var MS_PER_WEEK = MILLISECONDS_IN_WEEK;
|
|
6088
|
-
function
|
|
5978
|
+
function obsEpochToDate(sys, epochMs, refTime = /* @__PURE__ */ new Date()) {
|
|
6089
5979
|
const refMs = refTime.getTime();
|
|
6090
5980
|
if (sys === "R") {
|
|
6091
5981
|
const dayOfWeek = epochMs >>> 27 & 7;
|
|
@@ -6121,25 +6011,120 @@ function resetGloFreqCache() {
|
|
|
6121
6011
|
gloFreqNum.fill(-128);
|
|
6122
6012
|
}
|
|
6123
6013
|
|
|
6014
|
+
// src/rtcm3/legacy-obs.ts
|
|
6015
|
+
var PRUNIT_GPS = 299792.458;
|
|
6016
|
+
var PRUNIT_GLO = 599584.916;
|
|
6017
|
+
var LAM_GPS_L1 = C_LIGHT / 157542e4;
|
|
6018
|
+
var LAM_GPS_L2 = C_LIGHT / 12276e5;
|
|
6019
|
+
var PPR_INVALID = -(2 ** 19);
|
|
6020
|
+
var PR21_INVALID = -(2 ** 13);
|
|
6021
|
+
function legacyLockSec(i) {
|
|
6022
|
+
if (i < 24) return i;
|
|
6023
|
+
if (i < 48) return 2 * i - 24;
|
|
6024
|
+
if (i < 72) return 4 * i - 120;
|
|
6025
|
+
if (i < 96) return 8 * i - 408;
|
|
6026
|
+
if (i < 120) return 16 * i - 1176;
|
|
6027
|
+
if (i < 127) return 32 * i - 3096;
|
|
6028
|
+
return 937;
|
|
6029
|
+
}
|
|
6030
|
+
var two2 = (n) => n.toString().padStart(2, "0");
|
|
6031
|
+
function decodeLegacyObs(frame) {
|
|
6032
|
+
const type = frame.messageType;
|
|
6033
|
+
const gps = type >= 1001 && type <= 1004;
|
|
6034
|
+
const glo = type >= 1009 && type <= 1012;
|
|
6035
|
+
if (!gps && !glo) return null;
|
|
6036
|
+
const ext = type === 1002 || type === 1004 || type === 1010 || type === 1012;
|
|
6037
|
+
const dual = type === 1003 || type === 1004 || type === 1011 || type === 1012;
|
|
6038
|
+
const system = gps ? "G" : "R";
|
|
6039
|
+
const r = new BitReader(frame.payload);
|
|
6040
|
+
r.readU(12);
|
|
6041
|
+
r.readU(12);
|
|
6042
|
+
let epochMs;
|
|
6043
|
+
let nsat;
|
|
6044
|
+
if (gps) {
|
|
6045
|
+
epochMs = r.readU(30);
|
|
6046
|
+
r.readU(1);
|
|
6047
|
+
nsat = r.readU(5);
|
|
6048
|
+
r.readU(1);
|
|
6049
|
+
r.readU(3);
|
|
6050
|
+
} else {
|
|
6051
|
+
const tk = r.readU(27);
|
|
6052
|
+
r.readU(1);
|
|
6053
|
+
nsat = r.readU(5);
|
|
6054
|
+
r.readU(1);
|
|
6055
|
+
r.readU(3);
|
|
6056
|
+
const gloDow = new Date(Date.now() + 3 * 36e5).getUTCDay();
|
|
6057
|
+
epochMs = (gloDow << 27 | tk) >>> 0;
|
|
6058
|
+
}
|
|
6059
|
+
const observations = [];
|
|
6060
|
+
for (let s = 0; s < nsat; s++) {
|
|
6061
|
+
const satId = r.readU(6);
|
|
6062
|
+
const code1 = r.readU(1);
|
|
6063
|
+
const freqCh = glo ? r.readU(5) : 0;
|
|
6064
|
+
const pr1raw = r.readU(gps ? 24 : 25);
|
|
6065
|
+
const ppr1 = r.readS(20);
|
|
6066
|
+
const lock1 = r.readU(7);
|
|
6067
|
+
let amb = 0;
|
|
6068
|
+
let cnr1 = 0;
|
|
6069
|
+
if (ext) {
|
|
6070
|
+
amb = r.readU(gps ? 8 : 7);
|
|
6071
|
+
cnr1 = r.readU(8);
|
|
6072
|
+
}
|
|
6073
|
+
let code2 = 0;
|
|
6074
|
+
let pr21 = 0;
|
|
6075
|
+
let ppr2 = 0;
|
|
6076
|
+
let lock2 = 0;
|
|
6077
|
+
let cnr2 = 0;
|
|
6078
|
+
if (dual) {
|
|
6079
|
+
code2 = r.readU(2);
|
|
6080
|
+
pr21 = r.readS(14);
|
|
6081
|
+
ppr2 = r.readS(20);
|
|
6082
|
+
lock2 = r.readU(7);
|
|
6083
|
+
if (ext) cnr2 = r.readU(8);
|
|
6084
|
+
}
|
|
6085
|
+
if (gps && (satId < 1 || satId > 32)) continue;
|
|
6086
|
+
if (glo && (satId < 1 || satId > 24)) continue;
|
|
6087
|
+
const prunit = gps ? PRUNIT_GPS : PRUNIT_GLO;
|
|
6088
|
+
const pr1 = pr1raw * 0.02 + amb * prunit;
|
|
6089
|
+
const k = freqCh - 7;
|
|
6090
|
+
const lamL1 = gps ? LAM_GPS_L1 : C_LIGHT / (GLO_F1_BASE + k * GLO_F1_STEP);
|
|
6091
|
+
const lamL2 = gps ? LAM_GPS_L2 : C_LIGHT / (GLO_F2_BASE + k * GLO_F2_STEP);
|
|
6092
|
+
const signals = [];
|
|
6093
|
+
{
|
|
6094
|
+
const sig = {
|
|
6095
|
+
rinexCode: gps ? code1 ? "1W" : "1C" : code1 ? "1P" : "1C",
|
|
6096
|
+
pseudorange: pr1,
|
|
6097
|
+
wavelength: lamL1,
|
|
6098
|
+
lockTime: legacyLockSec(lock1)
|
|
6099
|
+
};
|
|
6100
|
+
if (ppr1 !== PPR_INVALID) sig.phase = (pr1 + ppr1 * 5e-4) / lamL1;
|
|
6101
|
+
if (ext && cnr1 > 0) sig.cn0 = cnr1 * 0.25;
|
|
6102
|
+
signals.push(sig);
|
|
6103
|
+
}
|
|
6104
|
+
if (dual) {
|
|
6105
|
+
const sig = {
|
|
6106
|
+
rinexCode: gps ? code2 === 0 ? "2X" : "2W" : code2 === 0 ? "2C" : "2P",
|
|
6107
|
+
wavelength: lamL2,
|
|
6108
|
+
lockTime: legacyLockSec(lock2)
|
|
6109
|
+
};
|
|
6110
|
+
if (pr21 !== PR21_INVALID) sig.pseudorange = pr1 + pr21 * 0.02;
|
|
6111
|
+
if (ppr2 !== PPR_INVALID) sig.phase = (pr1 + ppr2 * 5e-4) / lamL2;
|
|
6112
|
+
if (ext && cnr2 > 0) sig.cn0 = cnr2 * 0.25;
|
|
6113
|
+
signals.push(sig);
|
|
6114
|
+
}
|
|
6115
|
+
observations.push({
|
|
6116
|
+
prn: `${system}${two2(satId)}`,
|
|
6117
|
+
system,
|
|
6118
|
+
signals
|
|
6119
|
+
});
|
|
6120
|
+
}
|
|
6121
|
+
return { messageType: type, epochMs, system, observations };
|
|
6122
|
+
}
|
|
6123
|
+
function decodeObs(frame) {
|
|
6124
|
+
return decodeMsmFull(frame) ?? decodeLegacyObs(frame);
|
|
6125
|
+
}
|
|
6126
|
+
|
|
6124
6127
|
// src/rtcm3/ssr.ts
|
|
6125
|
-
var UPDATE_INTERVAL_S2 = [
|
|
6126
|
-
1,
|
|
6127
|
-
2,
|
|
6128
|
-
5,
|
|
6129
|
-
10,
|
|
6130
|
-
15,
|
|
6131
|
-
30,
|
|
6132
|
-
60,
|
|
6133
|
-
120,
|
|
6134
|
-
240,
|
|
6135
|
-
300,
|
|
6136
|
-
600,
|
|
6137
|
-
900,
|
|
6138
|
-
1800,
|
|
6139
|
-
3600,
|
|
6140
|
-
7200,
|
|
6141
|
-
10800
|
|
6142
|
-
];
|
|
6143
6128
|
var GPS_SIGNAL = {
|
|
6144
6129
|
0: "L1 C/A",
|
|
6145
6130
|
1: "L1 P",
|
|
@@ -6174,12 +6159,6 @@ var SSR_KIND = {
|
|
|
6174
6159
|
1067: { system: "R", kind: "ura" },
|
|
6175
6160
|
1068: { system: "R", kind: "highRateClock" }
|
|
6176
6161
|
};
|
|
6177
|
-
function ssrUraMm2(v) {
|
|
6178
|
-
if (v === 0) return null;
|
|
6179
|
-
const cls = v >> 3 & 7;
|
|
6180
|
-
const val = v & 7;
|
|
6181
|
-
return 3 ** cls * (1 + val / 4) - 1;
|
|
6182
|
-
}
|
|
6183
6162
|
var two3 = (n) => n.toString().padStart(2, "0");
|
|
6184
6163
|
function decodeSsr(frame) {
|
|
6185
6164
|
const spec = SSR_KIND[frame.messageType];
|
|
@@ -6189,7 +6168,7 @@ function decodeSsr(frame) {
|
|
|
6189
6168
|
const r = new BitReader(frame.payload);
|
|
6190
6169
|
r.readU(12);
|
|
6191
6170
|
const epochS = r.readU(gps ? 20 : 17);
|
|
6192
|
-
const updateIntervalS =
|
|
6171
|
+
const updateIntervalS = UPDATE_INTERVAL_S[r.readU(4)];
|
|
6193
6172
|
const multipleMessage = r.readU(1) === 1;
|
|
6194
6173
|
const hasDatum = kind === "orbit" || kind === "combined";
|
|
6195
6174
|
const referenceDatum = hasDatum ? r.readU(1) : void 0;
|
|
@@ -6199,30 +6178,14 @@ function decodeSsr(frame) {
|
|
|
6199
6178
|
const nsat = r.readU(6);
|
|
6200
6179
|
const sigName = gps ? GPS_SIGNAL : GLO_SIGNAL;
|
|
6201
6180
|
const satellites = [];
|
|
6202
|
-
const readOrbit = (sat) => {
|
|
6203
|
-
sat.deltaRadial = r.readS(22) * 1e-4;
|
|
6204
|
-
sat.deltaAlongTrack = r.readS(20) * 4e-4;
|
|
6205
|
-
sat.deltaCrossTrack = r.readS(20) * 4e-4;
|
|
6206
|
-
sat.dotRadial = r.readS(21) * 1e-6;
|
|
6207
|
-
sat.dotAlongTrack = r.readS(19) * 4e-6;
|
|
6208
|
-
sat.dotCrossTrack = r.readS(19) * 4e-6;
|
|
6209
|
-
};
|
|
6210
|
-
const readClock2 = (sat) => {
|
|
6211
|
-
sat.c0 = r.readS(22) * 1e-4;
|
|
6212
|
-
sat.c1 = r.readS(21) * 1e-6;
|
|
6213
|
-
sat.c2 = r.readS(27) * 2e-8;
|
|
6214
|
-
};
|
|
6215
6181
|
for (let i = 0; i < nsat; i++) {
|
|
6216
6182
|
const satId = gps ? r.readU(6) : r.readU(5);
|
|
6217
6183
|
const sat = { prn: `${system}${two3(satId)}` };
|
|
6218
|
-
if (kind === "orbit" || kind === "combined")
|
|
6219
|
-
|
|
6220
|
-
|
|
6221
|
-
}
|
|
6222
|
-
if (kind === "combined") readClock2(sat);
|
|
6223
|
-
else if (kind === "clock") readClock2(sat);
|
|
6184
|
+
if (kind === "orbit" || kind === "combined") readSsrOrbit(r, sat);
|
|
6185
|
+
if (kind === "combined") readSsrClock(r, sat);
|
|
6186
|
+
else if (kind === "clock") readSsrClock(r, sat);
|
|
6224
6187
|
else if (kind === "ura")
|
|
6225
|
-
sat.uraMm =
|
|
6188
|
+
sat.uraMm = ssrUraMm(r.readU(6));
|
|
6226
6189
|
else if (kind === "highRateClock")
|
|
6227
6190
|
sat.highRateClock = r.readS(22) * 1e-4;
|
|
6228
6191
|
else if (kind === "codeBias") {
|
|
@@ -6590,9 +6553,9 @@ function updateStreamStats(stats, frames, rawBytes) {
|
|
|
6590
6553
|
entry.count++;
|
|
6591
6554
|
entry.lastSeen = now;
|
|
6592
6555
|
entry.totalBytes += frame.length + 6;
|
|
6593
|
-
const
|
|
6594
|
-
if (
|
|
6595
|
-
for (const obs of
|
|
6556
|
+
const obsEpoch = decodeObs(frame);
|
|
6557
|
+
if (obsEpoch) {
|
|
6558
|
+
for (const obs of obsEpoch.observations) {
|
|
6596
6559
|
const signals = [];
|
|
6597
6560
|
let bestCn0 = 0;
|
|
6598
6561
|
for (const sig of obs.signals) {
|
|
@@ -6601,7 +6564,7 @@ function updateStreamStats(stats, frames, rawBytes) {
|
|
|
6601
6564
|
if (sig.cn0 > bestCn0) bestCn0 = sig.cn0;
|
|
6602
6565
|
}
|
|
6603
6566
|
}
|
|
6604
|
-
if (signals.length > 0) {
|
|
6567
|
+
if (obs.signals.length > 0) {
|
|
6605
6568
|
stats.satellites.set(obs.prn, {
|
|
6606
6569
|
prn: obs.prn,
|
|
6607
6570
|
system: obs.system,
|
|
@@ -18913,6 +18876,7 @@ function computePsdDb(centerMHz, halfSpanChips, numPoints, psdFn, f0 = 1023e3, f
|
|
|
18913
18876
|
decodeIgsSsr,
|
|
18914
18877
|
decodeLegacyObs,
|
|
18915
18878
|
decodeMsmFull,
|
|
18879
|
+
decodeObs,
|
|
18916
18880
|
decodeSbfNavigation,
|
|
18917
18881
|
decodeSsr,
|
|
18918
18882
|
decodeSystemParams,
|
|
@@ -19016,11 +18980,11 @@ function computePsdDb(centerMHz, halfSpanChips, numPoints, psdFn, f0 = 1023e3, f
|
|
|
19016
18980
|
looksLikeRtcm2,
|
|
19017
18981
|
maskRadForAzimuth,
|
|
19018
18982
|
moonEcef,
|
|
19019
|
-
msmEpochToDate,
|
|
19020
18983
|
navTimesFromEph,
|
|
19021
18984
|
niellMapping,
|
|
19022
18985
|
nlWavelength,
|
|
19023
18986
|
nmeaCoordToDecimal,
|
|
18987
|
+
obsEpochToDate,
|
|
19024
18988
|
oem4Frames,
|
|
19025
18989
|
padL,
|
|
19026
18990
|
padR,
|
package/dist/index.d.cts
CHANGED
|
@@ -10,8 +10,8 @@ export { E as EpochSummary, P as ParseOptions, R as RinexHeader, a as RinexResul
|
|
|
10
10
|
export { C as CnavEphemeris, E as Ephemeris, G as GlonassEphemeris, K as KeplerEphemeris, N as NavHeader, a as NavResult, R as RinexCnavEphemeris, p as parseNavFile } from './nav-DImXUdbp.cjs';
|
|
11
11
|
export { C as ClkFile, I as IonexGrid, S as Sp3File, a as Sp3Sample, c as clkBias, p as parseClk, b as parseIonex, d as parseSp3, s as sp3Position } from './clk-DGVBGRzA.cjs';
|
|
12
12
|
export { RTCM2_MESSAGE_NAMES, Rtcm2Correction, Rtcm2Decoder, Rtcm2Frame, Rtcm2ObsRecord, Rtcm2Station, looksLikeRtcm2, rtcm2Dgps, rtcm2Observation, rtcm2Station, rtcm2Text, rtcm2Time } from './rtcm2.cjs';
|
|
13
|
-
export { B as BitReader, E as EphemerisInfo, R as Rtcm3DebugHandler, a as Rtcm3Decoder, b as Rtcm3Frame, d as decodeEphemeris, r as readString, c as reportDecodeError, s as setRtcm3DebugHandler } from './ephemeris-
|
|
14
|
-
export { IgsSsrIonoLayer, IgsSsrMessage, MessageTypeStats,
|
|
13
|
+
export { B as BitReader, E as EphemerisInfo, R as Rtcm3DebugHandler, a as Rtcm3Decoder, b as Rtcm3Frame, d as decodeEphemeris, r as readString, c as reportDecodeError, s as setRtcm3DebugHandler } from './ephemeris-BAnBLLB9.cjs';
|
|
14
|
+
export { IgsSsrIonoLayer, IgsSsrMessage, MessageTypeStats, ObsEpoch, ObsSatObs, ObsSignal, RTCM3_MESSAGE_NAMES, SatCn0, SignalCn0, SsrCodeBias, SsrKind, SsrMessage, SsrPhaseBias, SsrSatCorrection, StationMeta, StreamStats, SystemParams, SystemParamsMessage, createStationMeta, createStreamStats, decodeIgsSsr, decodeLegacyObs, decodeMsmFull, decodeObs, decodeSsr, decodeSystemParams, isSsrMessage, obsEpochToDate, resetGloFreqCache, rtcm3Constellation, setGloFreqNumber, updateStationMeta, updateStreamStats } from './rtcm3.cjs';
|
|
15
15
|
export { UbxCnavResult, UbxFrame, UbxIonoUtcResult, UbxMeasurement, UbxNavOptions, UbxNavResult, UbxParseResult, UbxPvtResult, UbxRawNavOptions, UbxRawNavResult, UbxRawxEpoch, parseUbxCnav, parseUbxIonoUtc, parseUbxNav, parseUbxPvt, parseUbxRawNav, parseUbxRawx, ubxFrames } from './ubx.cjs';
|
|
16
16
|
export { DfmcCensus, DfmcMessageCb, GeoL5Result, HasMessage, SBAS_L5_MT_NAMES, SBAS_L5_PREAMBLE_UW, SbasMessageCb, SbfBdsNavResult, SbfCnavEphemeris, SbfCnavResult, SbfGalEphemeris, SbfGalNavResult, SbfGeoL5Result, SbfGeoNavResult, SbfGloNavResult, SbfGpsNavResult, SbfHasMessage, SbfHasResult, SbfIonoUtcResult, SbfMeasEpoch, SbfMeasurement, SbfNavCounts, SbfNavigation, SbfParseResult, SbfPvt, SbfPvtResult, SbfReceiverSetup, decodeSbfNavigation, feedGeoBlock, feedGeoL5Block, isSbasL1Preamble, isSbasL5Correction, parseSbfBdsNav, parseSbfCnav, parseSbfGalNav, parseSbfGeoL5, parseSbfGeoNav, parseSbfGloNav, parseSbfGpsNav, parseSbfHas, parseSbfIonoUtc, parseSbfMeas, parseSbfPvt, parseSbfReceiverSetup, sbasL5MessageName, sbasL5MessageType, sbfCrc16, scanSbfFrames } from './sbf.cjs';
|
|
17
17
|
export { NovatelEpoch, NovatelMeasurement, NovatelNavResult, NovatelParseResult, NovatelPvtResult, OEM4_HLEN, Oem4Frame, crc32, oem4Frames, parseNovatelNav, parseNovatelPvt, parseNovatelRange } from './novatel.cjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -10,8 +10,8 @@ export { E as EpochSummary, P as ParseOptions, R as RinexHeader, a as RinexResul
|
|
|
10
10
|
export { C as CnavEphemeris, E as Ephemeris, G as GlonassEphemeris, K as KeplerEphemeris, N as NavHeader, a as NavResult, R as RinexCnavEphemeris, p as parseNavFile } from './nav-DImXUdbp.js';
|
|
11
11
|
export { C as ClkFile, I as IonexGrid, S as Sp3File, a as Sp3Sample, c as clkBias, p as parseClk, b as parseIonex, d as parseSp3, s as sp3Position } from './clk-DGVBGRzA.js';
|
|
12
12
|
export { RTCM2_MESSAGE_NAMES, Rtcm2Correction, Rtcm2Decoder, Rtcm2Frame, Rtcm2ObsRecord, Rtcm2Station, looksLikeRtcm2, rtcm2Dgps, rtcm2Observation, rtcm2Station, rtcm2Text, rtcm2Time } from './rtcm2.js';
|
|
13
|
-
export { B as BitReader, E as EphemerisInfo, R as Rtcm3DebugHandler, a as Rtcm3Decoder, b as Rtcm3Frame, d as decodeEphemeris, r as readString, c as reportDecodeError, s as setRtcm3DebugHandler } from './ephemeris-
|
|
14
|
-
export { IgsSsrIonoLayer, IgsSsrMessage, MessageTypeStats,
|
|
13
|
+
export { B as BitReader, E as EphemerisInfo, R as Rtcm3DebugHandler, a as Rtcm3Decoder, b as Rtcm3Frame, d as decodeEphemeris, r as readString, c as reportDecodeError, s as setRtcm3DebugHandler } from './ephemeris-BAnBLLB9.js';
|
|
14
|
+
export { IgsSsrIonoLayer, IgsSsrMessage, MessageTypeStats, ObsEpoch, ObsSatObs, ObsSignal, RTCM3_MESSAGE_NAMES, SatCn0, SignalCn0, SsrCodeBias, SsrKind, SsrMessage, SsrPhaseBias, SsrSatCorrection, StationMeta, StreamStats, SystemParams, SystemParamsMessage, createStationMeta, createStreamStats, decodeIgsSsr, decodeLegacyObs, decodeMsmFull, decodeObs, decodeSsr, decodeSystemParams, isSsrMessage, obsEpochToDate, resetGloFreqCache, rtcm3Constellation, setGloFreqNumber, updateStationMeta, updateStreamStats } from './rtcm3.js';
|
|
15
15
|
export { UbxCnavResult, UbxFrame, UbxIonoUtcResult, UbxMeasurement, UbxNavOptions, UbxNavResult, UbxParseResult, UbxPvtResult, UbxRawNavOptions, UbxRawNavResult, UbxRawxEpoch, parseUbxCnav, parseUbxIonoUtc, parseUbxNav, parseUbxPvt, parseUbxRawNav, parseUbxRawx, ubxFrames } from './ubx.js';
|
|
16
16
|
export { DfmcCensus, DfmcMessageCb, GeoL5Result, HasMessage, SBAS_L5_MT_NAMES, SBAS_L5_PREAMBLE_UW, SbasMessageCb, SbfBdsNavResult, SbfCnavEphemeris, SbfCnavResult, SbfGalEphemeris, SbfGalNavResult, SbfGeoL5Result, SbfGeoNavResult, SbfGloNavResult, SbfGpsNavResult, SbfHasMessage, SbfHasResult, SbfIonoUtcResult, SbfMeasEpoch, SbfMeasurement, SbfNavCounts, SbfNavigation, SbfParseResult, SbfPvt, SbfPvtResult, SbfReceiverSetup, decodeSbfNavigation, feedGeoBlock, feedGeoL5Block, isSbasL1Preamble, isSbasL5Correction, parseSbfBdsNav, parseSbfCnav, parseSbfGalNav, parseSbfGeoL5, parseSbfGeoNav, parseSbfGloNav, parseSbfGpsNav, parseSbfHas, parseSbfIonoUtc, parseSbfMeas, parseSbfPvt, parseSbfReceiverSetup, sbasL5MessageName, sbasL5MessageType, sbfCrc16, scanSbfFrames } from './sbf.js';
|
|
17
17
|
export { NovatelEpoch, NovatelMeasurement, NovatelNavResult, NovatelParseResult, NovatelPvtResult, OEM4_HLEN, Oem4Frame, crc32, oem4Frames, parseNovatelNav, parseNovatelPvt, parseNovatelRange } from './novatel.js';
|
package/dist/index.js
CHANGED
|
@@ -64,10 +64,11 @@ import {
|
|
|
64
64
|
decodeIgsSsr,
|
|
65
65
|
decodeLegacyObs,
|
|
66
66
|
decodeMsmFull,
|
|
67
|
+
decodeObs,
|
|
67
68
|
decodeSsr,
|
|
68
69
|
decodeSystemParams,
|
|
69
70
|
isSsrMessage,
|
|
70
|
-
|
|
71
|
+
obsEpochToDate,
|
|
71
72
|
readString,
|
|
72
73
|
reportDecodeError,
|
|
73
74
|
resetGloFreqCache,
|
|
@@ -76,7 +77,7 @@ import {
|
|
|
76
77
|
setRtcm3DebugHandler,
|
|
77
78
|
updateStationMeta,
|
|
78
79
|
updateStreamStats
|
|
79
|
-
} from "./chunk-
|
|
80
|
+
} from "./chunk-WVTDVPKA.js";
|
|
80
81
|
import {
|
|
81
82
|
parseUbxCnav,
|
|
82
83
|
parseUbxIonoUtc,
|
|
@@ -514,6 +515,7 @@ export {
|
|
|
514
515
|
decodeIgsSsr,
|
|
515
516
|
decodeLegacyObs,
|
|
516
517
|
decodeMsmFull,
|
|
518
|
+
decodeObs,
|
|
517
519
|
decodeSbfNavigation,
|
|
518
520
|
decodeSsr,
|
|
519
521
|
decodeSystemParams,
|
|
@@ -617,11 +619,11 @@ export {
|
|
|
617
619
|
looksLikeRtcm2,
|
|
618
620
|
maskRadForAzimuth,
|
|
619
621
|
moonEcef,
|
|
620
|
-
msmEpochToDate,
|
|
621
622
|
navTimesFromEph,
|
|
622
623
|
niellMapping,
|
|
623
624
|
nlWavelength,
|
|
624
625
|
nmeaCoordToDecimal,
|
|
626
|
+
obsEpochToDate,
|
|
625
627
|
oem4Frames,
|
|
626
628
|
padL,
|
|
627
629
|
padR,
|
package/dist/orbit.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { E as Ephemeris, G as GlonassEphemeris, K as KeplerEphemeris } from './nav-DImXUdbp.cjs';
|
|
2
|
-
import { E as EphemerisInfo } from './ephemeris-
|
|
2
|
+
import { E as EphemerisInfo } from './ephemeris-BAnBLLB9.cjs';
|
|
3
3
|
export { e as ecefToGeodetic, g as geodeticToEcef } from './ecef-CF0uAysr.cjs';
|
|
4
4
|
import { c as SbfKeplerAlmanac, b as SbfGlonassAlmanac } from './nav-BYmYoh9A.cjs';
|
|
5
5
|
|
package/dist/orbit.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { E as Ephemeris, G as GlonassEphemeris, K as KeplerEphemeris } from './nav-DImXUdbp.js';
|
|
2
|
-
import { E as EphemerisInfo } from './ephemeris-
|
|
2
|
+
import { E as EphemerisInfo } from './ephemeris-BAnBLLB9.js';
|
|
3
3
|
export { e as ecefToGeodetic, g as geodeticToEcef } from './ecef-CF0uAysr.js';
|
|
4
4
|
import { c as SbfKeplerAlmanac, b as SbfGlonassAlmanac } from './nav-CN8rxL4h.js';
|
|
5
5
|
|
package/dist/positioning.d.cts
CHANGED
|
@@ -2,7 +2,7 @@ import { E as Ephemeris } from './nav-DImXUdbp.cjs';
|
|
|
2
2
|
import { DopValues } from './orbit.cjs';
|
|
3
3
|
import { I as IonexGrid, C as ClkFile, S as Sp3File } from './clk-DGVBGRzA.cjs';
|
|
4
4
|
import { AntexFile } from './antex.cjs';
|
|
5
|
-
import './ephemeris-
|
|
5
|
+
import './ephemeris-BAnBLLB9.cjs';
|
|
6
6
|
import './ecef-CF0uAysr.cjs';
|
|
7
7
|
import './nav-BYmYoh9A.cjs';
|
|
8
8
|
|
package/dist/positioning.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { E as Ephemeris } from './nav-DImXUdbp.js';
|
|
|
2
2
|
import { DopValues } from './orbit.js';
|
|
3
3
|
import { I as IonexGrid, C as ClkFile, S as Sp3File } from './clk-DGVBGRzA.js';
|
|
4
4
|
import { AntexFile } from './antex.js';
|
|
5
|
-
import './ephemeris-
|
|
5
|
+
import './ephemeris-BAnBLLB9.js';
|
|
6
6
|
import './ecef-CF0uAysr.js';
|
|
7
7
|
import './nav-CN8rxL4h.js';
|
|
8
8
|
|