gnss-js 1.16.0 → 1.17.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
@@ -222,11 +222,13 @@ __export(src_exports, {
222
222
  parseNovatelRange: () => parseNovatelRange,
223
223
  parseRinexStream: () => parseRinexStream,
224
224
  parseSbfAlmanac: () => parseSbfAlmanac,
225
+ parseSbfIonoUtc: () => parseSbfIonoUtc,
225
226
  parseSbfMeas: () => parseSbfMeas,
226
227
  parseSbfNav: () => parseSbfNav,
227
228
  parseSinexBiasDcb: () => parseSinexBiasDcb,
228
229
  parseSourcetable: () => parseSourcetable,
229
230
  parseSp3: () => parseSp3,
231
+ parseUbxIonoUtc: () => parseUbxIonoUtc,
230
232
  parseUbxNav: () => parseUbxNav,
231
233
  parseUbxRawx: () => parseUbxRawx,
232
234
  phiAltBOC: () => phiAltBOC,
@@ -4777,6 +4779,30 @@ function decodeGpsLnavFrame(subframes, opts = {}) {
4777
4779
 
4778
4780
  // src/ubx/nav.ts
4779
4781
  var PREAMB_CNAV = 139;
4782
+ function readLnavSubframe(view, f) {
4783
+ const p = f.payload;
4784
+ if (p.length < 8) return null;
4785
+ const gnssId = p[0];
4786
+ const svId = p[1];
4787
+ let prn;
4788
+ if (gnssId === 0 && svId >= 1 && svId <= 32) {
4789
+ prn = `G${String(svId).padStart(2, "0")}`;
4790
+ } else if (gnssId === 5 && svId >= 1 && svId <= 10) {
4791
+ if (p.length === 44) return null;
4792
+ prn = `J${String(svId).padStart(2, "0")}`;
4793
+ } else {
4794
+ return null;
4795
+ }
4796
+ if (p.length < 8 + 40) return null;
4797
+ const base = f.payloadStart + 8;
4798
+ if (view.getUint32(base, true) >>> 24 === PREAMB_CNAV) return null;
4799
+ const buff = new Uint8Array(30);
4800
+ for (let k = 0; k < 10; k++) {
4801
+ const dwrd = view.getUint32(base + 4 * k, true);
4802
+ setBitU(buff, 24 * k, 24, dwrd >>> 6 & 16777215);
4803
+ }
4804
+ return { prn, gnssId, svId, buff, id: getBitU(buff, 43, 3) };
4805
+ }
4780
4806
  function parseUbxNav(data, opts = {}) {
4781
4807
  const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
4782
4808
  const ephemerides = [];
@@ -4798,28 +4824,9 @@ function parseUbxNav(data, opts = {}) {
4798
4824
  const last = /* @__PURE__ */ new Map();
4799
4825
  for (const f of ubxFrames(data)) {
4800
4826
  if (f.msgClass !== 2 || f.msgId !== 19) continue;
4801
- const p = f.payload;
4802
- if (p.length < 8) continue;
4803
- const gnssId = p[0];
4804
- const svId = p[1];
4805
- let prn;
4806
- if (gnssId === 0 && svId >= 1 && svId <= 32) {
4807
- prn = `G${String(svId).padStart(2, "0")}`;
4808
- } else if (gnssId === 5 && svId >= 1 && svId <= 10) {
4809
- if (p.length === 44) continue;
4810
- prn = `J${String(svId).padStart(2, "0")}`;
4811
- } else {
4812
- continue;
4813
- }
4814
- if (p.length < 8 + 40) continue;
4815
- const base = f.payloadStart + 8;
4816
- if (view.getUint32(base, true) >>> 24 === PREAMB_CNAV) continue;
4817
- const buff = new Uint8Array(30);
4818
- for (let k = 0; k < 10; k++) {
4819
- const dwrd = view.getUint32(base + 4 * k, true);
4820
- setBitU(buff, 24 * k, 24, dwrd >>> 6 & 16777215);
4821
- }
4822
- const id = getBitU(buff, 43, 3);
4827
+ const lnav = readLnavSubframe(view, f);
4828
+ if (!lnav) continue;
4829
+ const { prn, gnssId, svId, buff, id } = lnav;
4823
4830
  if (id < 1 || id > 5) {
4824
4831
  badParity++;
4825
4832
  continue;
@@ -4849,6 +4856,34 @@ function parseUbxNav(data, opts = {}) {
4849
4856
  return { ephemerides, badParity };
4850
4857
  }
4851
4858
 
4859
+ // src/ubx/iono.ts
4860
+ function parseUbxIonoUtc(data) {
4861
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
4862
+ const ionoCorrections = {};
4863
+ let leapSeconds = null;
4864
+ for (const f of ubxFrames(data)) {
4865
+ if (f.msgClass !== 2 || f.msgId !== 19) continue;
4866
+ const sf = readLnavSubframe(view, f);
4867
+ if (!sf || sf.gnssId !== 0 || sf.id !== 4) continue;
4868
+ const b = sf.buff;
4869
+ if (getBitU(b, 48, 2) !== 1 || getBitU(b, 50, 6) !== 56) continue;
4870
+ ionoCorrections["GPSA"] = [
4871
+ getBitS(b, 56, 8) * 2 ** -30,
4872
+ getBitS(b, 64, 8) * 2 ** -27,
4873
+ getBitS(b, 72, 8) * 2 ** -24,
4874
+ getBitS(b, 80, 8) * 2 ** -24
4875
+ ];
4876
+ ionoCorrections["GPSB"] = [
4877
+ getBitS(b, 88, 8) * 2 ** 11,
4878
+ getBitS(b, 96, 8) * 2 ** 14,
4879
+ getBitS(b, 104, 8) * 2 ** 16,
4880
+ getBitS(b, 112, 8) * 2 ** 16
4881
+ ];
4882
+ leapSeconds = getBitS(b, 192, 8);
4883
+ }
4884
+ return { ionoCorrections, leapSeconds };
4885
+ }
4886
+
4852
4887
  // src/ubx/index.ts
4853
4888
  var GPS_EPOCH_MS2 = Date.UTC(1980, 0, 6);
4854
4889
  var MS_PER_WEEK2 = 7 * 864e5;
@@ -5311,6 +5346,39 @@ function parseSbfAlmanac(data) {
5311
5346
  return { almanacs, badCrc };
5312
5347
  }
5313
5348
 
5349
+ // src/sbf/iono.ts
5350
+ var F4_DNU2 = -2e10;
5351
+ function parseSbfIonoUtc(data) {
5352
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
5353
+ const ionoCorrections = {};
5354
+ let leapSeconds = null;
5355
+ const f4s = (b, n) => {
5356
+ const out = [];
5357
+ for (let k = 0; k < n; k++) {
5358
+ const v = view.getFloat32(b + 4 * k, true);
5359
+ if (v === F4_DNU2) return null;
5360
+ out.push(v);
5361
+ }
5362
+ return out;
5363
+ };
5364
+ scanSbfFrames(data, view, (id, b, len) => {
5365
+ if ((id === 5893 || id === 4120) && len >= 48) {
5366
+ const alpha = f4s(b + 16, 4);
5367
+ const beta = f4s(b + 32, 4);
5368
+ if (!alpha || !beta) return;
5369
+ const sys = id === 5893 ? "GPS" : "BDS";
5370
+ ionoCorrections[`${sys}A`] = alpha;
5371
+ ionoCorrections[`${sys}B`] = beta;
5372
+ } else if (id === 4030 && len >= 28) {
5373
+ const ai = f4s(b + 16, 3);
5374
+ if (ai) ionoCorrections["GAL"] = ai;
5375
+ } else if (id === 5894 && len >= 37) {
5376
+ leapSeconds = view.getInt8(b + 33);
5377
+ }
5378
+ });
5379
+ return { ionoCorrections, leapSeconds };
5380
+ }
5381
+
5314
5382
  // src/sbf/index.ts
5315
5383
  var CLIGHT = 299792458;
5316
5384
  var GPS_EPOCH_MS4 = Date.UTC(1980, 0, 6);
@@ -6024,11 +6092,26 @@ function* oem4Frames(data, view, stats) {
6024
6092
  }
6025
6093
 
6026
6094
  // src/novatel/nav.ts
6095
+ var ID_IONUTC = 8;
6027
6096
  var ID_RAWEPHEM = 41;
6028
6097
  var ID_GLOEPHEMERIS = 723;
6098
+ var ID_GALEPHEMERIS = 1122;
6099
+ var ID_QZSSEPHEMERIS = 1336;
6100
+ var ID_BDSEPHEMERIS = 1696;
6029
6101
  var GPS_EPOCH_MS5 = Date.UTC(1980, 0, 6);
6102
+ var BDT_EPOCH_MS2 = Date.UTC(2006, 0, 1);
6030
6103
  var SEC_PER_WEEK3 = 7 * 86400;
6031
6104
  var SEC_PER_DAY = 86400;
6105
+ var MS_PER_WEEK5 = SEC_PER_WEEK3 * 1e3;
6106
+ var gpsMs2 = (week, sec) => GPS_EPOCH_MS5 + week * MS_PER_WEEK5 + sec * 1e3;
6107
+ var sowOf2 = (dateMs) => dateMs / 1e3 % SEC_PER_WEEK3;
6108
+ function nearWeekMs(refMs, sow) {
6109
+ const refWeek = Math.floor((refMs - GPS_EPOCH_MS5) / MS_PER_WEEK5);
6110
+ let ms = gpsMs2(refWeek, sow);
6111
+ if (ms < refMs - MS_PER_WEEK5 / 2) ms += MS_PER_WEEK5;
6112
+ else if (ms > refMs + MS_PER_WEEK5 / 2) ms -= MS_PER_WEEK5;
6113
+ return ms;
6114
+ }
6032
6115
  function decodeRawEphem(data, view, p) {
6033
6116
  const prn = view.getUint32(p, true);
6034
6117
  if (prn < 1 || prn > 32) return null;
@@ -6074,23 +6157,184 @@ function decodeGloEphemeris(view, p) {
6074
6157
  freqNum
6075
6158
  };
6076
6159
  }
6160
+ function decodeGalEphemeris(view, p, headerMs) {
6161
+ const prn = view.getUint32(p, true);
6162
+ if (prn < 1 || prn > 36) return null;
6163
+ const fnav = (view.getUint32(p + 4, true) & 1) !== 0;
6164
+ const svhE1b = view.getUint8(p + 12) & 3;
6165
+ const svhE5a = view.getUint8(p + 13) & 3;
6166
+ const svhE5b = view.getUint8(p + 14) & 3;
6167
+ const dvsE1b = view.getUint8(p + 15) & 1;
6168
+ const dvsE5a = view.getUint8(p + 16) & 1;
6169
+ const dvsE5b = view.getUint8(p + 17) & 1;
6170
+ const iodNav = view.getUint32(p + 20, true);
6171
+ const toes = view.getUint32(p + 24, true);
6172
+ const c = fnav ? p + 148 : p + 176;
6173
+ const tocs = view.getUint32(c, true);
6174
+ const toeMs = nearWeekMs(headerMs, toes);
6175
+ const tocDate = new Date(nearWeekMs(headerMs, tocs));
6176
+ return {
6177
+ fnav,
6178
+ eph: {
6179
+ system: "E",
6180
+ prn: `E${String(prn).padStart(2, "0")}`,
6181
+ toc: sowOf2(tocDate.getTime()),
6182
+ tocDate,
6183
+ af0: view.getFloat64(c + 4, true),
6184
+ af1: view.getFloat64(c + 12, true),
6185
+ af2: view.getFloat64(c + 20, true),
6186
+ iode: iodNav,
6187
+ crs: view.getFloat64(p + 92, true),
6188
+ deltaN: view.getFloat64(p + 36, true),
6189
+ m0: view.getFloat64(p + 44, true),
6190
+ cuc: view.getFloat64(p + 68, true),
6191
+ e: view.getFloat64(p + 52, true),
6192
+ cus: view.getFloat64(p + 76, true),
6193
+ sqrtA: view.getFloat64(p + 28, true),
6194
+ toe: toes,
6195
+ cic: view.getFloat64(p + 100, true),
6196
+ omega0: view.getFloat64(p + 132, true),
6197
+ cis: view.getFloat64(p + 108, true),
6198
+ i0: view.getFloat64(p + 116, true),
6199
+ crc: view.getFloat64(p + 84, true),
6200
+ omega: view.getFloat64(p + 60, true),
6201
+ omegaDot: view.getFloat64(p + 140, true),
6202
+ idot: view.getFloat64(p + 124, true),
6203
+ week: Math.floor((toeMs - GPS_EPOCH_MS5) / MS_PER_WEEK5),
6204
+ // RINEX Galileo SVH bit layout (E1B DVS/HS in bits 0-2, E5a in
6205
+ // 3-5, E5b in 6-8) — same packing as RTKLIB.
6206
+ svHealth: svhE5b << 7 | dvsE5b << 6 | svhE5a << 4 | dvsE5a << 3 | svhE1b << 1 | dvsE1b,
6207
+ tgd: view.getFloat64(p + 204, true)
6208
+ // BGD E5a/E1 (RINEX slot)
6209
+ }
6210
+ };
6211
+ }
6212
+ function decodeBdsEphemeris2(view, p) {
6213
+ const prn = view.getUint32(p, true);
6214
+ if (prn < 1 || prn > 63) return null;
6215
+ const week = view.getUint32(p + 4, true);
6216
+ const health = view.getUint32(p + 16, true) & 1;
6217
+ const tgd1 = view.getFloat64(p + 20, true);
6218
+ const tocs = view.getUint32(p + 40, true);
6219
+ const toes = view.getUint32(p + 72, true);
6220
+ const tocDate = new Date(BDT_EPOCH_MS2 + week * MS_PER_WEEK5 + tocs * 1e3);
6221
+ return {
6222
+ system: "C",
6223
+ prn: `C${String(prn).padStart(2, "0")}`,
6224
+ toc: sowOf2(tocDate.getTime()),
6225
+ tocDate,
6226
+ af0: view.getFloat64(p + 44, true),
6227
+ af1: view.getFloat64(p + 52, true),
6228
+ af2: view.getFloat64(p + 60, true),
6229
+ iode: view.getUint32(p + 68, true),
6230
+ // AODE
6231
+ crs: view.getFloat64(p + 172, true),
6232
+ deltaN: view.getFloat64(p + 100, true),
6233
+ m0: view.getFloat64(p + 108, true),
6234
+ cuc: view.getFloat64(p + 148, true),
6235
+ e: view.getFloat64(p + 84, true),
6236
+ cus: view.getFloat64(p + 156, true),
6237
+ sqrtA: view.getFloat64(p + 76, true),
6238
+ toe: toes,
6239
+ cic: view.getFloat64(p + 180, true),
6240
+ omega0: view.getFloat64(p + 116, true),
6241
+ cis: view.getFloat64(p + 188, true),
6242
+ i0: view.getFloat64(p + 132, true),
6243
+ crc: view.getFloat64(p + 164, true),
6244
+ omega: view.getFloat64(p + 92, true),
6245
+ omegaDot: view.getFloat64(p + 124, true),
6246
+ idot: view.getFloat64(p + 140, true),
6247
+ week,
6248
+ // RINEX BDS week field is the BDT week
6249
+ svHealth: health,
6250
+ tgd: tgd1
6251
+ // TGD1 (B1) — RINEX slot
6252
+ };
6253
+ }
6254
+ function decodeQzssEphemeris2(view, p) {
6255
+ const prn = view.getUint32(p, true);
6256
+ if (prn < 193 || prn > 202) return null;
6257
+ const health = view.getUint32(p + 12, true) & 63;
6258
+ const iode1 = view.getUint32(p + 16, true);
6259
+ const week = view.getUint32(p + 24, true);
6260
+ const toes = view.getFloat64(p + 32, true);
6261
+ const toeMs = gpsMs2(week, toes);
6262
+ const tocs = view.getFloat64(p + 164, true);
6263
+ const tocDate = new Date(nearWeekMs(toeMs, tocs));
6264
+ return {
6265
+ system: "J",
6266
+ prn: `J${String(prn - 192).padStart(2, "0")}`,
6267
+ toc: sowOf2(tocDate.getTime()),
6268
+ tocDate,
6269
+ af0: view.getFloat64(p + 180, true),
6270
+ af1: view.getFloat64(p + 188, true),
6271
+ af2: view.getFloat64(p + 196, true),
6272
+ iode: iode1,
6273
+ crs: view.getFloat64(p + 104, true),
6274
+ deltaN: view.getFloat64(p + 48, true),
6275
+ m0: view.getFloat64(p + 56, true),
6276
+ cuc: view.getFloat64(p + 80, true),
6277
+ e: view.getFloat64(p + 64, true),
6278
+ cus: view.getFloat64(p + 88, true),
6279
+ sqrtA: Math.sqrt(view.getFloat64(p + 40, true)),
6280
+ toe: toes,
6281
+ cic: view.getFloat64(p + 112, true),
6282
+ omega0: view.getFloat64(p + 144, true),
6283
+ cis: view.getFloat64(p + 120, true),
6284
+ i0: view.getFloat64(p + 128, true),
6285
+ crc: view.getFloat64(p + 96, true),
6286
+ omega: view.getFloat64(p + 72, true),
6287
+ omegaDot: view.getFloat64(p + 152, true),
6288
+ idot: view.getFloat64(p + 136, true),
6289
+ week,
6290
+ svHealth: health,
6291
+ tgd: view.getFloat64(p + 172, true)
6292
+ };
6293
+ }
6077
6294
  function parseNovatelNav(data) {
6078
6295
  const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
6079
6296
  const stats = { badCrc: 0 };
6080
6297
  const ephemerides = [];
6081
- const lastGps = /* @__PURE__ */ new Map();
6298
+ const ionoCorrections = {};
6299
+ let leapSeconds = null;
6300
+ const lastKep = /* @__PURE__ */ new Map();
6082
6301
  const lastGlo = /* @__PURE__ */ new Map();
6302
+ const pushKepler = (key, eph) => {
6303
+ const prev = lastKep.get(key);
6304
+ if (prev && prev.iode === eph.iode && prev.toe === eph.toe && prev.tocDate.getTime() === eph.tocDate.getTime()) {
6305
+ return;
6306
+ }
6307
+ lastKep.set(key, eph);
6308
+ ephemerides.push(eph);
6309
+ };
6083
6310
  for (const frame of oem4Frames(data, view, stats)) {
6084
6311
  if (!frame.binary) continue;
6085
6312
  if (frame.id === ID_RAWEPHEM && frame.msgLen >= 102) {
6086
6313
  const eph = decodeRawEphem(data, view, frame.payload);
6087
- if (!eph) continue;
6088
- const prev = lastGps.get(eph.prn);
6089
- if (prev && prev.iode === eph.iode && prev.tocDate.getTime() === eph.tocDate.getTime()) {
6090
- continue;
6314
+ if (eph) pushKepler(eph.prn, eph);
6315
+ } else if (frame.id === ID_GALEPHEMERIS && frame.msgLen >= 220) {
6316
+ if (frame.week === 0) continue;
6317
+ const headerMs = gpsMs2(frame.week, frame.towMs / 1e3);
6318
+ const dec = decodeGalEphemeris(view, frame.payload, headerMs);
6319
+ if (dec)
6320
+ pushKepler(`${dec.eph.prn}:${dec.fnav ? "fnav" : "inav"}`, dec.eph);
6321
+ } else if (frame.id === ID_BDSEPHEMERIS && frame.msgLen >= 196) {
6322
+ const eph = decodeBdsEphemeris2(view, frame.payload);
6323
+ if (eph) pushKepler(eph.prn, eph);
6324
+ } else if (frame.id === ID_QZSSEPHEMERIS && frame.msgLen >= 204) {
6325
+ const eph = decodeQzssEphemeris2(view, frame.payload);
6326
+ if (eph) pushKepler(eph.prn, eph);
6327
+ } else if (frame.id === ID_IONUTC && frame.msgLen >= 108) {
6328
+ const p = frame.payload;
6329
+ const alpha = [];
6330
+ const beta = [];
6331
+ for (let i = 0; i < 4; i++) {
6332
+ alpha.push(view.getFloat64(p + i * 8, true));
6333
+ beta.push(view.getFloat64(p + 32 + i * 8, true));
6091
6334
  }
6092
- lastGps.set(eph.prn, eph);
6093
- ephemerides.push(eph);
6335
+ ionoCorrections["GPSA"] = alpha;
6336
+ ionoCorrections["GPSB"] = beta;
6337
+ leapSeconds = view.getInt32(p + 96, true);
6094
6338
  } else if (frame.id === ID_GLOEPHEMERIS && frame.msgLen >= 144) {
6095
6339
  const eph = decodeGloEphemeris(view, frame.payload);
6096
6340
  if (!eph) continue;
@@ -6102,12 +6346,12 @@ function parseNovatelNav(data) {
6102
6346
  ephemerides.push(eph);
6103
6347
  }
6104
6348
  }
6105
- return { ephemerides, badCrc: stats.badCrc };
6349
+ return { ephemerides, ionoCorrections, leapSeconds, badCrc: stats.badCrc };
6106
6350
  }
6107
6351
 
6108
6352
  // src/novatel/index.ts
6109
6353
  var GPS_EPOCH_MS6 = Date.UTC(1980, 0, 6);
6110
- var MS_PER_WEEK5 = 7 * 864e5;
6354
+ var MS_PER_WEEK6 = 7 * 864e5;
6111
6355
  var HDR = 28;
6112
6356
  var ID_RANGE = 43;
6113
6357
  var ID_RANGECMP = 140;
@@ -6276,7 +6520,7 @@ function parseNovatelRange(data) {
6276
6520
  if (!codes.includes(code)) codes.push(code);
6277
6521
  }
6278
6522
  epochs.push({
6279
- timeMs: GPS_EPOCH_MS6 + week * MS_PER_WEEK5 + towMs,
6523
+ timeMs: GPS_EPOCH_MS6 + week * MS_PER_WEEK6 + towMs,
6280
6524
  meas
6281
6525
  });
6282
6526
  }
@@ -6328,7 +6572,7 @@ function parseNovatelRange(data) {
6328
6572
  if (!codes.includes(code)) codes.push(code);
6329
6573
  }
6330
6574
  epochs.push({
6331
- timeMs: GPS_EPOCH_MS6 + week * MS_PER_WEEK5 + towMs,
6575
+ timeMs: GPS_EPOCH_MS6 + week * MS_PER_WEEK6 + towMs,
6332
6576
  meas
6333
6577
  });
6334
6578
  }
@@ -6688,9 +6932,9 @@ function selectBest(ephs, timeMs) {
6688
6932
  return best;
6689
6933
  }
6690
6934
  var GPS_EPOCH_MS7 = START_GPS_TIME.getTime();
6691
- var MS_PER_WEEK6 = 7 * 864e5;
6935
+ var MS_PER_WEEK7 = 7 * 864e5;
6692
6936
  var BDS_EPOCH_MS = START_BDS_TIME.getTime();
6693
- var GAL_EPOCH_MS = GPS_EPOCH_MS7 + 1024 * MS_PER_WEEK6;
6937
+ var GAL_EPOCH_MS = GPS_EPOCH_MS7 + 1024 * MS_PER_WEEK7;
6694
6938
  function ephInfoToEphemeris(info) {
6695
6939
  const sys = info.prn.charAt(0);
6696
6940
  if (sys === "R") {
@@ -6742,10 +6986,10 @@ function ephInfoToEphemeris(info) {
6742
6986
  epochMs = GAL_EPOCH_MS;
6743
6987
  } else {
6744
6988
  epochMs = GPS_EPOCH_MS7;
6745
- const weeksNow = (info.lastReceived - GPS_EPOCH_MS7) / MS_PER_WEEK6;
6989
+ const weeksNow = (info.lastReceived - GPS_EPOCH_MS7) / MS_PER_WEEK7;
6746
6990
  week += 1024 * Math.round((weeksNow - week) / 1024);
6747
6991
  }
6748
- const tocDate = new Date(epochMs + week * MS_PER_WEEK6 + tocSec * 1e3);
6992
+ const tocDate = new Date(epochMs + week * MS_PER_WEEK7 + tocSec * 1e3);
6749
6993
  return {
6750
6994
  system: sys,
6751
6995
  prn: info.prn,
@@ -9844,11 +10088,13 @@ function computePsdDb(centerMHz, halfSpanChips, numPoints, psdFn, f0 = 1023e3, f
9844
10088
  parseNovatelRange,
9845
10089
  parseRinexStream,
9846
10090
  parseSbfAlmanac,
10091
+ parseSbfIonoUtc,
9847
10092
  parseSbfMeas,
9848
10093
  parseSbfNav,
9849
10094
  parseSinexBiasDcb,
9850
10095
  parseSourcetable,
9851
10096
  parseSp3,
10097
+ parseUbxIonoUtc,
9852
10098
  parseUbxNav,
9853
10099
  parseUbxRawx,
9854
10100
  phiAltBOC,
package/dist/index.d.cts CHANGED
@@ -9,8 +9,8 @@ export { E as EpochSummary, P as ParseOptions, R as RinexHeader, a as RinexResul
9
9
  export { E as Ephemeris, G as GlonassEphemeris, K as KeplerEphemeris, N as NavHeader, a as NavResult, p as parseNavFile } from './nav-BAI1a9vK.cjs';
10
10
  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-Ohl6NAfw.cjs';
11
11
  export { MessageTypeStats, MsmEpoch, MsmSatObs, MsmSignal, RTCM3_MESSAGE_NAMES, SatCn0, SignalCn0, StationMeta, StreamStats, createStationMeta, createStreamStats, decodeMsmFull, msmEpochToDate, resetGloFreqCache, rtcm3Constellation, setGloFreqNumber, updateStationMeta, updateStreamStats } from './rtcm3.cjs';
12
- export { UbxFrame, UbxMeasurement, UbxNavOptions, UbxNavResult, UbxParseResult, UbxRawxEpoch, parseUbxNav, parseUbxRawx, ubxFrames } from './ubx.cjs';
13
- export { SbfAlmanac, SbfAlmanacResult, SbfGlonassAlmanac, SbfKeplerAlmanac, SbfMeasEpoch, SbfMeasurement, SbfNavResult, SbfParseResult, parseSbfAlmanac, parseSbfMeas, parseSbfNav, sbfCrc16, scanSbfFrames } from './sbf.cjs';
12
+ export { UbxFrame, UbxIonoUtcResult, UbxMeasurement, UbxNavOptions, UbxNavResult, UbxParseResult, UbxRawxEpoch, parseUbxIonoUtc, parseUbxNav, parseUbxRawx, ubxFrames } from './ubx.cjs';
13
+ export { SbfAlmanac, SbfAlmanacResult, SbfGlonassAlmanac, SbfIonoUtcResult, SbfKeplerAlmanac, SbfMeasEpoch, SbfMeasurement, SbfNavResult, SbfParseResult, parseSbfAlmanac, parseSbfIonoUtc, parseSbfMeas, parseSbfNav, sbfCrc16, scanSbfFrames } from './sbf.cjs';
14
14
  export { NovatelEpoch, NovatelMeasurement, NovatelNavResult, NovatelParseResult, OEM4_HLEN, Oem4Frame, crc32, oem4Frames, parseNovatelNav, parseNovatelRange } from './novatel.cjs';
15
15
  export { AllPositionsData, DopValues, EpochSkyData, SatAzEl, SatPoint, SatPosition, VisibilityPass, VisibilityResult, computeAllPositions, computeDop, computeLiveSkyPositions, computeSatPosition, computeVisibility, computeVisibilityFromPositions, dopplerHz, ecefToAzEl, ephInfoToEphemeris, glonassPosition, keplerPosition, maskRadForAzimuth, navTimesFromEph, rangeRate, selectEphemeris } from './orbit.cjs';
16
16
  export { Helmert14, REFERENCE_FRAMES, ReferenceFrame, applyHelmert, dateToEpoch, transformFrame } from './frames.cjs';
package/dist/index.d.ts CHANGED
@@ -9,8 +9,8 @@ export { E as EpochSummary, P as ParseOptions, R as RinexHeader, a as RinexResul
9
9
  export { E as Ephemeris, G as GlonassEphemeris, K as KeplerEphemeris, N as NavHeader, a as NavResult, p as parseNavFile } from './nav-BAI1a9vK.js';
10
10
  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-Ohl6NAfw.js';
11
11
  export { MessageTypeStats, MsmEpoch, MsmSatObs, MsmSignal, RTCM3_MESSAGE_NAMES, SatCn0, SignalCn0, StationMeta, StreamStats, createStationMeta, createStreamStats, decodeMsmFull, msmEpochToDate, resetGloFreqCache, rtcm3Constellation, setGloFreqNumber, updateStationMeta, updateStreamStats } from './rtcm3.js';
12
- export { UbxFrame, UbxMeasurement, UbxNavOptions, UbxNavResult, UbxParseResult, UbxRawxEpoch, parseUbxNav, parseUbxRawx, ubxFrames } from './ubx.js';
13
- export { SbfAlmanac, SbfAlmanacResult, SbfGlonassAlmanac, SbfKeplerAlmanac, SbfMeasEpoch, SbfMeasurement, SbfNavResult, SbfParseResult, parseSbfAlmanac, parseSbfMeas, parseSbfNav, sbfCrc16, scanSbfFrames } from './sbf.js';
12
+ export { UbxFrame, UbxIonoUtcResult, UbxMeasurement, UbxNavOptions, UbxNavResult, UbxParseResult, UbxRawxEpoch, parseUbxIonoUtc, parseUbxNav, parseUbxRawx, ubxFrames } from './ubx.js';
13
+ export { SbfAlmanac, SbfAlmanacResult, SbfGlonassAlmanac, SbfIonoUtcResult, SbfKeplerAlmanac, SbfMeasEpoch, SbfMeasurement, SbfNavResult, SbfParseResult, parseSbfAlmanac, parseSbfIonoUtc, parseSbfMeas, parseSbfNav, sbfCrc16, scanSbfFrames } from './sbf.js';
14
14
  export { NovatelEpoch, NovatelMeasurement, NovatelNavResult, NovatelParseResult, OEM4_HLEN, Oem4Frame, crc32, oem4Frames, parseNovatelNav, parseNovatelRange } from './novatel.js';
15
15
  export { AllPositionsData, DopValues, EpochSkyData, SatAzEl, SatPoint, SatPosition, VisibilityPass, VisibilityResult, computeAllPositions, computeDop, computeLiveSkyPositions, computeSatPosition, computeVisibility, computeVisibilityFromPositions, dopplerHz, ecefToAzEl, ephInfoToEphemeris, glonassPosition, keplerPosition, maskRadForAzimuth, navTimesFromEph, rangeRate, selectEphemeris } from './orbit.js';
16
16
  export { Helmert14, REFERENCE_FRAMES, ReferenceFrame, applyHelmert, dateToEpoch, transformFrame } from './frames.js';
package/dist/index.js CHANGED
@@ -34,25 +34,27 @@ import {
34
34
  phiBPSK
35
35
  } from "./chunk-2K3FCJBX.js";
36
36
  import {
37
+ parseUbxIonoUtc,
37
38
  parseUbxNav,
38
39
  parseUbxRawx,
39
40
  ubxFrames
40
- } from "./chunk-6CX6EXRK.js";
41
+ } from "./chunk-IG5CDNDS.js";
41
42
  import {
42
43
  crc16,
43
44
  parseSbfAlmanac,
45
+ parseSbfIonoUtc,
44
46
  parseSbfMeas,
45
47
  parseSbfNav,
46
48
  scanSbfFrames
47
- } from "./chunk-YPOVPXNK.js";
49
+ } from "./chunk-ZNCQNHNI.js";
48
50
  import {
49
51
  OEM4_HLEN,
50
52
  crc32,
51
53
  oem4Frames,
52
54
  parseNovatelNav,
53
55
  parseNovatelRange
54
- } from "./chunk-R33A2VA7.js";
55
- import "./chunk-4LVD4DYL.js";
56
+ } from "./chunk-7QR2KPDU.js";
57
+ import "./chunk-REYOYF7O.js";
56
58
  import {
57
59
  connectToMountpoint,
58
60
  fetchSourcetable,
@@ -487,11 +489,13 @@ export {
487
489
  parseNovatelRange,
488
490
  parseRinexStream,
489
491
  parseSbfAlmanac,
492
+ parseSbfIonoUtc,
490
493
  parseSbfMeas,
491
494
  parseSbfNav,
492
495
  parseSinexBiasDcb,
493
496
  parseSourcetable,
494
497
  parseSp3,
498
+ parseUbxIonoUtc,
495
499
  parseUbxNav,
496
500
  parseUbxRawx,
497
501
  phiAltBOC,