gnss-js 0.1.2 → 1.0.1

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 +1488 -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-37QNKGTC.js +65 -0
  12. package/dist/chunk-4YN353Q7.js +440 -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-BJHTBYNG.js +154 -0
  18. package/dist/chunk-HBLU2EJ4.js +802 -0
  19. package/dist/chunk-HKN3PUGN.js +800 -0
  20. package/dist/chunk-LEEU5OIO.js +75 -0
  21. package/dist/chunk-LWNTWBHB.js +268 -0
  22. package/dist/chunk-MIIM4LDY.js +239 -0
  23. package/dist/chunk-SO3POWWR.js +502 -0
  24. package/dist/chunk-W4YMQKWH.js +622 -0
  25. package/dist/chunk-WP2JFDLA.js +1475 -0
  26. package/dist/chunk-YDMYO3YK.js +220 -0
  27. package/dist/constants.cjs +423 -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 +337 -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-C10stHhM.d.cts +114 -0
  38. package/dist/ephemeris-C10stHhM.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 +5940 -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 +180 -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 +511 -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 +1469 -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 +1512 -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,40 @@
1
+ /**
2
+ * Clamp value to [-1, 1] to prevent NaN from asin/acos rounding errors.
3
+ * @param x Value to clamp
4
+ * @returns Clamped value in [-1, 1]
5
+ */
6
+ declare function clampUnit(x: number): number;
7
+ /**
8
+ * Convert geodetic coordinates to ECEF (Earth-Centered, Earth-Fixed).
9
+ * @param lat Latitude in radians
10
+ * @param lon Longitude in radians
11
+ * @param h Ellipsoidal height in meters
12
+ * @returns [X, Y, Z] in meters
13
+ */
14
+ declare function geodeticToEcef(lat: number, lon: number, h: number): [number, number, number];
15
+ /**
16
+ * Convert ECEF coordinates to geodetic (iterative Bowring method).
17
+ * @param x X in meters
18
+ * @param y Y in meters
19
+ * @param z Z in meters
20
+ * @returns [lat (rad), lon (rad), height (m)]
21
+ */
22
+ declare function ecefToGeodetic(x: number, y: number, z: number): [number, number, number];
23
+ /**
24
+ * Compute ENU (East, North, Up) difference between a point and a reference in ECEF.
25
+ * @param x Target X in meters (ECEF)
26
+ * @param y Target Y in meters (ECEF)
27
+ * @param z Target Z in meters (ECEF)
28
+ * @param xRef Reference X in meters (ECEF)
29
+ * @param yRef Reference Y in meters (ECEF)
30
+ * @param zRef Reference Z in meters (ECEF)
31
+ * @returns [deltaE, deltaN, deltaU] in meters
32
+ */
33
+ declare function getEnuDifference(x: number, y: number, z: number, xRef: number, yRef: number, zRef: number): [number, number, number];
34
+ /**
35
+ * Compute Azimuth, Elevation, and Range from a reference point to a target in ECEF.
36
+ * @returns [elevation (rad), azimuth (rad), slant range (m)]
37
+ */
38
+ declare function getAer(x: number, y: number, z: number, xRef: number, yRef: number, zRef: number): [number, number, number];
39
+
40
+ export { getAer as a, getEnuDifference as b, clampUnit as c, ecefToGeodetic as e, geodeticToEcef as g };
@@ -0,0 +1,114 @@
1
+ /**
2
+ * RTCM3 frame decoder with CRC-24Q validation and bit-level payload reader.
3
+ */
4
+ /** Decoded RTCM3 frame header (we only parse the message type, not full content). */
5
+ interface Rtcm3Frame {
6
+ messageType: number;
7
+ length: number;
8
+ payload: Uint8Array;
9
+ }
10
+ /** Simple bit reader for parsing RTCM3 payloads at bit level. */
11
+ declare class BitReader {
12
+ private data;
13
+ private bitPos;
14
+ constructor(data: Uint8Array);
15
+ /** Read `n` bits as unsigned integer (max 53). */
16
+ readU(n: number): number;
17
+ /** Read `n` bits as signed (two's complement) integer. */
18
+ readS(n: number): number;
19
+ /** Read `n` bits as sign-magnitude integer (MSB = sign, rest = magnitude). */
20
+ readSM(n: number): number;
21
+ /** Skip `n` bits. */
22
+ skip(n: number): void;
23
+ get bitsLeft(): number;
24
+ }
25
+ /**
26
+ * Streaming RTCM3 frame decoder.
27
+ *
28
+ * RTCM3 frames: [0xD3] [6 reserved bits + 10 bit length] [payload] [3 byte CRC-24Q]
29
+ * Total frame = 3 (header) + length + 3 (CRC) = length + 6
30
+ */
31
+ declare class Rtcm3Decoder {
32
+ private buffer;
33
+ /** Feed raw bytes and extract any complete RTCM3 frames. */
34
+ decode(data: Uint8Array): Rtcm3Frame[];
35
+ reset(): void;
36
+ }
37
+
38
+ /**
39
+ * RTCM3 ephemeris decoders for GPS, GLONASS, Galileo, BeiDou, and QZSS.
40
+ */
41
+
42
+ /** Decoded ephemeris information for display purposes. */
43
+ interface EphemerisInfo {
44
+ prn: string;
45
+ constellation: string;
46
+ health: number;
47
+ lastReceived: number;
48
+ messageType: number;
49
+ week?: number;
50
+ ura?: number;
51
+ toc?: number;
52
+ toe?: number;
53
+ sqrtA?: number;
54
+ eccentricity?: number;
55
+ inclination?: number;
56
+ omega0?: number;
57
+ omegaDot?: number;
58
+ argPerigee?: number;
59
+ meanAnomaly?: number;
60
+ deltaN?: number;
61
+ idot?: number;
62
+ crs?: number;
63
+ crc?: number;
64
+ cuc?: number;
65
+ cus?: number;
66
+ cic?: number;
67
+ cis?: number;
68
+ af0?: number;
69
+ af1?: number;
70
+ af2?: number;
71
+ iode?: number;
72
+ iodc?: number;
73
+ tgd?: number;
74
+ l2Codes?: number;
75
+ l2PFlag?: number;
76
+ fitInterval?: number;
77
+ bgdE5aE1?: number;
78
+ bgdE5bE1?: number;
79
+ e5aDataInvalid?: number;
80
+ e5bDataInvalid?: number;
81
+ e1bHealth?: number;
82
+ e1bDataInvalid?: number;
83
+ aodc?: number;
84
+ tgd1?: number;
85
+ tgd2?: number;
86
+ freqChannel?: number;
87
+ x?: number;
88
+ y?: number;
89
+ z?: number;
90
+ vx?: number;
91
+ vy?: number;
92
+ vz?: number;
93
+ ax?: number;
94
+ ay?: number;
95
+ az?: number;
96
+ gammaN?: number;
97
+ tb?: number;
98
+ tk?: number;
99
+ deltaTauN?: number;
100
+ en?: number;
101
+ p4?: number;
102
+ ft?: number;
103
+ nt?: number;
104
+ satType?: number;
105
+ tauC?: number;
106
+ n4?: number;
107
+ tauGPS?: number;
108
+ }
109
+ /** Read a UTF-8 string of `nChars` bytes from a BitReader (must be byte-aligned). */
110
+ declare function readString(r: BitReader, nChars: number): string;
111
+ /** Decode any supported ephemeris message. Returns null for non-ephemeris or decode errors. */
112
+ declare function decodeEphemeris(frame: Rtcm3Frame): EphemerisInfo | null;
113
+
114
+ export { BitReader as B, type EphemerisInfo as E, Rtcm3Decoder as R, type Rtcm3Frame as a, decodeEphemeris as d, readString as r };
@@ -0,0 +1,114 @@
1
+ /**
2
+ * RTCM3 frame decoder with CRC-24Q validation and bit-level payload reader.
3
+ */
4
+ /** Decoded RTCM3 frame header (we only parse the message type, not full content). */
5
+ interface Rtcm3Frame {
6
+ messageType: number;
7
+ length: number;
8
+ payload: Uint8Array;
9
+ }
10
+ /** Simple bit reader for parsing RTCM3 payloads at bit level. */
11
+ declare class BitReader {
12
+ private data;
13
+ private bitPos;
14
+ constructor(data: Uint8Array);
15
+ /** Read `n` bits as unsigned integer (max 53). */
16
+ readU(n: number): number;
17
+ /** Read `n` bits as signed (two's complement) integer. */
18
+ readS(n: number): number;
19
+ /** Read `n` bits as sign-magnitude integer (MSB = sign, rest = magnitude). */
20
+ readSM(n: number): number;
21
+ /** Skip `n` bits. */
22
+ skip(n: number): void;
23
+ get bitsLeft(): number;
24
+ }
25
+ /**
26
+ * Streaming RTCM3 frame decoder.
27
+ *
28
+ * RTCM3 frames: [0xD3] [6 reserved bits + 10 bit length] [payload] [3 byte CRC-24Q]
29
+ * Total frame = 3 (header) + length + 3 (CRC) = length + 6
30
+ */
31
+ declare class Rtcm3Decoder {
32
+ private buffer;
33
+ /** Feed raw bytes and extract any complete RTCM3 frames. */
34
+ decode(data: Uint8Array): Rtcm3Frame[];
35
+ reset(): void;
36
+ }
37
+
38
+ /**
39
+ * RTCM3 ephemeris decoders for GPS, GLONASS, Galileo, BeiDou, and QZSS.
40
+ */
41
+
42
+ /** Decoded ephemeris information for display purposes. */
43
+ interface EphemerisInfo {
44
+ prn: string;
45
+ constellation: string;
46
+ health: number;
47
+ lastReceived: number;
48
+ messageType: number;
49
+ week?: number;
50
+ ura?: number;
51
+ toc?: number;
52
+ toe?: number;
53
+ sqrtA?: number;
54
+ eccentricity?: number;
55
+ inclination?: number;
56
+ omega0?: number;
57
+ omegaDot?: number;
58
+ argPerigee?: number;
59
+ meanAnomaly?: number;
60
+ deltaN?: number;
61
+ idot?: number;
62
+ crs?: number;
63
+ crc?: number;
64
+ cuc?: number;
65
+ cus?: number;
66
+ cic?: number;
67
+ cis?: number;
68
+ af0?: number;
69
+ af1?: number;
70
+ af2?: number;
71
+ iode?: number;
72
+ iodc?: number;
73
+ tgd?: number;
74
+ l2Codes?: number;
75
+ l2PFlag?: number;
76
+ fitInterval?: number;
77
+ bgdE5aE1?: number;
78
+ bgdE5bE1?: number;
79
+ e5aDataInvalid?: number;
80
+ e5bDataInvalid?: number;
81
+ e1bHealth?: number;
82
+ e1bDataInvalid?: number;
83
+ aodc?: number;
84
+ tgd1?: number;
85
+ tgd2?: number;
86
+ freqChannel?: number;
87
+ x?: number;
88
+ y?: number;
89
+ z?: number;
90
+ vx?: number;
91
+ vy?: number;
92
+ vz?: number;
93
+ ax?: number;
94
+ ay?: number;
95
+ az?: number;
96
+ gammaN?: number;
97
+ tb?: number;
98
+ tk?: number;
99
+ deltaTauN?: number;
100
+ en?: number;
101
+ p4?: number;
102
+ ft?: number;
103
+ nt?: number;
104
+ satType?: number;
105
+ tauC?: number;
106
+ n4?: number;
107
+ tauGPS?: number;
108
+ }
109
+ /** Read a UTF-8 string of `nChars` bytes from a BitReader (must be byte-aligned). */
110
+ declare function readString(r: BitReader, nChars: number): string;
111
+ /** Decode any supported ephemeris message. Returns null for non-ephemeris or decode errors. */
112
+ declare function decodeEphemeris(frame: Rtcm3Frame): EphemerisInfo | null;
113
+
114
+ export { BitReader as B, type EphemerisInfo as E, Rtcm3Decoder as R, type Rtcm3Frame as a, decodeEphemeris as d, readString as r };
@@ -0,0 +1,56 @@
1
+ import { R as RinexHeader } from './parser-JPjjFgeP.cjs';
2
+
3
+ /**
4
+ * Core GNSS constants: constellation metadata, signal frequencies,
5
+ * GLONASS FDMA helpers, and processing parameters.
6
+ */
7
+ declare const SYSTEM_NAMES: Record<string, string>;
8
+ /** Short human-readable labels for each constellation identifier. */
9
+ declare const SYS_SHORT: Record<string, string>;
10
+ /** Speed of light in m/s. */
11
+ declare const C_LIGHT = 299792458;
12
+ /** Carrier frequencies (Hz) per system letter, per RINEX band digit. GLONASS FDMA bands 1/2 use gloFreq(). */
13
+ declare const FREQ: Record<string, Record<string, number>>;
14
+ declare const BAND_LABELS: Record<string, Record<string, string>>;
15
+ /** Preferred dual-frequency pairs [primary, secondary] per system. */
16
+ declare const DUAL_FREQ_PAIRS: Record<string, [string, string][]>;
17
+ declare const GLO_F1_BASE = 1602000000;
18
+ declare const GLO_F1_STEP = 562500;
19
+ declare const GLO_F2_BASE = 1246000000;
20
+ declare const GLO_F2_STEP = 437500;
21
+ declare const GLO_F3 = 1202025000;
22
+ /** Fallback channel assignments when RINEX header lacks GLONASS SLOT / FRQ #. */
23
+ declare const GLO_CHANNEL_FALLBACK: Record<string, number>;
24
+ /**
25
+ * Build a PRN → channel-k map from parsed RINEX header glonassSlots.
26
+ * Falls back to hardcoded ICD assignments if the header record is absent.
27
+ */
28
+ declare function buildGloChannelMap(slots: Record<number, number>): Record<string, number>;
29
+ /** Get GLONASS FDMA frequency for a given PRN and band. */
30
+ declare function gloFreq(gloChannels: Record<string, number>, prn: string, band: string): number | undefined;
31
+ /** Resolve frequency for a PRN + band, handling GLONASS FDMA. */
32
+ declare function getFreq(gloChannels: Record<string, number>, prn: string, band: string): number | undefined;
33
+ interface BdsSatellite {
34
+ prn: string;
35
+ phase: 'BDS-2' | 'BDS-3';
36
+ orbit: 'GEO' | 'IGSO' | 'MEO';
37
+ }
38
+ declare const BDS_SATELLITES: BdsSatellite[];
39
+
40
+ /** Callback type for cycle slip notifications. */
41
+ type OnSlipDetected = (time: number, prn: string, bands: Set<string>) => void;
42
+ /**
43
+ * Build observation indices per system per band, preferring better tracking attributes.
44
+ * @param header Parsed RINEX header containing observation type definitions
45
+ * @returns Map of system letter to Map of band digit to {L, C} column indices
46
+ */
47
+ declare function buildObsIndices(header: RinexHeader): Map<string, Map<string, {
48
+ L: number;
49
+ C: number | null;
50
+ }>>;
51
+ declare const ARC_GAP_FACTOR = 5;
52
+ declare const DEFAULT_ELEV_MASK_DEG = 5;
53
+ /** Format a Date as HH:MM:SS UTC string. */
54
+ declare function formatUTCTime(d: Date): string;
55
+
56
+ export { ARC_GAP_FACTOR as A, BAND_LABELS as B, C_LIGHT as C, DEFAULT_ELEV_MASK_DEG as D, FREQ as F, GLO_CHANNEL_FALLBACK as G, type OnSlipDetected as O, SYSTEM_NAMES as S, BDS_SATELLITES as a, type BdsSatellite as b, DUAL_FREQ_PAIRS as c, GLO_F1_BASE as d, GLO_F1_STEP as e, GLO_F2_BASE as f, GLO_F2_STEP as g, GLO_F3 as h, SYS_SHORT as i, buildGloChannelMap as j, buildObsIndices as k, formatUTCTime as l, getFreq as m, gloFreq as n };
@@ -0,0 +1,56 @@
1
+ import { R as RinexHeader } from './parser-JPjjFgeP.js';
2
+
3
+ /**
4
+ * Core GNSS constants: constellation metadata, signal frequencies,
5
+ * GLONASS FDMA helpers, and processing parameters.
6
+ */
7
+ declare const SYSTEM_NAMES: Record<string, string>;
8
+ /** Short human-readable labels for each constellation identifier. */
9
+ declare const SYS_SHORT: Record<string, string>;
10
+ /** Speed of light in m/s. */
11
+ declare const C_LIGHT = 299792458;
12
+ /** Carrier frequencies (Hz) per system letter, per RINEX band digit. GLONASS FDMA bands 1/2 use gloFreq(). */
13
+ declare const FREQ: Record<string, Record<string, number>>;
14
+ declare const BAND_LABELS: Record<string, Record<string, string>>;
15
+ /** Preferred dual-frequency pairs [primary, secondary] per system. */
16
+ declare const DUAL_FREQ_PAIRS: Record<string, [string, string][]>;
17
+ declare const GLO_F1_BASE = 1602000000;
18
+ declare const GLO_F1_STEP = 562500;
19
+ declare const GLO_F2_BASE = 1246000000;
20
+ declare const GLO_F2_STEP = 437500;
21
+ declare const GLO_F3 = 1202025000;
22
+ /** Fallback channel assignments when RINEX header lacks GLONASS SLOT / FRQ #. */
23
+ declare const GLO_CHANNEL_FALLBACK: Record<string, number>;
24
+ /**
25
+ * Build a PRN → channel-k map from parsed RINEX header glonassSlots.
26
+ * Falls back to hardcoded ICD assignments if the header record is absent.
27
+ */
28
+ declare function buildGloChannelMap(slots: Record<number, number>): Record<string, number>;
29
+ /** Get GLONASS FDMA frequency for a given PRN and band. */
30
+ declare function gloFreq(gloChannels: Record<string, number>, prn: string, band: string): number | undefined;
31
+ /** Resolve frequency for a PRN + band, handling GLONASS FDMA. */
32
+ declare function getFreq(gloChannels: Record<string, number>, prn: string, band: string): number | undefined;
33
+ interface BdsSatellite {
34
+ prn: string;
35
+ phase: 'BDS-2' | 'BDS-3';
36
+ orbit: 'GEO' | 'IGSO' | 'MEO';
37
+ }
38
+ declare const BDS_SATELLITES: BdsSatellite[];
39
+
40
+ /** Callback type for cycle slip notifications. */
41
+ type OnSlipDetected = (time: number, prn: string, bands: Set<string>) => void;
42
+ /**
43
+ * Build observation indices per system per band, preferring better tracking attributes.
44
+ * @param header Parsed RINEX header containing observation type definitions
45
+ * @returns Map of system letter to Map of band digit to {L, C} column indices
46
+ */
47
+ declare function buildObsIndices(header: RinexHeader): Map<string, Map<string, {
48
+ L: number;
49
+ C: number | null;
50
+ }>>;
51
+ declare const ARC_GAP_FACTOR = 5;
52
+ declare const DEFAULT_ELEV_MASK_DEG = 5;
53
+ /** Format a Date as HH:MM:SS UTC string. */
54
+ declare function formatUTCTime(d: Date): string;
55
+
56
+ export { ARC_GAP_FACTOR as A, BAND_LABELS as B, C_LIGHT as C, DEFAULT_ELEV_MASK_DEG as D, FREQ as F, GLO_CHANNEL_FALLBACK as G, type OnSlipDetected as O, SYSTEM_NAMES as S, BDS_SATELLITES as a, type BdsSatellite as b, DUAL_FREQ_PAIRS as c, GLO_F1_BASE as d, GLO_F1_STEP as e, GLO_F2_BASE as f, GLO_F2_STEP as g, GLO_F3 as h, SYS_SHORT as i, buildGloChannelMap as j, buildObsIndices as k, formatUTCTime as l, getFreq as m, gloFreq as n };