gnss-js 1.21.0 → 1.23.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/chunk-CUWF56ST.js +966 -0
- package/dist/{chunk-DLXTTHRK.js → chunk-MCAVU3XL.js} +118 -9
- package/dist/{chunk-JNFV5BYB.js → chunk-MHGNKSSH.js} +2 -3
- package/dist/{chunk-K3V3NHWL.js → chunk-PZNVFCKJ.js} +25 -766
- package/dist/chunk-VTX3VCL4.js +769 -0
- package/dist/index.cjs +1906 -1099
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +14 -5
- package/dist/orbit.cjs +2 -3
- package/dist/orbit.js +1 -1
- package/dist/positioning.cjs +734 -9
- package/dist/positioning.d.cts +238 -1
- package/dist/positioning.d.ts +238 -1
- package/dist/positioning.js +10 -4
- package/dist/sbf.js +2 -1
- package/dist/ubx.cjs +809 -10
- package/dist/ubx.d.cts +111 -1
- package/dist/ubx.d.ts +111 -1
- package/dist/ubx.js +6 -1
- package/package.json +1 -1
- package/dist/chunk-B5LU4746.js +0 -262
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BdsAssembler,
|
|
3
|
+
GalInavAssembler,
|
|
4
|
+
GloStringAssembler,
|
|
5
|
+
bdsSubframeParityOk,
|
|
6
|
+
galInavPageCrcOk,
|
|
7
|
+
testGloString
|
|
8
|
+
} from "./chunk-VTX3VCL4.js";
|
|
1
9
|
import {
|
|
2
10
|
CnavAssembler,
|
|
3
11
|
cnavCrcOk,
|
|
@@ -180,8 +188,108 @@ function parseUbxCnav(data) {
|
|
|
180
188
|
return { ephemerides, badCrc, messages };
|
|
181
189
|
}
|
|
182
190
|
|
|
183
|
-
// src/ubx/
|
|
191
|
+
// src/ubx/rawnav.ts
|
|
184
192
|
var GPS_EPOCH_MS = Date.UTC(1980, 0, 6);
|
|
193
|
+
var SEC_PER_WEEK = 7 * 86400;
|
|
194
|
+
var two = (n) => String(n).padStart(2, "0");
|
|
195
|
+
function parseUbxRawNav(data, opts = {}) {
|
|
196
|
+
const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
197
|
+
const ephemerides = [];
|
|
198
|
+
const counts = { gal: 0, bds: 0, glo: 0 };
|
|
199
|
+
let badParity = 0;
|
|
200
|
+
const inav = new GalInavAssembler();
|
|
201
|
+
const bds = new BdsAssembler();
|
|
202
|
+
const glo = new GloStringAssembler();
|
|
203
|
+
let refDate = null;
|
|
204
|
+
for (const f of ubxFrames(data)) {
|
|
205
|
+
if (f.msgClass !== 2) continue;
|
|
206
|
+
if (f.msgId === 21 && f.payload.length >= 16) {
|
|
207
|
+
const rcvTow = view.getFloat64(f.payloadStart, true);
|
|
208
|
+
let week = view.getUint16(f.payloadStart + 8, true);
|
|
209
|
+
if (week === 0 && opts.refWeek !== void 0) week = opts.refWeek;
|
|
210
|
+
if (week > 0) {
|
|
211
|
+
refDate = new Date(
|
|
212
|
+
GPS_EPOCH_MS + (week * SEC_PER_WEEK + rcvTow) * 1e3
|
|
213
|
+
);
|
|
214
|
+
}
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
if (f.msgId !== 19) continue;
|
|
218
|
+
const p = f.payload;
|
|
219
|
+
if (p.length < 8) continue;
|
|
220
|
+
const gnssId = p[0];
|
|
221
|
+
const svId = p[1];
|
|
222
|
+
const sigId = p[2];
|
|
223
|
+
const base = f.payloadStart + 8;
|
|
224
|
+
if (gnssId === 2) {
|
|
225
|
+
if (sigId === 3 || sigId === 8) continue;
|
|
226
|
+
if (p.length < 8 + 32) continue;
|
|
227
|
+
counts.gal++;
|
|
228
|
+
if (svId < 1 || svId > 36) continue;
|
|
229
|
+
const buff = new Uint8Array(32);
|
|
230
|
+
for (let k = 0; k < 8; k++) {
|
|
231
|
+
const w = view.getUint32(base + 4 * k, true);
|
|
232
|
+
buff[4 * k] = w >>> 24;
|
|
233
|
+
buff[4 * k + 1] = w >>> 16 & 255;
|
|
234
|
+
buff[4 * k + 2] = w >>> 8 & 255;
|
|
235
|
+
buff[4 * k + 3] = w & 255;
|
|
236
|
+
}
|
|
237
|
+
const page = new Uint8Array(30);
|
|
238
|
+
for (let k = 0; k < 14; k++) page[k] = buff[k];
|
|
239
|
+
setBitU(page, 112, 2, getBitU(buff, 112, 2));
|
|
240
|
+
for (let k = 0; k < 15; k++) {
|
|
241
|
+
setBitU(page, 114 + 8 * k, 8, getBitU(buff, 128 + 8 * k, 8));
|
|
242
|
+
}
|
|
243
|
+
if (getBitU(page, 0, 1) !== 0 || getBitU(page, 114, 1) !== 1) continue;
|
|
244
|
+
if (getBitU(page, 1, 1) === 1 || getBitU(page, 115, 1) === 1) continue;
|
|
245
|
+
if (!galInavPageCrcOk(page)) {
|
|
246
|
+
badParity++;
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
const eph = inav.push(svId, page);
|
|
250
|
+
if (eph) ephemerides.push(eph);
|
|
251
|
+
} else if (gnssId === 3) {
|
|
252
|
+
if (sigId === 6 || sigId === 8) continue;
|
|
253
|
+
if (p.length < 8 + 40) continue;
|
|
254
|
+
counts.bds++;
|
|
255
|
+
if (svId < 1 || svId > 63) continue;
|
|
256
|
+
const sf = new Uint8Array(38);
|
|
257
|
+
for (let k = 0; k < 10; k++) {
|
|
258
|
+
const w = view.getUint32(base + 4 * k, true);
|
|
259
|
+
setBitU(sf, 30 * k, 30, w & 1073741823);
|
|
260
|
+
}
|
|
261
|
+
if (!bdsSubframeParityOk(sf)) {
|
|
262
|
+
badParity++;
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
265
|
+
const eph = bds.push(`C${two(svId)}`, sf);
|
|
266
|
+
if (eph) ephemerides.push(eph);
|
|
267
|
+
} else if (gnssId === 6) {
|
|
268
|
+
if (p.length < 8 + 16) continue;
|
|
269
|
+
counts.glo++;
|
|
270
|
+
if (svId < 1 || svId > 32) continue;
|
|
271
|
+
const str = new Uint8Array(16);
|
|
272
|
+
for (let k = 0; k < 4; k++) {
|
|
273
|
+
const w = view.getUint32(base + 4 * k, true);
|
|
274
|
+
str[4 * k] = w >>> 24;
|
|
275
|
+
str[4 * k + 1] = w >>> 16 & 255;
|
|
276
|
+
str[4 * k + 2] = w >>> 8 & 255;
|
|
277
|
+
str[4 * k + 3] = w & 255;
|
|
278
|
+
}
|
|
279
|
+
if (!testGloString(str)) {
|
|
280
|
+
badParity++;
|
|
281
|
+
continue;
|
|
282
|
+
}
|
|
283
|
+
if (!refDate) continue;
|
|
284
|
+
const eph = glo.push(`R${two(svId)}`, str, refDate, p[3] - 7);
|
|
285
|
+
if (eph) ephemerides.push(eph);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
return { ephemerides, counts, badParity };
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// src/ubx/index.ts
|
|
292
|
+
var GPS_EPOCH_MS2 = Date.UTC(1980, 0, 6);
|
|
185
293
|
var MS_PER_WEEK = 7 * 864e5;
|
|
186
294
|
var SIGNALS = {
|
|
187
295
|
0: { 0: ["G", "1C"], 3: ["G", "2X"], 4: ["G", "2X"] },
|
|
@@ -198,20 +306,20 @@ var SIGNALS = {
|
|
|
198
306
|
// GLONASS L1OF, L2OF
|
|
199
307
|
};
|
|
200
308
|
function prnFor(gnssId, svId) {
|
|
201
|
-
const
|
|
309
|
+
const two2 = (n) => String(n).padStart(2, "0");
|
|
202
310
|
switch (gnssId) {
|
|
203
311
|
case 0:
|
|
204
|
-
return svId >= 1 && svId <= 32 ? `G${
|
|
312
|
+
return svId >= 1 && svId <= 32 ? `G${two2(svId)}` : null;
|
|
205
313
|
case 1:
|
|
206
|
-
return svId >= 120 && svId <= 158 ? `S${
|
|
314
|
+
return svId >= 120 && svId <= 158 ? `S${two2(svId - 100)}` : null;
|
|
207
315
|
case 2:
|
|
208
|
-
return svId >= 1 && svId <= 36 ? `E${
|
|
316
|
+
return svId >= 1 && svId <= 36 ? `E${two2(svId)}` : null;
|
|
209
317
|
case 3:
|
|
210
|
-
return svId >= 1 && svId <= 63 ? `C${
|
|
318
|
+
return svId >= 1 && svId <= 63 ? `C${two2(svId)}` : null;
|
|
211
319
|
case 5:
|
|
212
|
-
return svId >= 1 && svId <= 10 ? `J${
|
|
320
|
+
return svId >= 1 && svId <= 10 ? `J${two2(svId)}` : null;
|
|
213
321
|
case 6:
|
|
214
|
-
return svId >= 1 && svId <= 32 ? `R${
|
|
322
|
+
return svId >= 1 && svId <= 32 ? `R${two2(svId)}` : null;
|
|
215
323
|
default:
|
|
216
324
|
return null;
|
|
217
325
|
}
|
|
@@ -264,7 +372,7 @@ function parseUbxRawx(data) {
|
|
|
264
372
|
if (!codes.includes(sig[1])) codes.push(sig[1]);
|
|
265
373
|
}
|
|
266
374
|
epochs.push({
|
|
267
|
-
timeMs:
|
|
375
|
+
timeMs: GPS_EPOCH_MS2 + week * MS_PER_WEEK + Math.round(rcvTow * 1e3),
|
|
268
376
|
leapS: leapValid ? leapS : null,
|
|
269
377
|
meas
|
|
270
378
|
});
|
|
@@ -278,5 +386,6 @@ export {
|
|
|
278
386
|
parseUbxNav,
|
|
279
387
|
parseUbxIonoUtc,
|
|
280
388
|
parseUbxCnav,
|
|
389
|
+
parseUbxRawNav,
|
|
281
390
|
parseUbxRawx
|
|
282
391
|
};
|
|
@@ -192,8 +192,7 @@ var GM_GPS2 = 3986005e8;
|
|
|
192
192
|
var GM_GAL2 = 3986004418e5;
|
|
193
193
|
var GM_BDS2 = 3986004418e5;
|
|
194
194
|
var GM_GLO = 39860044e7;
|
|
195
|
-
var
|
|
196
|
-
var BDS_GEO_MIN_SEMIMAJOR_AXIS_M = 4e7;
|
|
195
|
+
var BDS_GEO_PRNS2 = /* @__PURE__ */ new Set([1, 2, 3, 4, 5, 59, 60, 61, 62, 63]);
|
|
197
196
|
var AE_GLO = 6378136;
|
|
198
197
|
var J2_GLO = 108263e-8;
|
|
199
198
|
var TWO_PI = 2 * Math.PI;
|
|
@@ -240,7 +239,7 @@ function keplerPosition(eph, t) {
|
|
|
240
239
|
const yp = rk * Math.sin(uk);
|
|
241
240
|
const xpDot = drkDot * Math.cos(uk) - rk * ukDot * Math.sin(uk);
|
|
242
241
|
const ypDot = drkDot * Math.sin(uk) + rk * ukDot * Math.cos(uk);
|
|
243
|
-
const isBdsGeo = eph.system === "C" &&
|
|
242
|
+
const isBdsGeo = eph.system === "C" && BDS_GEO_PRNS2.has(Number(eph.prn.slice(1)));
|
|
244
243
|
if (isBdsGeo) {
|
|
245
244
|
const omegak2 = eph.omega0 + eph.omegaDot * tk - OMEGA_E * eph.toe;
|
|
246
245
|
const cosO2 = Math.cos(omegak2);
|