gnss-js 1.24.0 → 1.26.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/binex.cjs +799 -0
- package/dist/binex.d.cts +189 -0
- package/dist/binex.d.ts +189 -0
- package/dist/binex.js +19 -0
- package/dist/{chunk-T2ZMNRCY.js → chunk-4XGKCVE3.js} +73 -10
- package/dist/{chunk-VTX3VCL4.js → chunk-5AUK42AL.js} +4 -2
- package/dist/{chunk-WZDFZ76K.js → chunk-726LQBGM.js} +8 -148
- package/dist/{chunk-PZNVFCKJ.js → chunk-AFEDNWXI.js} +5 -3
- package/dist/chunk-CKRNXZHT.js +424 -0
- package/dist/{chunk-7RKLWE6R.js → chunk-F4CM6Q4F.js} +4 -2
- package/dist/{chunk-MCAVU3XL.js → chunk-FEOMYZEU.js} +5 -3
- package/dist/chunk-IQ5OIMQD.js +148 -0
- package/dist/chunk-OK4GGNOO.js +756 -0
- package/dist/{chunk-NOQAAUGY.js → chunk-WDUN4BWL.js} +4 -2
- package/dist/index.cjs +1273 -27
- package/dist/index.d.cts +5 -2
- package/dist/index.d.ts +5 -2
- package/dist/index.js +48 -17
- package/dist/ionex-DaW5x9nq.d.cts +23 -0
- package/dist/ionex-DaW5x9nq.d.ts +23 -0
- package/dist/novatel.js +3 -2
- package/dist/positioning.cjs +76 -10
- package/dist/positioning.d.cts +59 -3
- package/dist/positioning.d.ts +59 -3
- package/dist/positioning.js +7 -1
- package/dist/rinex.d.cts +2 -23
- package/dist/rinex.d.ts +2 -23
- package/dist/rinex.js +3 -2
- package/dist/sbf.js +4 -3
- package/dist/trimble.cjs +452 -0
- package/dist/trimble.d.cts +147 -0
- package/dist/trimble.d.ts +147 -0
- package/dist/trimble.js +10 -0
- package/dist/ubx.js +4 -3
- package/package.json +11 -1
package/dist/index.d.cts
CHANGED
|
@@ -4,17 +4,20 @@ export { A as ARC_GAP_FACTOR, B as BAND_LABELS, a as BDS_SATELLITES, b as BdsSat
|
|
|
4
4
|
export { Scale, getBdsTime, getDateFromBdsTime, getDateFromDayOfWeek, getDateFromDayOfYear, getDateFromGalTime, getDateFromGloN, getDateFromGpsData, getDateFromGpsTime, getDateFromHourCode, getDateFromJulianDate, getDateFromMJD, getDateFromMJD2000, getDateFromRINEX, getDateFromTai, getDateFromTimeOfDay, getDateFromTt, getDateFromUnixTime, getDateFromUtc, getDayOfWeek, getDayOfYear, getGalTime, getGloN4, getGloNA, getGpsLeap, getGpsTime, getHourCode, getHoursFromTimeDifference, getJulianDate, getLeap, getMJD, getMJD2000, getMinutesFromTimeDifference, getNtpTime, getRINEX, getSecondsFromTimeDifference, getTaiDate, getTimeDifference, getTimeDifferenceFromDays, getTimeDifferenceFromHours, getTimeDifferenceFromMinutes, getTimeDifferenceFromObject, getTimeDifferenceFromSeconds, getTimeOfDay, getTimeOfWeek, getTotalDaysFromTimeDifference, getTtDate, getUnixTime, getUtcDate, getWeekNumber, getWeekOfYear } from './time.cjs';
|
|
5
5
|
export { deg2dms, deg2rad, euclidean3D, geodeticToGeohash, geodeticToMaidenhead, geodeticToUtm, greatCircleMidpoint, horizonDistance, rad2deg, rhumbLine, vincenty } from './coordinates.cjs';
|
|
6
6
|
export { c as clampUnit, e as ecefToGeodetic, g as geodeticToEcef, a as getAer, b as getEnuDifference } from './ecef-CF0uAysr.cjs';
|
|
7
|
-
export { CompactEpoch, CrxField, DiffState, EMPTY_WARNINGS,
|
|
7
|
+
export { CompactEpoch, CrxField, DiffState, EMPTY_WARNINGS, Nav4Input, RinexWarning, RinexWarnings, Sp3File, Sp3Sample, WarningAccumulator, WarningSeverity, createGzipLineSink, crxDecompress, crxRepair, fmtD, fmtF, hdrLine, padL, padR, parseCrxDataLine, parseSp3, sp3Position, stationHeaderLines, writeModernObsBlob, writeRinex2ObsBlob, writeRinex4ObsBlob, writeRinexNav, writeRinexNav4, writeRinexObsBlob } from './rinex.cjs';
|
|
8
8
|
export { E as EpochSummary, P as ParseOptions, R as RinexHeader, a as RinexResult, b as RinexStats, S as SYSTEM_ORDER, c as SatObsCallback, p as parseRinexStream, s as systemCmp, d as systemName } from './parser-JPjjFgeP.cjs';
|
|
9
9
|
export { C as CnavEphemeris, E as Ephemeris, G as GlonassEphemeris, K as KeplerEphemeris, N as NavHeader, a as NavResult, R as RinexCnavEphemeris, p as parseNavFile } from './nav-DImXUdbp.cjs';
|
|
10
|
+
export { I as IonexGrid, p as parseIonex } from './ionex-DaW5x9nq.cjs';
|
|
10
11
|
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
12
|
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
13
|
export { UbxCnavResult, UbxFrame, UbxIonoUtcResult, UbxMeasurement, UbxNavOptions, UbxNavResult, UbxParseResult, UbxRawNavOptions, UbxRawNavResult, UbxRawxEpoch, parseUbxCnav, parseUbxIonoUtc, parseUbxNav, parseUbxRawNav, parseUbxRawx, ubxFrames } from './ubx.cjs';
|
|
13
14
|
export { HasMessage, SbfBdsNavResult, SbfCnavEphemeris, SbfCnavResult, SbfGalEphemeris, SbfGalNavResult, SbfGloNavResult, SbfHasMessage, SbfHasResult, SbfIonoUtcResult, SbfMeasEpoch, SbfMeasurement, SbfParseResult, parseSbfBdsNav, parseSbfCnav, parseSbfGalNav, parseSbfGloNav, parseSbfHas, parseSbfIonoUtc, parseSbfMeas, sbfCrc16, scanSbfFrames } from './sbf.cjs';
|
|
14
15
|
export { NovatelEpoch, NovatelMeasurement, NovatelNavResult, NovatelParseResult, OEM4_HLEN, Oem4Frame, crc32, oem4Frames, parseNovatelNav, parseNovatelRange } from './novatel.cjs';
|
|
16
|
+
export { TrimbleEpoch, TrimbleFrame, TrimbleMeasurement, TrimbleNavResult, TrimbleParseResult, parseTrimble, parseTrimbleNav, trimbleFrames } from './trimble.cjs';
|
|
17
|
+
export { BinexEpoch, BinexMeasurement, BinexParseResult, BinexRecord, binexCrc16, binexCrc32, binexCsum8, binexRecords, decodeBinexEph, getBnxi, parseBinex } from './binex.cjs';
|
|
15
18
|
export { AllPositionsData, AlmanacPosition, DopValues, EpochSkyData, SatAzEl, SatPoint, SatPosition, VisibilityPass, VisibilityResult, almanacEpochMs, almanacSatPosition, computeAllPositions, computeDop, computeLiveSkyPositions, computeSatPosition, computeVisibility, computeVisibilityFromPositions, dopplerHz, ecefToAzEl, ephInfoToEphemeris, glonassAlmanacEpochMs, glonassAlmanacPosition, glonassPosition, keplerPosition, maskRadForAzimuth, navTimesFromEph, rangeRate, selectEphemeris } from './orbit.cjs';
|
|
16
19
|
export { Helmert14, REFERENCE_FRAMES, ReferenceFrame, applyHelmert, dateToEpoch, transformFrame } from './frames.cjs';
|
|
17
|
-
export { DgnssOptions, DgnssSolution, EphemerisSource, KlobucharCoeffs, LambdaResult, RawObservation, RtkEpochMeasurements, RtkFloatEngine, RtkFloatOptions, RtkFloatSolution, RtkMeasurement, SppOptions, SppSolution, ionoFree, klobucharDelay, lambdaReduction, lambdaSearch, satClockCorrection, solveDgnss, solveSpp, toRtkEpoch } from './positioning.cjs';
|
|
20
|
+
export { DgnssOptions, DgnssSolution, EphemerisSource, IONO_L1_M_PER_TECU, KlobucharCoeffs, LambdaResult, RawObservation, RtkEpochMeasurements, RtkFloatEngine, RtkFloatOptions, RtkFloatSolution, RtkMeasurement, SppOptions, SppSolution, gimSlantIonoDelayL1, gimVerticalTec, ionoFree, klobucharDelay, lambdaReduction, lambdaSearch, satClockCorrection, solveDgnss, solveSpp, toRtkEpoch } from './positioning.cjs';
|
|
18
21
|
export { NtripCaster, NtripConnectionInfo, NtripNetwork, NtripStream, NtripStreamConnection, NtripVersion, Sourcetable, SourcetableEntry, connectToMountpoint, fetchSourcetable, parseSourcetable } from './ntrip.cjs';
|
|
19
22
|
export { CompleteSatSignal, CompleteSignalStats, CompletenessAccumulator, CompletenessResult, CycleSlipAccumulator, CycleSlipEvent, CycleSlipResult, CycleSlipSignalStats, IonoAccumulator, IonoDcbResult, IonoPoint, IonoRatePoint, IonoRateSeries, IonoResult, IonoSeries, MultipathAccumulator, MultipathPoint, MultipathResult, MultipathSeries, MultipathSignalStat, QualityResult, SatDcbMap, analyzeQuality, applyIonoDcb, computeIonoRate, detrendIonoArcs, parseSinexBiasDcb } from './analysis.cjs';
|
|
20
23
|
export { AntennaEntry, AntexFile, FrequencyData, frequencyLabel, parseAntex } from './antex.cjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -4,17 +4,20 @@ export { A as ARC_GAP_FACTOR, B as BAND_LABELS, a as BDS_SATELLITES, b as BdsSat
|
|
|
4
4
|
export { Scale, getBdsTime, getDateFromBdsTime, getDateFromDayOfWeek, getDateFromDayOfYear, getDateFromGalTime, getDateFromGloN, getDateFromGpsData, getDateFromGpsTime, getDateFromHourCode, getDateFromJulianDate, getDateFromMJD, getDateFromMJD2000, getDateFromRINEX, getDateFromTai, getDateFromTimeOfDay, getDateFromTt, getDateFromUnixTime, getDateFromUtc, getDayOfWeek, getDayOfYear, getGalTime, getGloN4, getGloNA, getGpsLeap, getGpsTime, getHourCode, getHoursFromTimeDifference, getJulianDate, getLeap, getMJD, getMJD2000, getMinutesFromTimeDifference, getNtpTime, getRINEX, getSecondsFromTimeDifference, getTaiDate, getTimeDifference, getTimeDifferenceFromDays, getTimeDifferenceFromHours, getTimeDifferenceFromMinutes, getTimeDifferenceFromObject, getTimeDifferenceFromSeconds, getTimeOfDay, getTimeOfWeek, getTotalDaysFromTimeDifference, getTtDate, getUnixTime, getUtcDate, getWeekNumber, getWeekOfYear } from './time.js';
|
|
5
5
|
export { deg2dms, deg2rad, euclidean3D, geodeticToGeohash, geodeticToMaidenhead, geodeticToUtm, greatCircleMidpoint, horizonDistance, rad2deg, rhumbLine, vincenty } from './coordinates.js';
|
|
6
6
|
export { c as clampUnit, e as ecefToGeodetic, g as geodeticToEcef, a as getAer, b as getEnuDifference } from './ecef-CF0uAysr.js';
|
|
7
|
-
export { CompactEpoch, CrxField, DiffState, EMPTY_WARNINGS,
|
|
7
|
+
export { CompactEpoch, CrxField, DiffState, EMPTY_WARNINGS, Nav4Input, RinexWarning, RinexWarnings, Sp3File, Sp3Sample, WarningAccumulator, WarningSeverity, createGzipLineSink, crxDecompress, crxRepair, fmtD, fmtF, hdrLine, padL, padR, parseCrxDataLine, parseSp3, sp3Position, stationHeaderLines, writeModernObsBlob, writeRinex2ObsBlob, writeRinex4ObsBlob, writeRinexNav, writeRinexNav4, writeRinexObsBlob } from './rinex.js';
|
|
8
8
|
export { E as EpochSummary, P as ParseOptions, R as RinexHeader, a as RinexResult, b as RinexStats, S as SYSTEM_ORDER, c as SatObsCallback, p as parseRinexStream, s as systemCmp, d as systemName } from './parser-JPjjFgeP.js';
|
|
9
9
|
export { C as CnavEphemeris, E as Ephemeris, G as GlonassEphemeris, K as KeplerEphemeris, N as NavHeader, a as NavResult, R as RinexCnavEphemeris, p as parseNavFile } from './nav-DImXUdbp.js';
|
|
10
|
+
export { I as IonexGrid, p as parseIonex } from './ionex-DaW5x9nq.js';
|
|
10
11
|
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
12
|
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
13
|
export { UbxCnavResult, UbxFrame, UbxIonoUtcResult, UbxMeasurement, UbxNavOptions, UbxNavResult, UbxParseResult, UbxRawNavOptions, UbxRawNavResult, UbxRawxEpoch, parseUbxCnav, parseUbxIonoUtc, parseUbxNav, parseUbxRawNav, parseUbxRawx, ubxFrames } from './ubx.js';
|
|
13
14
|
export { HasMessage, SbfBdsNavResult, SbfCnavEphemeris, SbfCnavResult, SbfGalEphemeris, SbfGalNavResult, SbfGloNavResult, SbfHasMessage, SbfHasResult, SbfIonoUtcResult, SbfMeasEpoch, SbfMeasurement, SbfParseResult, parseSbfBdsNav, parseSbfCnav, parseSbfGalNav, parseSbfGloNav, parseSbfHas, parseSbfIonoUtc, parseSbfMeas, sbfCrc16, scanSbfFrames } from './sbf.js';
|
|
14
15
|
export { NovatelEpoch, NovatelMeasurement, NovatelNavResult, NovatelParseResult, OEM4_HLEN, Oem4Frame, crc32, oem4Frames, parseNovatelNav, parseNovatelRange } from './novatel.js';
|
|
16
|
+
export { TrimbleEpoch, TrimbleFrame, TrimbleMeasurement, TrimbleNavResult, TrimbleParseResult, parseTrimble, parseTrimbleNav, trimbleFrames } from './trimble.js';
|
|
17
|
+
export { BinexEpoch, BinexMeasurement, BinexParseResult, BinexRecord, binexCrc16, binexCrc32, binexCsum8, binexRecords, decodeBinexEph, getBnxi, parseBinex } from './binex.js';
|
|
15
18
|
export { AllPositionsData, AlmanacPosition, DopValues, EpochSkyData, SatAzEl, SatPoint, SatPosition, VisibilityPass, VisibilityResult, almanacEpochMs, almanacSatPosition, computeAllPositions, computeDop, computeLiveSkyPositions, computeSatPosition, computeVisibility, computeVisibilityFromPositions, dopplerHz, ecefToAzEl, ephInfoToEphemeris, glonassAlmanacEpochMs, glonassAlmanacPosition, glonassPosition, keplerPosition, maskRadForAzimuth, navTimesFromEph, rangeRate, selectEphemeris } from './orbit.js';
|
|
16
19
|
export { Helmert14, REFERENCE_FRAMES, ReferenceFrame, applyHelmert, dateToEpoch, transformFrame } from './frames.js';
|
|
17
|
-
export { DgnssOptions, DgnssSolution, EphemerisSource, KlobucharCoeffs, LambdaResult, RawObservation, RtkEpochMeasurements, RtkFloatEngine, RtkFloatOptions, RtkFloatSolution, RtkMeasurement, SppOptions, SppSolution, ionoFree, klobucharDelay, lambdaReduction, lambdaSearch, satClockCorrection, solveDgnss, solveSpp, toRtkEpoch } from './positioning.js';
|
|
20
|
+
export { DgnssOptions, DgnssSolution, EphemerisSource, IONO_L1_M_PER_TECU, KlobucharCoeffs, LambdaResult, RawObservation, RtkEpochMeasurements, RtkFloatEngine, RtkFloatOptions, RtkFloatSolution, RtkMeasurement, SppOptions, SppSolution, gimSlantIonoDelayL1, gimVerticalTec, ionoFree, klobucharDelay, lambdaReduction, lambdaSearch, satClockCorrection, solveDgnss, solveSpp, toRtkEpoch } from './positioning.js';
|
|
18
21
|
export { NtripCaster, NtripConnectionInfo, NtripNetwork, NtripStream, NtripStreamConnection, NtripVersion, Sourcetable, SourcetableEntry, connectToMountpoint, fetchSourcetable, parseSourcetable } from './ntrip.js';
|
|
19
22
|
export { CompleteSatSignal, CompleteSignalStats, CompletenessAccumulator, CompletenessResult, CycleSlipAccumulator, CycleSlipEvent, CycleSlipResult, CycleSlipSignalStats, IonoAccumulator, IonoDcbResult, IonoPoint, IonoRatePoint, IonoRateSeries, IonoResult, IonoSeries, MultipathAccumulator, MultipathPoint, MultipathResult, MultipathSeries, MultipathSignalStat, QualityResult, SatDcbMap, analyzeQuality, applyIonoDcb, computeIonoRate, detrendIonoArcs, parseSinexBiasDcb } from './analysis.js';
|
|
20
23
|
export { AntennaEntry, AntexFile, FrequencyData, frequencyLabel, parseAntex } from './antex.js';
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
import {
|
|
2
|
+
frequencyLabel,
|
|
3
|
+
parseAntex
|
|
4
|
+
} from "./chunk-5CMSYIYM.js";
|
|
5
|
+
import {
|
|
6
|
+
computeStats,
|
|
7
|
+
nmeaCoordToDecimal,
|
|
8
|
+
parseNmeaFile,
|
|
9
|
+
verifyChecksum
|
|
10
|
+
} from "./chunk-YDMYO3YK.js";
|
|
1
11
|
import {
|
|
2
12
|
BAND_PRESETS,
|
|
3
13
|
CONSTELLATIONS,
|
|
@@ -40,7 +50,7 @@ import {
|
|
|
40
50
|
parseUbxRawNav,
|
|
41
51
|
parseUbxRawx,
|
|
42
52
|
ubxFrames
|
|
43
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-FEOMYZEU.js";
|
|
44
54
|
import {
|
|
45
55
|
crc16,
|
|
46
56
|
parseSbfAlmanac,
|
|
@@ -53,15 +63,29 @@ import {
|
|
|
53
63
|
parseSbfMeas,
|
|
54
64
|
parseSbfNav,
|
|
55
65
|
scanSbfFrames
|
|
56
|
-
} from "./chunk-
|
|
57
|
-
import "./chunk-
|
|
66
|
+
} from "./chunk-AFEDNWXI.js";
|
|
67
|
+
import "./chunk-5AUK42AL.js";
|
|
58
68
|
import {
|
|
59
69
|
OEM4_HLEN,
|
|
60
70
|
crc32,
|
|
61
71
|
oem4Frames,
|
|
62
72
|
parseNovatelNav,
|
|
63
73
|
parseNovatelRange
|
|
64
|
-
} from "./chunk-
|
|
74
|
+
} from "./chunk-F4CM6Q4F.js";
|
|
75
|
+
import {
|
|
76
|
+
parseTrimble,
|
|
77
|
+
parseTrimbleNav,
|
|
78
|
+
trimbleFrames
|
|
79
|
+
} from "./chunk-CKRNXZHT.js";
|
|
80
|
+
import {
|
|
81
|
+
binexCrc16,
|
|
82
|
+
binexCrc32,
|
|
83
|
+
binexCsum8,
|
|
84
|
+
binexRecords,
|
|
85
|
+
decodeBinexEph,
|
|
86
|
+
getBnxi,
|
|
87
|
+
parseBinex
|
|
88
|
+
} from "./chunk-OK4GGNOO.js";
|
|
65
89
|
import {
|
|
66
90
|
connectToMountpoint,
|
|
67
91
|
fetchSourcetable,
|
|
@@ -78,16 +102,6 @@ import {
|
|
|
78
102
|
detrendIonoArcs,
|
|
79
103
|
parseSinexBiasDcb
|
|
80
104
|
} from "./chunk-Z5UZUNCB.js";
|
|
81
|
-
import {
|
|
82
|
-
frequencyLabel,
|
|
83
|
-
parseAntex
|
|
84
|
-
} from "./chunk-5CMSYIYM.js";
|
|
85
|
-
import {
|
|
86
|
-
computeStats,
|
|
87
|
-
nmeaCoordToDecimal,
|
|
88
|
-
parseNmeaFile,
|
|
89
|
-
verifyChecksum
|
|
90
|
-
} from "./chunk-YDMYO3YK.js";
|
|
91
105
|
import {
|
|
92
106
|
Scale,
|
|
93
107
|
getDateFromDayOfWeek,
|
|
@@ -128,7 +142,10 @@ import {
|
|
|
128
142
|
transformFrame
|
|
129
143
|
} from "./chunk-4KOXMHUW.js";
|
|
130
144
|
import {
|
|
145
|
+
IONO_L1_M_PER_TECU,
|
|
131
146
|
RtkFloatEngine,
|
|
147
|
+
gimSlantIonoDelayL1,
|
|
148
|
+
gimVerticalTec,
|
|
132
149
|
ionoFree,
|
|
133
150
|
klobucharDelay,
|
|
134
151
|
lambdaReduction,
|
|
@@ -137,7 +154,7 @@ import {
|
|
|
137
154
|
solveDgnss,
|
|
138
155
|
solveSpp,
|
|
139
156
|
toRtkEpoch
|
|
140
|
-
} from "./chunk-
|
|
157
|
+
} from "./chunk-4XGKCVE3.js";
|
|
141
158
|
import {
|
|
142
159
|
almanacEpochMs,
|
|
143
160
|
almanacSatPosition,
|
|
@@ -193,8 +210,9 @@ import {
|
|
|
193
210
|
writeRinexNav,
|
|
194
211
|
writeRinexNav4,
|
|
195
212
|
writeRinexObsBlob
|
|
196
|
-
} from "./chunk-
|
|
197
|
-
import "./chunk-
|
|
213
|
+
} from "./chunk-WDUN4BWL.js";
|
|
214
|
+
import "./chunk-726LQBGM.js";
|
|
215
|
+
import "./chunk-IQ5OIMQD.js";
|
|
198
216
|
import {
|
|
199
217
|
SYSTEM_ORDER,
|
|
200
218
|
crxDecompress,
|
|
@@ -353,6 +371,7 @@ export {
|
|
|
353
371
|
GLO_F2_BASE,
|
|
354
372
|
GLO_F2_STEP,
|
|
355
373
|
GLO_F3,
|
|
374
|
+
IONO_L1_M_PER_TECU,
|
|
356
375
|
IonoAccumulator,
|
|
357
376
|
MILLISECONDS_GPS_TAI,
|
|
358
377
|
MILLISECONDS_IN_DAY,
|
|
@@ -396,6 +415,10 @@ export {
|
|
|
396
415
|
analyzeQuality,
|
|
397
416
|
applyHelmert,
|
|
398
417
|
applyIonoDcb,
|
|
418
|
+
binexCrc16,
|
|
419
|
+
binexCrc32,
|
|
420
|
+
binexCsum8,
|
|
421
|
+
binexRecords,
|
|
399
422
|
buildGloChannelMap,
|
|
400
423
|
buildObsIndices,
|
|
401
424
|
clampUnit,
|
|
@@ -416,6 +439,7 @@ export {
|
|
|
416
439
|
crxDecompress,
|
|
417
440
|
crxRepair,
|
|
418
441
|
dateToEpoch,
|
|
442
|
+
decodeBinexEph,
|
|
419
443
|
decodeEphemeris,
|
|
420
444
|
decodeMsmFull,
|
|
421
445
|
deg2dms,
|
|
@@ -437,6 +461,7 @@ export {
|
|
|
437
461
|
geodeticToUtm,
|
|
438
462
|
getAer,
|
|
439
463
|
getBdsTime,
|
|
464
|
+
getBnxi,
|
|
440
465
|
getDateFromBdsTime,
|
|
441
466
|
getDateFromDayOfWeek,
|
|
442
467
|
getDateFromDayOfYear,
|
|
@@ -488,6 +513,8 @@ export {
|
|
|
488
513
|
getUtcDate,
|
|
489
514
|
getWeekNumber,
|
|
490
515
|
getWeekOfYear,
|
|
516
|
+
gimSlantIonoDelayL1,
|
|
517
|
+
gimVerticalTec,
|
|
491
518
|
gloFreq,
|
|
492
519
|
glonassAlmanacEpochMs,
|
|
493
520
|
glonassAlmanacPosition,
|
|
@@ -508,6 +535,7 @@ export {
|
|
|
508
535
|
padL,
|
|
509
536
|
padR,
|
|
510
537
|
parseAntex,
|
|
538
|
+
parseBinex,
|
|
511
539
|
parseCrxDataLine,
|
|
512
540
|
parseIonex,
|
|
513
541
|
parseNavFile,
|
|
@@ -527,6 +555,8 @@ export {
|
|
|
527
555
|
parseSinexBiasDcb,
|
|
528
556
|
parseSourcetable,
|
|
529
557
|
parseSp3,
|
|
558
|
+
parseTrimble,
|
|
559
|
+
parseTrimbleNav,
|
|
530
560
|
parseUbxCnav,
|
|
531
561
|
parseUbxIonoUtc,
|
|
532
562
|
parseUbxNav,
|
|
@@ -557,6 +587,7 @@ export {
|
|
|
557
587
|
systemName,
|
|
558
588
|
toRtkEpoch,
|
|
559
589
|
transformFrame,
|
|
590
|
+
trimbleFrames,
|
|
560
591
|
ubxFrames,
|
|
561
592
|
updateStationMeta,
|
|
562
593
|
updateStreamStats,
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IONEX 1.0 parser — global ionosphere maps (GIMs) as published by
|
|
3
|
+
* the IGS analysis centres (e.g. ESA0OPSRAP_*_GIM.INX).
|
|
4
|
+
*
|
|
5
|
+
* Returns the TEC maps in TECU on a regular lat/lon grid, one map per
|
|
6
|
+
* epoch. RMS maps and the DCB auxiliary block are skipped.
|
|
7
|
+
*/
|
|
8
|
+
interface IonexGrid {
|
|
9
|
+
/** Map epochs (Unix ms, UTC). */
|
|
10
|
+
epochs: number[];
|
|
11
|
+
/** Grid latitudes (degrees), in file order (typically 87.5 → −87.5). */
|
|
12
|
+
lats: number[];
|
|
13
|
+
/** Grid longitudes (degrees), in file order (typically −180 → 180). */
|
|
14
|
+
lons: number[];
|
|
15
|
+
/**
|
|
16
|
+
* TEC maps in TECU: maps[epochIdx][latIdx * lons.length + lonIdx].
|
|
17
|
+
* NaN where the file marks no value (9999).
|
|
18
|
+
*/
|
|
19
|
+
maps: Float32Array[];
|
|
20
|
+
}
|
|
21
|
+
declare function parseIonex(text: string): IonexGrid;
|
|
22
|
+
|
|
23
|
+
export { type IonexGrid as I, parseIonex as p };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IONEX 1.0 parser — global ionosphere maps (GIMs) as published by
|
|
3
|
+
* the IGS analysis centres (e.g. ESA0OPSRAP_*_GIM.INX).
|
|
4
|
+
*
|
|
5
|
+
* Returns the TEC maps in TECU on a regular lat/lon grid, one map per
|
|
6
|
+
* epoch. RMS maps and the DCB auxiliary block are skipped.
|
|
7
|
+
*/
|
|
8
|
+
interface IonexGrid {
|
|
9
|
+
/** Map epochs (Unix ms, UTC). */
|
|
10
|
+
epochs: number[];
|
|
11
|
+
/** Grid latitudes (degrees), in file order (typically 87.5 → −87.5). */
|
|
12
|
+
lats: number[];
|
|
13
|
+
/** Grid longitudes (degrees), in file order (typically −180 → 180). */
|
|
14
|
+
lons: number[];
|
|
15
|
+
/**
|
|
16
|
+
* TEC maps in TECU: maps[epochIdx][latIdx * lons.length + lonIdx].
|
|
17
|
+
* NaN where the file marks no value (9999).
|
|
18
|
+
*/
|
|
19
|
+
maps: Float32Array[];
|
|
20
|
+
}
|
|
21
|
+
declare function parseIonex(text: string): IonexGrid;
|
|
22
|
+
|
|
23
|
+
export { type IonexGrid as I, parseIonex as p };
|
package/dist/novatel.js
CHANGED
|
@@ -4,8 +4,9 @@ import {
|
|
|
4
4
|
oem4Frames,
|
|
5
5
|
parseNovatelNav,
|
|
6
6
|
parseNovatelRange
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-F4CM6Q4F.js";
|
|
8
|
+
import "./chunk-726LQBGM.js";
|
|
9
|
+
import "./chunk-IQ5OIMQD.js";
|
|
9
10
|
import "./chunk-HVXYFUCB.js";
|
|
10
11
|
import "./chunk-LEEU5OIO.js";
|
|
11
12
|
export {
|
package/dist/positioning.cjs
CHANGED
|
@@ -20,7 +20,10 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// src/positioning/index.ts
|
|
21
21
|
var positioning_exports = {};
|
|
22
22
|
__export(positioning_exports, {
|
|
23
|
+
IONO_L1_M_PER_TECU: () => IONO_L1_M_PER_TECU,
|
|
23
24
|
RtkFloatEngine: () => RtkFloatEngine,
|
|
25
|
+
gimSlantIonoDelayL1: () => gimSlantIonoDelayL1,
|
|
26
|
+
gimVerticalTec: () => gimVerticalTec,
|
|
24
27
|
ionoFree: () => ionoFree,
|
|
25
28
|
klobucharDelay: () => klobucharDelay,
|
|
26
29
|
lambdaReduction: () => lambdaReduction,
|
|
@@ -464,6 +467,51 @@ function klobucharDelay(coeffs, latRad, lonRad, azRad, elRad, gpsTowSec) {
|
|
|
464
467
|
return F * (5e-9 + amp * (1 - x2 / 2 + x2 * x2 / 24));
|
|
465
468
|
}
|
|
466
469
|
|
|
470
|
+
// src/positioning/gim.ts
|
|
471
|
+
var R_E = 6371e3;
|
|
472
|
+
var H_ION = 45e4;
|
|
473
|
+
var F_L1 = 157542e4;
|
|
474
|
+
var IONO_L1_M_PER_TECU = 403e15 / (F_L1 * F_L1);
|
|
475
|
+
function tecAtMap(grid, mapIdx, latDeg, lonDeg) {
|
|
476
|
+
const m = grid.maps[mapIdx];
|
|
477
|
+
const { lats, lons } = grid;
|
|
478
|
+
const w = lons.length;
|
|
479
|
+
const fi = (latDeg - lats[0]) / (lats[lats.length - 1] - lats[0]) * (lats.length - 1);
|
|
480
|
+
const fj = (lonDeg - lons[0]) / (lons[w - 1] - lons[0]) * (w - 1);
|
|
481
|
+
const i0 = Math.max(0, Math.min(lats.length - 2, Math.floor(fi)));
|
|
482
|
+
const j0 = Math.max(0, Math.min(w - 2, Math.floor(fj)));
|
|
483
|
+
const di = Math.max(0, Math.min(1, fi - i0));
|
|
484
|
+
const dj = Math.max(0, Math.min(1, fj - j0));
|
|
485
|
+
return m[i0 * w + j0] * (1 - di) * (1 - dj) + m[i0 * w + j0 + 1] * (1 - di) * dj + m[(i0 + 1) * w + j0] * di * (1 - dj) + m[(i0 + 1) * w + j0 + 1] * di * dj;
|
|
486
|
+
}
|
|
487
|
+
function gimVerticalTec(grid, timeMs, latDeg, lonDeg) {
|
|
488
|
+
const e = grid.epochs;
|
|
489
|
+
if (e.length === 0 || timeMs < e[0] || timeMs > e[e.length - 1]) return null;
|
|
490
|
+
let i = 0;
|
|
491
|
+
while (i < e.length - 2 && e[i + 1] <= timeMs) i++;
|
|
492
|
+
const span = e[i + 1] - e[i];
|
|
493
|
+
const f = span > 0 ? (timeMs - e[i]) / span : 0;
|
|
494
|
+
const a = tecAtMap(grid, i, latDeg, lonDeg);
|
|
495
|
+
const b = tecAtMap(grid, i + 1, latDeg, lonDeg);
|
|
496
|
+
if (!Number.isFinite(a) || !Number.isFinite(b)) return null;
|
|
497
|
+
return a * (1 - f) + b * f;
|
|
498
|
+
}
|
|
499
|
+
function gimSlantIonoDelayL1(grid, latRad, lonRad, azRad, elRad, timeMs) {
|
|
500
|
+
if (elRad <= 0) return null;
|
|
501
|
+
const sinZp = R_E / (R_E + H_ION) * Math.cos(elRad);
|
|
502
|
+
const mapping = 1 / Math.sqrt(1 - sinZp * sinZp);
|
|
503
|
+
const psi = Math.PI / 2 - elRad - Math.asin(sinZp);
|
|
504
|
+
const latI = Math.asin(
|
|
505
|
+
Math.sin(latRad) * Math.cos(psi) + Math.cos(latRad) * Math.sin(psi) * Math.cos(azRad)
|
|
506
|
+
);
|
|
507
|
+
const lonI = lonRad + Math.asin(Math.sin(psi) * Math.sin(azRad) / Math.cos(latI));
|
|
508
|
+
const latDeg = latI * 180 / Math.PI;
|
|
509
|
+
const lonDeg = ((lonI * 180 / Math.PI + 540) % 360 + 360) % 360 - 180;
|
|
510
|
+
const vtec = gimVerticalTec(grid, timeMs, latDeg, lonDeg);
|
|
511
|
+
if (vtec === null) return null;
|
|
512
|
+
return IONO_L1_M_PER_TECU * vtec * mapping;
|
|
513
|
+
}
|
|
514
|
+
|
|
467
515
|
// src/positioning/lambda.ts
|
|
468
516
|
var LOOPMAX = 1e4;
|
|
469
517
|
var ROUND = (x) => Math.floor(x + 0.5);
|
|
@@ -1505,10 +1553,17 @@ var PRIMARY_FREQ_HZ = {
|
|
|
1505
1553
|
C: 1561098e3,
|
|
1506
1554
|
R: 1602e6
|
|
1507
1555
|
};
|
|
1508
|
-
var
|
|
1509
|
-
function tropoDelay2(elevationRad) {
|
|
1510
|
-
|
|
1511
|
-
|
|
1556
|
+
var F_L12 = 157542e4;
|
|
1557
|
+
function tropoDelay2(elevationRad, latRad, heightM) {
|
|
1558
|
+
if (elevationRad <= 0) return 0;
|
|
1559
|
+
const h = heightM < 0 ? 0 : heightM > 1e4 ? 1e4 : heightM;
|
|
1560
|
+
const humi = 0.7;
|
|
1561
|
+
const pres = 1013.25 * Math.pow(1 - 22557e-9 * h, 5.2568);
|
|
1562
|
+
const temp = 15 - 65e-4 * h + 273.16;
|
|
1563
|
+
const e = 6.108 * humi * Math.exp((17.15 * temp - 4684) / (temp - 38.45));
|
|
1564
|
+
const zhd = 22768e-7 * pres / (1 - 266e-5 * Math.cos(2 * latRad) - 28e-5 * (h / 1e3));
|
|
1565
|
+
const zwd = 2277e-6 * (1255 / temp + 0.05) * e;
|
|
1566
|
+
return (zhd + zwd) / Math.sin(elevationRad);
|
|
1512
1567
|
}
|
|
1513
1568
|
function sagnac2(pos, travelTimeS) {
|
|
1514
1569
|
const theta = OMEGA_E * travelTimeS;
|
|
@@ -1541,7 +1596,8 @@ function solveSpp(pseudoranges, ephemerides, timeMs, opts = {}) {
|
|
|
1541
1596
|
maxIterations = 15,
|
|
1542
1597
|
convergenceM = 1e-4,
|
|
1543
1598
|
tgd = true,
|
|
1544
|
-
iono
|
|
1599
|
+
iono,
|
|
1600
|
+
gim
|
|
1545
1601
|
} = opts;
|
|
1546
1602
|
const gpsTow = (timeMs - GPS_EPOCH_MS_SPP) / 1e3 % 604800;
|
|
1547
1603
|
const all = [...pseudoranges.keys()].filter((p) => ephemerides.has(p));
|
|
@@ -1568,7 +1624,7 @@ function solveSpp(pseudoranges, ephemerides, timeMs, opts = {}) {
|
|
|
1568
1624
|
let rows = 0;
|
|
1569
1625
|
for (const k of Object.keys(residuals2)) delete residuals2[k];
|
|
1570
1626
|
const positionSaneIter = x2 * x2 + y2 * y2 + z2 * z2 > 1e12;
|
|
1571
|
-
const [rxLat, rxLon] = positionSaneIter ? ecefToGeodetic(x2, y2, z2) : [0, 0];
|
|
1627
|
+
const [rxLat, rxLon, rxHgt] = positionSaneIter ? ecefToGeodetic(x2, y2, z2) : [0, 0, 0];
|
|
1572
1628
|
for (const prn of prns) {
|
|
1573
1629
|
const psr = pseudoranges.get(prn);
|
|
1574
1630
|
const eph = ephemerides.get(prn);
|
|
@@ -1598,11 +1654,18 @@ function solveSpp(pseudoranges, ephemerides, timeMs, opts = {}) {
|
|
|
1598
1654
|
const sinEl = Math.max(Math.sin(elev), 0.1);
|
|
1599
1655
|
weight = sinEl * sinEl;
|
|
1600
1656
|
}
|
|
1601
|
-
const tropo = troposphere && positionSane ? tropoDelay2(elev) : 0;
|
|
1657
|
+
const tropo = troposphere && positionSane ? tropoDelay2(elev, rxLat, rxHgt) : 0;
|
|
1602
1658
|
let ionoM = 0;
|
|
1603
|
-
if (iono && positionSane) {
|
|
1604
|
-
|
|
1605
|
-
|
|
1659
|
+
if ((gim || iono) && positionSane) {
|
|
1660
|
+
let l1M = null;
|
|
1661
|
+
if (gim) l1M = gimSlantIonoDelayL1(gim, rxLat, rxLon, azim, elev, timeMs);
|
|
1662
|
+
if (l1M === null && iono) {
|
|
1663
|
+
l1M = C_LIGHT * klobucharDelay(iono, rxLat, rxLon, azim, elev, gpsTow);
|
|
1664
|
+
}
|
|
1665
|
+
if (l1M !== null) {
|
|
1666
|
+
const f = PRIMARY_FREQ_HZ[sys] ?? F_L12;
|
|
1667
|
+
ionoM = l1M * (F_L12 / f * (F_L12 / f));
|
|
1668
|
+
}
|
|
1606
1669
|
}
|
|
1607
1670
|
const predicted = rho + clk - C_LIGHT * dts + tropo + ionoM;
|
|
1608
1671
|
const v = psr - predicted;
|
|
@@ -1683,7 +1746,10 @@ function solveSpp(pseudoranges, ephemerides, timeMs, opts = {}) {
|
|
|
1683
1746
|
}
|
|
1684
1747
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1685
1748
|
0 && (module.exports = {
|
|
1749
|
+
IONO_L1_M_PER_TECU,
|
|
1686
1750
|
RtkFloatEngine,
|
|
1751
|
+
gimSlantIonoDelayL1,
|
|
1752
|
+
gimVerticalTec,
|
|
1687
1753
|
ionoFree,
|
|
1688
1754
|
klobucharDelay,
|
|
1689
1755
|
lambdaReduction,
|
package/dist/positioning.d.cts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { E as Ephemeris } from './nav-DImXUdbp.cjs';
|
|
2
2
|
import { DopValues } from './orbit.cjs';
|
|
3
|
+
import { I as IonexGrid } from './ionex-DaW5x9nq.cjs';
|
|
3
4
|
import './ephemeris-Ohl6NAfw.cjs';
|
|
4
5
|
import './ecef-CF0uAysr.cjs';
|
|
5
6
|
import './nav-BYmYoh9A.cjs';
|
|
@@ -34,6 +35,52 @@ interface KlobucharCoeffs {
|
|
|
34
35
|
*/
|
|
35
36
|
declare function klobucharDelay(coeffs: KlobucharCoeffs, latRad: number, lonRad: number, azRad: number, elRad: number, gpsTowSec: number): number;
|
|
36
37
|
|
|
38
|
+
/**
|
|
39
|
+
* Slant ionospheric delay from a Global Ionosphere Map (IONEX/GIM).
|
|
40
|
+
*
|
|
41
|
+
* A GIM gives vertical TEC on an hourly lat/lon grid (see
|
|
42
|
+
* {@link parseIonex}). For single-frequency positioning this is a much
|
|
43
|
+
* stronger correction than the broadcast Klobuchar model — GIMs capture
|
|
44
|
+
* ~80–90% of the true ionosphere versus Klobuchar's ~50% — so feeding
|
|
45
|
+
* `solveSpp` a GIM (the `gim` option) collapses most of the residual
|
|
46
|
+
* height bias a single-frequency solution otherwise carries.
|
|
47
|
+
*
|
|
48
|
+
* The evaluation is the standard thin-shell recipe: pierce the shell at
|
|
49
|
+
* {@link H_ION}, interpolate vertical TEC there (bilinear in space,
|
|
50
|
+
* linear in time), map to slant with the obliquity factor, and convert
|
|
51
|
+
* TEC → L1 group delay. The result is the delay on GPS L1; `solveSpp`
|
|
52
|
+
* scales it to each system's primary frequency by (f_L1/f)².
|
|
53
|
+
*/
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* L1 group delay per unit slant TEC: 40.3 · 10¹⁶ / f_L1² (m per TECU).
|
|
57
|
+
* 40.3 m·Hz²/(el/m²), one TECU = 10¹⁶ el/m². ≈ 0.1624 m/TECU.
|
|
58
|
+
*/
|
|
59
|
+
declare const IONO_L1_M_PER_TECU: number;
|
|
60
|
+
/**
|
|
61
|
+
* Space- and time-interpolated vertical TEC (TECU) at `timeMs`, or null
|
|
62
|
+
* outside the map's time span or where the grid marks no value.
|
|
63
|
+
*
|
|
64
|
+
* IGS GIMs are global, so spatial coverage is total; a pierce point is
|
|
65
|
+
* bilinearly interpolated and clamped to the nearest edge cell rather
|
|
66
|
+
* than rejected. Null therefore signals a time gap or a no-value cell,
|
|
67
|
+
* not an out-of-area position.
|
|
68
|
+
*/
|
|
69
|
+
declare function gimVerticalTec(grid: IonexGrid, timeMs: number, latDeg: number, lonDeg: number): number | null;
|
|
70
|
+
/**
|
|
71
|
+
* Slant ionospheric group delay on GPS L1 (m) from a GIM, or null when
|
|
72
|
+
* the pierce point falls outside the map's coverage in space or time.
|
|
73
|
+
*
|
|
74
|
+
* @param grid Parsed IONEX grid ({@link parseIonex}).
|
|
75
|
+
* @param latRad Receiver geodetic latitude (radians).
|
|
76
|
+
* @param lonRad Receiver geodetic longitude (radians).
|
|
77
|
+
* @param azRad Satellite azimuth (radians).
|
|
78
|
+
* @param elRad Satellite elevation (radians).
|
|
79
|
+
* @param timeMs Epoch (ms). GIM epochs are UTC; a GPS-scale time differs
|
|
80
|
+
* by leap seconds (~18 s), negligible against hourly maps.
|
|
81
|
+
*/
|
|
82
|
+
declare function gimSlantIonoDelayL1(grid: IonexGrid, latRad: number, lonRad: number, azRad: number, elRad: number, timeMs: number): number | null;
|
|
83
|
+
|
|
37
84
|
/**
|
|
38
85
|
* RTK positioning, stage 1: epoch-wise double-differenced (DD)
|
|
39
86
|
* processing of a base/rover receiver pair.
|
|
@@ -441,7 +488,7 @@ declare function lambdaReduction(Q: Float64Array, n: number): Float64Array | nul
|
|
|
441
488
|
* constellation (absorbing inter-system time offsets), satellite clock
|
|
442
489
|
* polynomial + relativistic correction, broadcast group delay
|
|
443
490
|
* (TGD/BGD), Sagnac (Earth-rotation) correction, elevation
|
|
444
|
-
* masking/weighting, and a
|
|
491
|
+
* masking/weighting, and a Saastamoinen tropospheric model. Ionospheric
|
|
445
492
|
* delay can be modelled from the broadcast Klobuchar coefficients
|
|
446
493
|
* (`iono` option) for single-frequency measurements; for metre-level
|
|
447
494
|
* results prefer the iono-free combination (ionoFree helper) with
|
|
@@ -451,7 +498,7 @@ declare function lambdaReduction(Q: Float64Array, n: number): Float64Array | nul
|
|
|
451
498
|
interface SppOptions {
|
|
452
499
|
/** Elevation mask in degrees (applied after the first pass). Default 10. */
|
|
453
500
|
elevationMaskDeg?: number;
|
|
454
|
-
/** Apply the
|
|
501
|
+
/** Apply the Saastamoinen tropospheric model. Default true. */
|
|
455
502
|
troposphere?: boolean;
|
|
456
503
|
/** Maximum Gauss-Newton iterations. Default 15. */
|
|
457
504
|
maxIterations?: number;
|
|
@@ -465,6 +512,15 @@ interface SppOptions {
|
|
|
465
512
|
* iono-free combinations.
|
|
466
513
|
*/
|
|
467
514
|
iono?: KlobucharCoeffs;
|
|
515
|
+
/**
|
|
516
|
+
* Global Ionosphere Map (IONEX/GIM, from `parseIonex`). When given it
|
|
517
|
+
* takes precedence over `iono`: the slant delay is read from the map
|
|
518
|
+
* (~80–90% of the true ionosphere vs Klobuchar's ~50%), falling back
|
|
519
|
+
* to `iono` — if also supplied — only where the map has no value for
|
|
520
|
+
* an epoch/cell (a time gap; global maps always cover space). Omit for
|
|
521
|
+
* iono-free input.
|
|
522
|
+
*/
|
|
523
|
+
gim?: IonexGrid;
|
|
468
524
|
/**
|
|
469
525
|
* Apply the broadcast group-delay correction (GPS TGD, Galileo
|
|
470
526
|
* BGD E5a/E1, BeiDou TGD1) to the satellite clock. Correct for
|
|
@@ -513,4 +569,4 @@ declare function ionoFree(p1: number, p2: number, f1: number, f2: number): numbe
|
|
|
513
569
|
*/
|
|
514
570
|
declare function solveSpp(pseudoranges: Map<string, number>, ephemerides: Map<string, Ephemeris>, timeMs: number, opts?: SppOptions): SppSolution | null;
|
|
515
571
|
|
|
516
|
-
export { type DgnssOptions, type DgnssSolution, type EphemerisSource, type KlobucharCoeffs, type LambdaResult, type RawObservation, type RtkEpochMeasurements, RtkFloatEngine, type RtkFloatOptions, type RtkFloatSolution, type RtkMeasurement, type SppOptions, type SppSolution, ionoFree, klobucharDelay, lambdaReduction, lambdaSearch, satClockCorrection, solveDgnss, solveSpp, toRtkEpoch };
|
|
572
|
+
export { type DgnssOptions, type DgnssSolution, type EphemerisSource, IONO_L1_M_PER_TECU, type KlobucharCoeffs, type LambdaResult, type RawObservation, type RtkEpochMeasurements, RtkFloatEngine, type RtkFloatOptions, type RtkFloatSolution, type RtkMeasurement, type SppOptions, type SppSolution, gimSlantIonoDelayL1, gimVerticalTec, ionoFree, klobucharDelay, lambdaReduction, lambdaSearch, satClockCorrection, solveDgnss, solveSpp, toRtkEpoch };
|
package/dist/positioning.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { E as Ephemeris } from './nav-DImXUdbp.js';
|
|
2
2
|
import { DopValues } from './orbit.js';
|
|
3
|
+
import { I as IonexGrid } from './ionex-DaW5x9nq.js';
|
|
3
4
|
import './ephemeris-Ohl6NAfw.js';
|
|
4
5
|
import './ecef-CF0uAysr.js';
|
|
5
6
|
import './nav-CN8rxL4h.js';
|
|
@@ -34,6 +35,52 @@ interface KlobucharCoeffs {
|
|
|
34
35
|
*/
|
|
35
36
|
declare function klobucharDelay(coeffs: KlobucharCoeffs, latRad: number, lonRad: number, azRad: number, elRad: number, gpsTowSec: number): number;
|
|
36
37
|
|
|
38
|
+
/**
|
|
39
|
+
* Slant ionospheric delay from a Global Ionosphere Map (IONEX/GIM).
|
|
40
|
+
*
|
|
41
|
+
* A GIM gives vertical TEC on an hourly lat/lon grid (see
|
|
42
|
+
* {@link parseIonex}). For single-frequency positioning this is a much
|
|
43
|
+
* stronger correction than the broadcast Klobuchar model — GIMs capture
|
|
44
|
+
* ~80–90% of the true ionosphere versus Klobuchar's ~50% — so feeding
|
|
45
|
+
* `solveSpp` a GIM (the `gim` option) collapses most of the residual
|
|
46
|
+
* height bias a single-frequency solution otherwise carries.
|
|
47
|
+
*
|
|
48
|
+
* The evaluation is the standard thin-shell recipe: pierce the shell at
|
|
49
|
+
* {@link H_ION}, interpolate vertical TEC there (bilinear in space,
|
|
50
|
+
* linear in time), map to slant with the obliquity factor, and convert
|
|
51
|
+
* TEC → L1 group delay. The result is the delay on GPS L1; `solveSpp`
|
|
52
|
+
* scales it to each system's primary frequency by (f_L1/f)².
|
|
53
|
+
*/
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* L1 group delay per unit slant TEC: 40.3 · 10¹⁶ / f_L1² (m per TECU).
|
|
57
|
+
* 40.3 m·Hz²/(el/m²), one TECU = 10¹⁶ el/m². ≈ 0.1624 m/TECU.
|
|
58
|
+
*/
|
|
59
|
+
declare const IONO_L1_M_PER_TECU: number;
|
|
60
|
+
/**
|
|
61
|
+
* Space- and time-interpolated vertical TEC (TECU) at `timeMs`, or null
|
|
62
|
+
* outside the map's time span or where the grid marks no value.
|
|
63
|
+
*
|
|
64
|
+
* IGS GIMs are global, so spatial coverage is total; a pierce point is
|
|
65
|
+
* bilinearly interpolated and clamped to the nearest edge cell rather
|
|
66
|
+
* than rejected. Null therefore signals a time gap or a no-value cell,
|
|
67
|
+
* not an out-of-area position.
|
|
68
|
+
*/
|
|
69
|
+
declare function gimVerticalTec(grid: IonexGrid, timeMs: number, latDeg: number, lonDeg: number): number | null;
|
|
70
|
+
/**
|
|
71
|
+
* Slant ionospheric group delay on GPS L1 (m) from a GIM, or null when
|
|
72
|
+
* the pierce point falls outside the map's coverage in space or time.
|
|
73
|
+
*
|
|
74
|
+
* @param grid Parsed IONEX grid ({@link parseIonex}).
|
|
75
|
+
* @param latRad Receiver geodetic latitude (radians).
|
|
76
|
+
* @param lonRad Receiver geodetic longitude (radians).
|
|
77
|
+
* @param azRad Satellite azimuth (radians).
|
|
78
|
+
* @param elRad Satellite elevation (radians).
|
|
79
|
+
* @param timeMs Epoch (ms). GIM epochs are UTC; a GPS-scale time differs
|
|
80
|
+
* by leap seconds (~18 s), negligible against hourly maps.
|
|
81
|
+
*/
|
|
82
|
+
declare function gimSlantIonoDelayL1(grid: IonexGrid, latRad: number, lonRad: number, azRad: number, elRad: number, timeMs: number): number | null;
|
|
83
|
+
|
|
37
84
|
/**
|
|
38
85
|
* RTK positioning, stage 1: epoch-wise double-differenced (DD)
|
|
39
86
|
* processing of a base/rover receiver pair.
|
|
@@ -441,7 +488,7 @@ declare function lambdaReduction(Q: Float64Array, n: number): Float64Array | nul
|
|
|
441
488
|
* constellation (absorbing inter-system time offsets), satellite clock
|
|
442
489
|
* polynomial + relativistic correction, broadcast group delay
|
|
443
490
|
* (TGD/BGD), Sagnac (Earth-rotation) correction, elevation
|
|
444
|
-
* masking/weighting, and a
|
|
491
|
+
* masking/weighting, and a Saastamoinen tropospheric model. Ionospheric
|
|
445
492
|
* delay can be modelled from the broadcast Klobuchar coefficients
|
|
446
493
|
* (`iono` option) for single-frequency measurements; for metre-level
|
|
447
494
|
* results prefer the iono-free combination (ionoFree helper) with
|
|
@@ -451,7 +498,7 @@ declare function lambdaReduction(Q: Float64Array, n: number): Float64Array | nul
|
|
|
451
498
|
interface SppOptions {
|
|
452
499
|
/** Elevation mask in degrees (applied after the first pass). Default 10. */
|
|
453
500
|
elevationMaskDeg?: number;
|
|
454
|
-
/** Apply the
|
|
501
|
+
/** Apply the Saastamoinen tropospheric model. Default true. */
|
|
455
502
|
troposphere?: boolean;
|
|
456
503
|
/** Maximum Gauss-Newton iterations. Default 15. */
|
|
457
504
|
maxIterations?: number;
|
|
@@ -465,6 +512,15 @@ interface SppOptions {
|
|
|
465
512
|
* iono-free combinations.
|
|
466
513
|
*/
|
|
467
514
|
iono?: KlobucharCoeffs;
|
|
515
|
+
/**
|
|
516
|
+
* Global Ionosphere Map (IONEX/GIM, from `parseIonex`). When given it
|
|
517
|
+
* takes precedence over `iono`: the slant delay is read from the map
|
|
518
|
+
* (~80–90% of the true ionosphere vs Klobuchar's ~50%), falling back
|
|
519
|
+
* to `iono` — if also supplied — only where the map has no value for
|
|
520
|
+
* an epoch/cell (a time gap; global maps always cover space). Omit for
|
|
521
|
+
* iono-free input.
|
|
522
|
+
*/
|
|
523
|
+
gim?: IonexGrid;
|
|
468
524
|
/**
|
|
469
525
|
* Apply the broadcast group-delay correction (GPS TGD, Galileo
|
|
470
526
|
* BGD E5a/E1, BeiDou TGD1) to the satellite clock. Correct for
|
|
@@ -513,4 +569,4 @@ declare function ionoFree(p1: number, p2: number, f1: number, f2: number): numbe
|
|
|
513
569
|
*/
|
|
514
570
|
declare function solveSpp(pseudoranges: Map<string, number>, ephemerides: Map<string, Ephemeris>, timeMs: number, opts?: SppOptions): SppSolution | null;
|
|
515
571
|
|
|
516
|
-
export { type DgnssOptions, type DgnssSolution, type EphemerisSource, type KlobucharCoeffs, type LambdaResult, type RawObservation, type RtkEpochMeasurements, RtkFloatEngine, type RtkFloatOptions, type RtkFloatSolution, type RtkMeasurement, type SppOptions, type SppSolution, ionoFree, klobucharDelay, lambdaReduction, lambdaSearch, satClockCorrection, solveDgnss, solveSpp, toRtkEpoch };
|
|
572
|
+
export { type DgnssOptions, type DgnssSolution, type EphemerisSource, IONO_L1_M_PER_TECU, type KlobucharCoeffs, type LambdaResult, type RawObservation, type RtkEpochMeasurements, RtkFloatEngine, type RtkFloatOptions, type RtkFloatSolution, type RtkMeasurement, type SppOptions, type SppSolution, gimSlantIonoDelayL1, gimVerticalTec, ionoFree, klobucharDelay, lambdaReduction, lambdaSearch, satClockCorrection, solveDgnss, solveSpp, toRtkEpoch };
|
package/dist/positioning.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
|
+
IONO_L1_M_PER_TECU,
|
|
2
3
|
RtkFloatEngine,
|
|
4
|
+
gimSlantIonoDelayL1,
|
|
5
|
+
gimVerticalTec,
|
|
3
6
|
ionoFree,
|
|
4
7
|
klobucharDelay,
|
|
5
8
|
lambdaReduction,
|
|
@@ -8,7 +11,7 @@ import {
|
|
|
8
11
|
solveDgnss,
|
|
9
12
|
solveSpp,
|
|
10
13
|
toRtkEpoch
|
|
11
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-4XGKCVE3.js";
|
|
12
15
|
import "./chunk-MHGNKSSH.js";
|
|
13
16
|
import "./chunk-37QNKGTC.js";
|
|
14
17
|
import "./chunk-6FAL6P4G.js";
|
|
@@ -16,7 +19,10 @@ import "./chunk-HVXYFUCB.js";
|
|
|
16
19
|
import "./chunk-LEEU5OIO.js";
|
|
17
20
|
import "./chunk-FIEWO4J4.js";
|
|
18
21
|
export {
|
|
22
|
+
IONO_L1_M_PER_TECU,
|
|
19
23
|
RtkFloatEngine,
|
|
24
|
+
gimSlantIonoDelayL1,
|
|
25
|
+
gimVerticalTec,
|
|
20
26
|
ionoFree,
|
|
21
27
|
klobucharDelay,
|
|
22
28
|
lambdaReduction,
|