gnss-js 1.0.1 → 1.2.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.
Files changed (42) hide show
  1. package/README.md +54 -0
  2. package/dist/analysis.cjs +3 -3
  3. package/dist/analysis.js +3 -3
  4. package/dist/{chunk-HKN3PUGN.js → chunk-5SPJH4MG.js} +35 -26
  5. package/dist/{chunk-WP2JFDLA.js → chunk-7EEWQ5DU.js} +93 -118
  6. package/dist/{chunk-SO3POWWR.js → chunk-G3N4S3DM.js} +2 -2
  7. package/dist/{chunk-7NOFXKET.js → chunk-HVXYFUCB.js} +72 -257
  8. package/dist/chunk-L5OUUNLT.js +198 -0
  9. package/dist/{chunk-HBLU2EJ4.js → chunk-OZCYOM5D.js} +1 -1
  10. package/dist/{chunk-4YN353Q7.js → chunk-VANVV4F7.js} +21 -7
  11. package/dist/{chunk-LWNTWBHB.js → chunk-W5WKEV7U.js} +3 -2
  12. package/dist/constants.cjs +3 -2
  13. package/dist/constants.js +7 -7
  14. package/dist/{ephemeris-C10stHhM.d.cts → ephemeris-Ohl6NAfw.d.cts} +11 -1
  15. package/dist/{ephemeris-C10stHhM.d.ts → ephemeris-Ohl6NAfw.d.ts} +11 -1
  16. package/dist/frames.cjs +250 -0
  17. package/dist/frames.d.cts +56 -0
  18. package/dist/frames.d.ts +56 -0
  19. package/dist/frames.js +222 -0
  20. package/dist/index.cjs +133 -152
  21. package/dist/index.d.cts +2 -2
  22. package/dist/index.d.ts +2 -2
  23. package/dist/index.js +96 -88
  24. package/dist/orbit.cjs +103 -7
  25. package/dist/orbit.d.cts +1 -1
  26. package/dist/orbit.d.ts +1 -1
  27. package/dist/orbit.js +3 -1
  28. package/dist/positioning.cjs +565 -0
  29. package/dist/positioning.d.cts +68 -0
  30. package/dist/positioning.d.ts +68 -0
  31. package/dist/positioning.js +206 -0
  32. package/dist/rinex.js +2 -2
  33. package/dist/rtcm3.cjs +116 -117
  34. package/dist/rtcm3.d.cts +9 -3
  35. package/dist/rtcm3.d.ts +9 -3
  36. package/dist/rtcm3.js +9 -2
  37. package/dist/signals.cjs +55 -26
  38. package/dist/signals.d.cts +26 -26
  39. package/dist/signals.d.ts +26 -26
  40. package/dist/signals.js +2 -1
  41. package/dist/time.js +20 -18
  42. package/package.json +11 -2
package/dist/index.js CHANGED
@@ -1,9 +1,14 @@
1
+ import {
2
+ connectToMountpoint,
3
+ fetchSourcetable,
4
+ parseSourcetable
5
+ } from "./chunk-BJHTBYNG.js";
1
6
  import {
2
7
  CompletenessAccumulator,
3
8
  CycleSlipAccumulator,
4
9
  MultipathAccumulator,
5
10
  analyzeQuality
6
- } from "./chunk-SO3POWWR.js";
11
+ } from "./chunk-G3N4S3DM.js";
7
12
  import {
8
13
  frequencyLabel,
9
14
  parseAntex
@@ -48,43 +53,71 @@ import {
48
53
  phiBOCc,
49
54
  phiBOCs,
50
55
  phiBPSK
51
- } from "./chunk-HKN3PUGN.js";
56
+ } from "./chunk-5SPJH4MG.js";
52
57
  import {
53
58
  Scale,
54
- getBdsTime,
55
- getDateFromBdsTime,
56
59
  getDateFromDayOfWeek,
57
60
  getDateFromDayOfYear,
58
- getDateFromGalTime,
59
- getDateFromGloN,
60
- getDateFromGpsData,
61
- getDateFromGpsTime,
62
61
  getDateFromHourCode,
63
62
  getDateFromJulianDate,
64
63
  getDateFromMJD,
65
64
  getDateFromMJD2000,
66
65
  getDateFromRINEX,
67
- getDateFromTai,
68
66
  getDateFromTimeOfDay,
67
+ getDayOfWeek,
68
+ getDayOfYear,
69
+ getHourCode,
70
+ getJulianDate,
71
+ getMJD,
72
+ getMJD2000,
73
+ getRINEX,
74
+ getTimeOfDay,
75
+ getWeekOfYear
76
+ } from "./chunk-L5OUUNLT.js";
77
+ import {
78
+ deg2dms,
79
+ deg2rad,
80
+ euclidean3D,
81
+ geodeticToGeohash,
82
+ geodeticToMaidenhead,
83
+ geodeticToUtm,
84
+ greatCircleMidpoint,
85
+ horizonDistance,
86
+ rad2deg,
87
+ rhumbLine,
88
+ vincenty
89
+ } from "./chunk-MIIM4LDY.js";
90
+ import {
91
+ computeAllPositions,
92
+ computeDop,
93
+ computeLiveSkyPositions,
94
+ computeSatPosition,
95
+ ecefToAzEl,
96
+ glonassPosition,
97
+ keplerPosition,
98
+ navTimesFromEph,
99
+ selectEphemeris
100
+ } from "./chunk-VANVV4F7.js";
101
+ import {
102
+ getBdsTime,
103
+ getDateFromBdsTime,
104
+ getDateFromGalTime,
105
+ getDateFromGloN,
106
+ getDateFromGpsData,
107
+ getDateFromGpsTime,
108
+ getDateFromTai,
69
109
  getDateFromTt,
70
110
  getDateFromUnixTime,
71
111
  getDateFromUtc,
72
- getDayOfWeek,
73
- getDayOfYear,
74
112
  getGalTime,
75
113
  getGloN4,
76
114
  getGloNA,
77
115
  getGpsLeap,
78
116
  getGpsTime,
79
- getHourCode,
80
117
  getHoursFromTimeDifference,
81
- getJulianDate,
82
118
  getLeap,
83
- getMJD,
84
- getMJD2000,
85
119
  getMinutesFromTimeDifference,
86
120
  getNtpTime,
87
- getRINEX,
88
121
  getSecondsFromTimeDifference,
89
122
  getTaiDate,
90
123
  getTimeDifference,
@@ -93,54 +126,27 @@ import {
93
126
  getTimeDifferenceFromMinutes,
94
127
  getTimeDifferenceFromObject,
95
128
  getTimeDifferenceFromSeconds,
96
- getTimeOfDay,
97
129
  getTimeOfWeek,
98
130
  getTotalDaysFromTimeDifference,
99
131
  getTtDate,
100
132
  getUnixTime,
101
133
  getUtcDate,
102
- getWeekNumber,
103
- getWeekOfYear
104
- } from "./chunk-7NOFXKET.js";
134
+ getWeekNumber
135
+ } from "./chunk-HVXYFUCB.js";
105
136
  import {
106
- deg2dms,
107
- deg2rad,
108
- euclidean3D,
109
- geodeticToGeohash,
110
- geodeticToMaidenhead,
111
- geodeticToUtm,
112
- greatCircleMidpoint,
113
- horizonDistance,
114
- rad2deg,
115
- rhumbLine,
116
- vincenty
117
- } from "./chunk-MIIM4LDY.js";
137
+ clampUnit,
138
+ ecefToGeodetic,
139
+ geodeticToEcef,
140
+ getAer,
141
+ getEnuDifference
142
+ } from "./chunk-37QNKGTC.js";
118
143
  import "./chunk-5S5MONFK.js";
119
144
  import {
120
- DAYS_MJD2000_MJD,
121
- DAYS_MJD_JULIAN,
122
- MILLISECONDS_GPS_TAI,
123
- MILLISECONDS_IN_DAY,
124
- MILLISECONDS_IN_HOUR,
125
- MILLISECONDS_IN_MINUTE,
126
- MILLISECONDS_IN_SECOND,
127
- MILLISECONDS_IN_WEEK,
128
- MILLISECONDS_TT_TAI,
129
- RINEX_CODES,
130
- SECONDS_IN_DAY,
131
- SECONDS_IN_HOUR,
132
- SECONDS_IN_MINUTE,
133
- SECONDS_IN_WEEK,
134
- START_BDS_TIME,
135
- START_GAL_TIME,
136
- START_GLO_LEAP,
137
- START_GPS_TIME,
138
- START_JULIAN_TAI,
139
- START_MJD_UNIX_SECONDS,
140
- START_NTP_TIME,
141
- START_TAI_TIME,
142
- START_UNIX_TIME
143
- } from "./chunk-LEEU5OIO.js";
145
+ WGS84_ECCENTRICITY_SQUARED,
146
+ WGS84_FLATTENING,
147
+ WGS84_SEMI_MAJOR_AXIS,
148
+ WGS84_SEMI_MINOR_AXIS
149
+ } from "./chunk-6FAL6P4G.js";
144
150
  import {
145
151
  EMPTY_WARNINGS,
146
152
  WarningAccumulator,
@@ -159,7 +165,7 @@ import {
159
165
  parseRinexStream,
160
166
  systemCmp,
161
167
  systemName
162
- } from "./chunk-HBLU2EJ4.js";
168
+ } from "./chunk-OZCYOM5D.js";
163
169
  import {
164
170
  BitReader,
165
171
  RTCM3_MESSAGE_NAMES,
@@ -170,11 +176,39 @@ import {
170
176
  decodeMsmFull,
171
177
  msmEpochToDate,
172
178
  readString,
179
+ reportDecodeError,
173
180
  resetGloFreqCache,
174
181
  rtcm3Constellation,
182
+ setGloFreqNumber,
183
+ setRtcm3DebugHandler,
175
184
  updateStationMeta,
176
185
  updateStreamStats
177
- } from "./chunk-WP2JFDLA.js";
186
+ } from "./chunk-7EEWQ5DU.js";
187
+ import {
188
+ DAYS_MJD2000_MJD,
189
+ DAYS_MJD_JULIAN,
190
+ MILLISECONDS_GPS_TAI,
191
+ MILLISECONDS_IN_DAY,
192
+ MILLISECONDS_IN_HOUR,
193
+ MILLISECONDS_IN_MINUTE,
194
+ MILLISECONDS_IN_SECOND,
195
+ MILLISECONDS_IN_WEEK,
196
+ MILLISECONDS_TT_TAI,
197
+ RINEX_CODES,
198
+ SECONDS_IN_DAY,
199
+ SECONDS_IN_HOUR,
200
+ SECONDS_IN_MINUTE,
201
+ SECONDS_IN_WEEK,
202
+ START_BDS_TIME,
203
+ START_GAL_TIME,
204
+ START_GLO_LEAP,
205
+ START_GPS_TIME,
206
+ START_JULIAN_TAI,
207
+ START_MJD_UNIX_SECONDS,
208
+ START_NTP_TIME,
209
+ START_TAI_TIME,
210
+ START_UNIX_TIME
211
+ } from "./chunk-LEEU5OIO.js";
178
212
  import {
179
213
  ARC_GAP_FACTOR,
180
214
  BAND_LABELS,
@@ -196,36 +230,7 @@ import {
196
230
  formatUTCTime,
197
231
  getFreq,
198
232
  gloFreq
199
- } from "./chunk-LWNTWBHB.js";
200
- import {
201
- computeAllPositions,
202
- computeDop,
203
- computeLiveSkyPositions,
204
- computeSatPosition,
205
- ecefToAzEl,
206
- glonassPosition,
207
- keplerPosition,
208
- navTimesFromEph,
209
- selectEphemeris
210
- } from "./chunk-4YN353Q7.js";
211
- import {
212
- clampUnit,
213
- ecefToGeodetic,
214
- geodeticToEcef,
215
- getAer,
216
- getEnuDifference
217
- } from "./chunk-37QNKGTC.js";
218
- import {
219
- WGS84_ECCENTRICITY_SQUARED,
220
- WGS84_FLATTENING,
221
- WGS84_SEMI_MAJOR_AXIS,
222
- WGS84_SEMI_MINOR_AXIS
223
- } from "./chunk-6FAL6P4G.js";
224
- import {
225
- connectToMountpoint,
226
- fetchSourcetable,
227
- parseSourcetable
228
- } from "./chunk-BJHTBYNG.js";
233
+ } from "./chunk-W5WKEV7U.js";
229
234
  export {
230
235
  ARC_GAP_FACTOR,
231
236
  BAND_LABELS,
@@ -413,10 +418,13 @@ export {
413
418
  phiBPSK,
414
419
  rad2deg,
415
420
  readString,
421
+ reportDecodeError,
416
422
  resetGloFreqCache,
417
423
  rhumbLine,
418
424
  rtcm3Constellation,
419
425
  selectEphemeris,
426
+ setGloFreqNumber,
427
+ setRtcm3DebugHandler,
420
428
  systemCmp,
421
429
  systemName,
422
430
  updateStationMeta,
package/dist/orbit.cjs CHANGED
@@ -71,12 +71,103 @@ function ecefToGeodetic(x, y, z) {
71
71
  return [lat, lon, alt];
72
72
  }
73
73
 
74
+ // src/constants/time.ts
75
+ var MILLISECONDS_IN_SECOND = 1e3;
76
+ var MILLISECONDS_GPS_TAI = 19e3;
77
+ var START_GPS_TIME = /* @__PURE__ */ new Date("1980-01-06T00:00:00Z");
78
+ var START_BDS_TIME = /* @__PURE__ */ new Date("2006-01-01T00:00:14Z");
79
+ var START_NTP_TIME = /* @__PURE__ */ new Date("1900-01-01T00:00:00Z");
80
+
81
+ // src/time/gnss.ts
82
+ function getTaiDate(date) {
83
+ return new Date(date.getTime() + MILLISECONDS_GPS_TAI);
84
+ }
85
+ function getNtpTime(date) {
86
+ return getTaiDate(date).getTime() - START_NTP_TIME.getTime();
87
+ }
88
+
89
+ // src/time/utc.ts
90
+ var LEAP_SECONDS_TABLE = [
91
+ [3692217600, 37],
92
+ // 1 Jan 2017
93
+ [3644697600, 36],
94
+ // 1 Jul 2015
95
+ [3550089600, 35],
96
+ // 1 Jul 2012
97
+ [3439756800, 34],
98
+ // 1 Jan 2009
99
+ [3345062400, 33],
100
+ // 1 Jan 2006
101
+ [3124137600, 32],
102
+ // 1 Jan 1999
103
+ [3076704e3, 31],
104
+ // 1 Jul 1997
105
+ [3029443200, 30],
106
+ // 1 Jan 1996
107
+ [2982009600, 29],
108
+ // 1 Jul 1994
109
+ [2950473600, 28],
110
+ // 1 Jul 1993
111
+ [2918937600, 27],
112
+ // 1 Jul 1992
113
+ [2871676800, 26],
114
+ // 1 Jan 1991
115
+ [2840140800, 25],
116
+ // 1 Jan 1990
117
+ [2776982400, 24],
118
+ // 1 Jan 1988
119
+ [2698012800, 23],
120
+ // 1 Jul 1985
121
+ [2634854400, 22],
122
+ // 1 Jul 1983
123
+ [2603318400, 21],
124
+ // 1 Jul 1982
125
+ [2571782400, 20],
126
+ // 1 Jul 1981
127
+ [2524521600, 19],
128
+ // 1 Jan 1980
129
+ [2492985600, 18],
130
+ // 1 Jan 1979
131
+ [2461449600, 17],
132
+ // 1 Jan 1978
133
+ [2429913600, 16],
134
+ // 1 Jan 1977
135
+ [2398291200, 15],
136
+ // 1 Jan 1976
137
+ [2366755200, 14],
138
+ // 1 Jan 1975
139
+ [2335219200, 13],
140
+ // 1 Jan 1974
141
+ [2303683200, 12],
142
+ // 1 Jan 1973
143
+ [2287785600, 11],
144
+ // 1 Jul 1972
145
+ [2272060800, 10]
146
+ // 1 Jan 1972
147
+ ];
148
+ function getLeap(date) {
149
+ const ntp_time = getNtpTime(date);
150
+ for (const [timestamp, leapSeconds] of LEAP_SECONDS_TABLE) {
151
+ if (ntp_time / MILLISECONDS_IN_SECOND - leapSeconds >= timestamp) {
152
+ return leapSeconds;
153
+ }
154
+ }
155
+ return 8;
156
+ }
157
+ function getGpsLeap(date) {
158
+ const leap_seconds = getLeap(date);
159
+ if (leap_seconds < 0) return 0;
160
+ return leap_seconds - 19;
161
+ }
162
+
74
163
  // src/orbit/index.ts
75
164
  var GM_GPS = 3986005e8;
76
165
  var GM_GAL = 3986004418e5;
77
166
  var GM_BDS = 3986004418e5;
78
167
  var GM_GLO = 39860044e7;
79
168
  var OMEGA_E = 72921151467e-15;
169
+ var BDS_GEO_MAX_INCLINATION_RAD = 0.1;
170
+ var BDS_GEO_MIN_SEMIMAJOR_AXIS_M = 4e7;
80
171
  var AE_GLO = 6378136;
81
172
  var J2_GLO = 108263e-8;
82
173
  var TWO_PI = 2 * Math.PI;
@@ -114,7 +205,7 @@ function keplerPosition(eph, t) {
114
205
  const ik = eph.i0 + dik + eph.idot * tk;
115
206
  const xp = rk * Math.cos(uk);
116
207
  const yp = rk * Math.sin(uk);
117
- const isBdsGeo = eph.system === "C" && Math.abs(eph.i0) < 0.1 && a > 4e7;
208
+ const isBdsGeo = eph.system === "C" && Math.abs(eph.i0) < BDS_GEO_MAX_INCLINATION_RAD && a > BDS_GEO_MIN_SEMIMAJOR_AXIS_M;
118
209
  if (isBdsGeo) {
119
210
  const omegak2 = eph.omega0 + eph.omegaDot * tk - OMEGA_E * eph.toe;
120
211
  const cosO2 = Math.cos(omegak2);
@@ -293,11 +384,13 @@ function selectEphemeris(ephemerides, prn, timeMs) {
293
384
  }
294
385
  function computeSatPosition(eph, timeMs) {
295
386
  if (eph.system === "R" || eph.system === "S") {
296
- return glonassPosition(eph, timeMs / 1e3);
387
+ const leapMs = getGpsLeap(new Date(timeMs)) * 1e3;
388
+ return glonassPosition(eph, (timeMs - leapMs) / 1e3);
297
389
  }
298
- const GPS_EPOCH = Date.UTC(1980, 0, 6);
390
+ const GPS_EPOCH = START_GPS_TIME.getTime();
299
391
  const gpsSeconds = (timeMs - GPS_EPOCH) / 1e3;
300
- const tow = gpsSeconds % (7 * 86400);
392
+ let tow = gpsSeconds % (7 * 86400);
393
+ if (eph.system === "C") tow = (tow - 14 + 604800) % 604800;
301
394
  return keplerPosition(eph, tow);
302
395
  }
303
396
  function navTimesFromEph(ephs) {
@@ -379,8 +472,8 @@ function selectBest(ephs, timeMs) {
379
472
  }
380
473
  return best;
381
474
  }
382
- var GPS_EPOCH_MS = Date.UTC(1980, 0, 6);
383
- var BDS_EPOCH_MS = Date.UTC(2006, 0, 1);
475
+ var GPS_EPOCH_MS = START_GPS_TIME.getTime();
476
+ var BDS_EPOCH_MS = START_BDS_TIME.getTime();
384
477
  var GAL_EPOCH_MS = GPS_EPOCH_MS;
385
478
  function ephInfoToEphemeris(info) {
386
479
  const sys = info.prn.charAt(0);
@@ -421,6 +514,9 @@ function ephInfoToEphemeris(info) {
421
514
  }
422
515
  if (info.sqrtA === void 0 || info.eccentricity === void 0 || info.inclination === void 0 || info.omega0 === void 0 || info.argPerigee === void 0 || info.meanAnomaly === void 0 || info.toe === void 0 || info.week === void 0)
423
516
  return null;
517
+ if (info.eccentricity < 0 || info.eccentricity >= 1 || info.sqrtA < 3e3 || info.sqrtA > 9e3 || info.toe < 0 || info.toe > 604800) {
518
+ return null;
519
+ }
424
520
  let epochMs;
425
521
  const tocSec = info.toc ?? info.toe;
426
522
  if (sys === "C") {
@@ -462,7 +558,7 @@ function ephInfoToEphemeris(info) {
462
558
  };
463
559
  }
464
560
  function computeLiveSkyPositions(ephemerides, rxPos, cn0Map) {
465
- const now = Date.now();
561
+ const now = Date.now() + getGpsLeap(/* @__PURE__ */ new Date()) * 1e3;
466
562
  const result = [];
467
563
  const [rxX, rxY, rxZ] = rxPos;
468
564
  const [rxLat, rxLon] = ecefToGeodetic(rxX, rxY, rxZ);
package/dist/orbit.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { E as Ephemeris, G as GlonassEphemeris, K as KeplerEphemeris } from './nav-BAI1a9vK.cjs';
2
- import { E as EphemerisInfo } from './ephemeris-C10stHhM.cjs';
2
+ import { E as EphemerisInfo } from './ephemeris-Ohl6NAfw.cjs';
3
3
  export { e as ecefToGeodetic, g as geodeticToEcef } from './ecef-CF0uAysr.cjs';
4
4
 
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-BAI1a9vK.js';
2
- import { E as EphemerisInfo } from './ephemeris-C10stHhM.js';
2
+ import { E as EphemerisInfo } from './ephemeris-Ohl6NAfw.js';
3
3
  export { e as ecefToGeodetic, g as geodeticToEcef } from './ecef-CF0uAysr.js';
4
4
 
5
5
  /**
package/dist/orbit.js CHANGED
@@ -8,12 +8,14 @@ import {
8
8
  keplerPosition,
9
9
  navTimesFromEph,
10
10
  selectEphemeris
11
- } from "./chunk-4YN353Q7.js";
11
+ } from "./chunk-VANVV4F7.js";
12
+ import "./chunk-HVXYFUCB.js";
12
13
  import {
13
14
  ecefToGeodetic,
14
15
  geodeticToEcef
15
16
  } from "./chunk-37QNKGTC.js";
16
17
  import "./chunk-6FAL6P4G.js";
18
+ import "./chunk-LEEU5OIO.js";
17
19
  export {
18
20
  computeAllPositions,
19
21
  computeDop,