gnss-js 0.1.2 → 1.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.
Files changed (87) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +171 -5
  3. package/dist/analysis.cjs +1381 -0
  4. package/dist/analysis.d.cts +211 -0
  5. package/dist/analysis.d.ts +211 -0
  6. package/dist/analysis.js +14 -0
  7. package/dist/antex.cjs +239 -0
  8. package/dist/antex.d.cts +77 -0
  9. package/dist/antex.d.ts +77 -0
  10. package/dist/antex.js +8 -0
  11. package/dist/chunk-354IRDOG.js +239 -0
  12. package/dist/chunk-37QNKGTC.js +65 -0
  13. package/dist/chunk-5CMSYIYM.js +214 -0
  14. package/dist/chunk-5S5MONFK.js +0 -0
  15. package/dist/chunk-6FAL6P4G.js +12 -0
  16. package/dist/chunk-7NOFXKET.js +433 -0
  17. package/dist/chunk-CB6EOOLA.js +753 -0
  18. package/dist/chunk-HKN3PUGN.js +800 -0
  19. package/dist/chunk-IS4UUDBV.js +577 -0
  20. package/dist/chunk-K7WZQFBV.js +236 -0
  21. package/dist/chunk-LEEU5OIO.js +75 -0
  22. package/dist/chunk-PRSZIWKM.js +1482 -0
  23. package/dist/chunk-SDRRAJT5.js +433 -0
  24. package/dist/chunk-WR7LCB52.js +143 -0
  25. package/dist/chunk-Y3R57B5P.js +473 -0
  26. package/dist/chunk-YDMYO3YK.js +220 -0
  27. package/dist/constants.cjs +394 -0
  28. package/dist/constants.d.cts +14 -0
  29. package/dist/constants.d.ts +14 -0
  30. package/dist/constants.js +103 -0
  31. package/dist/coordinates.cjs +334 -0
  32. package/dist/coordinates.d.cts +81 -0
  33. package/dist/coordinates.d.ts +81 -0
  34. package/dist/coordinates.js +39 -0
  35. package/dist/ecef-CF0uAysr.d.cts +40 -0
  36. package/dist/ecef-CF0uAysr.d.ts +40 -0
  37. package/dist/ephemeris-BUWzfmBy.d.cts +114 -0
  38. package/dist/ephemeris-BUWzfmBy.d.ts +114 -0
  39. package/dist/gnss-BT6ulR17.d.cts +56 -0
  40. package/dist/gnss-C-tgoYNa.d.ts +56 -0
  41. package/dist/index.cjs +5774 -78
  42. package/dist/index.d.cts +17 -96
  43. package/dist/index.d.ts +17 -96
  44. package/dist/index.js +352 -415
  45. package/dist/nav-BAI1a9vK.d.cts +108 -0
  46. package/dist/nav-BAI1a9vK.d.ts +108 -0
  47. package/dist/nmea.cjs +247 -0
  48. package/dist/nmea.d.cts +37 -0
  49. package/dist/nmea.d.ts +37 -0
  50. package/dist/nmea.js +12 -0
  51. package/dist/ntrip.cjs +169 -0
  52. package/dist/ntrip.d.cts +98 -0
  53. package/dist/ntrip.d.ts +98 -0
  54. package/dist/ntrip.js +10 -0
  55. package/dist/orbit.cjs +504 -0
  56. package/dist/orbit.d.cts +117 -0
  57. package/dist/orbit.d.ts +117 -0
  58. package/dist/orbit.js +29 -0
  59. package/dist/parser-JPjjFgeP.d.cts +73 -0
  60. package/dist/parser-JPjjFgeP.d.ts +73 -0
  61. package/dist/rinex.cjs +1375 -0
  62. package/dist/rinex.d.cts +116 -0
  63. package/dist/rinex.d.ts +116 -0
  64. package/dist/rinex.js +37 -0
  65. package/dist/rtcm3.cjs +1519 -0
  66. package/dist/rtcm3.d.cts +143 -0
  67. package/dist/rtcm3.d.ts +143 -0
  68. package/dist/rtcm3.js +31 -0
  69. package/dist/signals.cjs +858 -0
  70. package/dist/signals.d.cts +93 -0
  71. package/dist/signals.d.ts +93 -0
  72. package/dist/signals.js +70 -0
  73. package/dist/time-DnI1VpE8.d.cts +33 -0
  74. package/dist/time-DnI1VpE8.d.ts +33 -0
  75. package/dist/time.cjs +585 -0
  76. package/dist/time.d.cts +307 -0
  77. package/dist/time.d.ts +307 -0
  78. package/dist/time.js +154 -0
  79. package/package.json +112 -14
  80. package/.prettierrc +0 -5
  81. package/jest.config.ts +0 -9
  82. package/test/functions.test.ts +0 -63
  83. package/test/gnss-scales.test.ts +0 -95
  84. package/test/julian.test.ts +0 -145
  85. package/test/rinex.test.ts +0 -11
  86. package/test/test.ts +0 -10
  87. package/test/utc.test.ts +0 -25
@@ -0,0 +1,433 @@
1
+ import {
2
+ DAYS_MJD2000_MJD,
3
+ DAYS_MJD_JULIAN,
4
+ MILLISECONDS_GPS_TAI,
5
+ MILLISECONDS_IN_DAY,
6
+ MILLISECONDS_IN_HOUR,
7
+ MILLISECONDS_IN_MINUTE,
8
+ MILLISECONDS_IN_SECOND,
9
+ MILLISECONDS_IN_WEEK,
10
+ MILLISECONDS_TT_TAI,
11
+ RINEX_CODES,
12
+ START_BDS_TIME,
13
+ START_GAL_TIME,
14
+ START_GLO_LEAP,
15
+ START_GPS_TIME,
16
+ START_JULIAN_TAI,
17
+ START_NTP_TIME,
18
+ START_TAI_TIME
19
+ } from "./chunk-LEEU5OIO.js";
20
+
21
+ // src/types/enums.ts
22
+ var Scale = /* @__PURE__ */ ((Scale2) => {
23
+ Scale2[Scale2["TAI"] = 0] = "TAI";
24
+ Scale2[Scale2["TT"] = 1] = "TT";
25
+ Scale2[Scale2["GPS"] = 2] = "GPS";
26
+ Scale2[Scale2["UTC"] = 3] = "UTC";
27
+ return Scale2;
28
+ })(Scale || {});
29
+
30
+ // src/time/functions.ts
31
+ function getTimeOfDay(date) {
32
+ return date.getTime() - Date.UTC(
33
+ date.getUTCFullYear(),
34
+ date.getUTCMonth(),
35
+ date.getUTCDate(),
36
+ 0,
37
+ 0,
38
+ 0
39
+ );
40
+ }
41
+ function getDateFromTimeOfDay(timeOfDay, dateRaw) {
42
+ return new Date(
43
+ Date.UTC(
44
+ dateRaw.getUTCFullYear(),
45
+ dateRaw.getUTCMonth(),
46
+ dateRaw.getUTCDate(),
47
+ 0,
48
+ 0,
49
+ 0
50
+ ) + timeOfDay
51
+ );
52
+ }
53
+ function getDayOfYear(date) {
54
+ return Math.floor(
55
+ (date.getTime() - Date.UTC(date.getUTCFullYear())) / MILLISECONDS_IN_DAY
56
+ ) + 1;
57
+ }
58
+ function getDateFromDayOfYear(dayOfYear, date) {
59
+ return new Date(
60
+ Date.UTC(
61
+ date.getUTCFullYear(),
62
+ 0,
63
+ 1,
64
+ date.getUTCHours(),
65
+ date.getUTCMinutes(),
66
+ date.getUTCSeconds(),
67
+ date.getUTCMilliseconds()
68
+ ) + (dayOfYear - 1) * MILLISECONDS_IN_DAY
69
+ );
70
+ }
71
+ function getDayOfWeek(date) {
72
+ return date.getUTCDay();
73
+ }
74
+ function getDateFromDayOfWeek(dayOfWeek, dateRaw) {
75
+ if (dayOfWeek < 0 || dayOfWeek > 6)
76
+ throw new Error("Day of week must be a value between 0 and 7");
77
+ return new Date(
78
+ dateRaw.getTime() + (dayOfWeek - dateRaw.getUTCDay()) * MILLISECONDS_IN_DAY
79
+ );
80
+ }
81
+ function getDateFromHourCode(hourCode, date) {
82
+ const hour = RINEX_CODES.indexOf(hourCode);
83
+ if (hour === -1)
84
+ throw new Error("Hour code must be a lowercase letter between a and x");
85
+ const newDate = new Date(date.getTime());
86
+ newDate.setUTCHours(hour);
87
+ return newDate;
88
+ }
89
+ function getHourCode(date) {
90
+ return RINEX_CODES[date.getUTCHours()];
91
+ }
92
+ function getWeekOfYear(date) {
93
+ const target = new Date(
94
+ Date.UTC(date.getFullYear(), date.getMonth(), date.getDate())
95
+ );
96
+ const dayNr = (target.getUTCDay() + 6) % 7;
97
+ target.setUTCDate(target.getUTCDate() - dayNr + 3);
98
+ const firstThursday = new Date(Date.UTC(target.getUTCFullYear(), 0, 4));
99
+ const dayDiff = (target.getTime() - firstThursday.getTime()) / (86400 * 1e3);
100
+ return 1 + Math.floor(dayDiff / 7) + 1;
101
+ }
102
+
103
+ // src/time/time-difference.ts
104
+ function getTimeDifference(startDate, finalDate) {
105
+ return Math.floor(finalDate.getTime() - startDate.getTime());
106
+ }
107
+ function getSecondsFromTimeDifference(timeDifference) {
108
+ return Math.floor(
109
+ timeDifference % MILLISECONDS_IN_MINUTE / MILLISECONDS_IN_SECOND
110
+ );
111
+ }
112
+ function getMinutesFromTimeDifference(timeDifference) {
113
+ return Math.floor(
114
+ timeDifference % MILLISECONDS_IN_HOUR / MILLISECONDS_IN_MINUTE
115
+ );
116
+ }
117
+ function getHoursFromTimeDifference(timeDifference) {
118
+ return Math.floor(
119
+ timeDifference % MILLISECONDS_IN_DAY / MILLISECONDS_IN_HOUR
120
+ );
121
+ }
122
+ function getTotalDaysFromTimeDifference(timeDifference) {
123
+ return Math.floor(timeDifference / MILLISECONDS_IN_DAY);
124
+ }
125
+ function getTimeDifferenceFromSeconds(seconds) {
126
+ return seconds * MILLISECONDS_IN_SECOND;
127
+ }
128
+ function getTimeDifferenceFromMinutes(minutes) {
129
+ return minutes * MILLISECONDS_IN_MINUTE;
130
+ }
131
+ function getTimeDifferenceFromHours(hours) {
132
+ return hours * MILLISECONDS_IN_HOUR;
133
+ }
134
+ function getTimeDifferenceFromDays(days) {
135
+ return days * MILLISECONDS_IN_DAY;
136
+ }
137
+ function getTimeDifferenceFromObject(timeDifferenceObject) {
138
+ const { seconds, minutes, hours, days } = timeDifferenceObject;
139
+ return getTimeDifferenceFromSeconds(seconds) + getTimeDifferenceFromMinutes(minutes) + getTimeDifferenceFromHours(hours) + getTimeDifferenceFromDays(days);
140
+ }
141
+
142
+ // src/time/utc.ts
143
+ var LEAP_SECONDS_TABLE = [
144
+ [3692217600, 37],
145
+ // 1 Jan 2017
146
+ [3644697600, 36],
147
+ // 1 Jul 2015
148
+ [3550089600, 35],
149
+ // 1 Jul 2012
150
+ [3439756800, 34],
151
+ // 1 Jan 2009
152
+ [3345062400, 33],
153
+ // 1 Jan 2006
154
+ [3124137600, 32],
155
+ // 1 Jan 1999
156
+ [3076704e3, 31],
157
+ // 1 Jul 1997
158
+ [3029443200, 30],
159
+ // 1 Jan 1996
160
+ [2982009600, 29],
161
+ // 1 Jul 1994
162
+ [2950473600, 28],
163
+ // 1 Jul 1993
164
+ [2918937600, 27],
165
+ // 1 Jul 1992
166
+ [2871676800, 26],
167
+ // 1 Jan 1991
168
+ [2840140800, 25],
169
+ // 1 Jan 1990
170
+ [2776982400, 24],
171
+ // 1 Jan 1988
172
+ [2698012800, 23],
173
+ // 1 Jul 1985
174
+ [2634854400, 22],
175
+ // 1 Jul 1983
176
+ [2603318400, 21],
177
+ // 1 Jul 1982
178
+ [2571782400, 20],
179
+ // 1 Jul 1981
180
+ [2524521600, 19],
181
+ // 1 Jan 1980
182
+ [2492985600, 18],
183
+ // 1 Jan 1979
184
+ [2461449600, 17],
185
+ // 1 Jan 1978
186
+ [2429913600, 16],
187
+ // 1 Jan 1977
188
+ [2398291200, 15],
189
+ // 1 Jan 1976
190
+ [2366755200, 14],
191
+ // 1 Jan 1975
192
+ [2335219200, 13],
193
+ // 1 Jan 1974
194
+ [2303683200, 12],
195
+ // 1 Jan 1973
196
+ [2287785600, 11],
197
+ // 1 Jul 1972
198
+ [2272060800, 10]
199
+ // 1 Jan 1972
200
+ ];
201
+ function getLeap(date) {
202
+ const ntp_time = getNtpTime(date);
203
+ for (const [timestamp, leapSeconds] of LEAP_SECONDS_TABLE) {
204
+ if (ntp_time / MILLISECONDS_IN_SECOND - leapSeconds >= timestamp) {
205
+ return leapSeconds;
206
+ }
207
+ }
208
+ return 8;
209
+ }
210
+ function getGpsLeap(date) {
211
+ const leap_seconds = getLeap(date);
212
+ if (leap_seconds < 0) return 0;
213
+ return leap_seconds - 19;
214
+ }
215
+ function getUtcDate(date) {
216
+ const tai_date = getTaiDate(date);
217
+ const leap_seconds = getLeap(date);
218
+ return new Date(tai_date.getTime() - leap_seconds * MILLISECONDS_IN_SECOND);
219
+ }
220
+ function getDateFromUtc(utc_date) {
221
+ const tai_date = new Date(
222
+ utc_date.getTime() + getLeap(utc_date) * MILLISECONDS_IN_SECOND
223
+ );
224
+ const leap_seconds = getLeap(getDateFromTai(tai_date));
225
+ const gps_date = getDateFromTai(
226
+ new Date(utc_date.getTime() + leap_seconds * MILLISECONDS_IN_SECOND)
227
+ );
228
+ return gps_date;
229
+ }
230
+
231
+ // src/time/gnss.ts
232
+ function getGpsTime(date) {
233
+ return date.getTime() - START_GPS_TIME.getTime();
234
+ }
235
+ function getDateFromGpsTime(gpsTime) {
236
+ return new Date(gpsTime + START_GPS_TIME.getTime());
237
+ }
238
+ function getGalTime(date) {
239
+ return date.getTime() - START_GAL_TIME.getTime();
240
+ }
241
+ function getDateFromGalTime(galTime) {
242
+ return new Date(galTime + START_GAL_TIME.getTime());
243
+ }
244
+ function getBdsTime(date) {
245
+ return date.getTime() - START_BDS_TIME.getTime();
246
+ }
247
+ function getDateFromBdsTime(bdsTime) {
248
+ return new Date(bdsTime + START_BDS_TIME.getTime());
249
+ }
250
+ function getUnixTime(date) {
251
+ const utc_date = getUtcDate(date);
252
+ return utc_date.getTime();
253
+ }
254
+ function getDateFromUnixTime(unixTime) {
255
+ return getDateFromUtc(new Date(unixTime));
256
+ }
257
+ function getWeekNumber(date) {
258
+ return Math.floor(getGpsTime(date) / MILLISECONDS_IN_WEEK);
259
+ }
260
+ function getTimeOfWeek(date) {
261
+ return getGpsTime(date) % MILLISECONDS_IN_WEEK;
262
+ }
263
+ function getDateFromGpsData(weekNumber, timeOfWeek) {
264
+ return new Date(
265
+ weekNumber * MILLISECONDS_IN_WEEK + timeOfWeek + START_GPS_TIME.getTime()
266
+ );
267
+ }
268
+ function getTaiDate(date) {
269
+ return new Date(date.getTime() + MILLISECONDS_GPS_TAI);
270
+ }
271
+ function getDateFromTai(tai_date) {
272
+ return new Date(tai_date.getTime() - MILLISECONDS_GPS_TAI);
273
+ }
274
+ function getTtDate(date) {
275
+ return new Date(date.getTime() + MILLISECONDS_GPS_TAI + MILLISECONDS_TT_TAI);
276
+ }
277
+ function getDateFromTt(tt_date) {
278
+ return new Date(
279
+ tt_date.getTime() - MILLISECONDS_GPS_TAI - MILLISECONDS_TT_TAI
280
+ );
281
+ }
282
+ function getGloN4(date) {
283
+ return Math.floor((date.getUTCFullYear() - START_GLO_LEAP.getFullYear()) / 4);
284
+ }
285
+ function getGloNA(date) {
286
+ const n4 = getGloN4(date);
287
+ const init4YearPeriod = new Date(START_GLO_LEAP);
288
+ init4YearPeriod.setUTCFullYear(init4YearPeriod.getUTCFullYear() + n4 * 4);
289
+ return Math.floor(getTimeDifference(init4YearPeriod, date) / MILLISECONDS_IN_DAY) + 1;
290
+ }
291
+ function getDateFromGloN(n4, na, tod) {
292
+ const date = new Date(START_GLO_LEAP);
293
+ date.setFullYear(date.getUTCFullYear() + n4 * 4);
294
+ date.setTime(date.getTime() + (na - 1) * MILLISECONDS_IN_DAY + tod);
295
+ return date;
296
+ }
297
+ function getNtpTime(date) {
298
+ return getTaiDate(date).getTime() - START_NTP_TIME.getTime();
299
+ }
300
+
301
+ // src/time/rinex.ts
302
+ function getRINEX(date) {
303
+ const seconds = date.getUTCSeconds();
304
+ const milliseconds = date.getUTCMilliseconds();
305
+ const fractionalSeconds = (milliseconds / MILLISECONDS_IN_SECOND).toFixed(7).slice(1);
306
+ const formatted = `> ${date.getUTCFullYear()} ${String(
307
+ date.getUTCMonth() + 1
308
+ ).padStart(2, "0")} ${String(date.getUTCDate()).padStart(2, "0")} ${String(
309
+ date.getUTCHours()
310
+ ).padStart(2, "0")} ${String(date.getUTCMinutes()).padStart(
311
+ 2,
312
+ "0"
313
+ )} ${String(seconds).padStart(2, "0")}${fractionalSeconds}`;
314
+ return formatted;
315
+ }
316
+ function getDateFromRINEX(rinex) {
317
+ const year = Number.parseInt(rinex.substring(2, 6));
318
+ const month = Number.parseInt(rinex.substring(7, 9)) - 1;
319
+ const day = Number.parseInt(rinex.substring(10, 12));
320
+ const hour = Number.parseInt(rinex.substring(13, 15));
321
+ const minute = Number.parseInt(rinex.substring(16, 18));
322
+ const second = Number.parseInt(rinex.substring(19, 21));
323
+ const millisecond = Number.parseInt(rinex.substring(22, 29)) / 1e4;
324
+ const date = new Date(
325
+ Date.UTC(year, month, day, hour, minute, second, millisecond)
326
+ );
327
+ return date;
328
+ }
329
+
330
+ // src/time/julian.ts
331
+ function getJulianDate(date, scale = 1 /* TT */) {
332
+ if (scale === 0 /* TAI */) {
333
+ return (date.getTime() - START_TAI_TIME.getTime()) / MILLISECONDS_IN_DAY + START_JULIAN_TAI;
334
+ }
335
+ if (scale === 2 /* GPS */) {
336
+ return (date.getTime() - START_TAI_TIME.getTime() - MILLISECONDS_GPS_TAI) / MILLISECONDS_IN_DAY + START_JULIAN_TAI;
337
+ }
338
+ if (scale === 3 /* UTC */) {
339
+ return (date.getTime() - START_TAI_TIME.getTime() - getLeap(date) * MILLISECONDS_IN_SECOND) / MILLISECONDS_IN_DAY + START_JULIAN_TAI;
340
+ }
341
+ return (date.getTime() - START_TAI_TIME.getTime() + MILLISECONDS_TT_TAI) / MILLISECONDS_IN_DAY + START_JULIAN_TAI;
342
+ }
343
+ function getDateFromJulianDate(julianDate, scale = 1 /* TT */) {
344
+ if (scale === 0 /* TAI */) {
345
+ return new Date(
346
+ (julianDate - START_JULIAN_TAI) * MILLISECONDS_IN_DAY + START_TAI_TIME.getTime()
347
+ );
348
+ }
349
+ if (scale === 2 /* GPS */) {
350
+ return new Date(
351
+ (julianDate - START_JULIAN_TAI) * MILLISECONDS_IN_DAY + START_TAI_TIME.getTime() + MILLISECONDS_GPS_TAI
352
+ );
353
+ }
354
+ if (scale === 3 /* UTC */) {
355
+ const utc_date = new Date(
356
+ (julianDate - START_JULIAN_TAI) * MILLISECONDS_IN_DAY + START_TAI_TIME.getTime()
357
+ );
358
+ const tai_date = new Date(
359
+ utc_date.getTime() + getLeap(utc_date) * MILLISECONDS_IN_SECOND
360
+ );
361
+ const leap_seconds = getLeap(getDateFromTai(tai_date));
362
+ return new Date(utc_date.getTime() + leap_seconds * MILLISECONDS_IN_SECOND);
363
+ }
364
+ return new Date(
365
+ (julianDate - START_JULIAN_TAI) * MILLISECONDS_IN_DAY + START_TAI_TIME.getTime() - MILLISECONDS_TT_TAI
366
+ );
367
+ }
368
+ function getMJD(date, scale = 1 /* TT */) {
369
+ return getJulianDate(date, scale) - DAYS_MJD_JULIAN;
370
+ }
371
+ function getDateFromMJD(mjd, scale = 1 /* TT */) {
372
+ return getDateFromJulianDate(mjd + DAYS_MJD_JULIAN, scale);
373
+ }
374
+ function getMJD2000(date, scale = 1 /* TT */) {
375
+ return getMJD(date, scale) - DAYS_MJD2000_MJD;
376
+ }
377
+ function getDateFromMJD2000(mjd2000, scale = 1 /* TT */) {
378
+ return getDateFromMJD(mjd2000 + DAYS_MJD2000_MJD, scale);
379
+ }
380
+
381
+ export {
382
+ Scale,
383
+ getTimeOfDay,
384
+ getDateFromTimeOfDay,
385
+ getDayOfYear,
386
+ getDateFromDayOfYear,
387
+ getDayOfWeek,
388
+ getDateFromDayOfWeek,
389
+ getDateFromHourCode,
390
+ getHourCode,
391
+ getWeekOfYear,
392
+ getTimeDifference,
393
+ getSecondsFromTimeDifference,
394
+ getMinutesFromTimeDifference,
395
+ getHoursFromTimeDifference,
396
+ getTotalDaysFromTimeDifference,
397
+ getTimeDifferenceFromSeconds,
398
+ getTimeDifferenceFromMinutes,
399
+ getTimeDifferenceFromHours,
400
+ getTimeDifferenceFromDays,
401
+ getTimeDifferenceFromObject,
402
+ getLeap,
403
+ getGpsLeap,
404
+ getUtcDate,
405
+ getDateFromUtc,
406
+ getGpsTime,
407
+ getDateFromGpsTime,
408
+ getGalTime,
409
+ getDateFromGalTime,
410
+ getBdsTime,
411
+ getDateFromBdsTime,
412
+ getUnixTime,
413
+ getDateFromUnixTime,
414
+ getWeekNumber,
415
+ getTimeOfWeek,
416
+ getDateFromGpsData,
417
+ getTaiDate,
418
+ getDateFromTai,
419
+ getTtDate,
420
+ getDateFromTt,
421
+ getGloN4,
422
+ getGloNA,
423
+ getDateFromGloN,
424
+ getNtpTime,
425
+ getRINEX,
426
+ getDateFromRINEX,
427
+ getJulianDate,
428
+ getDateFromJulianDate,
429
+ getMJD,
430
+ getDateFromMJD,
431
+ getMJD2000,
432
+ getDateFromMJD2000
433
+ };