@neilberkman/sidereon 0.11.0 → 0.12.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.
@@ -1454,14 +1454,84 @@ export class DragForce {
1454
1454
  readonly spaceWeather: SpaceWeather;
1455
1455
  }
1456
1456
 
1457
+ /**
1458
+ * A DTED terrain tile cache rooted at a directory of DTED Level 2 files.
1459
+ *
1460
+ * Heights are ORTHOMETRIC terrain elevations in meters. Point order is always
1461
+ * longitude first, then latitude, both in degrees.
1462
+ */
1457
1463
  export class DtedTerrain {
1458
1464
  free(): void;
1459
1465
  [Symbol.dispose](): void;
1466
+ /**
1467
+ * Batch terrain heights in ORTHOMETRIC meters for longitude-first points.
1468
+ *
1469
+ * `points` is an array of `[longitudeDeg, latitudeDeg]` pairs or
1470
+ * `{ longitudeDeg, latitudeDeg }` objects. `options.interpolation` is
1471
+ * `"bilinear"`, `"nearest"`, or `"nearestPosting"`. The return value is
1472
+ * index-aligned to `points`; each entry is `{ ok: true, heightM }` or
1473
+ * `{ ok: false, error }`. Missing tiles evaluate to `0.0`.
1474
+ */
1475
+ heightBatch(points: any, options: any): any;
1476
+ /**
1477
+ * Terrain height in ORTHOMETRIC meters at `(longitudeDeg, latitudeDeg)`.
1478
+ *
1479
+ * Longitude and latitude are degrees. The lookup uses bilinear
1480
+ * interpolation. Missing tiles evaluate to `0.0`, matching the core DTED
1481
+ * fallback.
1482
+ */
1460
1483
  heightM(longitude_deg: number, latitude_deg: number): number;
1484
+ /**
1485
+ * Terrain height in ORTHOMETRIC meters at `(longitudeDeg, latitudeDeg)`.
1486
+ *
1487
+ * Longitude and latitude are degrees. `options.interpolation` is
1488
+ * `"bilinear"`, `"nearest"`, or `"nearestPosting"`. Missing tiles evaluate
1489
+ * to `0.0`, matching the core DTED fallback.
1490
+ */
1461
1491
  heightMWithOptions(longitude_deg: number, latitude_deg: number, options: any): number;
1492
+ /**
1493
+ * Create a DTED terrain reader rooted at `root`.
1494
+ *
1495
+ * The root may contain tile files directly or the nested block layout the
1496
+ * core reader recognizes. Height results are ORTHOMETRIC meters.
1497
+ */
1462
1498
  constructor(root: string);
1463
1499
  }
1464
1500
 
1501
+ /**
1502
+ * Loaded EGM96 15-arcminute geoid grid for explicit terrain datum conversion.
1503
+ */
1504
+ export class Egm96FifteenMinuteGeoid {
1505
+ private constructor();
1506
+ free(): void;
1507
+ [Symbol.dispose](): void;
1508
+ /**
1509
+ * Load `WW15MGH.DAC` bytes as an EGM96 15-arcminute geoid grid.
1510
+ */
1511
+ static fromWw15mghDacBytes(bytes: Uint8Array): Egm96FifteenMinuteGeoid;
1512
+ /**
1513
+ * Read and load `WW15MGH.DAC` from disk. A missing file throws a typed
1514
+ * `MissingEgm96Dac` error with `path` and `remediation` fields.
1515
+ */
1516
+ static fromWw15mghDacPath(path: string): Egm96FifteenMinuteGeoid;
1517
+ }
1518
+
1519
+ /**
1520
+ * Ellipsoidal height `h` in metres above the WGS84 reference ellipsoid.
1521
+ */
1522
+ export class EllipsoidalHeightM {
1523
+ free(): void;
1524
+ [Symbol.dispose](): void;
1525
+ /**
1526
+ * Build an ellipsoidal height `h` in metres.
1527
+ */
1528
+ constructor(value_m: number);
1529
+ /**
1530
+ * Ellipsoidal height `h`, metres above the WGS84 reference ellipsoid.
1531
+ */
1532
+ readonly valueM: number;
1533
+ }
1534
+
1465
1535
  /**
1466
1536
  * Orthonormal encounter frame built from two relative states.
1467
1537
  */
@@ -2160,6 +2230,22 @@ export class Ionex {
2160
2230
  * a `RangeError` on non-finite input and an `Error` on out-of-range input.
2161
2231
  */
2162
2232
  slantDelay(lat_deg: number, lon_deg: number, azimuth_deg: number, elevation_deg: number, epoch_j2000_s: number, frequency_hz: number): number;
2233
+ /**
2234
+ * Extract the full IONEX vertical-TEC grids as plain sample data.
2235
+ *
2236
+ * Epochs are integer seconds since J2000. Latitude and longitude nodes and
2237
+ * grid steps are degrees. TEC and RMS maps are TECU and indexed
2238
+ * `[map][iLat][iLon]`. The shell height and base radius are kilometers.
2239
+ */
2240
+ tecGridSamples(): any;
2241
+ /**
2242
+ * Extract one IONEX vertical-TEC sample per grid node.
2243
+ *
2244
+ * Each sample is `{ epochJ2000S, latDeg, lonDeg, vtecTecu, rmsTecu }`.
2245
+ * Epochs are integer seconds since J2000, coordinates are degrees, and TEC
2246
+ * and RMS values are TECU.
2247
+ */
2248
+ tecSamples(): any;
2163
2249
  /**
2164
2250
  * Serialize to standard IONEX text. Deterministic: the same product always
2165
2251
  * produces byte-identical text, and re-parsing the output yields an equal
@@ -2171,6 +2257,16 @@ export class Ionex {
2171
2257
  * Mean Earth radius used by the geometry, kilometres.
2172
2258
  */
2173
2259
  readonly baseRadiusKm: number;
2260
+ /**
2261
+ * Signed latitude grid step, degrees. Standard IONEX grids are
2262
+ * north-to-south, so this value is usually negative.
2263
+ */
2264
+ readonly dlatDeg: number;
2265
+ /**
2266
+ * Signed longitude grid step, degrees. Standard IONEX grids are
2267
+ * west-to-east, so this value is usually positive.
2268
+ */
2269
+ readonly dlonDeg: number;
2174
2270
  /**
2175
2271
  * The IONEX `EXPONENT` header field; the TEC scale is `10^exponent`.
2176
2272
  */
@@ -2732,6 +2828,104 @@ export class MappingFactors {
2732
2828
  readonly wet: number;
2733
2829
  }
2734
2830
 
2831
+ /**
2832
+ * In-memory reader for memory-mappable terrain store bytes.
2833
+ *
2834
+ * Query results are orthometric terrain heights `H` in metres. Use the
2835
+ * ellipsoidal methods only when a geoid model is deliberately selected.
2836
+ */
2837
+ export class MmapTerrain {
2838
+ private constructor();
2839
+ free(): void;
2840
+ [Symbol.dispose](): void;
2841
+ /**
2842
+ * FNV-1a checksum of the full terrain store byte span.
2843
+ */
2844
+ checksum64(): bigint;
2845
+ /**
2846
+ * Ellipsoidal height `h = H + N` in metres at `(longitudeDeg, latitudeDeg)`
2847
+ * using the embedded EGM96 1-degree geoid grid.
2848
+ */
2849
+ ellipsoidalHeightM(longitude_deg: number, latitude_deg: number): EllipsoidalHeightM;
2850
+ /**
2851
+ * Ellipsoidal height `h = H + N` in metres using an explicit geoid model.
2852
+ *
2853
+ * The terrain lookup input order is `(longitudeDeg, latitudeDeg)`. Choosing
2854
+ * the EGM96 15-arcminute model requires a loaded `WW15MGH.DAC` grid and
2855
+ * does not fall back to the embedded 1-degree grid.
2856
+ */
2857
+ ellipsoidalHeightMWithModel(longitude_deg: number, latitude_deg: number, options: any, geoid: TerrainGeoidModel): EllipsoidalHeightM;
2858
+ /**
2859
+ * Ellipsoidal height `h = H + N` in metres using embedded EGM96 1-degree
2860
+ * geoid conversion and explicit terrain lookup options.
2861
+ */
2862
+ ellipsoidalHeightMWithOptions(longitude_deg: number, latitude_deg: number, options: any): EllipsoidalHeightM;
2863
+ /**
2864
+ * Parse terrain store bytes from a `Uint8Array`.
2865
+ */
2866
+ static fromBytes(bytes: Uint8Array): MmapTerrain;
2867
+ /**
2868
+ * Read a terrain store file from host I/O and parse it into memory.
2869
+ *
2870
+ * Browser runtimes should use [`MmapTerrain.fromBytes`] with fetched bytes.
2871
+ */
2872
+ static fromPath(path: string): MmapTerrain;
2873
+ /**
2874
+ * Parse terrain store bytes from an owned `Uint8Array` copy.
2875
+ */
2876
+ static fromVec(bytes: Uint8Array): MmapTerrain;
2877
+ /**
2878
+ * Batch ORTHOMETRIC terrain heights for longitude-first points.
2879
+ *
2880
+ * `points` is an array of `[longitudeDeg, latitudeDeg]` pairs or
2881
+ * `{ longitudeDeg, latitudeDeg }` objects. Each entry is
2882
+ * `{ ok: true, heightM }` or `{ ok: false, error }`.
2883
+ */
2884
+ heightBatch(points: any, options: any): any;
2885
+ /**
2886
+ * Terrain height in ORTHOMETRIC metres at `(longitudeDeg, latitudeDeg)`.
2887
+ *
2888
+ * Longitude and latitude are degrees. The lookup uses bilinear
2889
+ * interpolation. Missing tiles evaluate to `0.0`.
2890
+ */
2891
+ heightM(longitude_deg: number, latitude_deg: number): number;
2892
+ /**
2893
+ * Terrain height in ORTHOMETRIC metres at `(longitudeDeg, latitudeDeg)`.
2894
+ *
2895
+ * `options.interpolation` is `"bilinear"`, `"nearest"`, or
2896
+ * `"nearestPosting"`.
2897
+ */
2898
+ heightMWithOptions(longitude_deg: number, latitude_deg: number, options: any): number;
2899
+ /**
2900
+ * Batch typed ORTHOMETRIC terrain heights for longitude-first points.
2901
+ *
2902
+ * Each entry is `{ ok: true, orthometricHeightM: { valueM } }` or
2903
+ * `{ ok: false, error }`.
2904
+ */
2905
+ orthometricHeightBatch(points: any, options: any): any;
2906
+ /**
2907
+ * Typed ORTHOMETRIC terrain height `H` at `(longitudeDeg, latitudeDeg)`.
2908
+ */
2909
+ orthometricHeightM(longitude_deg: number, latitude_deg: number): OrthometricHeightM;
2910
+ /**
2911
+ * Typed ORTHOMETRIC terrain height `H` at `(longitudeDeg, latitudeDeg)`
2912
+ * with explicit lookup options.
2913
+ */
2914
+ orthometricHeightMWithOptions(longitude_deg: number, latitude_deg: number, options: any): OrthometricHeightM;
2915
+ /**
2916
+ * Parsed tile index records in store order.
2917
+ */
2918
+ tileIndex(): TerrainStoreTileIndex[];
2919
+ /**
2920
+ * Canonical store bytes for this parsed terrain store.
2921
+ */
2922
+ toBytes(): Uint8Array;
2923
+ /**
2924
+ * File-level vertical datum for the store's orthometric posting payloads.
2925
+ */
2926
+ readonly verticalDatum: VerticalDatum;
2927
+ }
2928
+
2735
2929
  /**
2736
2930
  * One refined Moon elevation threshold crossing (moonrise / moonset).
2737
2931
  */
@@ -3106,6 +3300,34 @@ export enum ObservationKind {
3106
3300
  Unknown = 4,
3107
3301
  }
3108
3302
 
3303
+ /**
3304
+ * Aggregate observation QC report.
3305
+ */
3306
+ export class ObservationQcReport {
3307
+ private constructor();
3308
+ free(): void;
3309
+ [Symbol.dispose](): void;
3310
+ renderHtml(): string;
3311
+ renderText(): string;
3312
+ toJson(): string;
3313
+ readonly clockJumps: any;
3314
+ readonly cycleSlips: any;
3315
+ readonly dataGaps: any;
3316
+ readonly eventRecords: number;
3317
+ readonly intervalS: number | undefined;
3318
+ readonly intervalSource: string;
3319
+ readonly missingEpochs: number;
3320
+ readonly multipath: any;
3321
+ readonly notes: any;
3322
+ readonly observationEpochs: number;
3323
+ readonly powerFailureEpochs: number;
3324
+ readonly satelliteSignals: any;
3325
+ readonly satellites: any;
3326
+ readonly skippedRecords: number;
3327
+ readonly systemSignals: any;
3328
+ readonly totalEpochRecords: number;
3329
+ }
3330
+
3109
3331
  /**
3110
3332
  * Flattened raw observation rows from one RINEX OBS epoch. Numeric arrays are
3111
3333
  * row-aligned with `satellites`, `codes`, and `kinds`; blank RINEX values, LLI,
@@ -3754,6 +3976,33 @@ export class OpmState {
3754
3976
  readonly velocityKmS: Float64Array;
3755
3977
  }
3756
3978
 
3979
+ /**
3980
+ * Orthometric terrain height `H` in metres above the EGM96 mean sea level
3981
+ * geoid.
3982
+ */
3983
+ export class OrthometricHeightM {
3984
+ free(): void;
3985
+ [Symbol.dispose](): void;
3986
+ /**
3987
+ * Build an orthometric height `H` in metres.
3988
+ */
3989
+ constructor(value_m: number);
3990
+ /**
3991
+ * Convert to ellipsoidal height `h = H + N` using degree inputs in geoid
3992
+ * order `(latitudeDeg, longitudeDeg)` and an explicit geoid model.
3993
+ */
3994
+ toEllipsoidalHeightDeg(latitude_deg: number, longitude_deg: number, geoid: TerrainGeoidModel): EllipsoidalHeightM;
3995
+ /**
3996
+ * Convert to ellipsoidal height `h = H + N` using radian inputs in geoid
3997
+ * order `(latitudeRad, longitudeRad)` and an explicit geoid model.
3998
+ */
3999
+ toEllipsoidalHeightRad(latitude_rad: number, longitude_rad: number, geoid: TerrainGeoidModel): EllipsoidalHeightM;
4000
+ /**
4001
+ * Orthometric height `H`, metres above the EGM96 mean sea level geoid.
4002
+ */
4003
+ readonly valueM: number;
4004
+ }
4005
+
3757
4006
  /**
3758
4007
  * The result of [`parseTleFile`]: the satellites that parsed, plus a count of
3759
4008
  * complete records that were skipped because SGP4 initialization failed.
@@ -4490,13 +4739,80 @@ export class SatelliteVector {
4490
4739
  readonly values: Float64Array;
4491
4740
  }
4492
4741
 
4742
+ /**
4743
+ * Mutable SBAS correction store.
4744
+ *
4745
+ * Ingest raw SBAS messages with a source GEO and GNSS time, then query decoded
4746
+ * fast, long-term, ionospheric, and GEO navigation correction records.
4747
+ */
4493
4748
  export class SbasCorrectionStore {
4494
4749
  free(): void;
4495
4750
  [Symbol.dispose](): void;
4751
+ /**
4752
+ * Fast pseudorange correction for `(geo, sat)`, or `null`.
4753
+ *
4754
+ * `prcM` is meters, `rrcMS` is meters per second, and `tOfJ2000S` is
4755
+ * seconds since J2000.
4756
+ */
4757
+ fastCorrection(geo: string, sat: string): any;
4758
+ /**
4759
+ * SBAS GEO navigation state for `geo`, or `null`.
4760
+ *
4761
+ * Positions are ECEF meters, velocities are ECEF meters per second,
4762
+ * accelerations are ECEF meters per second squared, clock fields are
4763
+ * seconds and seconds per second, and `t0J2000S` is seconds since J2000.
4764
+ */
4765
+ geoNavState(geo: string): any;
4766
+ /**
4767
+ * Ingest one decoded SBAS message into the correction store.
4768
+ *
4769
+ * `geo` is the SBAS source satellite token such as `"S29"`. `week` and
4770
+ * `towS` are in the selected GNSS time scale. `form` is `"framed250"` or
4771
+ * `"body226"`.
4772
+ */
4496
4773
  ingest(bytes: Uint8Array, form: string | null | undefined, geo: string, week: number, tow_s: number, time_scale?: string | null): void;
4774
+ /**
4775
+ * SBAS ionospheric grid for `geo`, or `null`.
4776
+ *
4777
+ * Grid point latitudes and longitudes are degrees, vertical delays are
4778
+ * meters, and GIVE variances are square meters when present.
4779
+ */
4780
+ ionoGrid(geo: string): any;
4781
+ /**
4782
+ * SBAS ionospheric slant delay in meters, or `null`.
4783
+ *
4784
+ * Receiver latitude, longitude, elevation, and azimuth are radians.
4785
+ * `frequencyHz` is the carrier frequency for the reported group delay.
4786
+ */
4497
4787
  ionoSlantDelayM(geo: string, receiver_lat_rad: number, receiver_lon_rad: number, receiver_height_m: number, elevation_rad: number, azimuth_rad: number, frequency_hz: number): number | undefined;
4788
+ /**
4789
+ * Long-term orbit and clock correction for `(geo, sat)`, or `null`.
4790
+ *
4791
+ * Position deltas are ECEF meters, rates are ECEF meters per second, clock
4792
+ * deltas are seconds and seconds per second, and `t0J2000S` is seconds
4793
+ * since J2000.
4794
+ */
4795
+ longTermCorrection(geo: string, sat: string): any;
4796
+ /**
4797
+ * Create an empty SBAS correction store.
4798
+ */
4498
4799
  constructor();
4800
+ /**
4801
+ * Ready SBAS GEO source satellites at `tJ2000S`.
4802
+ *
4803
+ * The time is seconds since J2000. Returned tokens are strings such as
4804
+ * `"S29"`, sorted by most recent update first.
4805
+ */
4499
4806
  readyGeos(t_j2000_s: number): string[];
4807
+ /**
4808
+ * Allow or disallow partial SBAS corrections when building corrected
4809
+ * ephemeris states.
4810
+ */
4811
+ setAllowPartial(yes: boolean): void;
4812
+ /**
4813
+ * Set the maximum staleness for fresh SBAS corrections, in seconds.
4814
+ */
4815
+ setStalenessSeconds(seconds: number): void;
4500
4816
  }
4501
4817
 
4502
4818
  /**
@@ -5268,6 +5584,139 @@ export class SunMoon {
5268
5584
  readonly sun: Float64Array;
5269
5585
  }
5270
5586
 
5587
+ /**
5588
+ * Terrain datum conversion and optional geoid-grid loading error variants.
5589
+ */
5590
+ export enum TerrainDatumError {
5591
+ /**
5592
+ * Terrain lookup failed before datum conversion.
5593
+ */
5594
+ Terrain = 0,
5595
+ /**
5596
+ * A geoid grid could not be parsed.
5597
+ */
5598
+ Geoid = 1,
5599
+ /**
5600
+ * Reading a geoid grid failed for a reason other than absence.
5601
+ */
5602
+ Io = 2,
5603
+ /**
5604
+ * The EGM96 15-arcminute `WW15MGH.DAC` grid was requested but is absent.
5605
+ */
5606
+ MissingEgm96Dac = 3,
5607
+ }
5608
+
5609
+ /**
5610
+ * Geoid model used to convert terrain orthometric height `H` to ellipsoidal
5611
+ * height `h`.
5612
+ */
5613
+ export class TerrainGeoidModel {
5614
+ private constructor();
5615
+ free(): void;
5616
+ [Symbol.dispose](): void;
5617
+ /**
5618
+ * Use a caller-supplied EGM96 15-arcminute geoid grid for `h = H + N`.
5619
+ */
5620
+ static egm96FifteenMinute(geoid: Egm96FifteenMinuteGeoid): TerrainGeoidModel;
5621
+ /**
5622
+ * Use the embedded EGM96 1-degree geoid grid for `h = H + N`.
5623
+ */
5624
+ static egm96OneDegree(): TerrainGeoidModel;
5625
+ /**
5626
+ * Model discriminator: `"egm96OneDegree"` or `"egm96FifteenMinute"`.
5627
+ */
5628
+ readonly kind: string;
5629
+ }
5630
+
5631
+ /**
5632
+ * Terrain store conversion, serialization, and parsing error variants.
5633
+ */
5634
+ export enum TerrainStoreError {
5635
+ /**
5636
+ * File or directory I/O failed.
5637
+ */
5638
+ Io = 0,
5639
+ /**
5640
+ * DTED or terrain store bytes could not be parsed.
5641
+ */
5642
+ Parse = 1,
5643
+ /**
5644
+ * The terrain store version is not supported.
5645
+ */
5646
+ UnsupportedVersion = 2,
5647
+ /**
5648
+ * The terrain store datum tag is not supported.
5649
+ */
5650
+ UnsupportedDatum = 3,
5651
+ /**
5652
+ * Two input DTED files resolved to the same integer tile id.
5653
+ */
5654
+ DuplicateTile = 4,
5655
+ /**
5656
+ * A tile payload checksum did not match its index record.
5657
+ */
5658
+ Checksum = 5,
5659
+ }
5660
+
5661
+ /**
5662
+ * Metadata for one tile index record in a memory-mappable terrain store.
5663
+ */
5664
+ export class TerrainStoreTileIndex {
5665
+ private constructor();
5666
+ free(): void;
5667
+ [Symbol.dispose](): void;
5668
+ /**
5669
+ * FNV-1a checksum of this tile's posting payload bytes.
5670
+ */
5671
+ readonly checksum64: bigint;
5672
+ /**
5673
+ * Byte length of this tile's posting payload in the store.
5674
+ */
5675
+ readonly dataLen: bigint;
5676
+ /**
5677
+ * Byte offset of this tile's posting payload in the store.
5678
+ */
5679
+ readonly dataOffset: bigint;
5680
+ /**
5681
+ * Number of latitude postings.
5682
+ */
5683
+ readonly latCount: number;
5684
+ /**
5685
+ * Integer latitude tile id, for example `36` for a tile covering
5686
+ * `36..37` degrees.
5687
+ */
5688
+ readonly latIndex: number;
5689
+ /**
5690
+ * Number of longitude postings.
5691
+ */
5692
+ readonly lonCount: number;
5693
+ /**
5694
+ * Integer longitude tile id, for example `-107` for a tile covering
5695
+ * `-107..-106` degrees.
5696
+ */
5697
+ readonly lonIndex: number;
5698
+ /**
5699
+ * Northern edge latitude, degrees.
5700
+ */
5701
+ readonly maxLatitudeDeg: number;
5702
+ /**
5703
+ * Eastern edge longitude, degrees.
5704
+ */
5705
+ readonly maxLongitudeDeg: number;
5706
+ /**
5707
+ * Southern edge latitude, degrees.
5708
+ */
5709
+ readonly minLatitudeDeg: number;
5710
+ /**
5711
+ * Western edge longitude, degrees.
5712
+ */
5713
+ readonly minLongitudeDeg: number;
5714
+ /**
5715
+ * Vertical datum for this tile's orthometric posting payload.
5716
+ */
5717
+ readonly verticalDatum: VerticalDatum;
5718
+ }
5719
+
5271
5720
  /**
5272
5721
  * A named time scale. The JS value matches the variant order below.
5273
5722
  */
@@ -5527,6 +5976,16 @@ export class VelocitySolution {
5527
5976
  readonly velocityMS: Float64Array;
5528
5977
  }
5529
5978
 
5979
+ /**
5980
+ * Vertical datum carried by a terrain store.
5981
+ */
5982
+ export enum VerticalDatum {
5983
+ /**
5984
+ * Orthometric height `H` in metres above the EGM96 mean sea level geoid.
5985
+ */
5986
+ Egm96MslOrthometric = 0,
5987
+ }
5988
+
5530
5989
  /**
5531
5990
  * Per-epoch topocentric visibility plus the dense pass list over the grid
5532
5991
  * window.
@@ -5650,6 +6109,17 @@ export class ZenithDelay {
5650
6109
  */
5651
6110
  export function acquire(samples: Float64Array, prn: bigint, options: any): AcquisitionResult;
5652
6111
 
6112
+ /**
6113
+ * Plain non-overlapping Allan deviation for explicit averaging factors.
6114
+ *
6115
+ * `series` is `{ kind, values }`, where `kind` is `"phaseSeconds"` or
6116
+ * `"fractionalFrequency"` and `values` are phase seconds or dimensionless
6117
+ * fractional-frequency samples. `tau0S` is the sample interval in seconds.
6118
+ * `averagingFactors` is an array of positive integer `m` values. Returns
6119
+ * `{ tauS, deviation, n }`.
6120
+ */
6121
+ export function allanDeviation(series: any, tau0_s: number, averaging_factors: any): any;
6122
+
5653
6123
  /**
5654
6124
  * On-sky angle in degrees between two direction vectors.
5655
6125
  */
@@ -5660,6 +6130,38 @@ export function angularSeparation(a: Float64Array, b: Float64Array): number;
5660
6130
  */
5661
6131
  export function angularSeparationCoords(a_lon_deg: number, a_lat_deg: number, b_lon_deg: number, b_lat_deg: number): number;
5662
6132
 
6133
+ /**
6134
+ * Run ARAIM MHSS protection-level computation.
6135
+ *
6136
+ * `geometry.rows` contains satellite IDs, ECEF line-of-sight unit vectors,
6137
+ * optional constellation labels, and elevations in radians. `receiver` is WGS84
6138
+ * geodetic radians plus ellipsoidal height meters. `ism` contains
6139
+ * constellation defaults and optional satellite overrides. Satellite models may
6140
+ * provide paired `effectiveSigmaIntM` and `effectiveSigmaAccM` fields; omit both
6141
+ * to let the core derive them from elevation. `allocation` may be omitted to use
6142
+ * `araimLpv200Allocation()`. Returned `hplM`, `vplM`, `sigmaAccHM`,
6143
+ * `sigmaAccVM`, `emtM`, and per-mode ENU arrays are meters.
6144
+ */
6145
+ export function araim(geometry: any, ism: any, allocation: any): any;
6146
+
6147
+ /**
6148
+ * Enumerate ARAIM fault hypotheses for the given geometry, ISM, and allocation.
6149
+ *
6150
+ * Inputs mirror `araim`. The returned priors are probabilities. Excluded
6151
+ * satellites are string tokens such as `"G01"`, and excluded constellations are
6152
+ * labels such as `"GPS"`.
6153
+ */
6154
+ export function araimFaultModes(geometry: any, ism: any, allocation: any): any;
6155
+
6156
+ /**
6157
+ * LPV-200 ARAIM integrity and continuity allocation.
6158
+ *
6159
+ * The returned object can be passed to `araim`. Probability fields are
6160
+ * dimensionless, `pEmt` defaults to `1e-5`, and `maxFaultOrder` is an integer
6161
+ * fault order.
6162
+ */
6163
+ export function araimLpv200Allocation(): any;
6164
+
5663
6165
  /**
5664
6166
  * Evaluate NRLMSISE-00 neutral-atmosphere density and temperature.
5665
6167
  *
@@ -5777,6 +6279,20 @@ export function coherentLossDb(freq_error_hz: number, integration_time_s: number
5777
6279
  */
5778
6280
  export function collisionProbability(object1: ConjunctionState, object2: ConjunctionState, hard_body_radius_km: number, method?: string | null): CollisionProbability;
5779
6281
 
6282
+ /**
6283
+ * Compute one or more Allan-family curves with a selected tau grid and gap
6284
+ * policy.
6285
+ *
6286
+ * `input` is `{ series, tau0S, options? }`. `series.kind` may be
6287
+ * `"phaseSeconds"`, `"fractionalFrequency"`, `"phaseSecondsWithGaps"`, or
6288
+ * `"fractionalFrequencyWithGaps"`; gap series use `null` for missing samples.
6289
+ * `options.estimators` is `"standard"`, `"all"`, `"none"`, or a boolean flag
6290
+ * object. `options.tauGrid` is `"octave"`, `"all"`, or
6291
+ * `{ kind: "explicit", averagingFactors }`. `tau0S` and all returned `tauS`
6292
+ * values are seconds.
6293
+ */
6294
+ export function computeAllanDeviations(input: any): any;
6295
+
5780
6296
  /**
5781
6297
  * Coherently correlate interleaved IQ samples against a GPS C/A PRN replica.
5782
6298
  * `iq` is `[i0, q0, i1, q1, ...]`.
@@ -5874,6 +6390,14 @@ export function decodeRtcmMessage(body: Uint8Array): any;
5874
6390
  */
5875
6391
  export function decodeRtcmStream(bytes: Uint8Array): any;
5876
6392
 
6393
+ /**
6394
+ * Decode a raw SBAS message.
6395
+ *
6396
+ * `form` is `"framed250"` for a 32-byte message with CRC or `"body226"` for a
6397
+ * 29-byte body. The result contains `messageType`, `form`, legacy debug
6398
+ * `kind`, and `message`, a structured decoded payload. Parse failures are
6399
+ * thrown as `Error`.
6400
+ */
5877
6401
  export function decodeSbasMessage(bytes: Uint8Array, form?: string | null): any;
5878
6402
 
5879
6403
  export function decodeSsr(bytes: Uint8Array, framed?: boolean | null): any;
@@ -5957,6 +6481,14 @@ export function dopplerShift(gcrs_position_km: Float64Array, gcrs_velocity_km_s:
5957
6481
  */
5958
6482
  export function dopplerToRangeRate(doppler_hz: number, carrier_hz: number): number;
5959
6483
 
6484
+ /**
6485
+ * Convert a DTED tile tree into canonical memory-mappable terrain store bytes.
6486
+ *
6487
+ * The returned `Uint8Array` can be passed to [`MmapTerrain.fromBytes`] or
6488
+ * [`MmapTerrain.fromVec`]. Posting payloads are decoded orthometric metres.
6489
+ */
6490
+ export function dtedTreeToMmapStore(root: string): Uint8Array;
6491
+
5960
6492
  /**
5961
6493
  * Angular radius in degrees of Earth as seen from each satellite position.
5962
6494
  */
@@ -6422,6 +6954,15 @@ export function gnssVisible(sp3: Sp3, station_ecef_m: Float64Array, j2000_second
6422
6954
  */
6423
6955
  export function gpsUtcOffsetS(year: number, month: number, day: number): number;
6424
6956
 
6957
+ /**
6958
+ * Overlapping Hadamard deviation for explicit averaging factors.
6959
+ *
6960
+ * `series` is `{ kind, values }`, `tau0S` is seconds, and
6961
+ * `averagingFactors` contains positive integer `m` values. Returns
6962
+ * `{ tauS, deviation, n }`.
6963
+ */
6964
+ export function hadamardDeviation(series: any, tau0_s: number, averaging_factors: any): any;
6965
+
6425
6966
  /**
6426
6967
  * Trace of the Gauss-Newton Hessian approximation `J^T J`: the sum of the
6427
6968
  * squared column norms of the Jacobian, with no inverse formed.
@@ -6462,6 +7003,28 @@ export function iodGibbs(r1: Float64Array, r2: Float64Array, r3: Float64Array):
6462
7003
  */
6463
7004
  export function iodHerrickGibbs(r1: Float64Array, r2: Float64Array, r3: Float64Array, jd1: number, jd2: number, jd3: number): IodVelocity;
6464
7005
 
7006
+ /**
7007
+ * Build an IONEX vertical-TEC product from flat node samples.
7008
+ *
7009
+ * `samples` is an array of `{ epochJ2000S, latDeg, lonDeg, vtecTecu,
7010
+ * rmsTecu? }` objects. Epochs are integer seconds since J2000, coordinates are
7011
+ * degrees, and TEC/RMS values are TECU. `shellHeightKm` and `baseRadiusKm` are
7012
+ * kilometers. Validation errors from the core sample builder are thrown as
7013
+ * `RangeError`.
7014
+ */
7015
+ export function ionexFromNodeSamples(samples: any, shell_height_km: number, base_radius_km: number, exponent: number): Ionex;
7016
+
7017
+ /**
7018
+ * Build an IONEX vertical-TEC product from full-grid samples.
7019
+ *
7020
+ * `samples.mapEpochsJ2000S` are integer seconds since J2000. Latitude and
7021
+ * longitude nodes and `dlatDeg` / `dlonDeg` are degrees. `tecMaps` and
7022
+ * `rmsMaps` are TECU and indexed `[map][iLat][iLon]`. The shell height and
7023
+ * base radius are kilometers. Validation errors from the core sample builder
7024
+ * are thrown as `RangeError`.
7025
+ */
7026
+ export function ionexFromSamples(samples: any): Ionex;
7027
+
6465
7028
  /**
6466
7029
  * Ionosphere-free code or meter-valued phase combination, metres.
6467
7030
  */
@@ -6771,6 +7334,15 @@ export function meridianTransits(body: string, station: any, start_unix_us: bigi
6771
7334
 
6772
7335
  export function meridianTransitsSpk(spk: Spk, body: string, station: any, start_unix_us: bigint, end_unix_us: bigint, step_s: number, tolerance_s: number): any;
6773
7336
 
7337
+ /**
7338
+ * Modified Allan deviation for explicit averaging factors.
7339
+ *
7340
+ * `series` is `{ kind, values }`, `tau0S` is seconds, and
7341
+ * `averagingFactors` contains positive integer `m` values. Returns
7342
+ * `{ tauS, deviation, n }`.
7343
+ */
7344
+ export function modifiedAdev(series: any, tau0_s: number, averaging_factors: any): any;
7345
+
6774
7346
  /**
6775
7347
  * Mean, variance, skewness, and excess kurtosis of a residual set in one pass.
6776
7348
  *
@@ -6909,7 +7481,7 @@ export function observationKindLabel(kind: ObservationKind): string;
6909
7481
  /**
6910
7482
  * Aggregate observation QC for a parsed RINEX OBS product.
6911
7483
  */
6912
- export function observationQc(obs: RinexObs, options: any): any;
7484
+ export function observationQc(obs: RinexObs, options: any): ObservationQcReport;
6913
7485
 
6914
7486
  /**
6915
7487
  * Observe `"sun"` or `"moon"` from a geodetic station at a UTC unix microsecond epoch.
@@ -6946,6 +7518,15 @@ export function oceanTideLoading(station_ecef_m: Float64Array, year: number, mon
6946
7518
  */
6947
7519
  export function orthometricHeightM(ellipsoidal_height_m: number, lat_rad: number, lon_rad: number): number;
6948
7520
 
7521
+ /**
7522
+ * Fully overlapping Allan deviation for explicit averaging factors.
7523
+ *
7524
+ * `series` is `{ kind, values }`, `tau0S` is seconds, and
7525
+ * `averagingFactors` contains positive integer `m` values. Returns
7526
+ * `{ tauS, deviation, n }`.
7527
+ */
7528
+ export function overlappingAdev(series: any, tau0_s: number, averaging_factors: any): any;
7529
+
6949
7530
  /**
6950
7531
  * Parallactic angle (degrees) of a target at a station.
6951
7532
  *
@@ -7337,6 +7918,12 @@ export function sampleBroadcastEphemeris(broadcast: BroadcastEphemeris, satellit
7337
7918
 
7338
7919
  export function sampleSp3Ephemeris(sp3: Sp3, satellites: string[], start_j2000_s: number, stop_j2000_s: number, step_s: number): any;
7339
7920
 
7921
+ /**
7922
+ * Convert an SBAS satellite token such as `"S29"` to broadcast PRN number
7923
+ * such as `129`. Returns `null` for non-SBAS satellites.
7924
+ */
7925
+ export function satToSbasPrn(sat: string): any;
7926
+
7340
7927
  /**
7341
7928
  * Apparent visual magnitude of a sunlit body from a diffuse-sphere phase law.
7342
7929
  *
@@ -7348,8 +7935,20 @@ export function sampleSp3Ephemeris(sp3: Sp3, satellites: string[], start_j2000_s
7348
7935
  */
7349
7936
  export function satelliteVisualMagnitude(range_km: number, phase_angle_deg: number, standard_magnitude: number, reference_range_km: number): number;
7350
7937
 
7938
+ /**
7939
+ * SBAS-corrected broadcast satellite position and clock.
7940
+ *
7941
+ * Position is ECEF meters and clock is seconds at `tJ2000S`, seconds since
7942
+ * J2000. Returns `null` when the selected SBAS mode cannot provide a state.
7943
+ */
7351
7944
  export function sbasCorrectedState(broadcast: BroadcastEphemeris, store: SbasCorrectionStore, geo: string, sat: string, t_j2000_s: number, mode?: string | null): any;
7352
7945
 
7946
+ /**
7947
+ * Convert an SBAS broadcast PRN number such as `129` to an SBAS satellite
7948
+ * token such as `"S29"`. Returns `null` when the PRN is outside the SBAS range.
7949
+ */
7950
+ export function sbasPrnToSat(broadcast_prn: number): any;
7951
+
7353
7952
  /**
7354
7953
  * Screen a primary satellite against a secondary TLE catalog for threshold TCAs.
7355
7954
  *
@@ -7564,6 +8163,13 @@ export function solveRtkFixed(config: any): RtkFixedSolution;
7564
8163
  */
7565
8164
  export function solveRtkFloat(config: any): RtkFloatSolution;
7566
8165
 
8166
+ /**
8167
+ * Solve SPP using an SBAS-corrected broadcast source and optional SBAS iono.
8168
+ *
8169
+ * The returned solution uses the same units as `solveSpp`: ECEF meters,
8170
+ * receiver clock seconds, residual meters, and optional geodetic radians plus
8171
+ * ellipsoidal height meters.
8172
+ */
7567
8173
  export function solveSppSbas(broadcast: BroadcastEphemeris, store: SbasCorrectionStore, geo: string, request: any, mode?: string | null): SppSolution;
7568
8174
 
7569
8175
  /**
@@ -7710,6 +8316,20 @@ export function temeToGcrs(position_km: Float64Array, velocity_km_s: Float64Arra
7710
8316
  */
7711
8317
  export function terminatorLatitudeDeg(sub_solar_latitude_deg: number, sub_solar_longitude_deg: number, longitude_deg: number): number;
7712
8318
 
8319
+ /**
8320
+ * Return an FNV-1a checksum for terrain store bytes.
8321
+ */
8322
+ export function terrainStoreChecksum64(bytes: Uint8Array): bigint;
8323
+
8324
+ /**
8325
+ * Time deviation for explicit averaging factors.
8326
+ *
8327
+ * `series` is `{ kind, values }`, `tau0S` is seconds, and
8328
+ * `averagingFactors` contains positive integer `m` values. Returns
8329
+ * `{ tauS, deviation, n }`.
8330
+ */
8331
+ export function timeDeviation(series: any, tau0_s: number, averaging_factors: any): any;
8332
+
7713
8333
  /**
7714
8334
  * Short uppercase identifier for a time scale, e.g. `"GPST"`.
7715
8335
  */
@@ -7851,3 +8471,8 @@ export function wideLaneCycles(phi1_cycles: number, phi2_cycles: number, p1_m: n
7851
8471
  * Wide-lane wavelength `c / (f1 - f2)`, metres.
7852
8472
  */
7853
8473
  export function wideLaneWavelength(f1_hz: number, f2_hz: number): number;
8474
+
8475
+ /**
8476
+ * Convert a DTED tile tree and write canonical terrain store bytes to a path.
8477
+ */
8478
+ export function writeDtedTreeToMmapStore(root: string, out_path: string): void;