@neilberkman/sidereon 0.11.1 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/pkg/sidereon.js CHANGED
@@ -875,6 +875,43 @@ export class BroadcastEphemeris {
875
875
  const ret = wasm.broadcastephemeris_leapSeconds(this.__wbg_ptr);
876
876
  return ret[0] === 0 ? undefined : ret[1];
877
877
  }
878
+ /**
879
+ * Query ECEF position and clock for parallel satellite and epoch arrays
880
+ * against this parsed broadcast ephemeris store.
881
+ *
882
+ * `satellites[i]` is evaluated at `epochsJ2000S[i]`, where epochs are
883
+ * seconds since J2000 in GPST for GNSS broadcast records. The returned
884
+ * plain object has aligned `positionsEcefM`, `clocksS`, `statuses`, and
885
+ * `elementResults` arrays.
886
+ * @param {any} satellites
887
+ * @param {any} epochs_j2000_s
888
+ * @returns {any}
889
+ */
890
+ observableStatesAtJ2000S(satellites, epochs_j2000_s) {
891
+ const ret = wasm.broadcastephemeris_observableStatesAtJ2000S(this.__wbg_ptr, satellites, epochs_j2000_s);
892
+ if (ret[2]) {
893
+ throw takeFromExternrefTable0(ret[1]);
894
+ }
895
+ return takeFromExternrefTable0(ret[0]);
896
+ }
897
+ /**
898
+ * Query ECEF position and clock for many satellites at one epoch against
899
+ * this parsed broadcast ephemeris store.
900
+ *
901
+ * `epochJ2000S` is seconds since J2000 in GPST. The returned object follows
902
+ * the same contract as
903
+ * [`observableStatesAtJ2000S`](Self::observable_states_at_j2000_s).
904
+ * @param {any} satellites
905
+ * @param {number} epoch_j2000_s
906
+ * @returns {any}
907
+ */
908
+ observableStatesAtSharedJ2000S(satellites, epoch_j2000_s) {
909
+ const ret = wasm.broadcastephemeris_observableStatesAtSharedJ2000S(this.__wbg_ptr, satellites, epoch_j2000_s);
910
+ if (ret[2]) {
911
+ throw takeFromExternrefTable0(ret[1]);
912
+ }
913
+ return takeFromExternrefTable0(ret[0]);
914
+ }
878
915
  /**
879
916
  * Number of usable GPS, Galileo, and BeiDou records.
880
917
  * @returns {number}
@@ -3791,6 +3828,12 @@ export class DragForce {
3791
3828
  }
3792
3829
  if (Symbol.dispose) DragForce.prototype[Symbol.dispose] = DragForce.prototype.free;
3793
3830
 
3831
+ /**
3832
+ * A DTED terrain tile cache rooted at a directory of DTED Level 2 files.
3833
+ *
3834
+ * Heights are ORTHOMETRIC terrain elevations in meters. Point order is always
3835
+ * longitude first, then latitude, both in degrees.
3836
+ */
3794
3837
  export class DtedTerrain {
3795
3838
  __destroy_into_raw() {
3796
3839
  const ptr = this.__wbg_ptr;
@@ -3803,6 +3846,30 @@ export class DtedTerrain {
3803
3846
  wasm.__wbg_dtedterrain_free(ptr, 0);
3804
3847
  }
3805
3848
  /**
3849
+ * Batch terrain heights in ORTHOMETRIC meters for longitude-first points.
3850
+ *
3851
+ * `points` is an array of `[longitudeDeg, latitudeDeg]` pairs or
3852
+ * `{ longitudeDeg, latitudeDeg }` objects. `options.interpolation` is
3853
+ * `"bilinear"`, `"nearest"`, or `"nearestPosting"`. The return value is
3854
+ * index-aligned to `points`; each entry is `{ ok: true, heightM }` or
3855
+ * `{ ok: false, error }`. Missing tiles evaluate to `0.0`.
3856
+ * @param {any} points
3857
+ * @param {any} options
3858
+ * @returns {any}
3859
+ */
3860
+ heightBatch(points, options) {
3861
+ const ret = wasm.dtedterrain_heightBatch(this.__wbg_ptr, points, options);
3862
+ if (ret[2]) {
3863
+ throw takeFromExternrefTable0(ret[1]);
3864
+ }
3865
+ return takeFromExternrefTable0(ret[0]);
3866
+ }
3867
+ /**
3868
+ * Terrain height in ORTHOMETRIC meters at `(longitudeDeg, latitudeDeg)`.
3869
+ *
3870
+ * Longitude and latitude are degrees. The lookup uses bilinear
3871
+ * interpolation. Missing tiles evaluate to `0.0`, matching the core DTED
3872
+ * fallback.
3806
3873
  * @param {number} longitude_deg
3807
3874
  * @param {number} latitude_deg
3808
3875
  * @returns {number}
@@ -3815,6 +3882,11 @@ export class DtedTerrain {
3815
3882
  return ret[0];
3816
3883
  }
3817
3884
  /**
3885
+ * Terrain height in ORTHOMETRIC meters at `(longitudeDeg, latitudeDeg)`.
3886
+ *
3887
+ * Longitude and latitude are degrees. `options.interpolation` is
3888
+ * `"bilinear"`, `"nearest"`, or `"nearestPosting"`. Missing tiles evaluate
3889
+ * to `0.0`, matching the core DTED fallback.
3818
3890
  * @param {number} longitude_deg
3819
3891
  * @param {number} latitude_deg
3820
3892
  * @param {any} options
@@ -3828,6 +3900,10 @@ export class DtedTerrain {
3828
3900
  return ret[0];
3829
3901
  }
3830
3902
  /**
3903
+ * Create a DTED terrain reader rooted at `root`.
3904
+ *
3905
+ * The root may contain tile files directly or the nested block layout the
3906
+ * core reader recognizes. Height results are ORTHOMETRIC meters.
3831
3907
  * @param {string} root
3832
3908
  */
3833
3909
  constructor(root) {
@@ -3841,6 +3917,99 @@ export class DtedTerrain {
3841
3917
  }
3842
3918
  if (Symbol.dispose) DtedTerrain.prototype[Symbol.dispose] = DtedTerrain.prototype.free;
3843
3919
 
3920
+ /**
3921
+ * Loaded EGM96 15-arcminute geoid grid for explicit terrain datum conversion.
3922
+ */
3923
+ export class Egm96FifteenMinuteGeoid {
3924
+ static __wrap(ptr) {
3925
+ const obj = Object.create(Egm96FifteenMinuteGeoid.prototype);
3926
+ obj.__wbg_ptr = ptr;
3927
+ Egm96FifteenMinuteGeoidFinalization.register(obj, obj.__wbg_ptr, obj);
3928
+ return obj;
3929
+ }
3930
+ __destroy_into_raw() {
3931
+ const ptr = this.__wbg_ptr;
3932
+ this.__wbg_ptr = 0;
3933
+ Egm96FifteenMinuteGeoidFinalization.unregister(this);
3934
+ return ptr;
3935
+ }
3936
+ free() {
3937
+ const ptr = this.__destroy_into_raw();
3938
+ wasm.__wbg_egm96fifteenminutegeoid_free(ptr, 0);
3939
+ }
3940
+ /**
3941
+ * Load `WW15MGH.DAC` bytes as an EGM96 15-arcminute geoid grid.
3942
+ * @param {Uint8Array} bytes
3943
+ * @returns {Egm96FifteenMinuteGeoid}
3944
+ */
3945
+ static fromWw15mghDacBytes(bytes) {
3946
+ const ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc);
3947
+ const len0 = WASM_VECTOR_LEN;
3948
+ const ret = wasm.egm96fifteenminutegeoid_fromWw15mghDacBytes(ptr0, len0);
3949
+ if (ret[2]) {
3950
+ throw takeFromExternrefTable0(ret[1]);
3951
+ }
3952
+ return Egm96FifteenMinuteGeoid.__wrap(ret[0]);
3953
+ }
3954
+ /**
3955
+ * Read and load `WW15MGH.DAC` from disk. A missing file throws a typed
3956
+ * `MissingEgm96Dac` error with `path` and `remediation` fields.
3957
+ * @param {string} path
3958
+ * @returns {Egm96FifteenMinuteGeoid}
3959
+ */
3960
+ static fromWw15mghDacPath(path) {
3961
+ const ptr0 = passStringToWasm0(path, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
3962
+ const len0 = WASM_VECTOR_LEN;
3963
+ const ret = wasm.egm96fifteenminutegeoid_fromWw15mghDacPath(ptr0, len0);
3964
+ if (ret[2]) {
3965
+ throw takeFromExternrefTable0(ret[1]);
3966
+ }
3967
+ return Egm96FifteenMinuteGeoid.__wrap(ret[0]);
3968
+ }
3969
+ }
3970
+ if (Symbol.dispose) Egm96FifteenMinuteGeoid.prototype[Symbol.dispose] = Egm96FifteenMinuteGeoid.prototype.free;
3971
+
3972
+ /**
3973
+ * Ellipsoidal height `h` in metres above the WGS84 reference ellipsoid.
3974
+ */
3975
+ export class EllipsoidalHeightM {
3976
+ static __wrap(ptr) {
3977
+ const obj = Object.create(EllipsoidalHeightM.prototype);
3978
+ obj.__wbg_ptr = ptr;
3979
+ EllipsoidalHeightMFinalization.register(obj, obj.__wbg_ptr, obj);
3980
+ return obj;
3981
+ }
3982
+ __destroy_into_raw() {
3983
+ const ptr = this.__wbg_ptr;
3984
+ this.__wbg_ptr = 0;
3985
+ EllipsoidalHeightMFinalization.unregister(this);
3986
+ return ptr;
3987
+ }
3988
+ free() {
3989
+ const ptr = this.__destroy_into_raw();
3990
+ wasm.__wbg_ellipsoidalheightm_free(ptr, 0);
3991
+ }
3992
+ /**
3993
+ * Build an ellipsoidal height `h` in metres.
3994
+ * @param {number} value_m
3995
+ */
3996
+ constructor(value_m) {
3997
+ const ret = wasm.ellipsoidalheightm_new(value_m);
3998
+ this.__wbg_ptr = ret;
3999
+ EllipsoidalHeightMFinalization.register(this, this.__wbg_ptr, this);
4000
+ return this;
4001
+ }
4002
+ /**
4003
+ * Ellipsoidal height `h`, metres above the WGS84 reference ellipsoid.
4004
+ * @returns {number}
4005
+ */
4006
+ get valueM() {
4007
+ const ret = wasm.ellipsoidalheightm_valueM(this.__wbg_ptr);
4008
+ return ret;
4009
+ }
4010
+ }
4011
+ if (Symbol.dispose) EllipsoidalHeightM.prototype[Symbol.dispose] = EllipsoidalHeightM.prototype.free;
4012
+
3844
4013
  /**
3845
4014
  * Orthonormal encounter frame built from two relative states.
3846
4015
  */
@@ -5456,6 +5625,24 @@ export class Ionex {
5456
5625
  const ret = wasm.ionex_baseRadiusKm(this.__wbg_ptr);
5457
5626
  return ret;
5458
5627
  }
5628
+ /**
5629
+ * Signed latitude grid step, degrees. Standard IONEX grids are
5630
+ * north-to-south, so this value is usually negative.
5631
+ * @returns {number}
5632
+ */
5633
+ get dlatDeg() {
5634
+ const ret = wasm.ionex_dlatDeg(this.__wbg_ptr);
5635
+ return ret;
5636
+ }
5637
+ /**
5638
+ * Signed longitude grid step, degrees. Standard IONEX grids are
5639
+ * west-to-east, so this value is usually positive.
5640
+ * @returns {number}
5641
+ */
5642
+ get dlonDeg() {
5643
+ const ret = wasm.ionex_dlonDeg(this.__wbg_ptr);
5644
+ return ret;
5645
+ }
5459
5646
  /**
5460
5647
  * The IONEX `EXPONENT` header field; the TEC scale is `10^exponent`.
5461
5648
  * @returns {number}
@@ -5529,6 +5716,36 @@ export class Ionex {
5529
5716
  }
5530
5717
  return ret[0];
5531
5718
  }
5719
+ /**
5720
+ * Extract the full IONEX vertical-TEC grids as plain sample data.
5721
+ *
5722
+ * Epochs are integer seconds since J2000. Latitude and longitude nodes and
5723
+ * grid steps are degrees. TEC and RMS maps are TECU and indexed
5724
+ * `[map][iLat][iLon]`. The shell height and base radius are kilometers.
5725
+ * @returns {any}
5726
+ */
5727
+ tecGridSamples() {
5728
+ const ret = wasm.ionex_tecGridSamples(this.__wbg_ptr);
5729
+ if (ret[2]) {
5730
+ throw takeFromExternrefTable0(ret[1]);
5731
+ }
5732
+ return takeFromExternrefTable0(ret[0]);
5733
+ }
5734
+ /**
5735
+ * Extract one IONEX vertical-TEC sample per grid node.
5736
+ *
5737
+ * Each sample is `{ epochJ2000S, latDeg, lonDeg, vtecTecu, rmsTecu }`.
5738
+ * Epochs are integer seconds since J2000, coordinates are degrees, and TEC
5739
+ * and RMS values are TECU.
5740
+ * @returns {any}
5741
+ */
5742
+ tecSamples() {
5743
+ const ret = wasm.ionex_tecSamples(this.__wbg_ptr);
5744
+ if (ret[2]) {
5745
+ throw takeFromExternrefTable0(ret[1]);
5746
+ }
5747
+ return takeFromExternrefTable0(ret[0]);
5748
+ }
5532
5749
  /**
5533
5750
  * Serialize to standard IONEX text. Deterministic: the same product always
5534
5751
  * produces byte-identical text, and re-parsing the output yields an equal
@@ -6831,119 +7048,368 @@ export class MappingFactors {
6831
7048
  if (Symbol.dispose) MappingFactors.prototype[Symbol.dispose] = MappingFactors.prototype.free;
6832
7049
 
6833
7050
  /**
6834
- * One refined Moon elevation threshold crossing (moonrise / moonset).
7051
+ * In-memory reader for memory-mappable terrain store bytes.
7052
+ *
7053
+ * Query results are orthometric terrain heights `H` in metres. Use the
7054
+ * ellipsoidal methods only when a geoid model is deliberately selected.
6835
7055
  */
6836
- export class MoonElevationCrossing {
7056
+ export class MmapTerrain {
6837
7057
  static __wrap(ptr) {
6838
- const obj = Object.create(MoonElevationCrossing.prototype);
7058
+ const obj = Object.create(MmapTerrain.prototype);
6839
7059
  obj.__wbg_ptr = ptr;
6840
- MoonElevationCrossingFinalization.register(obj, obj.__wbg_ptr, obj);
7060
+ MmapTerrainFinalization.register(obj, obj.__wbg_ptr, obj);
6841
7061
  return obj;
6842
7062
  }
6843
7063
  __destroy_into_raw() {
6844
7064
  const ptr = this.__wbg_ptr;
6845
7065
  this.__wbg_ptr = 0;
6846
- MoonElevationCrossingFinalization.unregister(this);
7066
+ MmapTerrainFinalization.unregister(this);
6847
7067
  return ptr;
6848
7068
  }
6849
7069
  free() {
6850
7070
  const ptr = this.__destroy_into_raw();
6851
- wasm.__wbg_moonelevationcrossing_free(ptr, 0);
7071
+ wasm.__wbg_mmapterrain_free(ptr, 0);
6852
7072
  }
6853
7073
  /**
6854
- * Topocentric Moon elevation at the refined instant, degrees.
6855
- * @returns {number}
7074
+ * FNV-1a checksum of the full terrain store byte span.
7075
+ * @returns {bigint}
6856
7076
  */
6857
- get elevationDeg() {
6858
- const ret = wasm.moonelevationcrossing_elevationDeg(this.__wbg_ptr);
6859
- return ret;
7077
+ checksum64() {
7078
+ const ret = wasm.mmapterrain_checksum64(this.__wbg_ptr);
7079
+ return BigInt.asUintN(64, ret);
6860
7080
  }
6861
7081
  /**
6862
- * Crossing direction: `"rising"` (moonrise) or `"setting"` (moonset).
6863
- * @returns {string}
7082
+ * Ellipsoidal height `h = H + N` in metres at `(longitudeDeg, latitudeDeg)`
7083
+ * using the embedded EGM96 1-degree geoid grid.
7084
+ * @param {number} longitude_deg
7085
+ * @param {number} latitude_deg
7086
+ * @returns {EllipsoidalHeightM}
6864
7087
  */
6865
- get kind() {
6866
- let deferred1_0;
6867
- let deferred1_1;
6868
- try {
6869
- const ret = wasm.moonelevationcrossing_kind(this.__wbg_ptr);
6870
- deferred1_0 = ret[0];
6871
- deferred1_1 = ret[1];
6872
- return getStringFromWasm0(ret[0], ret[1]);
6873
- } finally {
6874
- wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
7088
+ ellipsoidalHeightM(longitude_deg, latitude_deg) {
7089
+ const ret = wasm.mmapterrain_ellipsoidalHeightM(this.__wbg_ptr, longitude_deg, latitude_deg);
7090
+ if (ret[2]) {
7091
+ throw takeFromExternrefTable0(ret[1]);
6875
7092
  }
7093
+ return EllipsoidalHeightM.__wrap(ret[0]);
6876
7094
  }
6877
7095
  /**
6878
- * Refined crossing instant, unix microseconds.
6879
- * @returns {bigint}
7096
+ * Ellipsoidal height `h = H + N` in metres using an explicit geoid model.
7097
+ *
7098
+ * The terrain lookup input order is `(longitudeDeg, latitudeDeg)`. Choosing
7099
+ * the EGM96 15-arcminute model requires a loaded `WW15MGH.DAC` grid and
7100
+ * does not fall back to the embedded 1-degree grid.
7101
+ * @param {number} longitude_deg
7102
+ * @param {number} latitude_deg
7103
+ * @param {any} options
7104
+ * @param {TerrainGeoidModel} geoid
7105
+ * @returns {EllipsoidalHeightM}
6880
7106
  */
6881
- get timeUnixUs() {
6882
- const ret = wasm.moonelevationcrossing_timeUnixUs(this.__wbg_ptr);
6883
- return ret;
7107
+ ellipsoidalHeightMWithModel(longitude_deg, latitude_deg, options, geoid) {
7108
+ _assertClass(geoid, TerrainGeoidModel);
7109
+ const ret = wasm.mmapterrain_ellipsoidalHeightMWithModel(this.__wbg_ptr, longitude_deg, latitude_deg, options, geoid.__wbg_ptr);
7110
+ if (ret[2]) {
7111
+ throw takeFromExternrefTable0(ret[1]);
7112
+ }
7113
+ return EllipsoidalHeightM.__wrap(ret[0]);
6884
7114
  }
6885
- }
6886
- if (Symbol.dispose) MoonElevationCrossing.prototype[Symbol.dispose] = MoonElevationCrossing.prototype.free;
6887
-
6888
- /**
6889
- * One refined Moon meridian transit (culmination).
6890
- */
6891
- export class MoonTransit {
6892
- static __wrap(ptr) {
6893
- const obj = Object.create(MoonTransit.prototype);
6894
- obj.__wbg_ptr = ptr;
6895
- MoonTransitFinalization.register(obj, obj.__wbg_ptr, obj);
6896
- return obj;
7115
+ /**
7116
+ * Ellipsoidal height `h = H + N` in metres using embedded EGM96 1-degree
7117
+ * geoid conversion and explicit terrain lookup options.
7118
+ * @param {number} longitude_deg
7119
+ * @param {number} latitude_deg
7120
+ * @param {any} options
7121
+ * @returns {EllipsoidalHeightM}
7122
+ */
7123
+ ellipsoidalHeightMWithOptions(longitude_deg, latitude_deg, options) {
7124
+ const ret = wasm.mmapterrain_ellipsoidalHeightMWithOptions(this.__wbg_ptr, longitude_deg, latitude_deg, options);
7125
+ if (ret[2]) {
7126
+ throw takeFromExternrefTable0(ret[1]);
7127
+ }
7128
+ return EllipsoidalHeightM.__wrap(ret[0]);
6897
7129
  }
6898
- __destroy_into_raw() {
6899
- const ptr = this.__wbg_ptr;
6900
- this.__wbg_ptr = 0;
6901
- MoonTransitFinalization.unregister(this);
6902
- return ptr;
7130
+ /**
7131
+ * Parse terrain store bytes from a `Uint8Array`.
7132
+ * @param {Uint8Array} bytes
7133
+ * @returns {MmapTerrain}
7134
+ */
7135
+ static fromBytes(bytes) {
7136
+ const ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc);
7137
+ const len0 = WASM_VECTOR_LEN;
7138
+ const ret = wasm.mmapterrain_fromBytes(ptr0, len0);
7139
+ if (ret[2]) {
7140
+ throw takeFromExternrefTable0(ret[1]);
7141
+ }
7142
+ return MmapTerrain.__wrap(ret[0]);
6903
7143
  }
6904
- free() {
6905
- const ptr = this.__destroy_into_raw();
6906
- wasm.__wbg_moontransit_free(ptr, 0);
7144
+ /**
7145
+ * Read a terrain store file from host I/O and parse it into memory.
7146
+ *
7147
+ * Browser runtimes should use [`MmapTerrain.fromBytes`] with fetched bytes.
7148
+ * @param {string} path
7149
+ * @returns {MmapTerrain}
7150
+ */
7151
+ static fromPath(path) {
7152
+ const ptr0 = passStringToWasm0(path, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
7153
+ const len0 = WASM_VECTOR_LEN;
7154
+ const ret = wasm.mmapterrain_fromPath(ptr0, len0);
7155
+ if (ret[2]) {
7156
+ throw takeFromExternrefTable0(ret[1]);
7157
+ }
7158
+ return MmapTerrain.__wrap(ret[0]);
6907
7159
  }
6908
7160
  /**
6909
- * Topocentric Moon elevation at the refined instant, degrees.
6910
- * @returns {number}
7161
+ * Parse terrain store bytes from an owned `Uint8Array` copy.
7162
+ * @param {Uint8Array} bytes
7163
+ * @returns {MmapTerrain}
6911
7164
  */
6912
- get elevationDeg() {
6913
- const ret = wasm.moontransit_elevationDeg(this.__wbg_ptr);
6914
- return ret;
7165
+ static fromVec(bytes) {
7166
+ const ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc);
7167
+ const len0 = WASM_VECTOR_LEN;
7168
+ const ret = wasm.mmapterrain_fromVec(ptr0, len0);
7169
+ if (ret[2]) {
7170
+ throw takeFromExternrefTable0(ret[1]);
7171
+ }
7172
+ return MmapTerrain.__wrap(ret[0]);
6915
7173
  }
6916
7174
  /**
6917
- * Culmination kind: `"upper"` (due south, highest) or `"lower"` (due north,
6918
- * lowest).
6919
- * @returns {string}
7175
+ * Batch ORTHOMETRIC terrain heights for longitude-first points.
7176
+ *
7177
+ * `points` is an array of `[longitudeDeg, latitudeDeg]` pairs or
7178
+ * `{ longitudeDeg, latitudeDeg }` objects. Each entry is
7179
+ * `{ ok: true, heightM }` or `{ ok: false, error }`.
7180
+ * @param {any} points
7181
+ * @param {any} options
7182
+ * @returns {any}
6920
7183
  */
6921
- get kind() {
6922
- let deferred1_0;
6923
- let deferred1_1;
6924
- try {
6925
- const ret = wasm.moontransit_kind(this.__wbg_ptr);
6926
- deferred1_0 = ret[0];
6927
- deferred1_1 = ret[1];
6928
- return getStringFromWasm0(ret[0], ret[1]);
6929
- } finally {
6930
- wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
7184
+ heightBatch(points, options) {
7185
+ const ret = wasm.mmapterrain_heightBatch(this.__wbg_ptr, points, options);
7186
+ if (ret[2]) {
7187
+ throw takeFromExternrefTable0(ret[1]);
6931
7188
  }
7189
+ return takeFromExternrefTable0(ret[0]);
6932
7190
  }
6933
7191
  /**
6934
- * Refined culmination instant, unix microseconds.
6935
- * @returns {bigint}
7192
+ * Terrain height in ORTHOMETRIC metres at `(longitudeDeg, latitudeDeg)`.
7193
+ *
7194
+ * Longitude and latitude are degrees. The lookup uses bilinear
7195
+ * interpolation. Missing tiles evaluate to `0.0`.
7196
+ * @param {number} longitude_deg
7197
+ * @param {number} latitude_deg
7198
+ * @returns {number}
6936
7199
  */
6937
- get timeUnixUs() {
6938
- const ret = wasm.moontransit_timeUnixUs(this.__wbg_ptr);
6939
- return ret;
7200
+ heightM(longitude_deg, latitude_deg) {
7201
+ const ret = wasm.mmapterrain_heightM(this.__wbg_ptr, longitude_deg, latitude_deg);
7202
+ if (ret[2]) {
7203
+ throw takeFromExternrefTable0(ret[1]);
7204
+ }
7205
+ return ret[0];
6940
7206
  }
6941
- }
6942
- if (Symbol.dispose) MoonTransit.prototype[Symbol.dispose] = MoonTransit.prototype.free;
6943
-
6944
- /**
6945
- * One solved moving-baseline epoch.
6946
- */
7207
+ /**
7208
+ * Terrain height in ORTHOMETRIC metres at `(longitudeDeg, latitudeDeg)`.
7209
+ *
7210
+ * `options.interpolation` is `"bilinear"`, `"nearest"`, or
7211
+ * `"nearestPosting"`.
7212
+ * @param {number} longitude_deg
7213
+ * @param {number} latitude_deg
7214
+ * @param {any} options
7215
+ * @returns {number}
7216
+ */
7217
+ heightMWithOptions(longitude_deg, latitude_deg, options) {
7218
+ const ret = wasm.mmapterrain_heightMWithOptions(this.__wbg_ptr, longitude_deg, latitude_deg, options);
7219
+ if (ret[2]) {
7220
+ throw takeFromExternrefTable0(ret[1]);
7221
+ }
7222
+ return ret[0];
7223
+ }
7224
+ /**
7225
+ * Batch typed ORTHOMETRIC terrain heights for longitude-first points.
7226
+ *
7227
+ * Each entry is `{ ok: true, orthometricHeightM: { valueM } }` or
7228
+ * `{ ok: false, error }`.
7229
+ * @param {any} points
7230
+ * @param {any} options
7231
+ * @returns {any}
7232
+ */
7233
+ orthometricHeightBatch(points, options) {
7234
+ const ret = wasm.mmapterrain_orthometricHeightBatch(this.__wbg_ptr, points, options);
7235
+ if (ret[2]) {
7236
+ throw takeFromExternrefTable0(ret[1]);
7237
+ }
7238
+ return takeFromExternrefTable0(ret[0]);
7239
+ }
7240
+ /**
7241
+ * Typed ORTHOMETRIC terrain height `H` at `(longitudeDeg, latitudeDeg)`.
7242
+ * @param {number} longitude_deg
7243
+ * @param {number} latitude_deg
7244
+ * @returns {OrthometricHeightM}
7245
+ */
7246
+ orthometricHeightM(longitude_deg, latitude_deg) {
7247
+ const ret = wasm.mmapterrain_orthometricHeightM(this.__wbg_ptr, longitude_deg, latitude_deg);
7248
+ if (ret[2]) {
7249
+ throw takeFromExternrefTable0(ret[1]);
7250
+ }
7251
+ return OrthometricHeightM.__wrap(ret[0]);
7252
+ }
7253
+ /**
7254
+ * Typed ORTHOMETRIC terrain height `H` at `(longitudeDeg, latitudeDeg)`
7255
+ * with explicit lookup options.
7256
+ * @param {number} longitude_deg
7257
+ * @param {number} latitude_deg
7258
+ * @param {any} options
7259
+ * @returns {OrthometricHeightM}
7260
+ */
7261
+ orthometricHeightMWithOptions(longitude_deg, latitude_deg, options) {
7262
+ const ret = wasm.mmapterrain_orthometricHeightMWithOptions(this.__wbg_ptr, longitude_deg, latitude_deg, options);
7263
+ if (ret[2]) {
7264
+ throw takeFromExternrefTable0(ret[1]);
7265
+ }
7266
+ return OrthometricHeightM.__wrap(ret[0]);
7267
+ }
7268
+ /**
7269
+ * Parsed tile index records in store order.
7270
+ * @returns {TerrainStoreTileIndex[]}
7271
+ */
7272
+ tileIndex() {
7273
+ const ret = wasm.mmapterrain_tileIndex(this.__wbg_ptr);
7274
+ var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();
7275
+ wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
7276
+ return v1;
7277
+ }
7278
+ /**
7279
+ * Canonical store bytes for this parsed terrain store.
7280
+ * @returns {Uint8Array}
7281
+ */
7282
+ toBytes() {
7283
+ const ret = wasm.mmapterrain_toBytes(this.__wbg_ptr);
7284
+ var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
7285
+ wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
7286
+ return v1;
7287
+ }
7288
+ /**
7289
+ * File-level vertical datum for the store's orthometric posting payloads.
7290
+ * @returns {VerticalDatum}
7291
+ */
7292
+ get verticalDatum() {
7293
+ const ret = wasm.mmapterrain_verticalDatum(this.__wbg_ptr);
7294
+ return ret;
7295
+ }
7296
+ }
7297
+ if (Symbol.dispose) MmapTerrain.prototype[Symbol.dispose] = MmapTerrain.prototype.free;
7298
+
7299
+ /**
7300
+ * One refined Moon elevation threshold crossing (moonrise / moonset).
7301
+ */
7302
+ export class MoonElevationCrossing {
7303
+ static __wrap(ptr) {
7304
+ const obj = Object.create(MoonElevationCrossing.prototype);
7305
+ obj.__wbg_ptr = ptr;
7306
+ MoonElevationCrossingFinalization.register(obj, obj.__wbg_ptr, obj);
7307
+ return obj;
7308
+ }
7309
+ __destroy_into_raw() {
7310
+ const ptr = this.__wbg_ptr;
7311
+ this.__wbg_ptr = 0;
7312
+ MoonElevationCrossingFinalization.unregister(this);
7313
+ return ptr;
7314
+ }
7315
+ free() {
7316
+ const ptr = this.__destroy_into_raw();
7317
+ wasm.__wbg_moonelevationcrossing_free(ptr, 0);
7318
+ }
7319
+ /**
7320
+ * Topocentric Moon elevation at the refined instant, degrees.
7321
+ * @returns {number}
7322
+ */
7323
+ get elevationDeg() {
7324
+ const ret = wasm.moonelevationcrossing_elevationDeg(this.__wbg_ptr);
7325
+ return ret;
7326
+ }
7327
+ /**
7328
+ * Crossing direction: `"rising"` (moonrise) or `"setting"` (moonset).
7329
+ * @returns {string}
7330
+ */
7331
+ get kind() {
7332
+ let deferred1_0;
7333
+ let deferred1_1;
7334
+ try {
7335
+ const ret = wasm.moonelevationcrossing_kind(this.__wbg_ptr);
7336
+ deferred1_0 = ret[0];
7337
+ deferred1_1 = ret[1];
7338
+ return getStringFromWasm0(ret[0], ret[1]);
7339
+ } finally {
7340
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
7341
+ }
7342
+ }
7343
+ /**
7344
+ * Refined crossing instant, unix microseconds.
7345
+ * @returns {bigint}
7346
+ */
7347
+ get timeUnixUs() {
7348
+ const ret = wasm.moonelevationcrossing_timeUnixUs(this.__wbg_ptr);
7349
+ return ret;
7350
+ }
7351
+ }
7352
+ if (Symbol.dispose) MoonElevationCrossing.prototype[Symbol.dispose] = MoonElevationCrossing.prototype.free;
7353
+
7354
+ /**
7355
+ * One refined Moon meridian transit (culmination).
7356
+ */
7357
+ export class MoonTransit {
7358
+ static __wrap(ptr) {
7359
+ const obj = Object.create(MoonTransit.prototype);
7360
+ obj.__wbg_ptr = ptr;
7361
+ MoonTransitFinalization.register(obj, obj.__wbg_ptr, obj);
7362
+ return obj;
7363
+ }
7364
+ __destroy_into_raw() {
7365
+ const ptr = this.__wbg_ptr;
7366
+ this.__wbg_ptr = 0;
7367
+ MoonTransitFinalization.unregister(this);
7368
+ return ptr;
7369
+ }
7370
+ free() {
7371
+ const ptr = this.__destroy_into_raw();
7372
+ wasm.__wbg_moontransit_free(ptr, 0);
7373
+ }
7374
+ /**
7375
+ * Topocentric Moon elevation at the refined instant, degrees.
7376
+ * @returns {number}
7377
+ */
7378
+ get elevationDeg() {
7379
+ const ret = wasm.moontransit_elevationDeg(this.__wbg_ptr);
7380
+ return ret;
7381
+ }
7382
+ /**
7383
+ * Culmination kind: `"upper"` (due south, highest) or `"lower"` (due north,
7384
+ * lowest).
7385
+ * @returns {string}
7386
+ */
7387
+ get kind() {
7388
+ let deferred1_0;
7389
+ let deferred1_1;
7390
+ try {
7391
+ const ret = wasm.moontransit_kind(this.__wbg_ptr);
7392
+ deferred1_0 = ret[0];
7393
+ deferred1_1 = ret[1];
7394
+ return getStringFromWasm0(ret[0], ret[1]);
7395
+ } finally {
7396
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
7397
+ }
7398
+ }
7399
+ /**
7400
+ * Refined culmination instant, unix microseconds.
7401
+ * @returns {bigint}
7402
+ */
7403
+ get timeUnixUs() {
7404
+ const ret = wasm.moontransit_timeUnixUs(this.__wbg_ptr);
7405
+ return ret;
7406
+ }
7407
+ }
7408
+ if (Symbol.dispose) MoonTransit.prototype[Symbol.dispose] = MoonTransit.prototype.free;
7409
+
7410
+ /**
7411
+ * One solved moving-baseline epoch.
7412
+ */
6947
7413
  export class MovingBaselineSolution {
6948
7414
  static __wrap(ptr) {
6949
7415
  const obj = Object.create(MovingBaselineSolution.prototype);
@@ -9938,6 +10404,80 @@ export class OpmState {
9938
10404
  }
9939
10405
  if (Symbol.dispose) OpmState.prototype[Symbol.dispose] = OpmState.prototype.free;
9940
10406
 
10407
+ /**
10408
+ * Orthometric terrain height `H` in metres above the EGM96 mean sea level
10409
+ * geoid.
10410
+ */
10411
+ export class OrthometricHeightM {
10412
+ static __wrap(ptr) {
10413
+ const obj = Object.create(OrthometricHeightM.prototype);
10414
+ obj.__wbg_ptr = ptr;
10415
+ OrthometricHeightMFinalization.register(obj, obj.__wbg_ptr, obj);
10416
+ return obj;
10417
+ }
10418
+ __destroy_into_raw() {
10419
+ const ptr = this.__wbg_ptr;
10420
+ this.__wbg_ptr = 0;
10421
+ OrthometricHeightMFinalization.unregister(this);
10422
+ return ptr;
10423
+ }
10424
+ free() {
10425
+ const ptr = this.__destroy_into_raw();
10426
+ wasm.__wbg_orthometricheightm_free(ptr, 0);
10427
+ }
10428
+ /**
10429
+ * Build an orthometric height `H` in metres.
10430
+ * @param {number} value_m
10431
+ */
10432
+ constructor(value_m) {
10433
+ const ret = wasm.orthometricheightm_new(value_m);
10434
+ this.__wbg_ptr = ret;
10435
+ OrthometricHeightMFinalization.register(this, this.__wbg_ptr, this);
10436
+ return this;
10437
+ }
10438
+ /**
10439
+ * Convert to ellipsoidal height `h = H + N` using degree inputs in geoid
10440
+ * order `(latitudeDeg, longitudeDeg)` and an explicit geoid model.
10441
+ * @param {number} latitude_deg
10442
+ * @param {number} longitude_deg
10443
+ * @param {TerrainGeoidModel} geoid
10444
+ * @returns {EllipsoidalHeightM}
10445
+ */
10446
+ toEllipsoidalHeightDeg(latitude_deg, longitude_deg, geoid) {
10447
+ _assertClass(geoid, TerrainGeoidModel);
10448
+ const ret = wasm.orthometricheightm_toEllipsoidalHeightDeg(this.__wbg_ptr, latitude_deg, longitude_deg, geoid.__wbg_ptr);
10449
+ if (ret[2]) {
10450
+ throw takeFromExternrefTable0(ret[1]);
10451
+ }
10452
+ return EllipsoidalHeightM.__wrap(ret[0]);
10453
+ }
10454
+ /**
10455
+ * Convert to ellipsoidal height `h = H + N` using radian inputs in geoid
10456
+ * order `(latitudeRad, longitudeRad)` and an explicit geoid model.
10457
+ * @param {number} latitude_rad
10458
+ * @param {number} longitude_rad
10459
+ * @param {TerrainGeoidModel} geoid
10460
+ * @returns {EllipsoidalHeightM}
10461
+ */
10462
+ toEllipsoidalHeightRad(latitude_rad, longitude_rad, geoid) {
10463
+ _assertClass(geoid, TerrainGeoidModel);
10464
+ const ret = wasm.orthometricheightm_toEllipsoidalHeightRad(this.__wbg_ptr, latitude_rad, longitude_rad, geoid.__wbg_ptr);
10465
+ if (ret[2]) {
10466
+ throw takeFromExternrefTable0(ret[1]);
10467
+ }
10468
+ return EllipsoidalHeightM.__wrap(ret[0]);
10469
+ }
10470
+ /**
10471
+ * Orthometric height `H`, metres above the EGM96 mean sea level geoid.
10472
+ * @returns {number}
10473
+ */
10474
+ get valueM() {
10475
+ const ret = wasm.orthometricheightm_valueM(this.__wbg_ptr);
10476
+ return ret;
10477
+ }
10478
+ }
10479
+ if (Symbol.dispose) OrthometricHeightM.prototype[Symbol.dispose] = OrthometricHeightM.prototype.free;
10480
+
9941
10481
  /**
9942
10482
  * The result of [`parseTleFile`]: the satellites that parsed, plus a count of
9943
10483
  * complete records that were skipped because SGP4 initialization failed.
@@ -10427,52 +10967,243 @@ export class PppFloatSolution {
10427
10967
  if (Symbol.dispose) PppFloatSolution.prototype[Symbol.dispose] = PppFloatSolution.prototype.free;
10428
10968
 
10429
10969
  /**
10430
- * A precise-ephemeris source built from samples rather than parsed SP3 text.
10970
+ * A reusable precise-ephemeris interpolant with cached per-satellite nodes.
10431
10971
  *
10432
- * Implements the same `ObservableEphemerisSource` contract as a parsed [`Sp3`]
10433
- * product and shares its interpolation substrate, so [`predictRanges`] accepts
10434
- * either handle. Build one with [`preciseEphemerisSamplesFromSamples`].
10435
- */
10436
- export class PreciseEphemerisSampleSource {
10972
+ * Build this handle once from a parsed [`Sp3`] product, raw precise samples, or
10973
+ * a [`PreciseEphemerisSampleSource`], then reuse it for many state or range
10974
+ * queries. The handle delegates to
10975
+ * `sidereon_core::ephemeris::PreciseEphemerisInterpolant`; ECEF positions are
10976
+ * metres, clocks are seconds, and query epochs are seconds since J2000 in the
10977
+ * source time scale.
10978
+ */
10979
+ export class PreciseEphemerisInterpolant {
10437
10980
  static __wrap(ptr) {
10438
- const obj = Object.create(PreciseEphemerisSampleSource.prototype);
10981
+ const obj = Object.create(PreciseEphemerisInterpolant.prototype);
10439
10982
  obj.__wbg_ptr = ptr;
10440
- PreciseEphemerisSampleSourceFinalization.register(obj, obj.__wbg_ptr, obj);
10983
+ PreciseEphemerisInterpolantFinalization.register(obj, obj.__wbg_ptr, obj);
10441
10984
  return obj;
10442
10985
  }
10443
10986
  __destroy_into_raw() {
10444
10987
  const ptr = this.__wbg_ptr;
10445
10988
  this.__wbg_ptr = 0;
10446
- PreciseEphemerisSampleSourceFinalization.unregister(this);
10989
+ PreciseEphemerisInterpolantFinalization.unregister(this);
10447
10990
  return ptr;
10448
10991
  }
10449
10992
  free() {
10450
10993
  const ptr = this.__destroy_into_raw();
10451
- wasm.__wbg_preciseephemerissamplesource_free(ptr, 0);
10994
+ wasm.__wbg_preciseephemerisinterpolant_free(ptr, 0);
10452
10995
  }
10453
10996
  /**
10454
- * Predict geometric ranges for many requests in one call. See the shared
10455
- * [`predictRanges`](crate::precise_samples::predict_ranges_over) contract;
10456
- * this is the sample-source entry point.
10457
- * @param {any} requests
10458
- * @param {any} options
10997
+ * Build a cached interpolant from an existing sample-backed precise source.
10998
+ * @param {PreciseEphemerisSampleSource} source
10999
+ * @returns {PreciseEphemerisInterpolant}
11000
+ */
11001
+ static fromPreciseEphemerisSamples(source) {
11002
+ _assertClass(source, PreciseEphemerisSampleSource);
11003
+ const ret = wasm.preciseephemerisinterpolant_fromPreciseEphemerisSamples(source.__wbg_ptr);
11004
+ return PreciseEphemerisInterpolant.__wrap(ret);
11005
+ }
11006
+ /**
11007
+ * Build a cached interpolant directly from precise samples.
11008
+ *
11009
+ * `samples` is the same array accepted by
11010
+ * [`preciseEphemerisSamplesFromSamples`]: each item has `{ sat, epoch,
11011
+ * positionEcefM, clockS?, clockEvent? }`, with epochs in seconds since
11012
+ * J2000 and positions in ECEF metres. Throws a `TypeError` for malformed
11013
+ * JS input and a `RangeError` for sample validation failures.
11014
+ * @param {any} samples
11015
+ * @returns {PreciseEphemerisInterpolant}
11016
+ */
11017
+ static fromSamples(samples) {
11018
+ const ret = wasm.preciseephemerisinterpolant_fromSamples(samples);
11019
+ if (ret[2]) {
11020
+ throw takeFromExternrefTable0(ret[1]);
11021
+ }
11022
+ return PreciseEphemerisInterpolant.__wrap(ret[0]);
11023
+ }
11024
+ /**
11025
+ * Build a cached interpolant from a parsed SP3 precise product.
11026
+ *
11027
+ * Nodes are copied from the product's native SP3 records. Query epochs are
11028
+ * seconds since J2000 in the SP3 product time scale.
11029
+ * @param {Sp3} sp3
11030
+ * @returns {PreciseEphemerisInterpolant}
11031
+ */
11032
+ static fromSp3(sp3) {
11033
+ _assertClass(sp3, Sp3);
11034
+ const ret = wasm.preciseephemerisinterpolant_fromSp3(sp3.__wbg_ptr);
11035
+ return PreciseEphemerisInterpolant.__wrap(ret);
11036
+ }
11037
+ /**
11038
+ * Query ECEF position and optional clock for parallel satellite and epoch
11039
+ * arrays using this cached interpolant.
11040
+ *
11041
+ * `satellites[i]` is evaluated at `epochsJ2000S[i]`, where epochs are
11042
+ * seconds since J2000 on this handle's time scale. The returned plain
11043
+ * object has aligned `positionsEcefM`, `clocksS`, `statuses`, and
11044
+ * `elementResults` arrays.
11045
+ * @param {any} satellites
11046
+ * @param {any} epochs_j2000_s
10459
11047
  * @returns {any}
10460
11048
  */
10461
- predictRanges(requests, options) {
10462
- const ret = wasm.preciseephemerissamplesource_predictRanges(this.__wbg_ptr, requests, options);
11049
+ observableStatesAtJ2000S(satellites, epochs_j2000_s) {
11050
+ const ret = wasm.preciseephemerisinterpolant_observableStatesAtJ2000S(this.__wbg_ptr, satellites, epochs_j2000_s);
10463
11051
  if (ret[2]) {
10464
11052
  throw takeFromExternrefTable0(ret[1]);
10465
11053
  }
10466
11054
  return takeFromExternrefTable0(ret[0]);
10467
11055
  }
10468
11056
  /**
10469
- * The satellites this source can interpolate (e.g. `"G01"`), ascending.
10470
- * @returns {string[]}
11057
+ * Query ECEF position and optional clock for many satellites at one epoch
11058
+ * using this cached interpolant.
11059
+ *
11060
+ * `epochJ2000S` is seconds since J2000 on this handle's time scale. The
11061
+ * returned object follows the same contract as
11062
+ * [`observableStatesAtJ2000S`](Self::observable_states_at_j2000_s).
11063
+ * @param {any} satellites
11064
+ * @param {number} epoch_j2000_s
11065
+ * @returns {any}
10471
11066
  */
10472
- get satellites() {
10473
- const ret = wasm.preciseephemerissamplesource_satellites(this.__wbg_ptr);
10474
- var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();
10475
- wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
11067
+ observableStatesAtSharedJ2000S(satellites, epoch_j2000_s) {
11068
+ const ret = wasm.preciseephemerisinterpolant_observableStatesAtSharedJ2000S(this.__wbg_ptr, satellites, epoch_j2000_s);
11069
+ if (ret[2]) {
11070
+ throw takeFromExternrefTable0(ret[1]);
11071
+ }
11072
+ return takeFromExternrefTable0(ret[0]);
11073
+ }
11074
+ /**
11075
+ * Predict geometric ranges for many `(satellite, receiver, epoch)`
11076
+ * requests using this cached interpolant.
11077
+ *
11078
+ * `requests` is an array of `{ sat, receiverEcefM, tRxJ2000S }` objects.
11079
+ * Positions are ECEF metres and epochs are seconds since J2000 on this
11080
+ * handle's time scale. The output matches [`Sp3.predictRanges`].
11081
+ * @param {any} requests
11082
+ * @param {any} options
11083
+ * @returns {any}
11084
+ */
11085
+ predictRanges(requests, options) {
11086
+ const ret = wasm.preciseephemerisinterpolant_predictRanges(this.__wbg_ptr, requests, options);
11087
+ if (ret[2]) {
11088
+ throw takeFromExternrefTable0(ret[1]);
11089
+ }
11090
+ return takeFromExternrefTable0(ret[0]);
11091
+ }
11092
+ /**
11093
+ * Satellite tokens this handle can interpolate, ascending.
11094
+ * @returns {string[]}
11095
+ */
11096
+ get satellites() {
11097
+ const ret = wasm.preciseephemerisinterpolant_satellites(this.__wbg_ptr);
11098
+ var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();
11099
+ wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
11100
+ return v1;
11101
+ }
11102
+ /**
11103
+ * Source time-scale abbreviation used by this handle's J2000-second axis,
11104
+ * such as `"GPST"`.
11105
+ * @returns {string}
11106
+ */
11107
+ get timeScale() {
11108
+ let deferred1_0;
11109
+ let deferred1_1;
11110
+ try {
11111
+ const ret = wasm.preciseephemerisinterpolant_timeScale(this.__wbg_ptr);
11112
+ deferred1_0 = ret[0];
11113
+ deferred1_1 = ret[1];
11114
+ return getStringFromWasm0(ret[0], ret[1]);
11115
+ } finally {
11116
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
11117
+ }
11118
+ }
11119
+ }
11120
+ if (Symbol.dispose) PreciseEphemerisInterpolant.prototype[Symbol.dispose] = PreciseEphemerisInterpolant.prototype.free;
11121
+
11122
+ /**
11123
+ * A precise-ephemeris source built from samples rather than parsed SP3 text.
11124
+ *
11125
+ * Implements the same `ObservableEphemerisSource` contract as a parsed [`Sp3`]
11126
+ * product and shares its interpolation substrate, so [`predictRanges`] accepts
11127
+ * either handle. Build one with [`preciseEphemerisSamplesFromSamples`].
11128
+ */
11129
+ export class PreciseEphemerisSampleSource {
11130
+ static __wrap(ptr) {
11131
+ const obj = Object.create(PreciseEphemerisSampleSource.prototype);
11132
+ obj.__wbg_ptr = ptr;
11133
+ PreciseEphemerisSampleSourceFinalization.register(obj, obj.__wbg_ptr, obj);
11134
+ return obj;
11135
+ }
11136
+ __destroy_into_raw() {
11137
+ const ptr = this.__wbg_ptr;
11138
+ this.__wbg_ptr = 0;
11139
+ PreciseEphemerisSampleSourceFinalization.unregister(this);
11140
+ return ptr;
11141
+ }
11142
+ free() {
11143
+ const ptr = this.__destroy_into_raw();
11144
+ wasm.__wbg_preciseephemerissamplesource_free(ptr, 0);
11145
+ }
11146
+ /**
11147
+ * Query ECEF position and optional clock for parallel satellite and epoch
11148
+ * arrays against this sample-backed precise source.
11149
+ *
11150
+ * `satellites[i]` is evaluated at `epochsJ2000S[i]`, where epochs are
11151
+ * seconds since J2000 on the source time scale. The returned plain object
11152
+ * has aligned `positionsEcefM`, `clocksS`, `statuses`, and
11153
+ * `elementResults` arrays. Failed elements use the core missing-position
11154
+ * sentinel and carry the scalar engine error in `elementResults[i].error`.
11155
+ * @param {any} satellites
11156
+ * @param {any} epochs_j2000_s
11157
+ * @returns {any}
11158
+ */
11159
+ observableStatesAtJ2000S(satellites, epochs_j2000_s) {
11160
+ const ret = wasm.preciseephemerissamplesource_observableStatesAtJ2000S(this.__wbg_ptr, satellites, epochs_j2000_s);
11161
+ if (ret[2]) {
11162
+ throw takeFromExternrefTable0(ret[1]);
11163
+ }
11164
+ return takeFromExternrefTable0(ret[0]);
11165
+ }
11166
+ /**
11167
+ * Query ECEF position and optional clock for many satellites at one epoch
11168
+ * against this sample-backed precise source.
11169
+ *
11170
+ * `epochJ2000S` is seconds since J2000 on the source time scale. The
11171
+ * returned plain object follows the same contract as
11172
+ * [`observableStatesAtJ2000S`](Self::observable_states_at_j2000_s).
11173
+ * @param {any} satellites
11174
+ * @param {number} epoch_j2000_s
11175
+ * @returns {any}
11176
+ */
11177
+ observableStatesAtSharedJ2000S(satellites, epoch_j2000_s) {
11178
+ const ret = wasm.preciseephemerissamplesource_observableStatesAtSharedJ2000S(this.__wbg_ptr, satellites, epoch_j2000_s);
11179
+ if (ret[2]) {
11180
+ throw takeFromExternrefTable0(ret[1]);
11181
+ }
11182
+ return takeFromExternrefTable0(ret[0]);
11183
+ }
11184
+ /**
11185
+ * Predict geometric ranges for many requests in one call. See the shared
11186
+ * [`predictRanges`](crate::precise_samples::predict_ranges_over) contract;
11187
+ * this is the sample-source entry point.
11188
+ * @param {any} requests
11189
+ * @param {any} options
11190
+ * @returns {any}
11191
+ */
11192
+ predictRanges(requests, options) {
11193
+ const ret = wasm.preciseephemerissamplesource_predictRanges(this.__wbg_ptr, requests, options);
11194
+ if (ret[2]) {
11195
+ throw takeFromExternrefTable0(ret[1]);
11196
+ }
11197
+ return takeFromExternrefTable0(ret[0]);
11198
+ }
11199
+ /**
11200
+ * The satellites this source can interpolate (e.g. `"G01"`), ascending.
11201
+ * @returns {string[]}
11202
+ */
11203
+ get satellites() {
11204
+ const ret = wasm.preciseephemerissamplesource_satellites(this.__wbg_ptr);
11205
+ var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();
11206
+ wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
10476
11207
  return v1;
10477
11208
  }
10478
11209
  }
@@ -11914,6 +12645,12 @@ export class SatelliteVector {
11914
12645
  }
11915
12646
  if (Symbol.dispose) SatelliteVector.prototype[Symbol.dispose] = SatelliteVector.prototype.free;
11916
12647
 
12648
+ /**
12649
+ * Mutable SBAS correction store.
12650
+ *
12651
+ * Ingest raw SBAS messages with a source GEO and GNSS time, then query decoded
12652
+ * fast, long-term, ionospheric, and GEO navigation correction records.
12653
+ */
11917
12654
  export class SbasCorrectionStore {
11918
12655
  __destroy_into_raw() {
11919
12656
  const ptr = this.__wbg_ptr;
@@ -11926,6 +12663,49 @@ export class SbasCorrectionStore {
11926
12663
  wasm.__wbg_sbascorrectionstore_free(ptr, 0);
11927
12664
  }
11928
12665
  /**
12666
+ * Fast pseudorange correction for `(geo, sat)`, or `null`.
12667
+ *
12668
+ * `prcM` is meters, `rrcMS` is meters per second, and `tOfJ2000S` is
12669
+ * seconds since J2000.
12670
+ * @param {string} geo
12671
+ * @param {string} sat
12672
+ * @returns {any}
12673
+ */
12674
+ fastCorrection(geo, sat) {
12675
+ const ptr0 = passStringToWasm0(geo, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
12676
+ const len0 = WASM_VECTOR_LEN;
12677
+ const ptr1 = passStringToWasm0(sat, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
12678
+ const len1 = WASM_VECTOR_LEN;
12679
+ const ret = wasm.sbascorrectionstore_fastCorrection(this.__wbg_ptr, ptr0, len0, ptr1, len1);
12680
+ if (ret[2]) {
12681
+ throw takeFromExternrefTable0(ret[1]);
12682
+ }
12683
+ return takeFromExternrefTable0(ret[0]);
12684
+ }
12685
+ /**
12686
+ * SBAS GEO navigation state for `geo`, or `null`.
12687
+ *
12688
+ * Positions are ECEF meters, velocities are ECEF meters per second,
12689
+ * accelerations are ECEF meters per second squared, clock fields are
12690
+ * seconds and seconds per second, and `t0J2000S` is seconds since J2000.
12691
+ * @param {string} geo
12692
+ * @returns {any}
12693
+ */
12694
+ geoNavState(geo) {
12695
+ const ptr0 = passStringToWasm0(geo, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
12696
+ const len0 = WASM_VECTOR_LEN;
12697
+ const ret = wasm.sbascorrectionstore_geoNavState(this.__wbg_ptr, ptr0, len0);
12698
+ if (ret[2]) {
12699
+ throw takeFromExternrefTable0(ret[1]);
12700
+ }
12701
+ return takeFromExternrefTable0(ret[0]);
12702
+ }
12703
+ /**
12704
+ * Ingest one decoded SBAS message into the correction store.
12705
+ *
12706
+ * `geo` is the SBAS source satellite token such as `"S29"`. `week` and
12707
+ * `towS` are in the selected GNSS time scale. `form` is `"framed250"` or
12708
+ * `"body226"`.
11929
12709
  * @param {Uint8Array} bytes
11930
12710
  * @param {string | null | undefined} form
11931
12711
  * @param {string} geo
@@ -11948,6 +12728,27 @@ export class SbasCorrectionStore {
11948
12728
  }
11949
12729
  }
11950
12730
  /**
12731
+ * SBAS ionospheric grid for `geo`, or `null`.
12732
+ *
12733
+ * Grid point latitudes and longitudes are degrees, vertical delays are
12734
+ * meters, and GIVE variances are square meters when present.
12735
+ * @param {string} geo
12736
+ * @returns {any}
12737
+ */
12738
+ ionoGrid(geo) {
12739
+ const ptr0 = passStringToWasm0(geo, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
12740
+ const len0 = WASM_VECTOR_LEN;
12741
+ const ret = wasm.sbascorrectionstore_ionoGrid(this.__wbg_ptr, ptr0, len0);
12742
+ if (ret[2]) {
12743
+ throw takeFromExternrefTable0(ret[1]);
12744
+ }
12745
+ return takeFromExternrefTable0(ret[0]);
12746
+ }
12747
+ /**
12748
+ * SBAS ionospheric slant delay in meters, or `null`.
12749
+ *
12750
+ * Receiver latitude, longitude, elevation, and azimuth are radians.
12751
+ * `frequencyHz` is the carrier frequency for the reported group delay.
11951
12752
  * @param {string} geo
11952
12753
  * @param {number} receiver_lat_rad
11953
12754
  * @param {number} receiver_lon_rad
@@ -11966,6 +12767,30 @@ export class SbasCorrectionStore {
11966
12767
  }
11967
12768
  return ret[0] === 0 ? undefined : ret[1];
11968
12769
  }
12770
+ /**
12771
+ * Long-term orbit and clock correction for `(geo, sat)`, or `null`.
12772
+ *
12773
+ * Position deltas are ECEF meters, rates are ECEF meters per second, clock
12774
+ * deltas are seconds and seconds per second, and `t0J2000S` is seconds
12775
+ * since J2000.
12776
+ * @param {string} geo
12777
+ * @param {string} sat
12778
+ * @returns {any}
12779
+ */
12780
+ longTermCorrection(geo, sat) {
12781
+ const ptr0 = passStringToWasm0(geo, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
12782
+ const len0 = WASM_VECTOR_LEN;
12783
+ const ptr1 = passStringToWasm0(sat, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
12784
+ const len1 = WASM_VECTOR_LEN;
12785
+ const ret = wasm.sbascorrectionstore_longTermCorrection(this.__wbg_ptr, ptr0, len0, ptr1, len1);
12786
+ if (ret[2]) {
12787
+ throw takeFromExternrefTable0(ret[1]);
12788
+ }
12789
+ return takeFromExternrefTable0(ret[0]);
12790
+ }
12791
+ /**
12792
+ * Create an empty SBAS correction store.
12793
+ */
11969
12794
  constructor() {
11970
12795
  const ret = wasm.sbascorrectionstore_new();
11971
12796
  this.__wbg_ptr = ret;
@@ -11973,6 +12798,10 @@ export class SbasCorrectionStore {
11973
12798
  return this;
11974
12799
  }
11975
12800
  /**
12801
+ * Ready SBAS GEO source satellites at `tJ2000S`.
12802
+ *
12803
+ * The time is seconds since J2000. Returned tokens are strings such as
12804
+ * `"S29"`, sorted by most recent update first.
11976
12805
  * @param {number} t_j2000_s
11977
12806
  * @returns {string[]}
11978
12807
  */
@@ -11982,6 +12811,24 @@ export class SbasCorrectionStore {
11982
12811
  wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
11983
12812
  return v1;
11984
12813
  }
12814
+ /**
12815
+ * Allow or disallow partial SBAS corrections when building corrected
12816
+ * ephemeris states.
12817
+ * @param {boolean} yes
12818
+ */
12819
+ setAllowPartial(yes) {
12820
+ wasm.sbascorrectionstore_setAllowPartial(this.__wbg_ptr, yes);
12821
+ }
12822
+ /**
12823
+ * Set the maximum staleness for fresh SBAS corrections, in seconds.
12824
+ * @param {number} seconds
12825
+ */
12826
+ setStalenessSeconds(seconds) {
12827
+ const ret = wasm.sbascorrectionstore_setStalenessSeconds(this.__wbg_ptr, seconds);
12828
+ if (ret[1]) {
12829
+ throw takeFromExternrefTable0(ret[0]);
12830
+ }
12831
+ }
11985
12832
  }
11986
12833
  if (Symbol.dispose) SbasCorrectionStore.prototype[Symbol.dispose] = SbasCorrectionStore.prototype.free;
11987
12834
 
@@ -12377,6 +13224,44 @@ export class Sp3 {
12377
13224
  }
12378
13225
  return Sp3Interpolation.__wrap(ret[0]);
12379
13226
  }
13227
+ /**
13228
+ * Query ECEF position and optional clock for parallel satellite and epoch
13229
+ * arrays against this parsed SP3 product.
13230
+ *
13231
+ * `satellites[i]` is evaluated at `epochsJ2000S[i]`, where epochs are
13232
+ * seconds since J2000 in the product time scale. The returned plain object
13233
+ * has aligned `positionsEcefM`, `clocksS`, `statuses`, and
13234
+ * `elementResults` arrays. Failed elements use the core missing-position
13235
+ * sentinel and carry the scalar engine error in `elementResults[i].error`.
13236
+ * @param {any} satellites
13237
+ * @param {any} epochs_j2000_s
13238
+ * @returns {any}
13239
+ */
13240
+ observableStatesAtJ2000S(satellites, epochs_j2000_s) {
13241
+ const ret = wasm.sp3_observableStatesAtJ2000S(this.__wbg_ptr, satellites, epochs_j2000_s);
13242
+ if (ret[2]) {
13243
+ throw takeFromExternrefTable0(ret[1]);
13244
+ }
13245
+ return takeFromExternrefTable0(ret[0]);
13246
+ }
13247
+ /**
13248
+ * Query ECEF position and optional clock for many satellites at one epoch
13249
+ * against this parsed SP3 product.
13250
+ *
13251
+ * `epochJ2000S` is seconds since J2000 in the product time scale. The
13252
+ * returned object follows the same contract as
13253
+ * [`observableStatesAtJ2000S`](Self::observable_states_at_j2000_s).
13254
+ * @param {any} satellites
13255
+ * @param {number} epoch_j2000_s
13256
+ * @returns {any}
13257
+ */
13258
+ observableStatesAtSharedJ2000S(satellites, epoch_j2000_s) {
13259
+ const ret = wasm.sp3_observableStatesAtSharedJ2000S(this.__wbg_ptr, satellites, epoch_j2000_s);
13260
+ if (ret[2]) {
13261
+ throw takeFromExternrefTable0(ret[1]);
13262
+ }
13263
+ return takeFromExternrefTable0(ret[0]);
13264
+ }
12380
13265
  /**
12381
13266
  * Predict geometric ranges for many `(satellite, receiver, epoch)` requests
12382
13267
  * against this ephemeris in one call. `requests` is an array of
@@ -13911,99 +14796,76 @@ export class SunMoon {
13911
14796
  if (Symbol.dispose) SunMoon.prototype[Symbol.dispose] = SunMoon.prototype.free;
13912
14797
 
13913
14798
  /**
13914
- * A named time scale. The JS value matches the variant order below.
13915
- * @enum {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8}
14799
+ * Terrain datum conversion and optional geoid-grid loading error variants.
14800
+ * @enum {0 | 1 | 2 | 3}
13916
14801
  */
13917
- export const TimeScale = Object.freeze({
13918
- /**
13919
- * Coordinated Universal Time.
13920
- */
13921
- Utc: 0, "0": "Utc",
13922
- /**
13923
- * International Atomic Time.
13924
- */
13925
- Tai: 1, "1": "Tai",
13926
- /**
13927
- * Terrestrial Time.
13928
- */
13929
- Tt: 2, "2": "Tt",
13930
- /**
13931
- * Barycentric Dynamical Time.
13932
- */
13933
- Tdb: 3, "3": "Tdb",
13934
- /**
13935
- * GPS time.
13936
- */
13937
- Gpst: 4, "4": "Gpst",
14802
+ export const TerrainDatumError = Object.freeze({
13938
14803
  /**
13939
- * Galileo System Time.
14804
+ * Terrain lookup failed before datum conversion.
13940
14805
  */
13941
- Gst: 5, "5": "Gst",
14806
+ Terrain: 0, "0": "Terrain",
13942
14807
  /**
13943
- * BeiDou Time.
14808
+ * A geoid grid could not be parsed.
13944
14809
  */
13945
- Bdt: 6, "6": "Bdt",
14810
+ Geoid: 1, "1": "Geoid",
13946
14811
  /**
13947
- * GLONASS system time (UTC(SU)-based, leap-second carrying).
14812
+ * Reading a geoid grid failed for a reason other than absence.
13948
14813
  */
13949
- Glonasst: 7, "7": "Glonasst",
14814
+ Io: 2, "2": "Io",
13950
14815
  /**
13951
- * QZSS system time (steered to GPST).
14816
+ * The EGM96 15-arcminute `WW15MGH.DAC` grid was requested but is absent.
13952
14817
  */
13953
- Qzsst: 8, "8": "Qzsst",
14818
+ MissingEgm96Dac: 3, "3": "MissingEgm96Dac",
13954
14819
  });
13955
14820
 
13956
14821
  /**
13957
- * A parsed two-line element set with an initialized SGP4 satellite.
14822
+ * Geoid model used to convert terrain orthometric height `H` to ellipsoidal
14823
+ * height `h`.
13958
14824
  */
13959
- export class Tle {
14825
+ export class TerrainGeoidModel {
13960
14826
  static __wrap(ptr) {
13961
- const obj = Object.create(Tle.prototype);
14827
+ const obj = Object.create(TerrainGeoidModel.prototype);
13962
14828
  obj.__wbg_ptr = ptr;
13963
- TleFinalization.register(obj, obj.__wbg_ptr, obj);
14829
+ TerrainGeoidModelFinalization.register(obj, obj.__wbg_ptr, obj);
13964
14830
  return obj;
13965
14831
  }
13966
- static __unwrap(jsValue) {
13967
- if (!(jsValue instanceof Tle)) {
13968
- return 0;
13969
- }
13970
- return jsValue.__destroy_into_raw();
13971
- }
13972
14832
  __destroy_into_raw() {
13973
14833
  const ptr = this.__wbg_ptr;
13974
14834
  this.__wbg_ptr = 0;
13975
- TleFinalization.unregister(this);
14835
+ TerrainGeoidModelFinalization.unregister(this);
13976
14836
  return ptr;
13977
14837
  }
13978
14838
  free() {
13979
14839
  const ptr = this.__destroy_into_raw();
13980
- wasm.__wbg_tle_free(ptr, 0);
14840
+ wasm.__wbg_terraingeoidmodel_free(ptr, 0);
13981
14841
  }
13982
14842
  /**
13983
- * Argument of perigee, degrees.
13984
- * @returns {number}
14843
+ * Use a caller-supplied EGM96 15-arcminute geoid grid for `h = H + N`.
14844
+ * @param {Egm96FifteenMinuteGeoid} geoid
14845
+ * @returns {TerrainGeoidModel}
13985
14846
  */
13986
- get argPerigeeDeg() {
13987
- const ret = wasm.tle_argPerigeeDeg(this.__wbg_ptr);
13988
- return ret;
14847
+ static egm96FifteenMinute(geoid) {
14848
+ _assertClass(geoid, Egm96FifteenMinuteGeoid);
14849
+ const ret = wasm.terraingeoidmodel_egm96FifteenMinute(geoid.__wbg_ptr);
14850
+ return TerrainGeoidModel.__wrap(ret);
13989
14851
  }
13990
14852
  /**
13991
- * B* drag term (TLE dimensionless convention).
13992
- * @returns {number}
14853
+ * Use the embedded EGM96 1-degree geoid grid for `h = H + N`.
14854
+ * @returns {TerrainGeoidModel}
13993
14855
  */
13994
- get bstar() {
13995
- const ret = wasm.tle_bstar(this.__wbg_ptr);
13996
- return ret;
14856
+ static egm96OneDegree() {
14857
+ const ret = wasm.terraingeoidmodel_egm96OneDegree();
14858
+ return TerrainGeoidModel.__wrap(ret);
13997
14859
  }
13998
14860
  /**
13999
- * NORAD catalog number (as recorded in the TLE).
14861
+ * Model discriminator: `"egm96OneDegree"` or `"egm96FifteenMinute"`.
14000
14862
  * @returns {string}
14001
14863
  */
14002
- get catalogNumber() {
14864
+ get kind() {
14003
14865
  let deferred1_0;
14004
14866
  let deferred1_1;
14005
14867
  try {
14006
- const ret = wasm.tle_catalogNumber(this.__wbg_ptr);
14868
+ const ret = wasm.terraingeoidmodel_kind(this.__wbg_ptr);
14007
14869
  deferred1_0 = ret[0];
14008
14870
  deferred1_1 = ret[1];
14009
14871
  return getStringFromWasm0(ret[0], ret[1]);
@@ -14011,10 +14873,266 @@ export class Tle {
14011
14873
  wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
14012
14874
  }
14013
14875
  }
14014
- /**
14015
- * Advisory checksum discrepancies found while parsing. Empty when both
14016
- * lines' checksums are valid.
14017
- * @returns {ChecksumWarning[]}
14876
+ }
14877
+ if (Symbol.dispose) TerrainGeoidModel.prototype[Symbol.dispose] = TerrainGeoidModel.prototype.free;
14878
+
14879
+ /**
14880
+ * Terrain store conversion, serialization, and parsing error variants.
14881
+ * @enum {0 | 1 | 2 | 3 | 4 | 5}
14882
+ */
14883
+ export const TerrainStoreError = Object.freeze({
14884
+ /**
14885
+ * File or directory I/O failed.
14886
+ */
14887
+ Io: 0, "0": "Io",
14888
+ /**
14889
+ * DTED or terrain store bytes could not be parsed.
14890
+ */
14891
+ Parse: 1, "1": "Parse",
14892
+ /**
14893
+ * The terrain store version is not supported.
14894
+ */
14895
+ UnsupportedVersion: 2, "2": "UnsupportedVersion",
14896
+ /**
14897
+ * The terrain store datum tag is not supported.
14898
+ */
14899
+ UnsupportedDatum: 3, "3": "UnsupportedDatum",
14900
+ /**
14901
+ * Two input DTED files resolved to the same integer tile id.
14902
+ */
14903
+ DuplicateTile: 4, "4": "DuplicateTile",
14904
+ /**
14905
+ * A tile payload checksum did not match its index record.
14906
+ */
14907
+ Checksum: 5, "5": "Checksum",
14908
+ });
14909
+
14910
+ /**
14911
+ * Metadata for one tile index record in a memory-mappable terrain store.
14912
+ */
14913
+ export class TerrainStoreTileIndex {
14914
+ static __wrap(ptr) {
14915
+ const obj = Object.create(TerrainStoreTileIndex.prototype);
14916
+ obj.__wbg_ptr = ptr;
14917
+ TerrainStoreTileIndexFinalization.register(obj, obj.__wbg_ptr, obj);
14918
+ return obj;
14919
+ }
14920
+ __destroy_into_raw() {
14921
+ const ptr = this.__wbg_ptr;
14922
+ this.__wbg_ptr = 0;
14923
+ TerrainStoreTileIndexFinalization.unregister(this);
14924
+ return ptr;
14925
+ }
14926
+ free() {
14927
+ const ptr = this.__destroy_into_raw();
14928
+ wasm.__wbg_terrainstoretileindex_free(ptr, 0);
14929
+ }
14930
+ /**
14931
+ * FNV-1a checksum of this tile's posting payload bytes.
14932
+ * @returns {bigint}
14933
+ */
14934
+ get checksum64() {
14935
+ const ret = wasm.terrainstoretileindex_checksum64(this.__wbg_ptr);
14936
+ return BigInt.asUintN(64, ret);
14937
+ }
14938
+ /**
14939
+ * Byte length of this tile's posting payload in the store.
14940
+ * @returns {bigint}
14941
+ */
14942
+ get dataLen() {
14943
+ const ret = wasm.terrainstoretileindex_dataLen(this.__wbg_ptr);
14944
+ return BigInt.asUintN(64, ret);
14945
+ }
14946
+ /**
14947
+ * Byte offset of this tile's posting payload in the store.
14948
+ * @returns {bigint}
14949
+ */
14950
+ get dataOffset() {
14951
+ const ret = wasm.terrainstoretileindex_dataOffset(this.__wbg_ptr);
14952
+ return BigInt.asUintN(64, ret);
14953
+ }
14954
+ /**
14955
+ * Number of latitude postings.
14956
+ * @returns {number}
14957
+ */
14958
+ get latCount() {
14959
+ const ret = wasm.terrainstoretileindex_latCount(this.__wbg_ptr);
14960
+ return ret >>> 0;
14961
+ }
14962
+ /**
14963
+ * Integer latitude tile id, for example `36` for a tile covering
14964
+ * `36..37` degrees.
14965
+ * @returns {number}
14966
+ */
14967
+ get latIndex() {
14968
+ const ret = wasm.terrainstoretileindex_latIndex(this.__wbg_ptr);
14969
+ return ret;
14970
+ }
14971
+ /**
14972
+ * Number of longitude postings.
14973
+ * @returns {number}
14974
+ */
14975
+ get lonCount() {
14976
+ const ret = wasm.terrainstoretileindex_lonCount(this.__wbg_ptr);
14977
+ return ret >>> 0;
14978
+ }
14979
+ /**
14980
+ * Integer longitude tile id, for example `-107` for a tile covering
14981
+ * `-107..-106` degrees.
14982
+ * @returns {number}
14983
+ */
14984
+ get lonIndex() {
14985
+ const ret = wasm.terrainstoretileindex_lonIndex(this.__wbg_ptr);
14986
+ return ret;
14987
+ }
14988
+ /**
14989
+ * Northern edge latitude, degrees.
14990
+ * @returns {number}
14991
+ */
14992
+ get maxLatitudeDeg() {
14993
+ const ret = wasm.terrainstoretileindex_maxLatitudeDeg(this.__wbg_ptr);
14994
+ return ret;
14995
+ }
14996
+ /**
14997
+ * Eastern edge longitude, degrees.
14998
+ * @returns {number}
14999
+ */
15000
+ get maxLongitudeDeg() {
15001
+ const ret = wasm.terrainstoretileindex_maxLongitudeDeg(this.__wbg_ptr);
15002
+ return ret;
15003
+ }
15004
+ /**
15005
+ * Southern edge latitude, degrees.
15006
+ * @returns {number}
15007
+ */
15008
+ get minLatitudeDeg() {
15009
+ const ret = wasm.terrainstoretileindex_minLatitudeDeg(this.__wbg_ptr);
15010
+ return ret;
15011
+ }
15012
+ /**
15013
+ * Western edge longitude, degrees.
15014
+ * @returns {number}
15015
+ */
15016
+ get minLongitudeDeg() {
15017
+ const ret = wasm.terrainstoretileindex_minLongitudeDeg(this.__wbg_ptr);
15018
+ return ret;
15019
+ }
15020
+ /**
15021
+ * Vertical datum for this tile's orthometric posting payload.
15022
+ * @returns {VerticalDatum}
15023
+ */
15024
+ get verticalDatum() {
15025
+ const ret = wasm.terrainstoretileindex_verticalDatum(this.__wbg_ptr);
15026
+ return ret;
15027
+ }
15028
+ }
15029
+ if (Symbol.dispose) TerrainStoreTileIndex.prototype[Symbol.dispose] = TerrainStoreTileIndex.prototype.free;
15030
+
15031
+ /**
15032
+ * A named time scale. The JS value matches the variant order below.
15033
+ * @enum {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8}
15034
+ */
15035
+ export const TimeScale = Object.freeze({
15036
+ /**
15037
+ * Coordinated Universal Time.
15038
+ */
15039
+ Utc: 0, "0": "Utc",
15040
+ /**
15041
+ * International Atomic Time.
15042
+ */
15043
+ Tai: 1, "1": "Tai",
15044
+ /**
15045
+ * Terrestrial Time.
15046
+ */
15047
+ Tt: 2, "2": "Tt",
15048
+ /**
15049
+ * Barycentric Dynamical Time.
15050
+ */
15051
+ Tdb: 3, "3": "Tdb",
15052
+ /**
15053
+ * GPS time.
15054
+ */
15055
+ Gpst: 4, "4": "Gpst",
15056
+ /**
15057
+ * Galileo System Time.
15058
+ */
15059
+ Gst: 5, "5": "Gst",
15060
+ /**
15061
+ * BeiDou Time.
15062
+ */
15063
+ Bdt: 6, "6": "Bdt",
15064
+ /**
15065
+ * GLONASS system time (UTC(SU)-based, leap-second carrying).
15066
+ */
15067
+ Glonasst: 7, "7": "Glonasst",
15068
+ /**
15069
+ * QZSS system time (steered to GPST).
15070
+ */
15071
+ Qzsst: 8, "8": "Qzsst",
15072
+ });
15073
+
15074
+ /**
15075
+ * A parsed two-line element set with an initialized SGP4 satellite.
15076
+ */
15077
+ export class Tle {
15078
+ static __wrap(ptr) {
15079
+ const obj = Object.create(Tle.prototype);
15080
+ obj.__wbg_ptr = ptr;
15081
+ TleFinalization.register(obj, obj.__wbg_ptr, obj);
15082
+ return obj;
15083
+ }
15084
+ static __unwrap(jsValue) {
15085
+ if (!(jsValue instanceof Tle)) {
15086
+ return 0;
15087
+ }
15088
+ return jsValue.__destroy_into_raw();
15089
+ }
15090
+ __destroy_into_raw() {
15091
+ const ptr = this.__wbg_ptr;
15092
+ this.__wbg_ptr = 0;
15093
+ TleFinalization.unregister(this);
15094
+ return ptr;
15095
+ }
15096
+ free() {
15097
+ const ptr = this.__destroy_into_raw();
15098
+ wasm.__wbg_tle_free(ptr, 0);
15099
+ }
15100
+ /**
15101
+ * Argument of perigee, degrees.
15102
+ * @returns {number}
15103
+ */
15104
+ get argPerigeeDeg() {
15105
+ const ret = wasm.tle_argPerigeeDeg(this.__wbg_ptr);
15106
+ return ret;
15107
+ }
15108
+ /**
15109
+ * B* drag term (TLE dimensionless convention).
15110
+ * @returns {number}
15111
+ */
15112
+ get bstar() {
15113
+ const ret = wasm.tle_bstar(this.__wbg_ptr);
15114
+ return ret;
15115
+ }
15116
+ /**
15117
+ * NORAD catalog number (as recorded in the TLE).
15118
+ * @returns {string}
15119
+ */
15120
+ get catalogNumber() {
15121
+ let deferred1_0;
15122
+ let deferred1_1;
15123
+ try {
15124
+ const ret = wasm.tle_catalogNumber(this.__wbg_ptr);
15125
+ deferred1_0 = ret[0];
15126
+ deferred1_1 = ret[1];
15127
+ return getStringFromWasm0(ret[0], ret[1]);
15128
+ } finally {
15129
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
15130
+ }
15131
+ }
15132
+ /**
15133
+ * Advisory checksum discrepancies found while parsing. Empty when both
15134
+ * lines' checksums are valid.
15135
+ * @returns {ChecksumWarning[]}
14018
15136
  */
14019
15137
  get checksumWarnings() {
14020
15138
  const ret = wasm.tle_checksumWarnings(this.__wbg_ptr);
@@ -14557,6 +15675,17 @@ export class VelocitySolution {
14557
15675
  }
14558
15676
  if (Symbol.dispose) VelocitySolution.prototype[Symbol.dispose] = VelocitySolution.prototype.free;
14559
15677
 
15678
+ /**
15679
+ * Vertical datum carried by a terrain store.
15680
+ * @enum {0}
15681
+ */
15682
+ export const VerticalDatum = Object.freeze({
15683
+ /**
15684
+ * Orthometric height `H` in metres above the EGM96 mean sea level geoid.
15685
+ */
15686
+ Egm96MslOrthometric: 0, "0": "Egm96MslOrthometric",
15687
+ });
15688
+
14560
15689
  /**
14561
15690
  * Per-epoch topocentric visibility plus the dense pass list over the grid
14562
15691
  * window.
@@ -14848,6 +15977,99 @@ export function acquire(samples, prn, options) {
14848
15977
  return AcquisitionResult.__wrap(ret[0]);
14849
15978
  }
14850
15979
 
15980
+ /**
15981
+ * Plain non-overlapping Allan deviation for explicit averaging factors.
15982
+ *
15983
+ * `series` is `{ kind, values }`, where `kind` is `"phaseSeconds"` or
15984
+ * `"fractionalFrequency"` and `values` are phase seconds or dimensionless
15985
+ * fractional-frequency samples. `tau0S` is the sample interval in seconds.
15986
+ * `averagingFactors` is an array of positive integer `m` values. Returns
15987
+ * `{ tauS, deviation, n }`.
15988
+ * @param {any} series
15989
+ * @param {number} tau0_s
15990
+ * @param {any} averaging_factors
15991
+ * @returns {any}
15992
+ */
15993
+ export function allanDeviation(series, tau0_s, averaging_factors) {
15994
+ const ret = wasm.allanDeviation(series, tau0_s, averaging_factors);
15995
+ if (ret[2]) {
15996
+ throw takeFromExternrefTable0(ret[1]);
15997
+ }
15998
+ return takeFromExternrefTable0(ret[0]);
15999
+ }
16000
+
16001
+ /**
16002
+ * Alpha-beta measurement update applied to a predicted scalar state.
16003
+ *
16004
+ * `predicted` is `{ level, rate }`, `measurement` has the same unit as
16005
+ * `level`, `dt` is seconds, and `gains` is `{ alpha, beta }`.
16006
+ * @param {any} predicted
16007
+ * @param {number} measurement
16008
+ * @param {number} dt
16009
+ * @param {any} gains
16010
+ * @returns {any}
16011
+ */
16012
+ export function alphaBetaApplyMeasurement(predicted, measurement, dt, gains) {
16013
+ const ret = wasm.alphaBetaApplyMeasurement(predicted, measurement, dt, gains);
16014
+ if (ret[2]) {
16015
+ throw takeFromExternrefTable0(ret[1]);
16016
+ }
16017
+ return takeFromExternrefTable0(ret[0]);
16018
+ }
16019
+
16020
+ /**
16021
+ * Run one alpha-beta predict and measurement update.
16022
+ *
16023
+ * `state` is `{ level, rate }`, `measurement` has the same unit as `level`,
16024
+ * `dt` is seconds, and `gains` is `{ alpha, beta }`. Returns `{ predicted,
16025
+ * updated, innovation }`.
16026
+ * @param {any} state
16027
+ * @param {number} measurement
16028
+ * @param {number} dt
16029
+ * @param {any} gains
16030
+ * @returns {any}
16031
+ */
16032
+ export function alphaBetaFilterStep(state, measurement, dt, gains) {
16033
+ const ret = wasm.alphaBetaFilterStep(state, measurement, dt, gains);
16034
+ if (ret[2]) {
16035
+ throw takeFromExternrefTable0(ret[1]);
16036
+ }
16037
+ return takeFromExternrefTable0(ret[0]);
16038
+ }
16039
+
16040
+ /**
16041
+ * Alpha-beta constant-rate prediction.
16042
+ *
16043
+ * `state` is `{ level, rate }` and `dt` is the positive propagation interval in
16044
+ * seconds. Returns the predicted `{ level, rate }`.
16045
+ * @param {any} state
16046
+ * @param {number} dt
16047
+ * @returns {any}
16048
+ */
16049
+ export function alphaBetaPredict(state, dt) {
16050
+ const ret = wasm.alphaBetaPredict(state, dt);
16051
+ if (ret[2]) {
16052
+ throw takeFromExternrefTable0(ret[1]);
16053
+ }
16054
+ return takeFromExternrefTable0(ret[0]);
16055
+ }
16056
+
16057
+ /**
16058
+ * Steady-state alpha-beta gains from a positive tracking index.
16059
+ *
16060
+ * Returns `{ alpha, beta }`, where `alpha` is the level gain and `beta` maps
16061
+ * innovation to rate through `beta * innovation / dt`.
16062
+ * @param {number} tracking_index
16063
+ * @returns {any}
16064
+ */
16065
+ export function alphaBetaSteadyStateGains(tracking_index) {
16066
+ const ret = wasm.alphaBetaSteadyStateGains(tracking_index);
16067
+ if (ret[2]) {
16068
+ throw takeFromExternrefTable0(ret[1]);
16069
+ }
16070
+ return takeFromExternrefTable0(ret[0]);
16071
+ }
16072
+
14851
16073
  /**
14852
16074
  * On-sky angle in degrees between two direction vectors.
14853
16075
  * @param {Float64Array} a
@@ -14882,6 +16104,65 @@ export function angularSeparationCoords(a_lon_deg, a_lat_deg, b_lon_deg, b_lat_d
14882
16104
  return ret[0];
14883
16105
  }
14884
16106
 
16107
+ /**
16108
+ * Run ARAIM MHSS protection-level computation.
16109
+ *
16110
+ * `geometry.rows` contains satellite IDs, ECEF line-of-sight unit vectors,
16111
+ * optional constellation labels, and elevations in radians. `receiver` is WGS84
16112
+ * geodetic radians plus ellipsoidal height meters. `ism` contains
16113
+ * constellation defaults and optional satellite overrides. Satellite models may
16114
+ * provide paired `effectiveSigmaIntM` and `effectiveSigmaAccM` fields; omit both
16115
+ * to let the core derive them from elevation. `allocation` may be omitted to use
16116
+ * `araimLpv200Allocation()`. Returned `hplM`, `vplM`, `sigmaAccHM`,
16117
+ * `sigmaAccVM`, `emtM`, and per-mode ENU arrays are meters.
16118
+ * @param {any} geometry
16119
+ * @param {any} ism
16120
+ * @param {any} allocation
16121
+ * @returns {any}
16122
+ */
16123
+ export function araim(geometry, ism, allocation) {
16124
+ const ret = wasm.araim(geometry, ism, allocation);
16125
+ if (ret[2]) {
16126
+ throw takeFromExternrefTable0(ret[1]);
16127
+ }
16128
+ return takeFromExternrefTable0(ret[0]);
16129
+ }
16130
+
16131
+ /**
16132
+ * Enumerate ARAIM fault hypotheses for the given geometry, ISM, and allocation.
16133
+ *
16134
+ * Inputs mirror `araim`. The returned priors are probabilities. Excluded
16135
+ * satellites are string tokens such as `"G01"`, and excluded constellations are
16136
+ * labels such as `"GPS"`.
16137
+ * @param {any} geometry
16138
+ * @param {any} ism
16139
+ * @param {any} allocation
16140
+ * @returns {any}
16141
+ */
16142
+ export function araimFaultModes(geometry, ism, allocation) {
16143
+ const ret = wasm.araimFaultModes(geometry, ism, allocation);
16144
+ if (ret[2]) {
16145
+ throw takeFromExternrefTable0(ret[1]);
16146
+ }
16147
+ return takeFromExternrefTable0(ret[0]);
16148
+ }
16149
+
16150
+ /**
16151
+ * LPV-200 ARAIM integrity and continuity allocation.
16152
+ *
16153
+ * The returned object can be passed to `araim`. Probability fields are
16154
+ * dimensionless, `pEmt` defaults to `1e-5`, and `maxFaultOrder` is an integer
16155
+ * fault order.
16156
+ * @returns {any}
16157
+ */
16158
+ export function araimLpv200Allocation() {
16159
+ const ret = wasm.araimLpv200Allocation();
16160
+ if (ret[2]) {
16161
+ throw takeFromExternrefTable0(ret[1]);
16162
+ }
16163
+ return takeFromExternrefTable0(ret[0]);
16164
+ }
16165
+
14885
16166
  /**
14886
16167
  * Evaluate NRLMSISE-00 neutral-atmosphere density and temperature.
14887
16168
  *
@@ -15047,6 +16328,87 @@ export function carrierFrequencyHz(system, band) {
15047
16328
  return ret[0] === 0 ? undefined : ret[1];
15048
16329
  }
15049
16330
 
16331
+ /**
16332
+ * CA-CFAR false alarm probability from searched-cell count, absolute
16333
+ * threshold, and mean noise level.
16334
+ * @param {number} searched_cells
16335
+ * @param {number} threshold
16336
+ * @param {number} noise_level
16337
+ * @returns {number}
16338
+ */
16339
+ export function cfarCaFalseAlarmProbability(searched_cells, threshold, noise_level) {
16340
+ const ret = wasm.cfarCaFalseAlarmProbability(searched_cells, threshold, noise_level);
16341
+ if (ret[2]) {
16342
+ throw takeFromExternrefTable0(ret[1]);
16343
+ }
16344
+ return ret[0];
16345
+ }
16346
+
16347
+ /**
16348
+ * CA-CFAR threshold multiplier from searched-cell count and target false alarm
16349
+ * probability.
16350
+ * @param {number} searched_cells
16351
+ * @param {number} false_alarm_probability
16352
+ * @returns {number}
16353
+ */
16354
+ export function cfarCaMultiplierFromPfa(searched_cells, false_alarm_probability) {
16355
+ const ret = wasm.cfarCaMultiplierFromPfa(searched_cells, false_alarm_probability);
16356
+ if (ret[2]) {
16357
+ throw takeFromExternrefTable0(ret[1]);
16358
+ }
16359
+ return ret[0];
16360
+ }
16361
+
16362
+ /**
16363
+ * CA-CFAR false alarm probability from searched-cell count and multiplier.
16364
+ * @param {number} searched_cells
16365
+ * @param {number} multiplier
16366
+ * @returns {number}
16367
+ */
16368
+ export function cfarCaPfaFromMultiplier(searched_cells, multiplier) {
16369
+ const ret = wasm.cfarCaPfaFromMultiplier(searched_cells, multiplier);
16370
+ if (ret[2]) {
16371
+ throw takeFromExternrefTable0(ret[1]);
16372
+ }
16373
+ return ret[0];
16374
+ }
16375
+
16376
+ /**
16377
+ * CA-CFAR absolute threshold from searched-cell count, target false alarm
16378
+ * probability, and mean noise level.
16379
+ * @param {number} searched_cells
16380
+ * @param {number} false_alarm_probability
16381
+ * @param {number} noise_level
16382
+ * @returns {number}
16383
+ */
16384
+ export function cfarCaThreshold(searched_cells, false_alarm_probability, noise_level) {
16385
+ const ret = wasm.cfarCaThreshold(searched_cells, false_alarm_probability, noise_level);
16386
+ if (ret[2]) {
16387
+ throw takeFromExternrefTable0(ret[1]);
16388
+ }
16389
+ return ret[0];
16390
+ }
16391
+
16392
+ /**
16393
+ * Compute the closed-form Chan-Ho seed used by [`locateSource`].
16394
+ *
16395
+ * `mode` is `"toa"`, `"tdoa"`, or `{ mode: "tdoa", referenceSensor }`.
16396
+ * Per-sensor speed overrides are not used by the closed-form equations, but
16397
+ * they are used by [`locateSource`] during iterative refinement.
16398
+ * @param {any} sensors
16399
+ * @param {any} arrival_times_s
16400
+ * @param {number} propagation_speed_m_s
16401
+ * @param {any} mode
16402
+ * @returns {any}
16403
+ */
16404
+ export function chanHoInitialGuess(sensors, arrival_times_s, propagation_speed_m_s, mode) {
16405
+ const ret = wasm.chanHoInitialGuess(sensors, arrival_times_s, propagation_speed_m_s, mode);
16406
+ if (ret[2]) {
16407
+ throw takeFromExternrefTable0(ret[1]);
16408
+ }
16409
+ return takeFromExternrefTable0(ret[0]);
16410
+ }
16411
+
15050
16412
  /**
15051
16413
  * Returns `true` when a diff has any findings.
15052
16414
  * @param {any} diff
@@ -15198,6 +16560,28 @@ export function collisionProbability(object1, object2, hard_body_radius_km, meth
15198
16560
  return CollisionProbability.__wrap(ret[0]);
15199
16561
  }
15200
16562
 
16563
+ /**
16564
+ * Compute one or more Allan-family curves with a selected tau grid and gap
16565
+ * policy.
16566
+ *
16567
+ * `input` is `{ series, tau0S, options? }`. `series.kind` may be
16568
+ * `"phaseSeconds"`, `"fractionalFrequency"`, `"phaseSecondsWithGaps"`, or
16569
+ * `"fractionalFrequencyWithGaps"`; gap series use `null` for missing samples.
16570
+ * `options.estimators` is `"standard"`, `"all"`, `"none"`, or a boolean flag
16571
+ * object. `options.tauGrid` is `"octave"`, `"all"`, or
16572
+ * `{ kind: "explicit", averagingFactors }`. `tau0S` and all returned `tauS`
16573
+ * values are seconds.
16574
+ * @param {any} input
16575
+ * @returns {any}
16576
+ */
16577
+ export function computeAllanDeviations(input) {
16578
+ const ret = wasm.computeAllanDeviations(input);
16579
+ if (ret[2]) {
16580
+ throw takeFromExternrefTable0(ret[1]);
16581
+ }
16582
+ return takeFromExternrefTable0(ret[0]);
16583
+ }
16584
+
15201
16585
  /**
15202
16586
  * Coherently correlate interleaved IQ samples against a GPS C/A PRN replica.
15203
16587
  * `iq` is `[i0, q0, i1, q1, ...]`.
@@ -15455,6 +16839,12 @@ export function decodeRtcmStream(bytes) {
15455
16839
  }
15456
16840
 
15457
16841
  /**
16842
+ * Decode a raw SBAS message.
16843
+ *
16844
+ * `form` is `"framed250"` for a 32-byte message with CRC or `"body226"` for a
16845
+ * 29-byte body. The result contains `messageType`, `form`, legacy debug
16846
+ * `kind`, and `message`, a structured decoded payload. Parse failures are
16847
+ * thrown as `Error`.
15458
16848
  * @param {Uint8Array} bytes
15459
16849
  * @param {string | null} [form]
15460
16850
  * @returns {any}
@@ -15688,6 +17078,26 @@ export function dopplerToRangeRate(doppler_hz, carrier_hz) {
15688
17078
  return ret[0];
15689
17079
  }
15690
17080
 
17081
+ /**
17082
+ * Convert a DTED tile tree into canonical memory-mappable terrain store bytes.
17083
+ *
17084
+ * The returned `Uint8Array` can be passed to [`MmapTerrain.fromBytes`] or
17085
+ * [`MmapTerrain.fromVec`]. Posting payloads are decoded orthometric metres.
17086
+ * @param {string} root
17087
+ * @returns {Uint8Array}
17088
+ */
17089
+ export function dtedTreeToMmapStore(root) {
17090
+ const ptr0 = passStringToWasm0(root, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
17091
+ const len0 = WASM_VECTOR_LEN;
17092
+ const ret = wasm.dtedTreeToMmapStore(ptr0, len0);
17093
+ if (ret[3]) {
17094
+ throw takeFromExternrefTable0(ret[2]);
17095
+ }
17096
+ var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
17097
+ wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
17098
+ return v2;
17099
+ }
17100
+
15691
17101
  /**
15692
17102
  * Angular radius in degrees of Earth as seen from each satellite position.
15693
17103
  * @param {Float64Array} satellite_position_km
@@ -16067,20 +17477,53 @@ export function estimateDecay(drag, request) {
16067
17477
  }
16068
17478
 
16069
17479
  /**
16070
- * Estimate decay using per-epoch values from a parsed space-weather table.
16071
- * @param {DragForce} drag
16072
- * @param {SpaceWeatherTable} table
16073
- * @param {any} request
16074
- * @returns {any}
17480
+ * Estimate decay using per-epoch values from a parsed space-weather table.
17481
+ * @param {DragForce} drag
17482
+ * @param {SpaceWeatherTable} table
17483
+ * @param {any} request
17484
+ * @returns {any}
17485
+ */
17486
+ export function estimateDecayWithSpaceWeather(drag, table, request) {
17487
+ _assertClass(drag, DragForce);
17488
+ _assertClass(table, SpaceWeatherTable);
17489
+ const ret = wasm.estimateDecayWithSpaceWeather(drag.__wbg_ptr, table.__wbg_ptr, request);
17490
+ if (ret[2]) {
17491
+ throw takeFromExternrefTable0(ret[1]);
17492
+ }
17493
+ return takeFromExternrefTable0(ret[0]);
17494
+ }
17495
+
17496
+ /**
17497
+ * Exponentially weighted moving-average update.
17498
+ *
17499
+ * `alpha` must be in `[0, 1]`; the returned value is
17500
+ * `previous + alpha * (sample - previous)`.
17501
+ * @param {number} previous
17502
+ * @param {number} sample
17503
+ * @param {number} alpha
17504
+ * @returns {number}
17505
+ */
17506
+ export function ewmaUpdate(previous, sample, alpha) {
17507
+ const ret = wasm.ewmaUpdate(previous, sample, alpha);
17508
+ if (ret[2]) {
17509
+ throw takeFromExternrefTable0(ret[1]);
17510
+ }
17511
+ return ret[0];
17512
+ }
17513
+
17514
+ /**
17515
+ * EWMA update with `alpha = 1 / 2^shift`.
17516
+ * @param {number} previous
17517
+ * @param {number} sample
17518
+ * @param {number} shift
17519
+ * @returns {number}
16075
17520
  */
16076
- export function estimateDecayWithSpaceWeather(drag, table, request) {
16077
- _assertClass(drag, DragForce);
16078
- _assertClass(table, SpaceWeatherTable);
16079
- const ret = wasm.estimateDecayWithSpaceWeather(drag.__wbg_ptr, table.__wbg_ptr, request);
17521
+ export function ewmaUpdatePowerOfTwo(previous, sample, shift) {
17522
+ const ret = wasm.ewmaUpdatePowerOfTwo(previous, sample, shift);
16080
17523
  if (ret[2]) {
16081
17524
  throw takeFromExternrefTable0(ret[1]);
16082
17525
  }
16083
- return takeFromExternrefTable0(ret[0]);
17526
+ return ret[0];
16084
17527
  }
16085
17528
 
16086
17529
  /**
@@ -16913,6 +18356,25 @@ export function gpsUtcOffsetS(year, month, day) {
16913
18356
  return ret;
16914
18357
  }
16915
18358
 
18359
+ /**
18360
+ * Overlapping Hadamard deviation for explicit averaging factors.
18361
+ *
18362
+ * `series` is `{ kind, values }`, `tau0S` is seconds, and
18363
+ * `averagingFactors` contains positive integer `m` values. Returns
18364
+ * `{ tauS, deviation, n }`.
18365
+ * @param {any} series
18366
+ * @param {number} tau0_s
18367
+ * @param {any} averaging_factors
18368
+ * @returns {any}
18369
+ */
18370
+ export function hadamardDeviation(series, tau0_s, averaging_factors) {
18371
+ const ret = wasm.hadamardDeviation(series, tau0_s, averaging_factors);
18372
+ if (ret[2]) {
18373
+ throw takeFromExternrefTable0(ret[1]);
18374
+ }
18375
+ return takeFromExternrefTable0(ret[0]);
18376
+ }
18377
+
16916
18378
  /**
16917
18379
  * Trace of the Gauss-Newton Hessian approximation `J^T J`: the sum of the
16918
18380
  * squared column norms of the Jacobian, with no inverse formed.
@@ -17022,6 +18484,47 @@ export function iodHerrickGibbs(r1, r2, r3, jd1, jd2, jd3) {
17022
18484
  return IodVelocity.__wrap(ret[0]);
17023
18485
  }
17024
18486
 
18487
+ /**
18488
+ * Build an IONEX vertical-TEC product from flat node samples.
18489
+ *
18490
+ * `samples` is an array of `{ epochJ2000S, latDeg, lonDeg, vtecTecu,
18491
+ * rmsTecu? }` objects. Epochs are integer seconds since J2000, coordinates are
18492
+ * degrees, and TEC/RMS values are TECU. `shellHeightKm` and `baseRadiusKm` are
18493
+ * kilometers. Validation errors from the core sample builder are thrown as
18494
+ * `RangeError`.
18495
+ * @param {any} samples
18496
+ * @param {number} shell_height_km
18497
+ * @param {number} base_radius_km
18498
+ * @param {number} exponent
18499
+ * @returns {Ionex}
18500
+ */
18501
+ export function ionexFromNodeSamples(samples, shell_height_km, base_radius_km, exponent) {
18502
+ const ret = wasm.ionexFromNodeSamples(samples, shell_height_km, base_radius_km, exponent);
18503
+ if (ret[2]) {
18504
+ throw takeFromExternrefTable0(ret[1]);
18505
+ }
18506
+ return Ionex.__wrap(ret[0]);
18507
+ }
18508
+
18509
+ /**
18510
+ * Build an IONEX vertical-TEC product from full-grid samples.
18511
+ *
18512
+ * `samples.mapEpochsJ2000S` are integer seconds since J2000. Latitude and
18513
+ * longitude nodes and `dlatDeg` / `dlonDeg` are degrees. `tecMaps` and
18514
+ * `rmsMaps` are TECU and indexed `[map][iLat][iLon]`. The shell height and
18515
+ * base radius are kilometers. Validation errors from the core sample builder
18516
+ * are thrown as `RangeError`.
18517
+ * @param {any} samples
18518
+ * @returns {Ionex}
18519
+ */
18520
+ export function ionexFromSamples(samples) {
18521
+ const ret = wasm.ionexFromSamples(samples);
18522
+ if (ret[2]) {
18523
+ throw takeFromExternrefTable0(ret[1]);
18524
+ }
18525
+ return Ionex.__wrap(ret[0]);
18526
+ }
18527
+
17025
18528
  /**
17026
18529
  * Ionosphere-free code or meter-valued phase combination, metres.
17027
18530
  * @param {number} obs1_m
@@ -17152,6 +18655,25 @@ export function jarqueBera(x) {
17152
18655
  return takeFromExternrefTable0(ret[0]);
17153
18656
  }
17154
18657
 
18658
+ /**
18659
+ * Steady-state gains for a scalar constant-velocity Kalman filter.
18660
+ *
18661
+ * `trackingIndex`, `dt`, and `measurementVariance` must be positive. Returns
18662
+ * `{ positionGain, rateGain }`; `rateGain * dt` equals the alpha-beta `beta`
18663
+ * gain for the same tracking index.
18664
+ * @param {number} tracking_index
18665
+ * @param {number} dt
18666
+ * @param {number} measurement_variance
18667
+ * @returns {any}
18668
+ */
18669
+ export function kalmanCvSteadyStateGains(tracking_index, dt, measurement_variance) {
18670
+ const ret = wasm.kalmanCvSteadyStateGains(tracking_index, dt, measurement_variance);
18671
+ if (ret[2]) {
18672
+ throw takeFromExternrefTable0(ret[1]);
18673
+ }
18674
+ return takeFromExternrefTable0(ret[0]);
18675
+ }
18676
+
17155
18677
  /**
17156
18678
  * GPS broadcast Klobuchar ionospheric group delay in the model's native units
17157
18679
  * (positive metres).
@@ -17693,6 +19215,29 @@ export function loadSp3(bytes) {
17693
19215
  return Sp3.__wrap(ret[0]);
17694
19216
  }
17695
19217
 
19218
+ /**
19219
+ * Locate a source from sensor arrival times.
19220
+ *
19221
+ * `sensors` is an array of `{ positionM, propagationSpeedMS? }`; each
19222
+ * `positionM` is a 2D or 3D Cartesian metre vector and all sensors must share
19223
+ * the same dimension. `arrivalTimesS` is an aligned seconds array,
19224
+ * `propagationSpeedMS` is the call-level speed in metres per second, and
19225
+ * `options` may include `mode`, `referenceSensor`, `timingSigmaS`, `loss`,
19226
+ * `fScaleS`, `ftol`, `xtol`, `gtol`, and `maxNfev`.
19227
+ * @param {any} sensors
19228
+ * @param {any} arrival_times_s
19229
+ * @param {number} propagation_speed_m_s
19230
+ * @param {any} options
19231
+ * @returns {any}
19232
+ */
19233
+ export function locateSource(sensors, arrival_times_s, propagation_speed_m_s, options) {
19234
+ const ret = wasm.locateSource(sensors, arrival_times_s, propagation_speed_m_s, options);
19235
+ if (ret[2]) {
19236
+ throw takeFromExternrefTable0(ret[1]);
19237
+ }
19238
+ return takeFromExternrefTable0(ret[0]);
19239
+ }
19240
+
17696
19241
  /**
17697
19242
  * @param {bigint} start_unix_us
17698
19243
  * @param {bigint} end_unix_us
@@ -17744,6 +19289,33 @@ export function lvlhRotation(position_km, velocity_km_s) {
17744
19289
  return v3;
17745
19290
  }
17746
19291
 
19292
+ /**
19293
+ * Gaussian consistency factor applied by [`madSpread`].
19294
+ * @returns {number}
19295
+ */
19296
+ export function madGaussianConsistency() {
19297
+ const ret = wasm.madGaussianConsistency();
19298
+ return ret;
19299
+ }
19300
+
19301
+ /**
19302
+ * Median absolute deviation spread estimate.
19303
+ *
19304
+ * `values` is a JS number array. The returned spread is
19305
+ * `MAD_GAUSSIAN_CONSISTENCY * median(abs(value - median(values)))`, floored by
19306
+ * `scaleFloor`.
19307
+ * @param {any} values
19308
+ * @param {number} scale_floor
19309
+ * @returns {number}
19310
+ */
19311
+ export function madSpread(values, scale_floor) {
19312
+ const ret = wasm.madSpread(values, scale_floor);
19313
+ if (ret[2]) {
19314
+ throw takeFromExternrefTable0(ret[1]);
19315
+ }
19316
+ return ret[0];
19317
+ }
19318
+
17747
19319
  /**
17748
19320
  * @param {number} radius_km
17749
19321
  * @returns {number}
@@ -17923,6 +19495,25 @@ export function meridianTransitsSpk(spk, body, station, start_unix_us, end_unix_
17923
19495
  return takeFromExternrefTable0(ret[0]);
17924
19496
  }
17925
19497
 
19498
+ /**
19499
+ * Modified Allan deviation for explicit averaging factors.
19500
+ *
19501
+ * `series` is `{ kind, values }`, `tau0S` is seconds, and
19502
+ * `averagingFactors` contains positive integer `m` values. Returns
19503
+ * `{ tauS, deviation, n }`.
19504
+ * @param {any} series
19505
+ * @param {number} tau0_s
19506
+ * @param {any} averaging_factors
19507
+ * @returns {any}
19508
+ */
19509
+ export function modifiedAdev(series, tau0_s, averaging_factors) {
19510
+ const ret = wasm.modifiedAdev(series, tau0_s, averaging_factors);
19511
+ if (ret[2]) {
19512
+ throw takeFromExternrefTable0(ret[1]);
19513
+ }
19514
+ return takeFromExternrefTable0(ret[0]);
19515
+ }
19516
+
17926
19517
  /**
17927
19518
  * Mean, variance, skewness, and excess kurtosis of a residual set in one pass.
17928
19519
  *
@@ -18134,6 +19725,65 @@ export function nequickGStecTecu(_eval) {
18134
19725
  return ret[0];
18135
19726
  }
18136
19727
 
19728
+ /**
19729
+ * Scalar normalized innovation squared statistic.
19730
+ * @param {number} innovation
19731
+ * @param {number} innovation_variance
19732
+ * @returns {number}
19733
+ */
19734
+ export function nis(innovation, innovation_variance) {
19735
+ const ret = wasm.nis(innovation, innovation_variance);
19736
+ if (ret[2]) {
19737
+ throw takeFromExternrefTable0(ret[1]);
19738
+ }
19739
+ return ret[0];
19740
+ }
19741
+
19742
+ /**
19743
+ * Bar-Shalom expected NIS value for `dof` measurement degrees of freedom.
19744
+ * @param {number} dof
19745
+ * @returns {number}
19746
+ */
19747
+ export function nisExpectedValue(dof) {
19748
+ const ret = wasm.nisExpectedValue(dof);
19749
+ if (ret[2]) {
19750
+ throw takeFromExternrefTable0(ret[1]);
19751
+ }
19752
+ return ret[0];
19753
+ }
19754
+
19755
+ /**
19756
+ * Test a scalar innovation against a chi-square NIS gate.
19757
+ *
19758
+ * Returns `{ nis, threshold, inGate, dof }`, with `confidence` in `(0, 1)`.
19759
+ * @param {number} innovation
19760
+ * @param {number} innovation_variance
19761
+ * @param {number} dof
19762
+ * @param {number} confidence
19763
+ * @returns {any}
19764
+ */
19765
+ export function nisGate(innovation, innovation_variance, dof, confidence) {
19766
+ const ret = wasm.nisGate(innovation, innovation_variance, dof, confidence);
19767
+ if (ret[2]) {
19768
+ throw takeFromExternrefTable0(ret[1]);
19769
+ }
19770
+ return takeFromExternrefTable0(ret[0]);
19771
+ }
19772
+
19773
+ /**
19774
+ * Chi-square NIS gate threshold for `dof` and confidence probability.
19775
+ * @param {number} dof
19776
+ * @param {number} confidence
19777
+ * @returns {number}
19778
+ */
19779
+ export function nisGateThreshold(dof, confidence) {
19780
+ const ret = wasm.nisGateThreshold(dof, confidence);
19781
+ if (ret[2]) {
19782
+ throw takeFromExternrefTable0(ret[1]);
19783
+ }
19784
+ return ret[0];
19785
+ }
19786
+
18137
19787
  /**
18138
19788
  * Parse bytes and return grouped epoch snapshots directly.
18139
19789
  * @param {Uint8Array} bytes
@@ -18217,6 +19867,20 @@ export function normalCovariance(jacobian, m, n, variance_scale) {
18217
19867
  return v2;
18218
19868
  }
18219
19869
 
19870
+ /**
19871
+ * Scalar normalized innovation `innovation / sqrt(innovationVariance)`.
19872
+ * @param {number} innovation
19873
+ * @param {number} innovation_variance
19874
+ * @returns {number}
19875
+ */
19876
+ export function normalizedInnovation(innovation, innovation_variance) {
19877
+ const ret = wasm.normalizedInnovation(innovation, innovation_variance);
19878
+ if (ret[2]) {
19879
+ throw takeFromExternrefTable0(ret[1]);
19880
+ }
19881
+ return ret[0];
19882
+ }
19883
+
18220
19884
  /**
18221
19885
  * Build the NTRIP connection request bytes for a config object.
18222
19886
  * @param {any} config
@@ -18232,6 +19896,23 @@ export function ntripRequestBytes(config) {
18232
19896
  return v1;
18233
19897
  }
18234
19898
 
19899
+ /**
19900
+ * Missing-position sentinel used in failed observable-state batch elements.
19901
+ *
19902
+ * The returned JS value is `[NaN, NaN, NaN]`, matching
19903
+ * `sidereon_core::ephemeris::OBSERVABLE_STATE_MISSING_POSITION_ECEF_M`. Always
19904
+ * check `elementResults[i].ok` or `statuses[i]` before using
19905
+ * `positionsEcefM[i]`.
19906
+ * @returns {any}
19907
+ */
19908
+ export function observableStateMissingPositionEcefM() {
19909
+ const ret = wasm.observableStateMissingPositionEcefM();
19910
+ if (ret[2]) {
19911
+ throw takeFromExternrefTable0(ret[1]);
19912
+ }
19913
+ return takeFromExternrefTable0(ret[0]);
19914
+ }
19915
+
18235
19916
  /**
18236
19917
  * Predict observables for one satellite from a broadcast ephemeris store.
18237
19918
  * Delegates to `sidereon_core::observables::predict`.
@@ -18419,6 +20100,25 @@ export function orthometricHeightM(ellipsoidal_height_m, lat_rad, lon_rad) {
18419
20100
  return ret;
18420
20101
  }
18421
20102
 
20103
+ /**
20104
+ * Fully overlapping Allan deviation for explicit averaging factors.
20105
+ *
20106
+ * `series` is `{ kind, values }`, `tau0S` is seconds, and
20107
+ * `averagingFactors` contains positive integer `m` values. Returns
20108
+ * `{ tauS, deviation, n }`.
20109
+ * @param {any} series
20110
+ * @param {number} tau0_s
20111
+ * @param {any} averaging_factors
20112
+ * @returns {any}
20113
+ */
20114
+ export function overlappingAdev(series, tau0_s, averaging_factors) {
20115
+ const ret = wasm.overlappingAdev(series, tau0_s, averaging_factors);
20116
+ if (ret[2]) {
20117
+ throw takeFromExternrefTable0(ret[1]);
20118
+ }
20119
+ return takeFromExternrefTable0(ret[0]);
20120
+ }
20121
+
18422
20122
  /**
18423
20123
  * Parallactic angle (degrees) of a target at a station.
18424
20124
  *
@@ -19573,6 +21273,22 @@ export function sampleSp3Ephemeris(sp3, satellites, start_j2000_s, stop_j2000_s,
19573
21273
  return takeFromExternrefTable0(ret[0]);
19574
21274
  }
19575
21275
 
21276
+ /**
21277
+ * Convert an SBAS satellite token such as `"S29"` to broadcast PRN number
21278
+ * such as `129`. Returns `null` for non-SBAS satellites.
21279
+ * @param {string} sat
21280
+ * @returns {any}
21281
+ */
21282
+ export function satToSbasPrn(sat) {
21283
+ const ptr0 = passStringToWasm0(sat, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
21284
+ const len0 = WASM_VECTOR_LEN;
21285
+ const ret = wasm.satToSbasPrn(ptr0, len0);
21286
+ if (ret[2]) {
21287
+ throw takeFromExternrefTable0(ret[1]);
21288
+ }
21289
+ return takeFromExternrefTable0(ret[0]);
21290
+ }
21291
+
19576
21292
  /**
19577
21293
  * Apparent visual magnitude of a sunlit body from a diffuse-sphere phase law.
19578
21294
  *
@@ -19596,6 +21312,10 @@ export function satelliteVisualMagnitude(range_km, phase_angle_deg, standard_mag
19596
21312
  }
19597
21313
 
19598
21314
  /**
21315
+ * SBAS-corrected broadcast satellite position and clock.
21316
+ *
21317
+ * Position is ECEF meters and clock is seconds at `tJ2000S`, seconds since
21318
+ * J2000. Returns `null` when the selected SBAS mode cannot provide a state.
19599
21319
  * @param {BroadcastEphemeris} broadcast
19600
21320
  * @param {SbasCorrectionStore} store
19601
21321
  * @param {string} geo
@@ -19620,6 +21340,17 @@ export function sbasCorrectedState(broadcast, store, geo, sat, t_j2000_s, mode)
19620
21340
  return takeFromExternrefTable0(ret[0]);
19621
21341
  }
19622
21342
 
21343
+ /**
21344
+ * Convert an SBAS broadcast PRN number such as `129` to an SBAS satellite
21345
+ * token such as `"S29"`. Returns `null` when the PRN is outside the SBAS range.
21346
+ * @param {number} broadcast_prn
21347
+ * @returns {any}
21348
+ */
21349
+ export function sbasPrnToSat(broadcast_prn) {
21350
+ const ret = wasm.sbasPrnToSat(broadcast_prn);
21351
+ return ret;
21352
+ }
21353
+
19623
21354
  /**
19624
21355
  * Screen a primary satellite against a secondary TLE catalog for threshold TCAs.
19625
21356
  *
@@ -20177,6 +21908,11 @@ export function solveRtkFloat(config) {
20177
21908
  }
20178
21909
 
20179
21910
  /**
21911
+ * Solve SPP using an SBAS-corrected broadcast source and optional SBAS iono.
21912
+ *
21913
+ * The returned solution uses the same units as `solveSpp`: ECEF meters,
21914
+ * receiver clock seconds, residual meters, and optional geodetic radians plus
21915
+ * ellipsoidal height meters.
20180
21916
  * @param {BroadcastEphemeris} broadcast
20181
21917
  * @param {SbasCorrectionStore} store
20182
21918
  * @param {string} geo
@@ -20288,6 +22024,74 @@ export function solveWithFallback(precise, broadcast, request, policy) {
20288
22024
  return SourcedSolution.__wrap(ret[0]);
20289
22025
  }
20290
22026
 
22027
+ /**
22028
+ * Compute the timing Cramer-Rao lower bound for a proposed source position.
22029
+ *
22030
+ * The covariance is `(H^T H)^-1 * timingSigmaS^2`; position blocks are square
22031
+ * metres and origin-time variance is square seconds.
22032
+ * @param {any} sensors
22033
+ * @param {any} source_position_m
22034
+ * @param {number} propagation_speed_m_s
22035
+ * @param {number} timing_sigma_s
22036
+ * @returns {any}
22037
+ */
22038
+ export function sourceCrlb(sensors, source_position_m, propagation_speed_m_s, timing_sigma_s) {
22039
+ const ret = wasm.sourceCrlb(sensors, source_position_m, propagation_speed_m_s, timing_sigma_s);
22040
+ if (ret[2]) {
22041
+ throw takeFromExternrefTable0(ret[1]);
22042
+ }
22043
+ return takeFromExternrefTable0(ret[0]);
22044
+ }
22045
+
22046
+ /**
22047
+ * Compute timing DOP for a proposed source position.
22048
+ *
22049
+ * `sourcePositionM` is a 2D or 3D Cartesian metre vector in the same frame as
22050
+ * the sensors. The returned DOP values multiply timing sigma in seconds to
22051
+ * produce metres in the caller's Cartesian axes.
22052
+ * @param {any} sensors
22053
+ * @param {any} source_position_m
22054
+ * @param {number} propagation_speed_m_s
22055
+ * @returns {any}
22056
+ */
22057
+ export function sourceDop(sensors, source_position_m, propagation_speed_m_s) {
22058
+ const ret = wasm.sourceDop(sensors, source_position_m, propagation_speed_m_s);
22059
+ if (ret[2]) {
22060
+ throw takeFromExternrefTable0(ret[1]);
22061
+ }
22062
+ return takeFromExternrefTable0(ret[0]);
22063
+ }
22064
+
22065
+ /**
22066
+ * Return the plain mode object for TDOA solves against `referenceSensor`.
22067
+ * @param {number} reference_sensor
22068
+ * @returns {any}
22069
+ */
22070
+ export function sourceSolveModeTdoa(reference_sensor) {
22071
+ const ret = wasm.sourceSolveModeTdoa(reference_sensor);
22072
+ if (ret[2]) {
22073
+ throw takeFromExternrefTable0(ret[1]);
22074
+ }
22075
+ return takeFromExternrefTable0(ret[0]);
22076
+ }
22077
+
22078
+ /**
22079
+ * Return the plain mode value for absolute time-of-arrival solves.
22080
+ * @returns {string}
22081
+ */
22082
+ export function sourceSolveModeToa() {
22083
+ let deferred1_0;
22084
+ let deferred1_1;
22085
+ try {
22086
+ const ret = wasm.sourceSolveModeToa();
22087
+ deferred1_0 = ret[0];
22088
+ deferred1_1 = ret[1];
22089
+ return getStringFromWasm0(ret[0], ret[1]);
22090
+ } finally {
22091
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
22092
+ }
22093
+ }
22094
+
20291
22095
  /**
20292
22096
  * Extract a parsed SP3 product as the canonical precise-ephemeris samples, one
20293
22097
  * per real position record in ascending epoch order.
@@ -20560,6 +22364,37 @@ export function terminatorLatitudeDeg(sub_solar_latitude_deg, sub_solar_longitud
20560
22364
  return ret[0];
20561
22365
  }
20562
22366
 
22367
+ /**
22368
+ * Return an FNV-1a checksum for terrain store bytes.
22369
+ * @param {Uint8Array} bytes
22370
+ * @returns {bigint}
22371
+ */
22372
+ export function terrainStoreChecksum64(bytes) {
22373
+ const ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc);
22374
+ const len0 = WASM_VECTOR_LEN;
22375
+ const ret = wasm.terrainStoreChecksum64(ptr0, len0);
22376
+ return BigInt.asUintN(64, ret);
22377
+ }
22378
+
22379
+ /**
22380
+ * Time deviation for explicit averaging factors.
22381
+ *
22382
+ * `series` is `{ kind, values }`, `tau0S` is seconds, and
22383
+ * `averagingFactors` contains positive integer `m` values. Returns
22384
+ * `{ tauS, deviation, n }`.
22385
+ * @param {any} series
22386
+ * @param {number} tau0_s
22387
+ * @param {any} averaging_factors
22388
+ * @returns {any}
22389
+ */
22390
+ export function timeDeviation(series, tau0_s, averaging_factors) {
22391
+ const ret = wasm.timeDeviation(series, tau0_s, averaging_factors);
22392
+ if (ret[2]) {
22393
+ throw takeFromExternrefTable0(ret[1]);
22394
+ }
22395
+ return takeFromExternrefTable0(ret[0]);
22396
+ }
22397
+
20563
22398
  /**
20564
22399
  * Short uppercase identifier for a time scale, e.g. `"GPST"`.
20565
22400
  * @param {TimeScale} scale
@@ -20910,6 +22745,22 @@ export function wideLaneWavelength(f1_hz, f2_hz) {
20910
22745
  }
20911
22746
  return ret[0];
20912
22747
  }
22748
+
22749
+ /**
22750
+ * Convert a DTED tile tree and write canonical terrain store bytes to a path.
22751
+ * @param {string} root
22752
+ * @param {string} out_path
22753
+ */
22754
+ export function writeDtedTreeToMmapStore(root, out_path) {
22755
+ const ptr0 = passStringToWasm0(root, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
22756
+ const len0 = WASM_VECTOR_LEN;
22757
+ const ptr1 = passStringToWasm0(out_path, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
22758
+ const len1 = WASM_VECTOR_LEN;
22759
+ const ret = wasm.writeDtedTreeToMmapStore(ptr0, len0, ptr1, len1);
22760
+ if (ret[1]) {
22761
+ throw takeFromExternrefTable0(ret[0]);
22762
+ }
22763
+ }
20913
22764
  function __wbg_get_imports() {
20914
22765
  const import0 = {
20915
22766
  __proto__: null,
@@ -21290,6 +23141,10 @@ function __wbg_get_imports() {
21290
23141
  const ret = SpkSegment.__wrap(arg0);
21291
23142
  return ret;
21292
23143
  },
23144
+ __wbg_terrainstoretileindex_new: function(arg0) {
23145
+ const ret = TerrainStoreTileIndex.__wrap(arg0);
23146
+ return ret;
23147
+ },
21293
23148
  __wbg_tle_unwrap: function(arg0) {
21294
23149
  const ret = Tle.__unwrap(arg0);
21295
23150
  return ret;
@@ -21452,6 +23307,12 @@ const DragForceFinalization = (typeof FinalizationRegistry === 'undefined')
21452
23307
  const DtedTerrainFinalization = (typeof FinalizationRegistry === 'undefined')
21453
23308
  ? { register: () => {}, unregister: () => {} }
21454
23309
  : new FinalizationRegistry(ptr => wasm.__wbg_dtedterrain_free(ptr, 1));
23310
+ const Egm96FifteenMinuteGeoidFinalization = (typeof FinalizationRegistry === 'undefined')
23311
+ ? { register: () => {}, unregister: () => {} }
23312
+ : new FinalizationRegistry(ptr => wasm.__wbg_egm96fifteenminutegeoid_free(ptr, 1));
23313
+ const EllipsoidalHeightMFinalization = (typeof FinalizationRegistry === 'undefined')
23314
+ ? { register: () => {}, unregister: () => {} }
23315
+ : new FinalizationRegistry(ptr => wasm.__wbg_ellipsoidalheightm_free(ptr, 1));
21455
23316
  const EncounterFrameFinalization = (typeof FinalizationRegistry === 'undefined')
21456
23317
  ? { register: () => {}, unregister: () => {} }
21457
23318
  : new FinalizationRegistry(ptr => wasm.__wbg_encounterframe_free(ptr, 1));
@@ -21560,6 +23421,9 @@ const LookAnglesFinalization = (typeof FinalizationRegistry === 'undefined')
21560
23421
  const MappingFactorsFinalization = (typeof FinalizationRegistry === 'undefined')
21561
23422
  ? { register: () => {}, unregister: () => {} }
21562
23423
  : new FinalizationRegistry(ptr => wasm.__wbg_mappingfactors_free(ptr, 1));
23424
+ const MmapTerrainFinalization = (typeof FinalizationRegistry === 'undefined')
23425
+ ? { register: () => {}, unregister: () => {} }
23426
+ : new FinalizationRegistry(ptr => wasm.__wbg_mmapterrain_free(ptr, 1));
21563
23427
  const MoonElevationCrossingFinalization = (typeof FinalizationRegistry === 'undefined')
21564
23428
  ? { register: () => {}, unregister: () => {} }
21565
23429
  : new FinalizationRegistry(ptr => wasm.__wbg_moonelevationcrossing_free(ptr, 1));
@@ -21644,6 +23508,9 @@ const OpmSpacecraftFinalization = (typeof FinalizationRegistry === 'undefined')
21644
23508
  const OpmStateFinalization = (typeof FinalizationRegistry === 'undefined')
21645
23509
  ? { register: () => {}, unregister: () => {} }
21646
23510
  : new FinalizationRegistry(ptr => wasm.__wbg_opmstate_free(ptr, 1));
23511
+ const OrthometricHeightMFinalization = (typeof FinalizationRegistry === 'undefined')
23512
+ ? { register: () => {}, unregister: () => {} }
23513
+ : new FinalizationRegistry(ptr => wasm.__wbg_orthometricheightm_free(ptr, 1));
21647
23514
  const ParsedTleFileFinalization = (typeof FinalizationRegistry === 'undefined')
21648
23515
  ? { register: () => {}, unregister: () => {} }
21649
23516
  : new FinalizationRegistry(ptr => wasm.__wbg_parsedtlefile_free(ptr, 1));
@@ -21659,6 +23526,9 @@ const PppFixedSolutionFinalization = (typeof FinalizationRegistry === 'undefined
21659
23526
  const PppFloatSolutionFinalization = (typeof FinalizationRegistry === 'undefined')
21660
23527
  ? { register: () => {}, unregister: () => {} }
21661
23528
  : new FinalizationRegistry(ptr => wasm.__wbg_pppfloatsolution_free(ptr, 1));
23529
+ const PreciseEphemerisInterpolantFinalization = (typeof FinalizationRegistry === 'undefined')
23530
+ ? { register: () => {}, unregister: () => {} }
23531
+ : new FinalizationRegistry(ptr => wasm.__wbg_preciseephemerisinterpolant_free(ptr, 1));
21662
23532
  const PreciseEphemerisSampleSourceFinalization = (typeof FinalizationRegistry === 'undefined')
21663
23533
  ? { register: () => {}, unregister: () => {} }
21664
23534
  : new FinalizationRegistry(ptr => wasm.__wbg_preciseephemerissamplesource_free(ptr, 1));
@@ -21785,6 +23655,12 @@ const SsrCorrectionStoreFinalization = (typeof FinalizationRegistry === 'undefin
21785
23655
  const SunMoonFinalization = (typeof FinalizationRegistry === 'undefined')
21786
23656
  ? { register: () => {}, unregister: () => {} }
21787
23657
  : new FinalizationRegistry(ptr => wasm.__wbg_sunmoon_free(ptr, 1));
23658
+ const TerrainGeoidModelFinalization = (typeof FinalizationRegistry === 'undefined')
23659
+ ? { register: () => {}, unregister: () => {} }
23660
+ : new FinalizationRegistry(ptr => wasm.__wbg_terraingeoidmodel_free(ptr, 1));
23661
+ const TerrainStoreTileIndexFinalization = (typeof FinalizationRegistry === 'undefined')
23662
+ ? { register: () => {}, unregister: () => {} }
23663
+ : new FinalizationRegistry(ptr => wasm.__wbg_terrainstoretileindex_free(ptr, 1));
21788
23664
  const TleFinalization = (typeof FinalizationRegistry === 'undefined')
21789
23665
  ? { register: () => {}, unregister: () => {} }
21790
23666
  : new FinalizationRegistry(ptr => wasm.__wbg_tle_free(ptr, 1));