@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.
@@ -3832,6 +3832,12 @@ class DragForce {
3832
3832
  if (Symbol.dispose) DragForce.prototype[Symbol.dispose] = DragForce.prototype.free;
3833
3833
  exports.DragForce = DragForce;
3834
3834
 
3835
+ /**
3836
+ * A DTED terrain tile cache rooted at a directory of DTED Level 2 files.
3837
+ *
3838
+ * Heights are ORTHOMETRIC terrain elevations in meters. Point order is always
3839
+ * longitude first, then latitude, both in degrees.
3840
+ */
3835
3841
  class DtedTerrain {
3836
3842
  __destroy_into_raw() {
3837
3843
  const ptr = this.__wbg_ptr;
@@ -3844,6 +3850,30 @@ class DtedTerrain {
3844
3850
  wasm.__wbg_dtedterrain_free(ptr, 0);
3845
3851
  }
3846
3852
  /**
3853
+ * Batch terrain heights in ORTHOMETRIC meters for longitude-first points.
3854
+ *
3855
+ * `points` is an array of `[longitudeDeg, latitudeDeg]` pairs or
3856
+ * `{ longitudeDeg, latitudeDeg }` objects. `options.interpolation` is
3857
+ * `"bilinear"`, `"nearest"`, or `"nearestPosting"`. The return value is
3858
+ * index-aligned to `points`; each entry is `{ ok: true, heightM }` or
3859
+ * `{ ok: false, error }`. Missing tiles evaluate to `0.0`.
3860
+ * @param {any} points
3861
+ * @param {any} options
3862
+ * @returns {any}
3863
+ */
3864
+ heightBatch(points, options) {
3865
+ const ret = wasm.dtedterrain_heightBatch(this.__wbg_ptr, points, options);
3866
+ if (ret[2]) {
3867
+ throw takeFromExternrefTable0(ret[1]);
3868
+ }
3869
+ return takeFromExternrefTable0(ret[0]);
3870
+ }
3871
+ /**
3872
+ * Terrain height in ORTHOMETRIC meters at `(longitudeDeg, latitudeDeg)`.
3873
+ *
3874
+ * Longitude and latitude are degrees. The lookup uses bilinear
3875
+ * interpolation. Missing tiles evaluate to `0.0`, matching the core DTED
3876
+ * fallback.
3847
3877
  * @param {number} longitude_deg
3848
3878
  * @param {number} latitude_deg
3849
3879
  * @returns {number}
@@ -3856,6 +3886,11 @@ class DtedTerrain {
3856
3886
  return ret[0];
3857
3887
  }
3858
3888
  /**
3889
+ * Terrain height in ORTHOMETRIC meters at `(longitudeDeg, latitudeDeg)`.
3890
+ *
3891
+ * Longitude and latitude are degrees. `options.interpolation` is
3892
+ * `"bilinear"`, `"nearest"`, or `"nearestPosting"`. Missing tiles evaluate
3893
+ * to `0.0`, matching the core DTED fallback.
3859
3894
  * @param {number} longitude_deg
3860
3895
  * @param {number} latitude_deg
3861
3896
  * @param {any} options
@@ -3869,6 +3904,10 @@ class DtedTerrain {
3869
3904
  return ret[0];
3870
3905
  }
3871
3906
  /**
3907
+ * Create a DTED terrain reader rooted at `root`.
3908
+ *
3909
+ * The root may contain tile files directly or the nested block layout the
3910
+ * core reader recognizes. Height results are ORTHOMETRIC meters.
3872
3911
  * @param {string} root
3873
3912
  */
3874
3913
  constructor(root) {
@@ -3883,6 +3922,101 @@ class DtedTerrain {
3883
3922
  if (Symbol.dispose) DtedTerrain.prototype[Symbol.dispose] = DtedTerrain.prototype.free;
3884
3923
  exports.DtedTerrain = DtedTerrain;
3885
3924
 
3925
+ /**
3926
+ * Loaded EGM96 15-arcminute geoid grid for explicit terrain datum conversion.
3927
+ */
3928
+ class Egm96FifteenMinuteGeoid {
3929
+ static __wrap(ptr) {
3930
+ const obj = Object.create(Egm96FifteenMinuteGeoid.prototype);
3931
+ obj.__wbg_ptr = ptr;
3932
+ Egm96FifteenMinuteGeoidFinalization.register(obj, obj.__wbg_ptr, obj);
3933
+ return obj;
3934
+ }
3935
+ __destroy_into_raw() {
3936
+ const ptr = this.__wbg_ptr;
3937
+ this.__wbg_ptr = 0;
3938
+ Egm96FifteenMinuteGeoidFinalization.unregister(this);
3939
+ return ptr;
3940
+ }
3941
+ free() {
3942
+ const ptr = this.__destroy_into_raw();
3943
+ wasm.__wbg_egm96fifteenminutegeoid_free(ptr, 0);
3944
+ }
3945
+ /**
3946
+ * Load `WW15MGH.DAC` bytes as an EGM96 15-arcminute geoid grid.
3947
+ * @param {Uint8Array} bytes
3948
+ * @returns {Egm96FifteenMinuteGeoid}
3949
+ */
3950
+ static fromWw15mghDacBytes(bytes) {
3951
+ const ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc);
3952
+ const len0 = WASM_VECTOR_LEN;
3953
+ const ret = wasm.egm96fifteenminutegeoid_fromWw15mghDacBytes(ptr0, len0);
3954
+ if (ret[2]) {
3955
+ throw takeFromExternrefTable0(ret[1]);
3956
+ }
3957
+ return Egm96FifteenMinuteGeoid.__wrap(ret[0]);
3958
+ }
3959
+ /**
3960
+ * Read and load `WW15MGH.DAC` from disk. A missing file throws a typed
3961
+ * `MissingEgm96Dac` error with `path` and `remediation` fields.
3962
+ * @param {string} path
3963
+ * @returns {Egm96FifteenMinuteGeoid}
3964
+ */
3965
+ static fromWw15mghDacPath(path) {
3966
+ const ptr0 = passStringToWasm0(path, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
3967
+ const len0 = WASM_VECTOR_LEN;
3968
+ const ret = wasm.egm96fifteenminutegeoid_fromWw15mghDacPath(ptr0, len0);
3969
+ if (ret[2]) {
3970
+ throw takeFromExternrefTable0(ret[1]);
3971
+ }
3972
+ return Egm96FifteenMinuteGeoid.__wrap(ret[0]);
3973
+ }
3974
+ }
3975
+ if (Symbol.dispose) Egm96FifteenMinuteGeoid.prototype[Symbol.dispose] = Egm96FifteenMinuteGeoid.prototype.free;
3976
+ exports.Egm96FifteenMinuteGeoid = Egm96FifteenMinuteGeoid;
3977
+
3978
+ /**
3979
+ * Ellipsoidal height `h` in metres above the WGS84 reference ellipsoid.
3980
+ */
3981
+ class EllipsoidalHeightM {
3982
+ static __wrap(ptr) {
3983
+ const obj = Object.create(EllipsoidalHeightM.prototype);
3984
+ obj.__wbg_ptr = ptr;
3985
+ EllipsoidalHeightMFinalization.register(obj, obj.__wbg_ptr, obj);
3986
+ return obj;
3987
+ }
3988
+ __destroy_into_raw() {
3989
+ const ptr = this.__wbg_ptr;
3990
+ this.__wbg_ptr = 0;
3991
+ EllipsoidalHeightMFinalization.unregister(this);
3992
+ return ptr;
3993
+ }
3994
+ free() {
3995
+ const ptr = this.__destroy_into_raw();
3996
+ wasm.__wbg_ellipsoidalheightm_free(ptr, 0);
3997
+ }
3998
+ /**
3999
+ * Build an ellipsoidal height `h` in metres.
4000
+ * @param {number} value_m
4001
+ */
4002
+ constructor(value_m) {
4003
+ const ret = wasm.ellipsoidalheightm_new(value_m);
4004
+ this.__wbg_ptr = ret;
4005
+ EllipsoidalHeightMFinalization.register(this, this.__wbg_ptr, this);
4006
+ return this;
4007
+ }
4008
+ /**
4009
+ * Ellipsoidal height `h`, metres above the WGS84 reference ellipsoid.
4010
+ * @returns {number}
4011
+ */
4012
+ get valueM() {
4013
+ const ret = wasm.ellipsoidalheightm_valueM(this.__wbg_ptr);
4014
+ return ret;
4015
+ }
4016
+ }
4017
+ if (Symbol.dispose) EllipsoidalHeightM.prototype[Symbol.dispose] = EllipsoidalHeightM.prototype.free;
4018
+ exports.EllipsoidalHeightM = EllipsoidalHeightM;
4019
+
3886
4020
  /**
3887
4021
  * Orthonormal encounter frame built from two relative states.
3888
4022
  */
@@ -5518,6 +5652,24 @@ class Ionex {
5518
5652
  const ret = wasm.ionex_baseRadiusKm(this.__wbg_ptr);
5519
5653
  return ret;
5520
5654
  }
5655
+ /**
5656
+ * Signed latitude grid step, degrees. Standard IONEX grids are
5657
+ * north-to-south, so this value is usually negative.
5658
+ * @returns {number}
5659
+ */
5660
+ get dlatDeg() {
5661
+ const ret = wasm.ionex_dlatDeg(this.__wbg_ptr);
5662
+ return ret;
5663
+ }
5664
+ /**
5665
+ * Signed longitude grid step, degrees. Standard IONEX grids are
5666
+ * west-to-east, so this value is usually positive.
5667
+ * @returns {number}
5668
+ */
5669
+ get dlonDeg() {
5670
+ const ret = wasm.ionex_dlonDeg(this.__wbg_ptr);
5671
+ return ret;
5672
+ }
5521
5673
  /**
5522
5674
  * The IONEX `EXPONENT` header field; the TEC scale is `10^exponent`.
5523
5675
  * @returns {number}
@@ -5591,6 +5743,36 @@ class Ionex {
5591
5743
  }
5592
5744
  return ret[0];
5593
5745
  }
5746
+ /**
5747
+ * Extract the full IONEX vertical-TEC grids as plain sample data.
5748
+ *
5749
+ * Epochs are integer seconds since J2000. Latitude and longitude nodes and
5750
+ * grid steps are degrees. TEC and RMS maps are TECU and indexed
5751
+ * `[map][iLat][iLon]`. The shell height and base radius are kilometers.
5752
+ * @returns {any}
5753
+ */
5754
+ tecGridSamples() {
5755
+ const ret = wasm.ionex_tecGridSamples(this.__wbg_ptr);
5756
+ if (ret[2]) {
5757
+ throw takeFromExternrefTable0(ret[1]);
5758
+ }
5759
+ return takeFromExternrefTable0(ret[0]);
5760
+ }
5761
+ /**
5762
+ * Extract one IONEX vertical-TEC sample per grid node.
5763
+ *
5764
+ * Each sample is `{ epochJ2000S, latDeg, lonDeg, vtecTecu, rmsTecu }`.
5765
+ * Epochs are integer seconds since J2000, coordinates are degrees, and TEC
5766
+ * and RMS values are TECU.
5767
+ * @returns {any}
5768
+ */
5769
+ tecSamples() {
5770
+ const ret = wasm.ionex_tecSamples(this.__wbg_ptr);
5771
+ if (ret[2]) {
5772
+ throw takeFromExternrefTable0(ret[1]);
5773
+ }
5774
+ return takeFromExternrefTable0(ret[0]);
5775
+ }
5594
5776
  /**
5595
5777
  * Serialize to standard IONEX text. Deterministic: the same product always
5596
5778
  * produces byte-identical text, and re-parsing the output yields an equal
@@ -6909,6 +7091,256 @@ class MappingFactors {
6909
7091
  if (Symbol.dispose) MappingFactors.prototype[Symbol.dispose] = MappingFactors.prototype.free;
6910
7092
  exports.MappingFactors = MappingFactors;
6911
7093
 
7094
+ /**
7095
+ * In-memory reader for memory-mappable terrain store bytes.
7096
+ *
7097
+ * Query results are orthometric terrain heights `H` in metres. Use the
7098
+ * ellipsoidal methods only when a geoid model is deliberately selected.
7099
+ */
7100
+ class MmapTerrain {
7101
+ static __wrap(ptr) {
7102
+ const obj = Object.create(MmapTerrain.prototype);
7103
+ obj.__wbg_ptr = ptr;
7104
+ MmapTerrainFinalization.register(obj, obj.__wbg_ptr, obj);
7105
+ return obj;
7106
+ }
7107
+ __destroy_into_raw() {
7108
+ const ptr = this.__wbg_ptr;
7109
+ this.__wbg_ptr = 0;
7110
+ MmapTerrainFinalization.unregister(this);
7111
+ return ptr;
7112
+ }
7113
+ free() {
7114
+ const ptr = this.__destroy_into_raw();
7115
+ wasm.__wbg_mmapterrain_free(ptr, 0);
7116
+ }
7117
+ /**
7118
+ * FNV-1a checksum of the full terrain store byte span.
7119
+ * @returns {bigint}
7120
+ */
7121
+ checksum64() {
7122
+ const ret = wasm.mmapterrain_checksum64(this.__wbg_ptr);
7123
+ return BigInt.asUintN(64, ret);
7124
+ }
7125
+ /**
7126
+ * Ellipsoidal height `h = H + N` in metres at `(longitudeDeg, latitudeDeg)`
7127
+ * using the embedded EGM96 1-degree geoid grid.
7128
+ * @param {number} longitude_deg
7129
+ * @param {number} latitude_deg
7130
+ * @returns {EllipsoidalHeightM}
7131
+ */
7132
+ ellipsoidalHeightM(longitude_deg, latitude_deg) {
7133
+ const ret = wasm.mmapterrain_ellipsoidalHeightM(this.__wbg_ptr, longitude_deg, latitude_deg);
7134
+ if (ret[2]) {
7135
+ throw takeFromExternrefTable0(ret[1]);
7136
+ }
7137
+ return EllipsoidalHeightM.__wrap(ret[0]);
7138
+ }
7139
+ /**
7140
+ * Ellipsoidal height `h = H + N` in metres using an explicit geoid model.
7141
+ *
7142
+ * The terrain lookup input order is `(longitudeDeg, latitudeDeg)`. Choosing
7143
+ * the EGM96 15-arcminute model requires a loaded `WW15MGH.DAC` grid and
7144
+ * does not fall back to the embedded 1-degree grid.
7145
+ * @param {number} longitude_deg
7146
+ * @param {number} latitude_deg
7147
+ * @param {any} options
7148
+ * @param {TerrainGeoidModel} geoid
7149
+ * @returns {EllipsoidalHeightM}
7150
+ */
7151
+ ellipsoidalHeightMWithModel(longitude_deg, latitude_deg, options, geoid) {
7152
+ _assertClass(geoid, TerrainGeoidModel);
7153
+ const ret = wasm.mmapterrain_ellipsoidalHeightMWithModel(this.__wbg_ptr, longitude_deg, latitude_deg, options, geoid.__wbg_ptr);
7154
+ if (ret[2]) {
7155
+ throw takeFromExternrefTable0(ret[1]);
7156
+ }
7157
+ return EllipsoidalHeightM.__wrap(ret[0]);
7158
+ }
7159
+ /**
7160
+ * Ellipsoidal height `h = H + N` in metres using embedded EGM96 1-degree
7161
+ * geoid conversion and explicit terrain lookup options.
7162
+ * @param {number} longitude_deg
7163
+ * @param {number} latitude_deg
7164
+ * @param {any} options
7165
+ * @returns {EllipsoidalHeightM}
7166
+ */
7167
+ ellipsoidalHeightMWithOptions(longitude_deg, latitude_deg, options) {
7168
+ const ret = wasm.mmapterrain_ellipsoidalHeightMWithOptions(this.__wbg_ptr, longitude_deg, latitude_deg, options);
7169
+ if (ret[2]) {
7170
+ throw takeFromExternrefTable0(ret[1]);
7171
+ }
7172
+ return EllipsoidalHeightM.__wrap(ret[0]);
7173
+ }
7174
+ /**
7175
+ * Parse terrain store bytes from a `Uint8Array`.
7176
+ * @param {Uint8Array} bytes
7177
+ * @returns {MmapTerrain}
7178
+ */
7179
+ static fromBytes(bytes) {
7180
+ const ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc);
7181
+ const len0 = WASM_VECTOR_LEN;
7182
+ const ret = wasm.mmapterrain_fromBytes(ptr0, len0);
7183
+ if (ret[2]) {
7184
+ throw takeFromExternrefTable0(ret[1]);
7185
+ }
7186
+ return MmapTerrain.__wrap(ret[0]);
7187
+ }
7188
+ /**
7189
+ * Read a terrain store file from host I/O and parse it into memory.
7190
+ *
7191
+ * Browser runtimes should use [`MmapTerrain.fromBytes`] with fetched bytes.
7192
+ * @param {string} path
7193
+ * @returns {MmapTerrain}
7194
+ */
7195
+ static fromPath(path) {
7196
+ const ptr0 = passStringToWasm0(path, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
7197
+ const len0 = WASM_VECTOR_LEN;
7198
+ const ret = wasm.mmapterrain_fromPath(ptr0, len0);
7199
+ if (ret[2]) {
7200
+ throw takeFromExternrefTable0(ret[1]);
7201
+ }
7202
+ return MmapTerrain.__wrap(ret[0]);
7203
+ }
7204
+ /**
7205
+ * Parse terrain store bytes from an owned `Uint8Array` copy.
7206
+ * @param {Uint8Array} bytes
7207
+ * @returns {MmapTerrain}
7208
+ */
7209
+ static fromVec(bytes) {
7210
+ const ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc);
7211
+ const len0 = WASM_VECTOR_LEN;
7212
+ const ret = wasm.mmapterrain_fromVec(ptr0, len0);
7213
+ if (ret[2]) {
7214
+ throw takeFromExternrefTable0(ret[1]);
7215
+ }
7216
+ return MmapTerrain.__wrap(ret[0]);
7217
+ }
7218
+ /**
7219
+ * Batch ORTHOMETRIC terrain heights for longitude-first points.
7220
+ *
7221
+ * `points` is an array of `[longitudeDeg, latitudeDeg]` pairs or
7222
+ * `{ longitudeDeg, latitudeDeg }` objects. Each entry is
7223
+ * `{ ok: true, heightM }` or `{ ok: false, error }`.
7224
+ * @param {any} points
7225
+ * @param {any} options
7226
+ * @returns {any}
7227
+ */
7228
+ heightBatch(points, options) {
7229
+ const ret = wasm.mmapterrain_heightBatch(this.__wbg_ptr, points, options);
7230
+ if (ret[2]) {
7231
+ throw takeFromExternrefTable0(ret[1]);
7232
+ }
7233
+ return takeFromExternrefTable0(ret[0]);
7234
+ }
7235
+ /**
7236
+ * Terrain height in ORTHOMETRIC metres at `(longitudeDeg, latitudeDeg)`.
7237
+ *
7238
+ * Longitude and latitude are degrees. The lookup uses bilinear
7239
+ * interpolation. Missing tiles evaluate to `0.0`.
7240
+ * @param {number} longitude_deg
7241
+ * @param {number} latitude_deg
7242
+ * @returns {number}
7243
+ */
7244
+ heightM(longitude_deg, latitude_deg) {
7245
+ const ret = wasm.mmapterrain_heightM(this.__wbg_ptr, longitude_deg, latitude_deg);
7246
+ if (ret[2]) {
7247
+ throw takeFromExternrefTable0(ret[1]);
7248
+ }
7249
+ return ret[0];
7250
+ }
7251
+ /**
7252
+ * Terrain height in ORTHOMETRIC metres at `(longitudeDeg, latitudeDeg)`.
7253
+ *
7254
+ * `options.interpolation` is `"bilinear"`, `"nearest"`, or
7255
+ * `"nearestPosting"`.
7256
+ * @param {number} longitude_deg
7257
+ * @param {number} latitude_deg
7258
+ * @param {any} options
7259
+ * @returns {number}
7260
+ */
7261
+ heightMWithOptions(longitude_deg, latitude_deg, options) {
7262
+ const ret = wasm.mmapterrain_heightMWithOptions(this.__wbg_ptr, longitude_deg, latitude_deg, options);
7263
+ if (ret[2]) {
7264
+ throw takeFromExternrefTable0(ret[1]);
7265
+ }
7266
+ return ret[0];
7267
+ }
7268
+ /**
7269
+ * Batch typed ORTHOMETRIC terrain heights for longitude-first points.
7270
+ *
7271
+ * Each entry is `{ ok: true, orthometricHeightM: { valueM } }` or
7272
+ * `{ ok: false, error }`.
7273
+ * @param {any} points
7274
+ * @param {any} options
7275
+ * @returns {any}
7276
+ */
7277
+ orthometricHeightBatch(points, options) {
7278
+ const ret = wasm.mmapterrain_orthometricHeightBatch(this.__wbg_ptr, points, options);
7279
+ if (ret[2]) {
7280
+ throw takeFromExternrefTable0(ret[1]);
7281
+ }
7282
+ return takeFromExternrefTable0(ret[0]);
7283
+ }
7284
+ /**
7285
+ * Typed ORTHOMETRIC terrain height `H` at `(longitudeDeg, latitudeDeg)`.
7286
+ * @param {number} longitude_deg
7287
+ * @param {number} latitude_deg
7288
+ * @returns {OrthometricHeightM}
7289
+ */
7290
+ orthometricHeightM(longitude_deg, latitude_deg) {
7291
+ const ret = wasm.mmapterrain_orthometricHeightM(this.__wbg_ptr, longitude_deg, latitude_deg);
7292
+ if (ret[2]) {
7293
+ throw takeFromExternrefTable0(ret[1]);
7294
+ }
7295
+ return OrthometricHeightM.__wrap(ret[0]);
7296
+ }
7297
+ /**
7298
+ * Typed ORTHOMETRIC terrain height `H` at `(longitudeDeg, latitudeDeg)`
7299
+ * with explicit lookup options.
7300
+ * @param {number} longitude_deg
7301
+ * @param {number} latitude_deg
7302
+ * @param {any} options
7303
+ * @returns {OrthometricHeightM}
7304
+ */
7305
+ orthometricHeightMWithOptions(longitude_deg, latitude_deg, options) {
7306
+ const ret = wasm.mmapterrain_orthometricHeightMWithOptions(this.__wbg_ptr, longitude_deg, latitude_deg, options);
7307
+ if (ret[2]) {
7308
+ throw takeFromExternrefTable0(ret[1]);
7309
+ }
7310
+ return OrthometricHeightM.__wrap(ret[0]);
7311
+ }
7312
+ /**
7313
+ * Parsed tile index records in store order.
7314
+ * @returns {TerrainStoreTileIndex[]}
7315
+ */
7316
+ tileIndex() {
7317
+ const ret = wasm.mmapterrain_tileIndex(this.__wbg_ptr);
7318
+ var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();
7319
+ wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
7320
+ return v1;
7321
+ }
7322
+ /**
7323
+ * Canonical store bytes for this parsed terrain store.
7324
+ * @returns {Uint8Array}
7325
+ */
7326
+ toBytes() {
7327
+ const ret = wasm.mmapterrain_toBytes(this.__wbg_ptr);
7328
+ var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
7329
+ wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
7330
+ return v1;
7331
+ }
7332
+ /**
7333
+ * File-level vertical datum for the store's orthometric posting payloads.
7334
+ * @returns {VerticalDatum}
7335
+ */
7336
+ get verticalDatum() {
7337
+ const ret = wasm.mmapterrain_verticalDatum(this.__wbg_ptr);
7338
+ return ret;
7339
+ }
7340
+ }
7341
+ if (Symbol.dispose) MmapTerrain.prototype[Symbol.dispose] = MmapTerrain.prototype.free;
7342
+ exports.MmapTerrain = MmapTerrain;
7343
+
6912
7344
  /**
6913
7345
  * One refined Moon elevation threshold crossing (moonrise / moonset).
6914
7346
  */
@@ -7857,11 +8289,230 @@ const ObservationKind = Object.freeze({
7857
8289
  */
7858
8290
  SignalStrength: 3, "3": "SignalStrength",
7859
8291
  /**
7860
- * Unknown leading RINEX code letter.
8292
+ * Unknown leading RINEX code letter.
8293
+ */
8294
+ Unknown: 4, "4": "Unknown",
8295
+ });
8296
+ exports.ObservationKind = ObservationKind;
8297
+
8298
+ /**
8299
+ * Aggregate observation QC report.
8300
+ */
8301
+ class ObservationQcReport {
8302
+ static __wrap(ptr) {
8303
+ const obj = Object.create(ObservationQcReport.prototype);
8304
+ obj.__wbg_ptr = ptr;
8305
+ ObservationQcReportFinalization.register(obj, obj.__wbg_ptr, obj);
8306
+ return obj;
8307
+ }
8308
+ __destroy_into_raw() {
8309
+ const ptr = this.__wbg_ptr;
8310
+ this.__wbg_ptr = 0;
8311
+ ObservationQcReportFinalization.unregister(this);
8312
+ return ptr;
8313
+ }
8314
+ free() {
8315
+ const ptr = this.__destroy_into_raw();
8316
+ wasm.__wbg_observationqcreport_free(ptr, 0);
8317
+ }
8318
+ /**
8319
+ * @returns {any}
8320
+ */
8321
+ get clockJumps() {
8322
+ const ret = wasm.observationqcreport_clockJumps(this.__wbg_ptr);
8323
+ if (ret[2]) {
8324
+ throw takeFromExternrefTable0(ret[1]);
8325
+ }
8326
+ return takeFromExternrefTable0(ret[0]);
8327
+ }
8328
+ /**
8329
+ * @returns {any}
8330
+ */
8331
+ get cycleSlips() {
8332
+ const ret = wasm.observationqcreport_cycleSlips(this.__wbg_ptr);
8333
+ if (ret[2]) {
8334
+ throw takeFromExternrefTable0(ret[1]);
8335
+ }
8336
+ return takeFromExternrefTable0(ret[0]);
8337
+ }
8338
+ /**
8339
+ * @returns {any}
8340
+ */
8341
+ get dataGaps() {
8342
+ const ret = wasm.observationqcreport_dataGaps(this.__wbg_ptr);
8343
+ if (ret[2]) {
8344
+ throw takeFromExternrefTable0(ret[1]);
8345
+ }
8346
+ return takeFromExternrefTable0(ret[0]);
8347
+ }
8348
+ /**
8349
+ * @returns {number}
8350
+ */
8351
+ get eventRecords() {
8352
+ const ret = wasm.observationqcreport_eventRecords(this.__wbg_ptr);
8353
+ return ret >>> 0;
8354
+ }
8355
+ /**
8356
+ * @returns {number | undefined}
8357
+ */
8358
+ get intervalS() {
8359
+ const ret = wasm.observationqcreport_intervalS(this.__wbg_ptr);
8360
+ return ret[0] === 0 ? undefined : ret[1];
8361
+ }
8362
+ /**
8363
+ * @returns {string}
8364
+ */
8365
+ get intervalSource() {
8366
+ let deferred1_0;
8367
+ let deferred1_1;
8368
+ try {
8369
+ const ret = wasm.observationqcreport_intervalSource(this.__wbg_ptr);
8370
+ deferred1_0 = ret[0];
8371
+ deferred1_1 = ret[1];
8372
+ return getStringFromWasm0(ret[0], ret[1]);
8373
+ } finally {
8374
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
8375
+ }
8376
+ }
8377
+ /**
8378
+ * @returns {number}
8379
+ */
8380
+ get missingEpochs() {
8381
+ const ret = wasm.observationqcreport_missingEpochs(this.__wbg_ptr);
8382
+ return ret >>> 0;
8383
+ }
8384
+ /**
8385
+ * @returns {any}
8386
+ */
8387
+ get multipath() {
8388
+ const ret = wasm.observationqcreport_multipath(this.__wbg_ptr);
8389
+ if (ret[2]) {
8390
+ throw takeFromExternrefTable0(ret[1]);
8391
+ }
8392
+ return takeFromExternrefTable0(ret[0]);
8393
+ }
8394
+ /**
8395
+ * @returns {any}
8396
+ */
8397
+ get notes() {
8398
+ const ret = wasm.observationqcreport_notes(this.__wbg_ptr);
8399
+ if (ret[2]) {
8400
+ throw takeFromExternrefTable0(ret[1]);
8401
+ }
8402
+ return takeFromExternrefTable0(ret[0]);
8403
+ }
8404
+ /**
8405
+ * @returns {number}
8406
+ */
8407
+ get observationEpochs() {
8408
+ const ret = wasm.observationqcreport_observationEpochs(this.__wbg_ptr);
8409
+ return ret >>> 0;
8410
+ }
8411
+ /**
8412
+ * @returns {number}
8413
+ */
8414
+ get powerFailureEpochs() {
8415
+ const ret = wasm.observationqcreport_powerFailureEpochs(this.__wbg_ptr);
8416
+ return ret >>> 0;
8417
+ }
8418
+ /**
8419
+ * @returns {string}
8420
+ */
8421
+ renderHtml() {
8422
+ let deferred1_0;
8423
+ let deferred1_1;
8424
+ try {
8425
+ const ret = wasm.observationqcreport_renderHtml(this.__wbg_ptr);
8426
+ deferred1_0 = ret[0];
8427
+ deferred1_1 = ret[1];
8428
+ return getStringFromWasm0(ret[0], ret[1]);
8429
+ } finally {
8430
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
8431
+ }
8432
+ }
8433
+ /**
8434
+ * @returns {string}
8435
+ */
8436
+ renderText() {
8437
+ let deferred1_0;
8438
+ let deferred1_1;
8439
+ try {
8440
+ const ret = wasm.observationqcreport_renderText(this.__wbg_ptr);
8441
+ deferred1_0 = ret[0];
8442
+ deferred1_1 = ret[1];
8443
+ return getStringFromWasm0(ret[0], ret[1]);
8444
+ } finally {
8445
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
8446
+ }
8447
+ }
8448
+ /**
8449
+ * @returns {any}
8450
+ */
8451
+ get satelliteSignals() {
8452
+ const ret = wasm.observationqcreport_satelliteSignals(this.__wbg_ptr);
8453
+ if (ret[2]) {
8454
+ throw takeFromExternrefTable0(ret[1]);
8455
+ }
8456
+ return takeFromExternrefTable0(ret[0]);
8457
+ }
8458
+ /**
8459
+ * @returns {any}
8460
+ */
8461
+ get satellites() {
8462
+ const ret = wasm.observationqcreport_satellites(this.__wbg_ptr);
8463
+ if (ret[2]) {
8464
+ throw takeFromExternrefTable0(ret[1]);
8465
+ }
8466
+ return takeFromExternrefTable0(ret[0]);
8467
+ }
8468
+ /**
8469
+ * @returns {number}
8470
+ */
8471
+ get skippedRecords() {
8472
+ const ret = wasm.observationqcreport_skippedRecords(this.__wbg_ptr);
8473
+ return ret >>> 0;
8474
+ }
8475
+ /**
8476
+ * @returns {any}
8477
+ */
8478
+ get systemSignals() {
8479
+ const ret = wasm.observationqcreport_systemSignals(this.__wbg_ptr);
8480
+ if (ret[2]) {
8481
+ throw takeFromExternrefTable0(ret[1]);
8482
+ }
8483
+ return takeFromExternrefTable0(ret[0]);
8484
+ }
8485
+ /**
8486
+ * @returns {string}
8487
+ */
8488
+ toJson() {
8489
+ let deferred2_0;
8490
+ let deferred2_1;
8491
+ try {
8492
+ const ret = wasm.observationqcreport_toJson(this.__wbg_ptr);
8493
+ var ptr1 = ret[0];
8494
+ var len1 = ret[1];
8495
+ if (ret[3]) {
8496
+ ptr1 = 0; len1 = 0;
8497
+ throw takeFromExternrefTable0(ret[2]);
8498
+ }
8499
+ deferred2_0 = ptr1;
8500
+ deferred2_1 = len1;
8501
+ return getStringFromWasm0(ptr1, len1);
8502
+ } finally {
8503
+ wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
8504
+ }
8505
+ }
8506
+ /**
8507
+ * @returns {number}
7861
8508
  */
7862
- Unknown: 4, "4": "Unknown",
7863
- });
7864
- exports.ObservationKind = ObservationKind;
8509
+ get totalEpochRecords() {
8510
+ const ret = wasm.observationqcreport_totalEpochRecords(this.__wbg_ptr);
8511
+ return ret >>> 0;
8512
+ }
8513
+ }
8514
+ if (Symbol.dispose) ObservationQcReport.prototype[Symbol.dispose] = ObservationQcReport.prototype.free;
8515
+ exports.ObservationQcReport = ObservationQcReport;
7865
8516
 
7866
8517
  /**
7867
8518
  * Flattened raw observation rows from one RINEX OBS epoch. Numeric arrays are
@@ -9830,6 +10481,81 @@ class OpmState {
9830
10481
  if (Symbol.dispose) OpmState.prototype[Symbol.dispose] = OpmState.prototype.free;
9831
10482
  exports.OpmState = OpmState;
9832
10483
 
10484
+ /**
10485
+ * Orthometric terrain height `H` in metres above the EGM96 mean sea level
10486
+ * geoid.
10487
+ */
10488
+ class OrthometricHeightM {
10489
+ static __wrap(ptr) {
10490
+ const obj = Object.create(OrthometricHeightM.prototype);
10491
+ obj.__wbg_ptr = ptr;
10492
+ OrthometricHeightMFinalization.register(obj, obj.__wbg_ptr, obj);
10493
+ return obj;
10494
+ }
10495
+ __destroy_into_raw() {
10496
+ const ptr = this.__wbg_ptr;
10497
+ this.__wbg_ptr = 0;
10498
+ OrthometricHeightMFinalization.unregister(this);
10499
+ return ptr;
10500
+ }
10501
+ free() {
10502
+ const ptr = this.__destroy_into_raw();
10503
+ wasm.__wbg_orthometricheightm_free(ptr, 0);
10504
+ }
10505
+ /**
10506
+ * Build an orthometric height `H` in metres.
10507
+ * @param {number} value_m
10508
+ */
10509
+ constructor(value_m) {
10510
+ const ret = wasm.orthometricheightm_new(value_m);
10511
+ this.__wbg_ptr = ret;
10512
+ OrthometricHeightMFinalization.register(this, this.__wbg_ptr, this);
10513
+ return this;
10514
+ }
10515
+ /**
10516
+ * Convert to ellipsoidal height `h = H + N` using degree inputs in geoid
10517
+ * order `(latitudeDeg, longitudeDeg)` and an explicit geoid model.
10518
+ * @param {number} latitude_deg
10519
+ * @param {number} longitude_deg
10520
+ * @param {TerrainGeoidModel} geoid
10521
+ * @returns {EllipsoidalHeightM}
10522
+ */
10523
+ toEllipsoidalHeightDeg(latitude_deg, longitude_deg, geoid) {
10524
+ _assertClass(geoid, TerrainGeoidModel);
10525
+ const ret = wasm.orthometricheightm_toEllipsoidalHeightDeg(this.__wbg_ptr, latitude_deg, longitude_deg, geoid.__wbg_ptr);
10526
+ if (ret[2]) {
10527
+ throw takeFromExternrefTable0(ret[1]);
10528
+ }
10529
+ return EllipsoidalHeightM.__wrap(ret[0]);
10530
+ }
10531
+ /**
10532
+ * Convert to ellipsoidal height `h = H + N` using radian inputs in geoid
10533
+ * order `(latitudeRad, longitudeRad)` and an explicit geoid model.
10534
+ * @param {number} latitude_rad
10535
+ * @param {number} longitude_rad
10536
+ * @param {TerrainGeoidModel} geoid
10537
+ * @returns {EllipsoidalHeightM}
10538
+ */
10539
+ toEllipsoidalHeightRad(latitude_rad, longitude_rad, geoid) {
10540
+ _assertClass(geoid, TerrainGeoidModel);
10541
+ const ret = wasm.orthometricheightm_toEllipsoidalHeightRad(this.__wbg_ptr, latitude_rad, longitude_rad, geoid.__wbg_ptr);
10542
+ if (ret[2]) {
10543
+ throw takeFromExternrefTable0(ret[1]);
10544
+ }
10545
+ return EllipsoidalHeightM.__wrap(ret[0]);
10546
+ }
10547
+ /**
10548
+ * Orthometric height `H`, metres above the EGM96 mean sea level geoid.
10549
+ * @returns {number}
10550
+ */
10551
+ get valueM() {
10552
+ const ret = wasm.orthometricheightm_valueM(this.__wbg_ptr);
10553
+ return ret;
10554
+ }
10555
+ }
10556
+ if (Symbol.dispose) OrthometricHeightM.prototype[Symbol.dispose] = OrthometricHeightM.prototype.free;
10557
+ exports.OrthometricHeightM = OrthometricHeightM;
10558
+
9833
10559
  /**
9834
10560
  * The result of [`parseTleFile`]: the satellites that parsed, plus a count of
9835
10561
  * complete records that were skipped because SGP4 initialization failed.
@@ -11831,6 +12557,12 @@ class SatelliteVector {
11831
12557
  if (Symbol.dispose) SatelliteVector.prototype[Symbol.dispose] = SatelliteVector.prototype.free;
11832
12558
  exports.SatelliteVector = SatelliteVector;
11833
12559
 
12560
+ /**
12561
+ * Mutable SBAS correction store.
12562
+ *
12563
+ * Ingest raw SBAS messages with a source GEO and GNSS time, then query decoded
12564
+ * fast, long-term, ionospheric, and GEO navigation correction records.
12565
+ */
11834
12566
  class SbasCorrectionStore {
11835
12567
  __destroy_into_raw() {
11836
12568
  const ptr = this.__wbg_ptr;
@@ -11843,6 +12575,49 @@ class SbasCorrectionStore {
11843
12575
  wasm.__wbg_sbascorrectionstore_free(ptr, 0);
11844
12576
  }
11845
12577
  /**
12578
+ * Fast pseudorange correction for `(geo, sat)`, or `null`.
12579
+ *
12580
+ * `prcM` is meters, `rrcMS` is meters per second, and `tOfJ2000S` is
12581
+ * seconds since J2000.
12582
+ * @param {string} geo
12583
+ * @param {string} sat
12584
+ * @returns {any}
12585
+ */
12586
+ fastCorrection(geo, sat) {
12587
+ const ptr0 = passStringToWasm0(geo, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
12588
+ const len0 = WASM_VECTOR_LEN;
12589
+ const ptr1 = passStringToWasm0(sat, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
12590
+ const len1 = WASM_VECTOR_LEN;
12591
+ const ret = wasm.sbascorrectionstore_fastCorrection(this.__wbg_ptr, ptr0, len0, ptr1, len1);
12592
+ if (ret[2]) {
12593
+ throw takeFromExternrefTable0(ret[1]);
12594
+ }
12595
+ return takeFromExternrefTable0(ret[0]);
12596
+ }
12597
+ /**
12598
+ * SBAS GEO navigation state for `geo`, or `null`.
12599
+ *
12600
+ * Positions are ECEF meters, velocities are ECEF meters per second,
12601
+ * accelerations are ECEF meters per second squared, clock fields are
12602
+ * seconds and seconds per second, and `t0J2000S` is seconds since J2000.
12603
+ * @param {string} geo
12604
+ * @returns {any}
12605
+ */
12606
+ geoNavState(geo) {
12607
+ const ptr0 = passStringToWasm0(geo, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
12608
+ const len0 = WASM_VECTOR_LEN;
12609
+ const ret = wasm.sbascorrectionstore_geoNavState(this.__wbg_ptr, ptr0, len0);
12610
+ if (ret[2]) {
12611
+ throw takeFromExternrefTable0(ret[1]);
12612
+ }
12613
+ return takeFromExternrefTable0(ret[0]);
12614
+ }
12615
+ /**
12616
+ * Ingest one decoded SBAS message into the correction store.
12617
+ *
12618
+ * `geo` is the SBAS source satellite token such as `"S29"`. `week` and
12619
+ * `towS` are in the selected GNSS time scale. `form` is `"framed250"` or
12620
+ * `"body226"`.
11846
12621
  * @param {Uint8Array} bytes
11847
12622
  * @param {string | null | undefined} form
11848
12623
  * @param {string} geo
@@ -11865,6 +12640,27 @@ class SbasCorrectionStore {
11865
12640
  }
11866
12641
  }
11867
12642
  /**
12643
+ * SBAS ionospheric grid for `geo`, or `null`.
12644
+ *
12645
+ * Grid point latitudes and longitudes are degrees, vertical delays are
12646
+ * meters, and GIVE variances are square meters when present.
12647
+ * @param {string} geo
12648
+ * @returns {any}
12649
+ */
12650
+ ionoGrid(geo) {
12651
+ const ptr0 = passStringToWasm0(geo, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
12652
+ const len0 = WASM_VECTOR_LEN;
12653
+ const ret = wasm.sbascorrectionstore_ionoGrid(this.__wbg_ptr, ptr0, len0);
12654
+ if (ret[2]) {
12655
+ throw takeFromExternrefTable0(ret[1]);
12656
+ }
12657
+ return takeFromExternrefTable0(ret[0]);
12658
+ }
12659
+ /**
12660
+ * SBAS ionospheric slant delay in meters, or `null`.
12661
+ *
12662
+ * Receiver latitude, longitude, elevation, and azimuth are radians.
12663
+ * `frequencyHz` is the carrier frequency for the reported group delay.
11868
12664
  * @param {string} geo
11869
12665
  * @param {number} receiver_lat_rad
11870
12666
  * @param {number} receiver_lon_rad
@@ -11883,6 +12679,30 @@ class SbasCorrectionStore {
11883
12679
  }
11884
12680
  return ret[0] === 0 ? undefined : ret[1];
11885
12681
  }
12682
+ /**
12683
+ * Long-term orbit and clock correction for `(geo, sat)`, or `null`.
12684
+ *
12685
+ * Position deltas are ECEF meters, rates are ECEF meters per second, clock
12686
+ * deltas are seconds and seconds per second, and `t0J2000S` is seconds
12687
+ * since J2000.
12688
+ * @param {string} geo
12689
+ * @param {string} sat
12690
+ * @returns {any}
12691
+ */
12692
+ longTermCorrection(geo, sat) {
12693
+ const ptr0 = passStringToWasm0(geo, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
12694
+ const len0 = WASM_VECTOR_LEN;
12695
+ const ptr1 = passStringToWasm0(sat, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
12696
+ const len1 = WASM_VECTOR_LEN;
12697
+ const ret = wasm.sbascorrectionstore_longTermCorrection(this.__wbg_ptr, ptr0, len0, ptr1, len1);
12698
+ if (ret[2]) {
12699
+ throw takeFromExternrefTable0(ret[1]);
12700
+ }
12701
+ return takeFromExternrefTable0(ret[0]);
12702
+ }
12703
+ /**
12704
+ * Create an empty SBAS correction store.
12705
+ */
11886
12706
  constructor() {
11887
12707
  const ret = wasm.sbascorrectionstore_new();
11888
12708
  this.__wbg_ptr = ret;
@@ -11890,6 +12710,10 @@ class SbasCorrectionStore {
11890
12710
  return this;
11891
12711
  }
11892
12712
  /**
12713
+ * Ready SBAS GEO source satellites at `tJ2000S`.
12714
+ *
12715
+ * The time is seconds since J2000. Returned tokens are strings such as
12716
+ * `"S29"`, sorted by most recent update first.
11893
12717
  * @param {number} t_j2000_s
11894
12718
  * @returns {string[]}
11895
12719
  */
@@ -11899,6 +12723,24 @@ class SbasCorrectionStore {
11899
12723
  wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
11900
12724
  return v1;
11901
12725
  }
12726
+ /**
12727
+ * Allow or disallow partial SBAS corrections when building corrected
12728
+ * ephemeris states.
12729
+ * @param {boolean} yes
12730
+ */
12731
+ setAllowPartial(yes) {
12732
+ wasm.sbascorrectionstore_setAllowPartial(this.__wbg_ptr, yes);
12733
+ }
12734
+ /**
12735
+ * Set the maximum staleness for fresh SBAS corrections, in seconds.
12736
+ * @param {number} seconds
12737
+ */
12738
+ setStalenessSeconds(seconds) {
12739
+ const ret = wasm.sbascorrectionstore_setStalenessSeconds(this.__wbg_ptr, seconds);
12740
+ if (ret[1]) {
12741
+ throw takeFromExternrefTable0(ret[0]);
12742
+ }
12743
+ }
11902
12744
  }
11903
12745
  if (Symbol.dispose) SbasCorrectionStore.prototype[Symbol.dispose] = SbasCorrectionStore.prototype.free;
11904
12746
  exports.SbasCorrectionStore = SbasCorrectionStore;
@@ -13788,70 +14630,307 @@ exports.SsrSource = SsrSource;
13788
14630
  * The frame (geocentric ECI of date vs Earth-fixed ITRS/ECEF) is fixed by which
13789
14631
  * function produced this object: [`sunMoonEci`] or [`sunMoonEcef`].
13790
14632
  */
13791
- class SunMoon {
14633
+ class SunMoon {
14634
+ static __wrap(ptr) {
14635
+ const obj = Object.create(SunMoon.prototype);
14636
+ obj.__wbg_ptr = ptr;
14637
+ SunMoonFinalization.register(obj, obj.__wbg_ptr, obj);
14638
+ return obj;
14639
+ }
14640
+ __destroy_into_raw() {
14641
+ const ptr = this.__wbg_ptr;
14642
+ this.__wbg_ptr = 0;
14643
+ SunMoonFinalization.unregister(this);
14644
+ return ptr;
14645
+ }
14646
+ free() {
14647
+ const ptr = this.__destroy_into_raw();
14648
+ wasm.__wbg_sunmoon_free(ptr, 0);
14649
+ }
14650
+ /**
14651
+ * Number of epochs in the batch.
14652
+ * @returns {number}
14653
+ */
14654
+ get epochCount() {
14655
+ const ret = wasm.sunmoon_epochCount(this.__wbg_ptr);
14656
+ return ret >>> 0;
14657
+ }
14658
+ /**
14659
+ * The frame these positions are in: `"eci"` or `"ecef"`.
14660
+ * @returns {string}
14661
+ */
14662
+ get frame() {
14663
+ let deferred1_0;
14664
+ let deferred1_1;
14665
+ try {
14666
+ const ret = wasm.sunmoon_frame(this.__wbg_ptr);
14667
+ deferred1_0 = ret[0];
14668
+ deferred1_1 = ret[1];
14669
+ return getStringFromWasm0(ret[0], ret[1]);
14670
+ } finally {
14671
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
14672
+ }
14673
+ }
14674
+ /**
14675
+ * Moon positions, metres, flat row-major `(n, 3)`.
14676
+ * @returns {Float64Array}
14677
+ */
14678
+ get moon() {
14679
+ const ret = wasm.sunmoon_moon(this.__wbg_ptr);
14680
+ var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
14681
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
14682
+ return v1;
14683
+ }
14684
+ /**
14685
+ * Sun positions, metres, flat row-major `(n, 3)`.
14686
+ * @returns {Float64Array}
14687
+ */
14688
+ get sun() {
14689
+ const ret = wasm.sunmoon_sun(this.__wbg_ptr);
14690
+ var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
14691
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
14692
+ return v1;
14693
+ }
14694
+ }
14695
+ if (Symbol.dispose) SunMoon.prototype[Symbol.dispose] = SunMoon.prototype.free;
14696
+ exports.SunMoon = SunMoon;
14697
+
14698
+ /**
14699
+ * Terrain datum conversion and optional geoid-grid loading error variants.
14700
+ * @enum {0 | 1 | 2 | 3}
14701
+ */
14702
+ const TerrainDatumError = Object.freeze({
14703
+ /**
14704
+ * Terrain lookup failed before datum conversion.
14705
+ */
14706
+ Terrain: 0, "0": "Terrain",
14707
+ /**
14708
+ * A geoid grid could not be parsed.
14709
+ */
14710
+ Geoid: 1, "1": "Geoid",
14711
+ /**
14712
+ * Reading a geoid grid failed for a reason other than absence.
14713
+ */
14714
+ Io: 2, "2": "Io",
14715
+ /**
14716
+ * The EGM96 15-arcminute `WW15MGH.DAC` grid was requested but is absent.
14717
+ */
14718
+ MissingEgm96Dac: 3, "3": "MissingEgm96Dac",
14719
+ });
14720
+ exports.TerrainDatumError = TerrainDatumError;
14721
+
14722
+ /**
14723
+ * Geoid model used to convert terrain orthometric height `H` to ellipsoidal
14724
+ * height `h`.
14725
+ */
14726
+ class TerrainGeoidModel {
14727
+ static __wrap(ptr) {
14728
+ const obj = Object.create(TerrainGeoidModel.prototype);
14729
+ obj.__wbg_ptr = ptr;
14730
+ TerrainGeoidModelFinalization.register(obj, obj.__wbg_ptr, obj);
14731
+ return obj;
14732
+ }
14733
+ __destroy_into_raw() {
14734
+ const ptr = this.__wbg_ptr;
14735
+ this.__wbg_ptr = 0;
14736
+ TerrainGeoidModelFinalization.unregister(this);
14737
+ return ptr;
14738
+ }
14739
+ free() {
14740
+ const ptr = this.__destroy_into_raw();
14741
+ wasm.__wbg_terraingeoidmodel_free(ptr, 0);
14742
+ }
14743
+ /**
14744
+ * Use a caller-supplied EGM96 15-arcminute geoid grid for `h = H + N`.
14745
+ * @param {Egm96FifteenMinuteGeoid} geoid
14746
+ * @returns {TerrainGeoidModel}
14747
+ */
14748
+ static egm96FifteenMinute(geoid) {
14749
+ _assertClass(geoid, Egm96FifteenMinuteGeoid);
14750
+ const ret = wasm.terraingeoidmodel_egm96FifteenMinute(geoid.__wbg_ptr);
14751
+ return TerrainGeoidModel.__wrap(ret);
14752
+ }
14753
+ /**
14754
+ * Use the embedded EGM96 1-degree geoid grid for `h = H + N`.
14755
+ * @returns {TerrainGeoidModel}
14756
+ */
14757
+ static egm96OneDegree() {
14758
+ const ret = wasm.terraingeoidmodel_egm96OneDegree();
14759
+ return TerrainGeoidModel.__wrap(ret);
14760
+ }
14761
+ /**
14762
+ * Model discriminator: `"egm96OneDegree"` or `"egm96FifteenMinute"`.
14763
+ * @returns {string}
14764
+ */
14765
+ get kind() {
14766
+ let deferred1_0;
14767
+ let deferred1_1;
14768
+ try {
14769
+ const ret = wasm.terraingeoidmodel_kind(this.__wbg_ptr);
14770
+ deferred1_0 = ret[0];
14771
+ deferred1_1 = ret[1];
14772
+ return getStringFromWasm0(ret[0], ret[1]);
14773
+ } finally {
14774
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
14775
+ }
14776
+ }
14777
+ }
14778
+ if (Symbol.dispose) TerrainGeoidModel.prototype[Symbol.dispose] = TerrainGeoidModel.prototype.free;
14779
+ exports.TerrainGeoidModel = TerrainGeoidModel;
14780
+
14781
+ /**
14782
+ * Terrain store conversion, serialization, and parsing error variants.
14783
+ * @enum {0 | 1 | 2 | 3 | 4 | 5}
14784
+ */
14785
+ const TerrainStoreError = Object.freeze({
14786
+ /**
14787
+ * File or directory I/O failed.
14788
+ */
14789
+ Io: 0, "0": "Io",
14790
+ /**
14791
+ * DTED or terrain store bytes could not be parsed.
14792
+ */
14793
+ Parse: 1, "1": "Parse",
14794
+ /**
14795
+ * The terrain store version is not supported.
14796
+ */
14797
+ UnsupportedVersion: 2, "2": "UnsupportedVersion",
14798
+ /**
14799
+ * The terrain store datum tag is not supported.
14800
+ */
14801
+ UnsupportedDatum: 3, "3": "UnsupportedDatum",
14802
+ /**
14803
+ * Two input DTED files resolved to the same integer tile id.
14804
+ */
14805
+ DuplicateTile: 4, "4": "DuplicateTile",
14806
+ /**
14807
+ * A tile payload checksum did not match its index record.
14808
+ */
14809
+ Checksum: 5, "5": "Checksum",
14810
+ });
14811
+ exports.TerrainStoreError = TerrainStoreError;
14812
+
14813
+ /**
14814
+ * Metadata for one tile index record in a memory-mappable terrain store.
14815
+ */
14816
+ class TerrainStoreTileIndex {
13792
14817
  static __wrap(ptr) {
13793
- const obj = Object.create(SunMoon.prototype);
14818
+ const obj = Object.create(TerrainStoreTileIndex.prototype);
13794
14819
  obj.__wbg_ptr = ptr;
13795
- SunMoonFinalization.register(obj, obj.__wbg_ptr, obj);
14820
+ TerrainStoreTileIndexFinalization.register(obj, obj.__wbg_ptr, obj);
13796
14821
  return obj;
13797
14822
  }
13798
14823
  __destroy_into_raw() {
13799
14824
  const ptr = this.__wbg_ptr;
13800
14825
  this.__wbg_ptr = 0;
13801
- SunMoonFinalization.unregister(this);
14826
+ TerrainStoreTileIndexFinalization.unregister(this);
13802
14827
  return ptr;
13803
14828
  }
13804
14829
  free() {
13805
14830
  const ptr = this.__destroy_into_raw();
13806
- wasm.__wbg_sunmoon_free(ptr, 0);
14831
+ wasm.__wbg_terrainstoretileindex_free(ptr, 0);
13807
14832
  }
13808
14833
  /**
13809
- * Number of epochs in the batch.
14834
+ * FNV-1a checksum of this tile's posting payload bytes.
14835
+ * @returns {bigint}
14836
+ */
14837
+ get checksum64() {
14838
+ const ret = wasm.terrainstoretileindex_checksum64(this.__wbg_ptr);
14839
+ return BigInt.asUintN(64, ret);
14840
+ }
14841
+ /**
14842
+ * Byte length of this tile's posting payload in the store.
14843
+ * @returns {bigint}
14844
+ */
14845
+ get dataLen() {
14846
+ const ret = wasm.terrainstoretileindex_dataLen(this.__wbg_ptr);
14847
+ return BigInt.asUintN(64, ret);
14848
+ }
14849
+ /**
14850
+ * Byte offset of this tile's posting payload in the store.
14851
+ * @returns {bigint}
14852
+ */
14853
+ get dataOffset() {
14854
+ const ret = wasm.terrainstoretileindex_dataOffset(this.__wbg_ptr);
14855
+ return BigInt.asUintN(64, ret);
14856
+ }
14857
+ /**
14858
+ * Number of latitude postings.
13810
14859
  * @returns {number}
13811
14860
  */
13812
- get epochCount() {
13813
- const ret = wasm.sunmoon_epochCount(this.__wbg_ptr);
14861
+ get latCount() {
14862
+ const ret = wasm.terrainstoretileindex_latCount(this.__wbg_ptr);
13814
14863
  return ret >>> 0;
13815
14864
  }
13816
14865
  /**
13817
- * The frame these positions are in: `"eci"` or `"ecef"`.
13818
- * @returns {string}
14866
+ * Integer latitude tile id, for example `36` for a tile covering
14867
+ * `36..37` degrees.
14868
+ * @returns {number}
13819
14869
  */
13820
- get frame() {
13821
- let deferred1_0;
13822
- let deferred1_1;
13823
- try {
13824
- const ret = wasm.sunmoon_frame(this.__wbg_ptr);
13825
- deferred1_0 = ret[0];
13826
- deferred1_1 = ret[1];
13827
- return getStringFromWasm0(ret[0], ret[1]);
13828
- } finally {
13829
- wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
13830
- }
14870
+ get latIndex() {
14871
+ const ret = wasm.terrainstoretileindex_latIndex(this.__wbg_ptr);
14872
+ return ret;
13831
14873
  }
13832
14874
  /**
13833
- * Moon positions, metres, flat row-major `(n, 3)`.
13834
- * @returns {Float64Array}
14875
+ * Number of longitude postings.
14876
+ * @returns {number}
13835
14877
  */
13836
- get moon() {
13837
- const ret = wasm.sunmoon_moon(this.__wbg_ptr);
13838
- var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
13839
- wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
13840
- return v1;
14878
+ get lonCount() {
14879
+ const ret = wasm.terrainstoretileindex_lonCount(this.__wbg_ptr);
14880
+ return ret >>> 0;
13841
14881
  }
13842
14882
  /**
13843
- * Sun positions, metres, flat row-major `(n, 3)`.
13844
- * @returns {Float64Array}
14883
+ * Integer longitude tile id, for example `-107` for a tile covering
14884
+ * `-107..-106` degrees.
14885
+ * @returns {number}
13845
14886
  */
13846
- get sun() {
13847
- const ret = wasm.sunmoon_sun(this.__wbg_ptr);
13848
- var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
13849
- wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
13850
- return v1;
14887
+ get lonIndex() {
14888
+ const ret = wasm.terrainstoretileindex_lonIndex(this.__wbg_ptr);
14889
+ return ret;
14890
+ }
14891
+ /**
14892
+ * Northern edge latitude, degrees.
14893
+ * @returns {number}
14894
+ */
14895
+ get maxLatitudeDeg() {
14896
+ const ret = wasm.terrainstoretileindex_maxLatitudeDeg(this.__wbg_ptr);
14897
+ return ret;
14898
+ }
14899
+ /**
14900
+ * Eastern edge longitude, degrees.
14901
+ * @returns {number}
14902
+ */
14903
+ get maxLongitudeDeg() {
14904
+ const ret = wasm.terrainstoretileindex_maxLongitudeDeg(this.__wbg_ptr);
14905
+ return ret;
14906
+ }
14907
+ /**
14908
+ * Southern edge latitude, degrees.
14909
+ * @returns {number}
14910
+ */
14911
+ get minLatitudeDeg() {
14912
+ const ret = wasm.terrainstoretileindex_minLatitudeDeg(this.__wbg_ptr);
14913
+ return ret;
14914
+ }
14915
+ /**
14916
+ * Western edge longitude, degrees.
14917
+ * @returns {number}
14918
+ */
14919
+ get minLongitudeDeg() {
14920
+ const ret = wasm.terrainstoretileindex_minLongitudeDeg(this.__wbg_ptr);
14921
+ return ret;
14922
+ }
14923
+ /**
14924
+ * Vertical datum for this tile's orthometric posting payload.
14925
+ * @returns {VerticalDatum}
14926
+ */
14927
+ get verticalDatum() {
14928
+ const ret = wasm.terrainstoretileindex_verticalDatum(this.__wbg_ptr);
14929
+ return ret;
13851
14930
  }
13852
14931
  }
13853
- if (Symbol.dispose) SunMoon.prototype[Symbol.dispose] = SunMoon.prototype.free;
13854
- exports.SunMoon = SunMoon;
14932
+ if (Symbol.dispose) TerrainStoreTileIndex.prototype[Symbol.dispose] = TerrainStoreTileIndex.prototype.free;
14933
+ exports.TerrainStoreTileIndex = TerrainStoreTileIndex;
13855
14934
 
13856
14935
  /**
13857
14936
  * A named time scale. The JS value matches the variant order below.
@@ -14506,6 +15585,18 @@ class VelocitySolution {
14506
15585
  if (Symbol.dispose) VelocitySolution.prototype[Symbol.dispose] = VelocitySolution.prototype.free;
14507
15586
  exports.VelocitySolution = VelocitySolution;
14508
15587
 
15588
+ /**
15589
+ * Vertical datum carried by a terrain store.
15590
+ * @enum {0}
15591
+ */
15592
+ const VerticalDatum = Object.freeze({
15593
+ /**
15594
+ * Orthometric height `H` in metres above the EGM96 mean sea level geoid.
15595
+ */
15596
+ Egm96MslOrthometric: 0, "0": "Egm96MslOrthometric",
15597
+ });
15598
+ exports.VerticalDatum = VerticalDatum;
15599
+
14509
15600
  /**
14510
15601
  * Per-epoch topocentric visibility plus the dense pass list over the grid
14511
15602
  * window.
@@ -14802,6 +15893,28 @@ function acquire(samples, prn, options) {
14802
15893
  }
14803
15894
  exports.acquire = acquire;
14804
15895
 
15896
+ /**
15897
+ * Plain non-overlapping Allan deviation for explicit averaging factors.
15898
+ *
15899
+ * `series` is `{ kind, values }`, where `kind` is `"phaseSeconds"` or
15900
+ * `"fractionalFrequency"` and `values` are phase seconds or dimensionless
15901
+ * fractional-frequency samples. `tau0S` is the sample interval in seconds.
15902
+ * `averagingFactors` is an array of positive integer `m` values. Returns
15903
+ * `{ tauS, deviation, n }`.
15904
+ * @param {any} series
15905
+ * @param {number} tau0_s
15906
+ * @param {any} averaging_factors
15907
+ * @returns {any}
15908
+ */
15909
+ function allanDeviation(series, tau0_s, averaging_factors) {
15910
+ const ret = wasm.allanDeviation(series, tau0_s, averaging_factors);
15911
+ if (ret[2]) {
15912
+ throw takeFromExternrefTable0(ret[1]);
15913
+ }
15914
+ return takeFromExternrefTable0(ret[0]);
15915
+ }
15916
+ exports.allanDeviation = allanDeviation;
15917
+
14805
15918
  /**
14806
15919
  * On-sky angle in degrees between two direction vectors.
14807
15920
  * @param {Float64Array} a
@@ -14838,6 +15951,68 @@ function angularSeparationCoords(a_lon_deg, a_lat_deg, b_lon_deg, b_lat_deg) {
14838
15951
  }
14839
15952
  exports.angularSeparationCoords = angularSeparationCoords;
14840
15953
 
15954
+ /**
15955
+ * Run ARAIM MHSS protection-level computation.
15956
+ *
15957
+ * `geometry.rows` contains satellite IDs, ECEF line-of-sight unit vectors,
15958
+ * optional constellation labels, and elevations in radians. `receiver` is WGS84
15959
+ * geodetic radians plus ellipsoidal height meters. `ism` contains
15960
+ * constellation defaults and optional satellite overrides. Satellite models may
15961
+ * provide paired `effectiveSigmaIntM` and `effectiveSigmaAccM` fields; omit both
15962
+ * to let the core derive them from elevation. `allocation` may be omitted to use
15963
+ * `araimLpv200Allocation()`. Returned `hplM`, `vplM`, `sigmaAccHM`,
15964
+ * `sigmaAccVM`, `emtM`, and per-mode ENU arrays are meters.
15965
+ * @param {any} geometry
15966
+ * @param {any} ism
15967
+ * @param {any} allocation
15968
+ * @returns {any}
15969
+ */
15970
+ function araim(geometry, ism, allocation) {
15971
+ const ret = wasm.araim(geometry, ism, allocation);
15972
+ if (ret[2]) {
15973
+ throw takeFromExternrefTable0(ret[1]);
15974
+ }
15975
+ return takeFromExternrefTable0(ret[0]);
15976
+ }
15977
+ exports.araim = araim;
15978
+
15979
+ /**
15980
+ * Enumerate ARAIM fault hypotheses for the given geometry, ISM, and allocation.
15981
+ *
15982
+ * Inputs mirror `araim`. The returned priors are probabilities. Excluded
15983
+ * satellites are string tokens such as `"G01"`, and excluded constellations are
15984
+ * labels such as `"GPS"`.
15985
+ * @param {any} geometry
15986
+ * @param {any} ism
15987
+ * @param {any} allocation
15988
+ * @returns {any}
15989
+ */
15990
+ function araimFaultModes(geometry, ism, allocation) {
15991
+ const ret = wasm.araimFaultModes(geometry, ism, allocation);
15992
+ if (ret[2]) {
15993
+ throw takeFromExternrefTable0(ret[1]);
15994
+ }
15995
+ return takeFromExternrefTable0(ret[0]);
15996
+ }
15997
+ exports.araimFaultModes = araimFaultModes;
15998
+
15999
+ /**
16000
+ * LPV-200 ARAIM integrity and continuity allocation.
16001
+ *
16002
+ * The returned object can be passed to `araim`. Probability fields are
16003
+ * dimensionless, `pEmt` defaults to `1e-5`, and `maxFaultOrder` is an integer
16004
+ * fault order.
16005
+ * @returns {any}
16006
+ */
16007
+ function araimLpv200Allocation() {
16008
+ const ret = wasm.araimLpv200Allocation();
16009
+ if (ret[2]) {
16010
+ throw takeFromExternrefTable0(ret[1]);
16011
+ }
16012
+ return takeFromExternrefTable0(ret[0]);
16013
+ }
16014
+ exports.araimLpv200Allocation = araimLpv200Allocation;
16015
+
14841
16016
  /**
14842
16017
  * Evaluate NRLMSISE-00 neutral-atmosphere density and temperature.
14843
16018
  *
@@ -15173,6 +16348,29 @@ function collisionProbability(object1, object2, hard_body_radius_km, method) {
15173
16348
  }
15174
16349
  exports.collisionProbability = collisionProbability;
15175
16350
 
16351
+ /**
16352
+ * Compute one or more Allan-family curves with a selected tau grid and gap
16353
+ * policy.
16354
+ *
16355
+ * `input` is `{ series, tau0S, options? }`. `series.kind` may be
16356
+ * `"phaseSeconds"`, `"fractionalFrequency"`, `"phaseSecondsWithGaps"`, or
16357
+ * `"fractionalFrequencyWithGaps"`; gap series use `null` for missing samples.
16358
+ * `options.estimators` is `"standard"`, `"all"`, `"none"`, or a boolean flag
16359
+ * object. `options.tauGrid` is `"octave"`, `"all"`, or
16360
+ * `{ kind: "explicit", averagingFactors }`. `tau0S` and all returned `tauS`
16361
+ * values are seconds.
16362
+ * @param {any} input
16363
+ * @returns {any}
16364
+ */
16365
+ function computeAllanDeviations(input) {
16366
+ const ret = wasm.computeAllanDeviations(input);
16367
+ if (ret[2]) {
16368
+ throw takeFromExternrefTable0(ret[1]);
16369
+ }
16370
+ return takeFromExternrefTable0(ret[0]);
16371
+ }
16372
+ exports.computeAllanDeviations = computeAllanDeviations;
16373
+
15176
16374
  /**
15177
16375
  * Coherently correlate interleaved IQ samples against a GPS C/A PRN replica.
15178
16376
  * `iq` is `[i0, q0, i1, q1, ...]`.
@@ -15443,6 +16641,12 @@ function decodeRtcmStream(bytes) {
15443
16641
  exports.decodeRtcmStream = decodeRtcmStream;
15444
16642
 
15445
16643
  /**
16644
+ * Decode a raw SBAS message.
16645
+ *
16646
+ * `form` is `"framed250"` for a 32-byte message with CRC or `"body226"` for a
16647
+ * 29-byte body. The result contains `messageType`, `form`, legacy debug
16648
+ * `kind`, and `message`, a structured decoded payload. Parse failures are
16649
+ * thrown as `Error`.
15446
16650
  * @param {Uint8Array} bytes
15447
16651
  * @param {string | null} [form]
15448
16652
  * @returns {any}
@@ -15688,6 +16892,27 @@ function dopplerToRangeRate(doppler_hz, carrier_hz) {
15688
16892
  }
15689
16893
  exports.dopplerToRangeRate = dopplerToRangeRate;
15690
16894
 
16895
+ /**
16896
+ * Convert a DTED tile tree into canonical memory-mappable terrain store bytes.
16897
+ *
16898
+ * The returned `Uint8Array` can be passed to [`MmapTerrain.fromBytes`] or
16899
+ * [`MmapTerrain.fromVec`]. Posting payloads are decoded orthometric metres.
16900
+ * @param {string} root
16901
+ * @returns {Uint8Array}
16902
+ */
16903
+ function dtedTreeToMmapStore(root) {
16904
+ const ptr0 = passStringToWasm0(root, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
16905
+ const len0 = WASM_VECTOR_LEN;
16906
+ const ret = wasm.dtedTreeToMmapStore(ptr0, len0);
16907
+ if (ret[3]) {
16908
+ throw takeFromExternrefTable0(ret[2]);
16909
+ }
16910
+ var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
16911
+ wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
16912
+ return v2;
16913
+ }
16914
+ exports.dtedTreeToMmapStore = dtedTreeToMmapStore;
16915
+
15691
16916
  /**
15692
16917
  * Angular radius in degrees of Earth as seen from each satellite position.
15693
16918
  * @param {Float64Array} satellite_position_km
@@ -16973,6 +18198,26 @@ function gpsUtcOffsetS(year, month, day) {
16973
18198
  }
16974
18199
  exports.gpsUtcOffsetS = gpsUtcOffsetS;
16975
18200
 
18201
+ /**
18202
+ * Overlapping Hadamard deviation for explicit averaging factors.
18203
+ *
18204
+ * `series` is `{ kind, values }`, `tau0S` is seconds, and
18205
+ * `averagingFactors` contains positive integer `m` values. Returns
18206
+ * `{ tauS, deviation, n }`.
18207
+ * @param {any} series
18208
+ * @param {number} tau0_s
18209
+ * @param {any} averaging_factors
18210
+ * @returns {any}
18211
+ */
18212
+ function hadamardDeviation(series, tau0_s, averaging_factors) {
18213
+ const ret = wasm.hadamardDeviation(series, tau0_s, averaging_factors);
18214
+ if (ret[2]) {
18215
+ throw takeFromExternrefTable0(ret[1]);
18216
+ }
18217
+ return takeFromExternrefTable0(ret[0]);
18218
+ }
18219
+ exports.hadamardDeviation = hadamardDeviation;
18220
+
16976
18221
  /**
16977
18222
  * Trace of the Gauss-Newton Hessian approximation `J^T J`: the sum of the
16978
18223
  * squared column norms of the Jacobian, with no inverse formed.
@@ -17086,6 +18331,49 @@ function iodHerrickGibbs(r1, r2, r3, jd1, jd2, jd3) {
17086
18331
  }
17087
18332
  exports.iodHerrickGibbs = iodHerrickGibbs;
17088
18333
 
18334
+ /**
18335
+ * Build an IONEX vertical-TEC product from flat node samples.
18336
+ *
18337
+ * `samples` is an array of `{ epochJ2000S, latDeg, lonDeg, vtecTecu,
18338
+ * rmsTecu? }` objects. Epochs are integer seconds since J2000, coordinates are
18339
+ * degrees, and TEC/RMS values are TECU. `shellHeightKm` and `baseRadiusKm` are
18340
+ * kilometers. Validation errors from the core sample builder are thrown as
18341
+ * `RangeError`.
18342
+ * @param {any} samples
18343
+ * @param {number} shell_height_km
18344
+ * @param {number} base_radius_km
18345
+ * @param {number} exponent
18346
+ * @returns {Ionex}
18347
+ */
18348
+ function ionexFromNodeSamples(samples, shell_height_km, base_radius_km, exponent) {
18349
+ const ret = wasm.ionexFromNodeSamples(samples, shell_height_km, base_radius_km, exponent);
18350
+ if (ret[2]) {
18351
+ throw takeFromExternrefTable0(ret[1]);
18352
+ }
18353
+ return Ionex.__wrap(ret[0]);
18354
+ }
18355
+ exports.ionexFromNodeSamples = ionexFromNodeSamples;
18356
+
18357
+ /**
18358
+ * Build an IONEX vertical-TEC product from full-grid samples.
18359
+ *
18360
+ * `samples.mapEpochsJ2000S` are integer seconds since J2000. Latitude and
18361
+ * longitude nodes and `dlatDeg` / `dlonDeg` are degrees. `tecMaps` and
18362
+ * `rmsMaps` are TECU and indexed `[map][iLat][iLon]`. The shell height and
18363
+ * base radius are kilometers. Validation errors from the core sample builder
18364
+ * are thrown as `RangeError`.
18365
+ * @param {any} samples
18366
+ * @returns {Ionex}
18367
+ */
18368
+ function ionexFromSamples(samples) {
18369
+ const ret = wasm.ionexFromSamples(samples);
18370
+ if (ret[2]) {
18371
+ throw takeFromExternrefTable0(ret[1]);
18372
+ }
18373
+ return Ionex.__wrap(ret[0]);
18374
+ }
18375
+ exports.ionexFromSamples = ionexFromSamples;
18376
+
17089
18377
  /**
17090
18378
  * Ionosphere-free code or meter-valued phase combination, metres.
17091
18379
  * @param {number} obs1_m
@@ -18038,6 +19326,26 @@ function meridianTransitsSpk(spk, body, station, start_unix_us, end_unix_us, ste
18038
19326
  }
18039
19327
  exports.meridianTransitsSpk = meridianTransitsSpk;
18040
19328
 
19329
+ /**
19330
+ * Modified Allan deviation for explicit averaging factors.
19331
+ *
19332
+ * `series` is `{ kind, values }`, `tau0S` is seconds, and
19333
+ * `averagingFactors` contains positive integer `m` values. Returns
19334
+ * `{ tauS, deviation, n }`.
19335
+ * @param {any} series
19336
+ * @param {number} tau0_s
19337
+ * @param {any} averaging_factors
19338
+ * @returns {any}
19339
+ */
19340
+ function modifiedAdev(series, tau0_s, averaging_factors) {
19341
+ const ret = wasm.modifiedAdev(series, tau0_s, averaging_factors);
19342
+ if (ret[2]) {
19343
+ throw takeFromExternrefTable0(ret[1]);
19344
+ }
19345
+ return takeFromExternrefTable0(ret[0]);
19346
+ }
19347
+ exports.modifiedAdev = modifiedAdev;
19348
+
18041
19349
  /**
18042
19350
  * Mean, variance, skewness, and excess kurtosis of a residual set in one pass.
18043
19351
  *
@@ -18435,7 +19743,7 @@ exports.observationKindLabel = observationKindLabel;
18435
19743
  * Aggregate observation QC for a parsed RINEX OBS product.
18436
19744
  * @param {RinexObs} obs
18437
19745
  * @param {any} options
18438
- * @returns {any}
19746
+ * @returns {ObservationQcReport}
18439
19747
  */
18440
19748
  function observationQc(obs, options) {
18441
19749
  _assertClass(obs, RinexObs);
@@ -18443,7 +19751,7 @@ function observationQc(obs, options) {
18443
19751
  if (ret[2]) {
18444
19752
  throw takeFromExternrefTable0(ret[1]);
18445
19753
  }
18446
- return takeFromExternrefTable0(ret[0]);
19754
+ return ObservationQcReport.__wrap(ret[0]);
18447
19755
  }
18448
19756
  exports.observationQc = observationQc;
18449
19757
 
@@ -18559,6 +19867,26 @@ function orthometricHeightM(ellipsoidal_height_m, lat_rad, lon_rad) {
18559
19867
  }
18560
19868
  exports.orthometricHeightM = orthometricHeightM;
18561
19869
 
19870
+ /**
19871
+ * Fully overlapping Allan deviation for explicit averaging factors.
19872
+ *
19873
+ * `series` is `{ kind, values }`, `tau0S` is seconds, and
19874
+ * `averagingFactors` contains positive integer `m` values. Returns
19875
+ * `{ tauS, deviation, n }`.
19876
+ * @param {any} series
19877
+ * @param {number} tau0_s
19878
+ * @param {any} averaging_factors
19879
+ * @returns {any}
19880
+ */
19881
+ function overlappingAdev(series, tau0_s, averaging_factors) {
19882
+ const ret = wasm.overlappingAdev(series, tau0_s, averaging_factors);
19883
+ if (ret[2]) {
19884
+ throw takeFromExternrefTable0(ret[1]);
19885
+ }
19886
+ return takeFromExternrefTable0(ret[0]);
19887
+ }
19888
+ exports.overlappingAdev = overlappingAdev;
19889
+
18562
19890
  /**
18563
19891
  * Parallactic angle (degrees) of a target at a station.
18564
19892
  *
@@ -19777,6 +21105,23 @@ function sampleSp3Ephemeris(sp3, satellites, start_j2000_s, stop_j2000_s, step_s
19777
21105
  }
19778
21106
  exports.sampleSp3Ephemeris = sampleSp3Ephemeris;
19779
21107
 
21108
+ /**
21109
+ * Convert an SBAS satellite token such as `"S29"` to broadcast PRN number
21110
+ * such as `129`. Returns `null` for non-SBAS satellites.
21111
+ * @param {string} sat
21112
+ * @returns {any}
21113
+ */
21114
+ function satToSbasPrn(sat) {
21115
+ const ptr0 = passStringToWasm0(sat, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
21116
+ const len0 = WASM_VECTOR_LEN;
21117
+ const ret = wasm.satToSbasPrn(ptr0, len0);
21118
+ if (ret[2]) {
21119
+ throw takeFromExternrefTable0(ret[1]);
21120
+ }
21121
+ return takeFromExternrefTable0(ret[0]);
21122
+ }
21123
+ exports.satToSbasPrn = satToSbasPrn;
21124
+
19780
21125
  /**
19781
21126
  * Apparent visual magnitude of a sunlit body from a diffuse-sphere phase law.
19782
21127
  *
@@ -19801,6 +21146,10 @@ function satelliteVisualMagnitude(range_km, phase_angle_deg, standard_magnitude,
19801
21146
  exports.satelliteVisualMagnitude = satelliteVisualMagnitude;
19802
21147
 
19803
21148
  /**
21149
+ * SBAS-corrected broadcast satellite position and clock.
21150
+ *
21151
+ * Position is ECEF meters and clock is seconds at `tJ2000S`, seconds since
21152
+ * J2000. Returns `null` when the selected SBAS mode cannot provide a state.
19804
21153
  * @param {BroadcastEphemeris} broadcast
19805
21154
  * @param {SbasCorrectionStore} store
19806
21155
  * @param {string} geo
@@ -19826,6 +21175,18 @@ function sbasCorrectedState(broadcast, store, geo, sat, t_j2000_s, mode) {
19826
21175
  }
19827
21176
  exports.sbasCorrectedState = sbasCorrectedState;
19828
21177
 
21178
+ /**
21179
+ * Convert an SBAS broadcast PRN number such as `129` to an SBAS satellite
21180
+ * token such as `"S29"`. Returns `null` when the PRN is outside the SBAS range.
21181
+ * @param {number} broadcast_prn
21182
+ * @returns {any}
21183
+ */
21184
+ function sbasPrnToSat(broadcast_prn) {
21185
+ const ret = wasm.sbasPrnToSat(broadcast_prn);
21186
+ return ret;
21187
+ }
21188
+ exports.sbasPrnToSat = sbasPrnToSat;
21189
+
19829
21190
  /**
19830
21191
  * Screen a primary satellite against a secondary TLE catalog for threshold TCAs.
19831
21192
  *
@@ -20410,6 +21771,11 @@ function solveRtkFloat(config) {
20410
21771
  exports.solveRtkFloat = solveRtkFloat;
20411
21772
 
20412
21773
  /**
21774
+ * Solve SPP using an SBAS-corrected broadcast source and optional SBAS iono.
21775
+ *
21776
+ * The returned solution uses the same units as `solveSpp`: ECEF meters,
21777
+ * receiver clock seconds, residual meters, and optional geodetic radians plus
21778
+ * ellipsoidal height meters.
20413
21779
  * @param {BroadcastEphemeris} broadcast
20414
21780
  * @param {SbasCorrectionStore} store
20415
21781
  * @param {string} geo
@@ -20812,6 +22178,39 @@ function terminatorLatitudeDeg(sub_solar_latitude_deg, sub_solar_longitude_deg,
20812
22178
  }
20813
22179
  exports.terminatorLatitudeDeg = terminatorLatitudeDeg;
20814
22180
 
22181
+ /**
22182
+ * Return an FNV-1a checksum for terrain store bytes.
22183
+ * @param {Uint8Array} bytes
22184
+ * @returns {bigint}
22185
+ */
22186
+ function terrainStoreChecksum64(bytes) {
22187
+ const ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc);
22188
+ const len0 = WASM_VECTOR_LEN;
22189
+ const ret = wasm.terrainStoreChecksum64(ptr0, len0);
22190
+ return BigInt.asUintN(64, ret);
22191
+ }
22192
+ exports.terrainStoreChecksum64 = terrainStoreChecksum64;
22193
+
22194
+ /**
22195
+ * Time deviation for explicit averaging factors.
22196
+ *
22197
+ * `series` is `{ kind, values }`, `tau0S` is seconds, and
22198
+ * `averagingFactors` contains positive integer `m` values. Returns
22199
+ * `{ tauS, deviation, n }`.
22200
+ * @param {any} series
22201
+ * @param {number} tau0_s
22202
+ * @param {any} averaging_factors
22203
+ * @returns {any}
22204
+ */
22205
+ function timeDeviation(series, tau0_s, averaging_factors) {
22206
+ const ret = wasm.timeDeviation(series, tau0_s, averaging_factors);
22207
+ if (ret[2]) {
22208
+ throw takeFromExternrefTable0(ret[1]);
22209
+ }
22210
+ return takeFromExternrefTable0(ret[0]);
22211
+ }
22212
+ exports.timeDeviation = timeDeviation;
22213
+
20815
22214
  /**
20816
22215
  * Short uppercase identifier for a time scale, e.g. `"GPST"`.
20817
22216
  * @param {TimeScale} scale
@@ -21181,6 +22580,23 @@ function wideLaneWavelength(f1_hz, f2_hz) {
21181
22580
  return ret[0];
21182
22581
  }
21183
22582
  exports.wideLaneWavelength = wideLaneWavelength;
22583
+
22584
+ /**
22585
+ * Convert a DTED tile tree and write canonical terrain store bytes to a path.
22586
+ * @param {string} root
22587
+ * @param {string} out_path
22588
+ */
22589
+ function writeDtedTreeToMmapStore(root, out_path) {
22590
+ const ptr0 = passStringToWasm0(root, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
22591
+ const len0 = WASM_VECTOR_LEN;
22592
+ const ptr1 = passStringToWasm0(out_path, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
22593
+ const len1 = WASM_VECTOR_LEN;
22594
+ const ret = wasm.writeDtedTreeToMmapStore(ptr0, len0, ptr1, len1);
22595
+ if (ret[1]) {
22596
+ throw takeFromExternrefTable0(ret[0]);
22597
+ }
22598
+ }
22599
+ exports.writeDtedTreeToMmapStore = writeDtedTreeToMmapStore;
21184
22600
  function __wbg_get_imports() {
21185
22601
  const import0 = {
21186
22602
  __proto__: null,
@@ -21561,6 +22977,10 @@ function __wbg_get_imports() {
21561
22977
  const ret = SpkSegment.__wrap(arg0);
21562
22978
  return ret;
21563
22979
  },
22980
+ __wbg_terrainstoretileindex_new: function(arg0) {
22981
+ const ret = TerrainStoreTileIndex.__wrap(arg0);
22982
+ return ret;
22983
+ },
21564
22984
  __wbg_tle_unwrap: function(arg0) {
21565
22985
  const ret = Tle.__unwrap(arg0);
21566
22986
  return ret;
@@ -21723,6 +23143,12 @@ const DragForceFinalization = (typeof FinalizationRegistry === 'undefined')
21723
23143
  const DtedTerrainFinalization = (typeof FinalizationRegistry === 'undefined')
21724
23144
  ? { register: () => {}, unregister: () => {} }
21725
23145
  : new FinalizationRegistry(ptr => wasm.__wbg_dtedterrain_free(ptr, 1));
23146
+ const Egm96FifteenMinuteGeoidFinalization = (typeof FinalizationRegistry === 'undefined')
23147
+ ? { register: () => {}, unregister: () => {} }
23148
+ : new FinalizationRegistry(ptr => wasm.__wbg_egm96fifteenminutegeoid_free(ptr, 1));
23149
+ const EllipsoidalHeightMFinalization = (typeof FinalizationRegistry === 'undefined')
23150
+ ? { register: () => {}, unregister: () => {} }
23151
+ : new FinalizationRegistry(ptr => wasm.__wbg_ellipsoidalheightm_free(ptr, 1));
21726
23152
  const EncounterFrameFinalization = (typeof FinalizationRegistry === 'undefined')
21727
23153
  ? { register: () => {}, unregister: () => {} }
21728
23154
  : new FinalizationRegistry(ptr => wasm.__wbg_encounterframe_free(ptr, 1));
@@ -21831,6 +23257,9 @@ const LookAnglesFinalization = (typeof FinalizationRegistry === 'undefined')
21831
23257
  const MappingFactorsFinalization = (typeof FinalizationRegistry === 'undefined')
21832
23258
  ? { register: () => {}, unregister: () => {} }
21833
23259
  : new FinalizationRegistry(ptr => wasm.__wbg_mappingfactors_free(ptr, 1));
23260
+ const MmapTerrainFinalization = (typeof FinalizationRegistry === 'undefined')
23261
+ ? { register: () => {}, unregister: () => {} }
23262
+ : new FinalizationRegistry(ptr => wasm.__wbg_mmapterrain_free(ptr, 1));
21834
23263
  const MoonElevationCrossingFinalization = (typeof FinalizationRegistry === 'undefined')
21835
23264
  ? { register: () => {}, unregister: () => {} }
21836
23265
  : new FinalizationRegistry(ptr => wasm.__wbg_moonelevationcrossing_free(ptr, 1));
@@ -21867,6 +23296,9 @@ const ObsPhaseShiftFinalization = (typeof FinalizationRegistry === 'undefined')
21867
23296
  const ObservationFilterFinalization = (typeof FinalizationRegistry === 'undefined')
21868
23297
  ? { register: () => {}, unregister: () => {} }
21869
23298
  : new FinalizationRegistry(ptr => wasm.__wbg_observationfilter_free(ptr, 1));
23299
+ const ObservationQcReportFinalization = (typeof FinalizationRegistry === 'undefined')
23300
+ ? { register: () => {}, unregister: () => {} }
23301
+ : new FinalizationRegistry(ptr => wasm.__wbg_observationqcreport_free(ptr, 1));
21870
23302
  const ObservationValueSeriesFinalization = (typeof FinalizationRegistry === 'undefined')
21871
23303
  ? { register: () => {}, unregister: () => {} }
21872
23304
  : new FinalizationRegistry(ptr => wasm.__wbg_observationvalueseries_free(ptr, 1));
@@ -21912,6 +23344,9 @@ const OpmSpacecraftFinalization = (typeof FinalizationRegistry === 'undefined')
21912
23344
  const OpmStateFinalization = (typeof FinalizationRegistry === 'undefined')
21913
23345
  ? { register: () => {}, unregister: () => {} }
21914
23346
  : new FinalizationRegistry(ptr => wasm.__wbg_opmstate_free(ptr, 1));
23347
+ const OrthometricHeightMFinalization = (typeof FinalizationRegistry === 'undefined')
23348
+ ? { register: () => {}, unregister: () => {} }
23349
+ : new FinalizationRegistry(ptr => wasm.__wbg_orthometricheightm_free(ptr, 1));
21915
23350
  const ParsedTleFileFinalization = (typeof FinalizationRegistry === 'undefined')
21916
23351
  ? { register: () => {}, unregister: () => {} }
21917
23352
  : new FinalizationRegistry(ptr => wasm.__wbg_parsedtlefile_free(ptr, 1));
@@ -22053,6 +23488,12 @@ const SsrCorrectionStoreFinalization = (typeof FinalizationRegistry === 'undefin
22053
23488
  const SunMoonFinalization = (typeof FinalizationRegistry === 'undefined')
22054
23489
  ? { register: () => {}, unregister: () => {} }
22055
23490
  : new FinalizationRegistry(ptr => wasm.__wbg_sunmoon_free(ptr, 1));
23491
+ const TerrainGeoidModelFinalization = (typeof FinalizationRegistry === 'undefined')
23492
+ ? { register: () => {}, unregister: () => {} }
23493
+ : new FinalizationRegistry(ptr => wasm.__wbg_terraingeoidmodel_free(ptr, 1));
23494
+ const TerrainStoreTileIndexFinalization = (typeof FinalizationRegistry === 'undefined')
23495
+ ? { register: () => {}, unregister: () => {} }
23496
+ : new FinalizationRegistry(ptr => wasm.__wbg_terrainstoretileindex_free(ptr, 1));
22056
23497
  const TleFinalization = (typeof FinalizationRegistry === 'undefined')
22057
23498
  ? { register: () => {}, unregister: () => {} }
22058
23499
  : new FinalizationRegistry(ptr => wasm.__wbg_tle_free(ptr, 1));