whitebox-wasm 0.1.0 → 0.2.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/whitebox_wasm.js CHANGED
@@ -1,8 +1,1001 @@
1
1
  /* @ts-self-types="./whitebox_wasm.d.ts" */
2
2
 
3
3
  /**
4
- * Decode a GeoTIFF and return only its georeferencing/shape metadata as JSON:
5
- * `{"ok":true,"width":W,"height":H,"bands":B,"epsg":E|null,"nodata":V|null}`.
4
+ * Builder for encoding a Cloud Optimized GeoTIFF (tiled, with overviews and
5
+ * GDAL ghost metadata) to bytes. A COG is also a valid plain GeoTIFF.
6
+ *
7
+ * Configure with the `set_*` methods, then call one of `write_*` with the
8
+ * pixel data to get a `Uint8Array` of the encoded file.
9
+ */
10
+ export class CogBuilder {
11
+ __destroy_into_raw() {
12
+ const ptr = this.__wbg_ptr;
13
+ this.__wbg_ptr = 0;
14
+ CogBuilderFinalization.unregister(this);
15
+ return ptr;
16
+ }
17
+ free() {
18
+ const ptr = this.__destroy_into_raw();
19
+ wasm.__wbg_cogbuilder_free(ptr, 0);
20
+ }
21
+ /**
22
+ * New builder for a `width` x `height` raster with `bands` bands.
23
+ * @param {number} width
24
+ * @param {number} height
25
+ * @param {number} bands
26
+ */
27
+ constructor(width, height, bands) {
28
+ const ret = wasm.cogbuilder_new(width, height, bands);
29
+ this.__wbg_ptr = ret;
30
+ CogBuilderFinalization.register(this, this.__wbg_ptr, this);
31
+ return this;
32
+ }
33
+ /**
34
+ * Force BigTIFF (64-bit offsets) for very large outputs.
35
+ * @param {boolean} on
36
+ */
37
+ set_bigtiff(on) {
38
+ wasm.cogbuilder_set_bigtiff(this.__wbg_ptr, on);
39
+ }
40
+ /**
41
+ * Compression: `none`, `lzw`, `deflate`, `packbits`, `webp`, `jpeg`, `jpegxl`.
42
+ * @param {string} name
43
+ */
44
+ set_compression(name) {
45
+ try {
46
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
47
+ const ptr0 = passStringToWasm0(name, wasm.__wbindgen_export2, wasm.__wbindgen_export3);
48
+ const len0 = WASM_VECTOR_LEN;
49
+ wasm.cogbuilder_set_compression(retptr, this.__wbg_ptr, ptr0, len0);
50
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
51
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
52
+ if (r1) {
53
+ throw takeObject(r0);
54
+ }
55
+ } finally {
56
+ wasm.__wbindgen_add_to_stack_pointer(16);
57
+ }
58
+ }
59
+ /**
60
+ * Set the EPSG code (1..=65535).
61
+ * @param {number} epsg
62
+ */
63
+ set_epsg(epsg) {
64
+ wasm.cogbuilder_set_epsg(this.__wbg_ptr, epsg);
65
+ }
66
+ /**
67
+ * Set the full affine geo-transform:
68
+ * `[x_origin, pixel_width, row_rotation, y_origin, col_rotation, pixel_height]`.
69
+ * @param {Float64Array} gt
70
+ */
71
+ set_geo_transform(gt) {
72
+ try {
73
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
74
+ const ptr0 = passArrayF64ToWasm0(gt, wasm.__wbindgen_export2);
75
+ const len0 = WASM_VECTOR_LEN;
76
+ wasm.cogbuilder_set_geo_transform(retptr, this.__wbg_ptr, ptr0, len0);
77
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
78
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
79
+ if (r1) {
80
+ throw takeObject(r0);
81
+ }
82
+ } finally {
83
+ wasm.__wbindgen_add_to_stack_pointer(16);
84
+ }
85
+ }
86
+ /**
87
+ * Set the no-data sentinel value.
88
+ * @param {number} v
89
+ */
90
+ set_nodata(v) {
91
+ wasm.cogbuilder_set_nodata(this.__wbg_ptr, v);
92
+ }
93
+ /**
94
+ * Convenience: north-up geo-transform from upper-left origin and pixel size.
95
+ * @param {number} x_min
96
+ * @param {number} y_max
97
+ * @param {number} pixel_size
98
+ */
99
+ set_origin(x_min, y_max, pixel_size) {
100
+ wasm.cogbuilder_set_origin(this.__wbg_ptr, x_min, y_max, pixel_size);
101
+ }
102
+ /**
103
+ * Explicit overview decimation factors (e.g. `[2,4,8]`); empty disables overviews.
104
+ * @param {Uint32Array} levels
105
+ */
106
+ set_overview_levels(levels) {
107
+ const ptr0 = passArray32ToWasm0(levels, wasm.__wbindgen_export2);
108
+ const len0 = WASM_VECTOR_LEN;
109
+ wasm.cogbuilder_set_overview_levels(this.__wbg_ptr, ptr0, len0);
110
+ }
111
+ /**
112
+ * Internal tile size in pixels (default 512).
113
+ * @param {number} px
114
+ */
115
+ set_tile_size(px) {
116
+ wasm.cogbuilder_set_tile_size(this.__wbg_ptr, px);
117
+ }
118
+ /**
119
+ * Encode `f32` pixel data to a COG. `Uint8Array`.
120
+ * @param {Float32Array} data
121
+ * @returns {Uint8Array}
122
+ */
123
+ write_f32(data) {
124
+ try {
125
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
126
+ const ptr0 = passArrayF32ToWasm0(data, wasm.__wbindgen_export2);
127
+ const len0 = WASM_VECTOR_LEN;
128
+ wasm.cogbuilder_write_f32(retptr, this.__wbg_ptr, ptr0, len0);
129
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
130
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
131
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
132
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
133
+ if (r3) {
134
+ throw takeObject(r2);
135
+ }
136
+ var v2 = getArrayU8FromWasm0(r0, r1).slice();
137
+ wasm.__wbindgen_export(r0, r1 * 1, 1);
138
+ return v2;
139
+ } finally {
140
+ wasm.__wbindgen_add_to_stack_pointer(16);
141
+ }
142
+ }
143
+ /**
144
+ * Encode `f64` pixel data to a COG. `Uint8Array`.
145
+ * @param {Float64Array} data
146
+ * @returns {Uint8Array}
147
+ */
148
+ write_f64(data) {
149
+ try {
150
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
151
+ const ptr0 = passArrayF64ToWasm0(data, wasm.__wbindgen_export2);
152
+ const len0 = WASM_VECTOR_LEN;
153
+ wasm.cogbuilder_write_f64(retptr, this.__wbg_ptr, ptr0, len0);
154
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
155
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
156
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
157
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
158
+ if (r3) {
159
+ throw takeObject(r2);
160
+ }
161
+ var v2 = getArrayU8FromWasm0(r0, r1).slice();
162
+ wasm.__wbindgen_export(r0, r1 * 1, 1);
163
+ return v2;
164
+ } finally {
165
+ wasm.__wbindgen_add_to_stack_pointer(16);
166
+ }
167
+ }
168
+ /**
169
+ * Encode `u8` pixel data to a COG. `Uint8Array`.
170
+ * @param {Uint8Array} data
171
+ * @returns {Uint8Array}
172
+ */
173
+ write_u8(data) {
174
+ try {
175
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
176
+ const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_export2);
177
+ const len0 = WASM_VECTOR_LEN;
178
+ wasm.cogbuilder_write_u8(retptr, this.__wbg_ptr, ptr0, len0);
179
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
180
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
181
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
182
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
183
+ if (r3) {
184
+ throw takeObject(r2);
185
+ }
186
+ var v2 = getArrayU8FromWasm0(r0, r1).slice();
187
+ wasm.__wbindgen_export(r0, r1 * 1, 1);
188
+ return v2;
189
+ } finally {
190
+ wasm.__wbindgen_add_to_stack_pointer(16);
191
+ }
192
+ }
193
+ }
194
+ if (Symbol.dispose) CogBuilder.prototype[Symbol.dispose] = CogBuilder.prototype.free;
195
+
196
+ /**
197
+ * Range-request reader for a (tiled) Cloud Optimized GeoTIFF.
198
+ *
199
+ * The wasm module does no network I/O itself; this class parses the header and
200
+ * tells the JS host exactly which byte ranges to fetch, then decodes the tiles
201
+ * the host fetches. Typical flow:
202
+ *
203
+ * 1. Range-fetch the first chunk of the file (e.g. 0..1 MiB) and
204
+ * `new CogStream(headerBytes)`. If it throws "need more header bytes", fetch
205
+ * a larger prefix and retry.
206
+ * 2. Pick a level (0 = full res, higher = overviews) and a pixel window.
207
+ * 3. `tiles_for_window(level, x, y, w, h)` returns the tiles and their byte
208
+ * ranges; range-fetch each, then `decode_tile_f64(level, bytes)`.
209
+ */
210
+ export class CogStream {
211
+ __destroy_into_raw() {
212
+ const ptr = this.__wbg_ptr;
213
+ this.__wbg_ptr = 0;
214
+ CogStreamFinalization.unregister(this);
215
+ return ptr;
216
+ }
217
+ free() {
218
+ const ptr = this.__destroy_into_raw();
219
+ wasm.__wbg_cogstream_free(ptr, 0);
220
+ }
221
+ /**
222
+ * Bounding box `[min_x, min_y, max_x, max_y]` in the dataset CRS, or empty.
223
+ * @returns {Float64Array}
224
+ */
225
+ bounding_box() {
226
+ try {
227
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
228
+ wasm.cogstream_bounding_box(retptr, this.__wbg_ptr);
229
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
230
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
231
+ var v1 = getArrayF64FromWasm0(r0, r1).slice();
232
+ wasm.__wbindgen_export(r0, r1 * 8, 8);
233
+ return v1;
234
+ } finally {
235
+ wasm.__wbindgen_add_to_stack_pointer(16);
236
+ }
237
+ }
238
+ /**
239
+ * Bounds `[min_lon, min_lat, max_lon, max_lat]` in WGS84 degrees, or empty.
240
+ * @returns {Float64Array}
241
+ */
242
+ bounds_lonlat() {
243
+ try {
244
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
245
+ wasm.cogstream_bounds_lonlat(retptr, this.__wbg_ptr);
246
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
247
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
248
+ var v1 = getArrayF64FromWasm0(r0, r1).slice();
249
+ wasm.__wbindgen_export(r0, r1 * 8, 8);
250
+ return v1;
251
+ } finally {
252
+ wasm.__wbindgen_add_to_stack_pointer(16);
253
+ }
254
+ }
255
+ /**
256
+ * Image center `[x, y]` in the dataset CRS, or empty.
257
+ * @returns {Float64Array}
258
+ */
259
+ center() {
260
+ try {
261
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
262
+ wasm.cogstream_center(retptr, this.__wbg_ptr);
263
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
264
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
265
+ var v1 = getArrayF64FromWasm0(r0, r1).slice();
266
+ wasm.__wbindgen_export(r0, r1 * 8, 8);
267
+ return v1;
268
+ } finally {
269
+ wasm.__wbindgen_add_to_stack_pointer(16);
270
+ }
271
+ }
272
+ /**
273
+ * Image center `[lon, lat]` in WGS84 degrees, or empty if not convertible.
274
+ * @returns {Float64Array}
275
+ */
276
+ center_lonlat() {
277
+ try {
278
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
279
+ wasm.cogstream_center_lonlat(retptr, this.__wbg_ptr);
280
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
281
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
282
+ var v1 = getArrayF64FromWasm0(r0, r1).slice();
283
+ wasm.__wbindgen_export(r0, r1 * 8, 8);
284
+ return v1;
285
+ } finally {
286
+ wasm.__wbindgen_add_to_stack_pointer(16);
287
+ }
288
+ }
289
+ /**
290
+ * Decode one tile's fetched (compressed) bytes into an `f64` `Float64Array`,
291
+ * pixel-interleaved, length `tile_width * tile_height * bands`. Edge tiles
292
+ * come back full-size; clip to the image/window on the JS side.
293
+ * @param {number} level
294
+ * @param {Uint8Array} tile_bytes
295
+ * @returns {Float64Array}
296
+ */
297
+ decode_tile_f64(level, tile_bytes) {
298
+ try {
299
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
300
+ const ptr0 = passArray8ToWasm0(tile_bytes, wasm.__wbindgen_export2);
301
+ const len0 = WASM_VECTOR_LEN;
302
+ wasm.cogstream_decode_tile_f64(retptr, this.__wbg_ptr, level, ptr0, len0);
303
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
304
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
305
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
306
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
307
+ if (r3) {
308
+ throw takeObject(r2);
309
+ }
310
+ var v2 = getArrayF64FromWasm0(r0, r1).slice();
311
+ wasm.__wbindgen_export(r0, r1 * 8, 8);
312
+ return v2;
313
+ } finally {
314
+ wasm.__wbindgen_add_to_stack_pointer(16);
315
+ }
316
+ }
317
+ /**
318
+ * EPSG code of the full-resolution level, if any.
319
+ * @returns {number | undefined}
320
+ */
321
+ get epsg() {
322
+ const ret = wasm.cogstream_epsg(this.__wbg_ptr);
323
+ return ret === Number.MAX_SAFE_INTEGER ? undefined : ret;
324
+ }
325
+ /**
326
+ * Level-0 geo-transform `[x_origin, pixel_width, row_rot, y_origin, col_rot,
327
+ * pixel_height]`, or empty if not georeferenced.
328
+ * @returns {Float64Array}
329
+ */
330
+ geo_transform() {
331
+ try {
332
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
333
+ wasm.cogstream_geo_transform(retptr, this.__wbg_ptr);
334
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
335
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
336
+ var v1 = getArrayF64FromWasm0(r0, r1).slice();
337
+ wasm.__wbindgen_export(r0, r1 * 8, 8);
338
+ return v1;
339
+ } finally {
340
+ wasm.__wbindgen_add_to_stack_pointer(16);
341
+ }
342
+ }
343
+ /**
344
+ * JSON array describing every level: `[{level,width,height,tile_width,
345
+ * tile_height,tiles_x,tiles_y,bands,bits_per_sample,sample_format,compression}]`.
346
+ * @returns {string}
347
+ */
348
+ levels_json() {
349
+ let deferred1_0;
350
+ let deferred1_1;
351
+ try {
352
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
353
+ wasm.cogstream_levels_json(retptr, this.__wbg_ptr);
354
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
355
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
356
+ deferred1_0 = r0;
357
+ deferred1_1 = r1;
358
+ return getStringFromWasm0(r0, r1);
359
+ } finally {
360
+ wasm.__wbindgen_add_to_stack_pointer(16);
361
+ wasm.__wbindgen_export(deferred1_0, deferred1_1, 1);
362
+ }
363
+ }
364
+ /**
365
+ * Parse a COG's tile layout from front-of-file header bytes.
366
+ * @param {Uint8Array} header_bytes
367
+ */
368
+ constructor(header_bytes) {
369
+ try {
370
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
371
+ const ptr0 = passArray8ToWasm0(header_bytes, wasm.__wbindgen_export2);
372
+ const len0 = WASM_VECTOR_LEN;
373
+ wasm.cogstream_new(retptr, ptr0, len0);
374
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
375
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
376
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
377
+ if (r2) {
378
+ throw takeObject(r1);
379
+ }
380
+ this.__wbg_ptr = r0;
381
+ CogStreamFinalization.register(this, this.__wbg_ptr, this);
382
+ return this;
383
+ } finally {
384
+ wasm.__wbindgen_add_to_stack_pointer(16);
385
+ }
386
+ }
387
+ /**
388
+ * No-data sentinel, if declared.
389
+ * @returns {number | undefined}
390
+ */
391
+ get nodata() {
392
+ try {
393
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
394
+ wasm.cogstream_nodata(retptr, this.__wbg_ptr);
395
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
396
+ var r2 = getDataViewMemory0().getFloat64(retptr + 8 * 1, true);
397
+ return r0 === 0 ? undefined : r2;
398
+ } finally {
399
+ wasm.__wbindgen_add_to_stack_pointer(16);
400
+ }
401
+ }
402
+ /**
403
+ * Number of resolution levels (1 + overview count).
404
+ * @returns {number}
405
+ */
406
+ get num_levels() {
407
+ const ret = wasm.cogstream_num_levels(this.__wbg_ptr);
408
+ return ret >>> 0;
409
+ }
410
+ /**
411
+ * `[offset, length]` byte range of the tile at `(col, row)` on `level`.
412
+ * @param {number} level
413
+ * @param {number} col
414
+ * @param {number} row
415
+ * @returns {Float64Array}
416
+ */
417
+ tile_range(level, col, row) {
418
+ try {
419
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
420
+ wasm.cogstream_tile_range(retptr, this.__wbg_ptr, level, col, row);
421
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
422
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
423
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
424
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
425
+ if (r3) {
426
+ throw takeObject(r2);
427
+ }
428
+ var v1 = getArrayF64FromWasm0(r0, r1).slice();
429
+ wasm.__wbindgen_export(r0, r1 * 8, 8);
430
+ return v1;
431
+ } finally {
432
+ wasm.__wbindgen_add_to_stack_pointer(16);
433
+ }
434
+ }
435
+ /**
436
+ * Tiles covering a pixel window on `level`, as a JSON array of
437
+ * `{col,row,offset,length}`. Fetch each byte range, then `decode_tile_f64`.
438
+ * @param {number} level
439
+ * @param {number} x
440
+ * @param {number} y
441
+ * @param {number} w
442
+ * @param {number} h
443
+ * @returns {string}
444
+ */
445
+ tiles_for_window(level, x, y, w, h) {
446
+ let deferred2_0;
447
+ let deferred2_1;
448
+ try {
449
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
450
+ wasm.cogstream_tiles_for_window(retptr, this.__wbg_ptr, level, x, y, w, h);
451
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
452
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
453
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
454
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
455
+ var ptr1 = r0;
456
+ var len1 = r1;
457
+ if (r3) {
458
+ ptr1 = 0; len1 = 0;
459
+ throw takeObject(r2);
460
+ }
461
+ deferred2_0 = ptr1;
462
+ deferred2_1 = len1;
463
+ return getStringFromWasm0(ptr1, len1);
464
+ } finally {
465
+ wasm.__wbindgen_add_to_stack_pointer(16);
466
+ wasm.__wbindgen_export(deferred2_0, deferred2_1, 1);
467
+ }
468
+ }
469
+ }
470
+ if (Symbol.dispose) CogStream.prototype[Symbol.dispose] = CogStream.prototype.free;
471
+
472
+ /**
473
+ * A parsed GeoTIFF held in memory. Construct once, then call the accessor and
474
+ * `read_*` methods many times without re-parsing the file.
475
+ */
476
+ export class GeoTiffReader {
477
+ __destroy_into_raw() {
478
+ const ptr = this.__wbg_ptr;
479
+ this.__wbg_ptr = 0;
480
+ GeoTiffReaderFinalization.unregister(this);
481
+ return ptr;
482
+ }
483
+ free() {
484
+ const ptr = this.__destroy_into_raw();
485
+ wasm.__wbg_geotiffreader_free(ptr, 0);
486
+ }
487
+ /**
488
+ * @returns {number}
489
+ */
490
+ get bands() {
491
+ const ret = wasm.geotiffreader_bands(this.__wbg_ptr);
492
+ return ret >>> 0;
493
+ }
494
+ /**
495
+ * @returns {number}
496
+ */
497
+ get bits_per_sample() {
498
+ const ret = wasm.geotiffreader_bits_per_sample(this.__wbg_ptr);
499
+ return ret;
500
+ }
501
+ /**
502
+ * Bounding box as `[min_x, min_y, max_x, max_y]`, or empty if not georeferenced.
503
+ * @returns {Float64Array}
504
+ */
505
+ bounding_box() {
506
+ try {
507
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
508
+ wasm.geotiffreader_bounding_box(retptr, this.__wbg_ptr);
509
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
510
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
511
+ var v1 = getArrayF64FromWasm0(r0, r1).slice();
512
+ wasm.__wbindgen_export(r0, r1 * 8, 8);
513
+ return v1;
514
+ } finally {
515
+ wasm.__wbindgen_add_to_stack_pointer(16);
516
+ }
517
+ }
518
+ /**
519
+ * Bounds `[min_lon, min_lat, max_lon, max_lat]` in WGS84 degrees, or empty
520
+ * if not convertible.
521
+ * @returns {Float64Array}
522
+ */
523
+ bounds_lonlat() {
524
+ try {
525
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
526
+ wasm.geotiffreader_bounds_lonlat(retptr, this.__wbg_ptr);
527
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
528
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
529
+ var v1 = getArrayF64FromWasm0(r0, r1).slice();
530
+ wasm.__wbindgen_export(r0, r1 * 8, 8);
531
+ return v1;
532
+ } finally {
533
+ wasm.__wbindgen_add_to_stack_pointer(16);
534
+ }
535
+ }
536
+ /**
537
+ * Image center `[x, y]` in the dataset CRS, or empty if not georeferenced.
538
+ * @returns {Float64Array}
539
+ */
540
+ center() {
541
+ try {
542
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
543
+ wasm.geotiffreader_center(retptr, this.__wbg_ptr);
544
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
545
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
546
+ var v1 = getArrayF64FromWasm0(r0, r1).slice();
547
+ wasm.__wbindgen_export(r0, r1 * 8, 8);
548
+ return v1;
549
+ } finally {
550
+ wasm.__wbindgen_add_to_stack_pointer(16);
551
+ }
552
+ }
553
+ /**
554
+ * Image center `[lon, lat]` in WGS84 degrees, or empty if not georeferenced
555
+ * or the CRS is not convertible.
556
+ * @returns {Float64Array}
557
+ */
558
+ center_lonlat() {
559
+ try {
560
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
561
+ wasm.geotiffreader_center_lonlat(retptr, this.__wbg_ptr);
562
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
563
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
564
+ var v1 = getArrayF64FromWasm0(r0, r1).slice();
565
+ wasm.__wbindgen_export(r0, r1 * 8, 8);
566
+ return v1;
567
+ } finally {
568
+ wasm.__wbindgen_add_to_stack_pointer(16);
569
+ }
570
+ }
571
+ /**
572
+ * @returns {string}
573
+ */
574
+ get compression() {
575
+ let deferred1_0;
576
+ let deferred1_1;
577
+ try {
578
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
579
+ wasm.geotiffreader_compression(retptr, this.__wbg_ptr);
580
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
581
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
582
+ deferred1_0 = r0;
583
+ deferred1_1 = r1;
584
+ return getStringFromWasm0(r0, r1);
585
+ } finally {
586
+ wasm.__wbindgen_add_to_stack_pointer(16);
587
+ wasm.__wbindgen_export(deferred1_0, deferred1_1, 1);
588
+ }
589
+ }
590
+ /**
591
+ * EPSG code, or `undefined` if the file is not georeferenced by EPSG.
592
+ * @returns {number | undefined}
593
+ */
594
+ get epsg() {
595
+ const ret = wasm.geotiffreader_epsg(this.__wbg_ptr);
596
+ return ret === Number.MAX_SAFE_INTEGER ? undefined : ret;
597
+ }
598
+ /**
599
+ * Affine geo-transform as `[x_origin, pixel_width, row_rotation,
600
+ * y_origin, col_rotation, pixel_height]`, or an empty array if absent.
601
+ * @returns {Float64Array}
602
+ */
603
+ geo_transform() {
604
+ try {
605
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
606
+ wasm.geotiffreader_geo_transform(retptr, this.__wbg_ptr);
607
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
608
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
609
+ var v1 = getArrayF64FromWasm0(r0, r1).slice();
610
+ wasm.__wbindgen_export(r0, r1 * 8, 8);
611
+ return v1;
612
+ } finally {
613
+ wasm.__wbindgen_add_to_stack_pointer(16);
614
+ }
615
+ }
616
+ /**
617
+ * @returns {number}
618
+ */
619
+ get height() {
620
+ const ret = wasm.geotiffreader_height(this.__wbg_ptr);
621
+ return ret >>> 0;
622
+ }
623
+ /**
624
+ * Full metadata as a JSON string (same shape as [`geotiff_info`]).
625
+ * @returns {string}
626
+ */
627
+ info_json() {
628
+ let deferred1_0;
629
+ let deferred1_1;
630
+ try {
631
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
632
+ wasm.geotiffreader_info_json(retptr, this.__wbg_ptr);
633
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
634
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
635
+ deferred1_0 = r0;
636
+ deferred1_1 = r1;
637
+ return getStringFromWasm0(r0, r1);
638
+ } finally {
639
+ wasm.__wbindgen_add_to_stack_pointer(16);
640
+ wasm.__wbindgen_export(deferred1_0, deferred1_1, 1);
641
+ }
642
+ }
643
+ /**
644
+ * @returns {boolean}
645
+ */
646
+ get is_bigtiff() {
647
+ const ret = wasm.geotiffreader_is_bigtiff(this.__wbg_ptr);
648
+ return ret !== 0;
649
+ }
650
+ /**
651
+ * Parse a GeoTIFF / BigTIFF / COG from raw bytes.
652
+ * @param {Uint8Array} data
653
+ */
654
+ constructor(data) {
655
+ try {
656
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
657
+ const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_export2);
658
+ const len0 = WASM_VECTOR_LEN;
659
+ wasm.geotiffreader_new(retptr, ptr0, len0);
660
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
661
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
662
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
663
+ if (r2) {
664
+ throw takeObject(r1);
665
+ }
666
+ this.__wbg_ptr = r0;
667
+ GeoTiffReaderFinalization.register(this, this.__wbg_ptr, this);
668
+ return this;
669
+ } finally {
670
+ wasm.__wbindgen_add_to_stack_pointer(16);
671
+ }
672
+ }
673
+ /**
674
+ * No-data sentinel, or `undefined` if none is declared.
675
+ * @returns {number | undefined}
676
+ */
677
+ get nodata() {
678
+ try {
679
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
680
+ wasm.geotiffreader_nodata(retptr, this.__wbg_ptr);
681
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
682
+ var r2 = getDataViewMemory0().getFloat64(retptr + 8 * 1, true);
683
+ return r0 === 0 ? undefined : r2;
684
+ } finally {
685
+ wasm.__wbindgen_add_to_stack_pointer(16);
686
+ }
687
+ }
688
+ /**
689
+ * Read every band as `f64`, interleaved per pixel (`band0,band1,...`).
690
+ * @returns {Float64Array}
691
+ */
692
+ read_all_f64() {
693
+ try {
694
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
695
+ wasm.geotiffreader_read_all_f64(retptr, this.__wbg_ptr);
696
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
697
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
698
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
699
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
700
+ if (r3) {
701
+ throw takeObject(r2);
702
+ }
703
+ var v1 = getArrayF64FromWasm0(r0, r1).slice();
704
+ wasm.__wbindgen_export(r0, r1 * 8, 8);
705
+ return v1;
706
+ } finally {
707
+ wasm.__wbindgen_add_to_stack_pointer(16);
708
+ }
709
+ }
710
+ /**
711
+ * Read a band's raw, undecoded-to-native bytes. `Uint8Array`.
712
+ * @param {number} band
713
+ * @returns {Uint8Array}
714
+ */
715
+ read_band_bytes(band) {
716
+ try {
717
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
718
+ wasm.geotiffreader_read_band_bytes(retptr, this.__wbg_ptr, band);
719
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
720
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
721
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
722
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
723
+ if (r3) {
724
+ throw takeObject(r2);
725
+ }
726
+ var v1 = getArrayU8FromWasm0(r0, r1).slice();
727
+ wasm.__wbindgen_export(r0, r1 * 1, 1);
728
+ return v1;
729
+ } finally {
730
+ wasm.__wbindgen_add_to_stack_pointer(16);
731
+ }
732
+ }
733
+ /**
734
+ * Native `f32` band. `Float32Array`.
735
+ * @param {number} band
736
+ * @returns {Float32Array}
737
+ */
738
+ read_band_f32(band) {
739
+ try {
740
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
741
+ wasm.geotiffreader_read_band_f32(retptr, this.__wbg_ptr, band);
742
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
743
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
744
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
745
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
746
+ if (r3) {
747
+ throw takeObject(r2);
748
+ }
749
+ var v1 = getArrayF32FromWasm0(r0, r1).slice();
750
+ wasm.__wbindgen_export(r0, r1 * 4, 4);
751
+ return v1;
752
+ } finally {
753
+ wasm.__wbindgen_add_to_stack_pointer(16);
754
+ }
755
+ }
756
+ /**
757
+ * Read a band as `f64`, converting from any on-disk type. `Float64Array`.
758
+ * @param {number} band
759
+ * @returns {Float64Array}
760
+ */
761
+ read_band_f64(band) {
762
+ try {
763
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
764
+ wasm.geotiffreader_read_band_f64(retptr, this.__wbg_ptr, band);
765
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
766
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
767
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
768
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
769
+ if (r3) {
770
+ throw takeObject(r2);
771
+ }
772
+ var v1 = getArrayF64FromWasm0(r0, r1).slice();
773
+ wasm.__wbindgen_export(r0, r1 * 8, 8);
774
+ return v1;
775
+ } finally {
776
+ wasm.__wbindgen_add_to_stack_pointer(16);
777
+ }
778
+ }
779
+ /**
780
+ * Native `i16` band. `Int16Array`.
781
+ * @param {number} band
782
+ * @returns {Int16Array}
783
+ */
784
+ read_band_i16(band) {
785
+ try {
786
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
787
+ wasm.geotiffreader_read_band_i16(retptr, this.__wbg_ptr, band);
788
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
789
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
790
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
791
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
792
+ if (r3) {
793
+ throw takeObject(r2);
794
+ }
795
+ var v1 = getArrayI16FromWasm0(r0, r1).slice();
796
+ wasm.__wbindgen_export(r0, r1 * 2, 2);
797
+ return v1;
798
+ } finally {
799
+ wasm.__wbindgen_add_to_stack_pointer(16);
800
+ }
801
+ }
802
+ /**
803
+ * Native `i32` band. `Int32Array`.
804
+ * @param {number} band
805
+ * @returns {Int32Array}
806
+ */
807
+ read_band_i32(band) {
808
+ try {
809
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
810
+ wasm.geotiffreader_read_band_i32(retptr, this.__wbg_ptr, band);
811
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
812
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
813
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
814
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
815
+ if (r3) {
816
+ throw takeObject(r2);
817
+ }
818
+ var v1 = getArrayI32FromWasm0(r0, r1).slice();
819
+ wasm.__wbindgen_export(r0, r1 * 4, 4);
820
+ return v1;
821
+ } finally {
822
+ wasm.__wbindgen_add_to_stack_pointer(16);
823
+ }
824
+ }
825
+ /**
826
+ * Native `i8` band. `Int8Array`.
827
+ * @param {number} band
828
+ * @returns {Int8Array}
829
+ */
830
+ read_band_i8(band) {
831
+ try {
832
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
833
+ wasm.geotiffreader_read_band_i8(retptr, this.__wbg_ptr, band);
834
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
835
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
836
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
837
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
838
+ if (r3) {
839
+ throw takeObject(r2);
840
+ }
841
+ var v1 = getArrayI8FromWasm0(r0, r1).slice();
842
+ wasm.__wbindgen_export(r0, r1 * 1, 1);
843
+ return v1;
844
+ } finally {
845
+ wasm.__wbindgen_add_to_stack_pointer(16);
846
+ }
847
+ }
848
+ /**
849
+ * Native `u16` band. `Uint16Array`.
850
+ * @param {number} band
851
+ * @returns {Uint16Array}
852
+ */
853
+ read_band_u16(band) {
854
+ try {
855
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
856
+ wasm.geotiffreader_read_band_u16(retptr, this.__wbg_ptr, band);
857
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
858
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
859
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
860
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
861
+ if (r3) {
862
+ throw takeObject(r2);
863
+ }
864
+ var v1 = getArrayU16FromWasm0(r0, r1).slice();
865
+ wasm.__wbindgen_export(r0, r1 * 2, 2);
866
+ return v1;
867
+ } finally {
868
+ wasm.__wbindgen_add_to_stack_pointer(16);
869
+ }
870
+ }
871
+ /**
872
+ * Native `u32` band. `Uint32Array`.
873
+ * @param {number} band
874
+ * @returns {Uint32Array}
875
+ */
876
+ read_band_u32(band) {
877
+ try {
878
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
879
+ wasm.geotiffreader_read_band_u32(retptr, this.__wbg_ptr, band);
880
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
881
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
882
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
883
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
884
+ if (r3) {
885
+ throw takeObject(r2);
886
+ }
887
+ var v1 = getArrayU32FromWasm0(r0, r1).slice();
888
+ wasm.__wbindgen_export(r0, r1 * 4, 4);
889
+ return v1;
890
+ } finally {
891
+ wasm.__wbindgen_add_to_stack_pointer(16);
892
+ }
893
+ }
894
+ /**
895
+ * Native `u8` band. `Uint8Array`.
896
+ * @param {number} band
897
+ * @returns {Uint8Array}
898
+ */
899
+ read_band_u8(band) {
900
+ try {
901
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
902
+ wasm.geotiffreader_read_band_u8(retptr, this.__wbg_ptr, band);
903
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
904
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
905
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
906
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
907
+ if (r3) {
908
+ throw takeObject(r2);
909
+ }
910
+ var v1 = getArrayU8FromWasm0(r0, r1).slice();
911
+ wasm.__wbindgen_export(r0, r1 * 1, 1);
912
+ return v1;
913
+ } finally {
914
+ wasm.__wbindgen_add_to_stack_pointer(16);
915
+ }
916
+ }
917
+ /**
918
+ * @returns {string}
919
+ */
920
+ get sample_format() {
921
+ let deferred1_0;
922
+ let deferred1_1;
923
+ try {
924
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
925
+ wasm.geotiffreader_sample_format(retptr, this.__wbg_ptr);
926
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
927
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
928
+ deferred1_0 = r0;
929
+ deferred1_1 = r1;
930
+ return getStringFromWasm0(r0, r1);
931
+ } finally {
932
+ wasm.__wbindgen_add_to_stack_pointer(16);
933
+ wasm.__wbindgen_export(deferred1_0, deferred1_1, 1);
934
+ }
935
+ }
936
+ /**
937
+ * Band-0 statistics as a JSON string (same shape as [`geotiff_stats`]).
938
+ * @returns {string}
939
+ */
940
+ stats_json() {
941
+ let deferred1_0;
942
+ let deferred1_1;
943
+ try {
944
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
945
+ wasm.geotiffreader_stats_json(retptr, this.__wbg_ptr);
946
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
947
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
948
+ deferred1_0 = r0;
949
+ deferred1_1 = r1;
950
+ return getStringFromWasm0(r0, r1);
951
+ } finally {
952
+ wasm.__wbindgen_add_to_stack_pointer(16);
953
+ wasm.__wbindgen_export(deferred1_0, deferred1_1, 1);
954
+ }
955
+ }
956
+ /**
957
+ * GDAL value transform as `[scale, offset]` (physical = raw*scale+offset),
958
+ * or empty if none. Apply to `read_*` outputs to get physical values.
959
+ * @returns {Float64Array}
960
+ */
961
+ value_transform() {
962
+ try {
963
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
964
+ wasm.geotiffreader_value_transform(retptr, this.__wbg_ptr);
965
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
966
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
967
+ var v1 = getArrayF64FromWasm0(r0, r1).slice();
968
+ wasm.__wbindgen_export(r0, r1 * 8, 8);
969
+ return v1;
970
+ } finally {
971
+ wasm.__wbindgen_add_to_stack_pointer(16);
972
+ }
973
+ }
974
+ /**
975
+ * @returns {number}
976
+ */
977
+ get width() {
978
+ const ret = wasm.geotiffreader_width(this.__wbg_ptr);
979
+ return ret >>> 0;
980
+ }
981
+ }
982
+ if (Symbol.dispose) GeoTiffReader.prototype[Symbol.dispose] = GeoTiffReader.prototype.free;
983
+
984
+ /**
985
+ * Install a panic hook so Rust panics surface as readable `console.error`
986
+ * messages instead of an opaque `RuntimeError: unreachable`.
987
+ */
988
+ export function __start() {
989
+ wasm.__start();
990
+ }
991
+
992
+ /**
993
+ * Decode only a GeoTIFF's header and return its metadata as JSON. O(header)
994
+ * memory, so it works on multi-gigabyte rasters that whole-image reads cannot
995
+ * fit in WASM's 4 GiB address space.
996
+ *
997
+ * `{"ok":true,"width","height","bands","epsg"|null,"nodata"|null,
998
+ * "bits_per_sample","sample_format","compression","tiled","bigtiff"}`
6
999
  * @param {Uint8Array} data
7
1000
  * @returns {string}
8
1001
  */
@@ -11,7 +1004,7 @@ export function geotiff_info(data) {
11
1004
  let deferred2_1;
12
1005
  try {
13
1006
  const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
14
- const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_export);
1007
+ const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_export2);
15
1008
  const len0 = WASM_VECTOR_LEN;
16
1009
  wasm.geotiff_info(retptr, ptr0, len0);
17
1010
  var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
@@ -21,19 +1014,41 @@ export function geotiff_info(data) {
21
1014
  return getStringFromWasm0(r0, r1);
22
1015
  } finally {
23
1016
  wasm.__wbindgen_add_to_stack_pointer(16);
24
- wasm.__wbindgen_export2(deferred2_0, deferred2_1, 1);
1017
+ wasm.__wbindgen_export(deferred2_0, deferred2_1, 1);
25
1018
  }
26
1019
  }
27
1020
 
28
1021
  /**
29
- * Decode a GeoTIFF from raw bytes and return summary statistics as a JSON string.
30
- *
31
- * The returned JSON has the shape:
32
- * `{"ok":true,"width":W,"height":H,"bands":B,"epsg":E|null,"valid":N,
33
- * "min":..,"max":..,"mean":..}` on success, or
34
- * `{"ok":false,"error":"..."}` on failure.
35
- *
36
- * Statistics are computed over band 0, skipping NaN and the nodata value.
1022
+ * Read a single band of pixel values as an `f64` `Float64Array` (any on-disk
1023
+ * sample format is converted), row-major, length `width * height`.
1024
+ * @param {Uint8Array} data
1025
+ * @param {number} band
1026
+ * @returns {Float64Array}
1027
+ */
1028
+ export function geotiff_read_band_f64(data, band) {
1029
+ try {
1030
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
1031
+ const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_export2);
1032
+ const len0 = WASM_VECTOR_LEN;
1033
+ wasm.geotiff_read_band_f64(retptr, ptr0, len0, band);
1034
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
1035
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
1036
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
1037
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
1038
+ if (r3) {
1039
+ throw takeObject(r2);
1040
+ }
1041
+ var v2 = getArrayF64FromWasm0(r0, r1).slice();
1042
+ wasm.__wbindgen_export(r0, r1 * 8, 8);
1043
+ return v2;
1044
+ } finally {
1045
+ wasm.__wbindgen_add_to_stack_pointer(16);
1046
+ }
1047
+ }
1048
+
1049
+ /**
1050
+ * Decode a GeoTIFF and return band-0 summary statistics as JSON:
1051
+ * `{"ok":true,"width","height","bands","epsg","valid","min","max","mean"}`.
37
1052
  * @param {Uint8Array} data
38
1053
  * @returns {string}
39
1054
  */
@@ -42,7 +1057,7 @@ export function geotiff_stats(data) {
42
1057
  let deferred2_1;
43
1058
  try {
44
1059
  const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
45
- const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_export);
1060
+ const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_export2);
46
1061
  const len0 = WASM_VECTOR_LEN;
47
1062
  wasm.geotiff_stats(retptr, ptr0, len0);
48
1063
  var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
@@ -52,7 +1067,7 @@ export function geotiff_stats(data) {
52
1067
  return getStringFromWasm0(r0, r1);
53
1068
  } finally {
54
1069
  wasm.__wbindgen_add_to_stack_pointer(16);
55
- wasm.__wbindgen_export2(deferred2_0, deferred2_1, 1);
1070
+ wasm.__wbindgen_export(deferred2_0, deferred2_1, 1);
56
1071
  }
57
1072
  }
58
1073
 
@@ -73,12 +1088,45 @@ export function version() {
73
1088
  return getStringFromWasm0(r0, r1);
74
1089
  } finally {
75
1090
  wasm.__wbindgen_add_to_stack_pointer(16);
76
- wasm.__wbindgen_export2(deferred1_0, deferred1_1, 1);
1091
+ wasm.__wbindgen_export(deferred1_0, deferred1_1, 1);
77
1092
  }
78
1093
  }
79
1094
  function __wbg_get_imports() {
80
1095
  const import0 = {
81
1096
  __proto__: null,
1097
+ __wbg___wbindgen_throw_ea4887a5f8f9a9db: function(arg0, arg1) {
1098
+ throw new Error(getStringFromWasm0(arg0, arg1));
1099
+ },
1100
+ __wbg_error_a6fa202b58aa1cd3: function(arg0, arg1) {
1101
+ let deferred0_0;
1102
+ let deferred0_1;
1103
+ try {
1104
+ deferred0_0 = arg0;
1105
+ deferred0_1 = arg1;
1106
+ console.error(getStringFromWasm0(arg0, arg1));
1107
+ } finally {
1108
+ wasm.__wbindgen_export(deferred0_0, deferred0_1, 1);
1109
+ }
1110
+ },
1111
+ __wbg_new_227d7c05414eb861: function() {
1112
+ const ret = new Error();
1113
+ return addHeapObject(ret);
1114
+ },
1115
+ __wbg_stack_3b0d974bbf31e44f: function(arg0, arg1) {
1116
+ const ret = getObject(arg1).stack;
1117
+ const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export2, wasm.__wbindgen_export3);
1118
+ const len1 = WASM_VECTOR_LEN;
1119
+ getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
1120
+ getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
1121
+ },
1122
+ __wbindgen_cast_0000000000000001: function(arg0, arg1) {
1123
+ // Cast intrinsic for `Ref(String) -> Externref`.
1124
+ const ret = getStringFromWasm0(arg0, arg1);
1125
+ return addHeapObject(ret);
1126
+ },
1127
+ __wbindgen_object_drop_ref: function(arg0) {
1128
+ takeObject(arg0);
1129
+ },
82
1130
  };
83
1131
  return {
84
1132
  __proto__: null,
@@ -86,6 +1134,71 @@ function __wbg_get_imports() {
86
1134
  };
87
1135
  }
88
1136
 
1137
+ const CogBuilderFinalization = (typeof FinalizationRegistry === 'undefined')
1138
+ ? { register: () => {}, unregister: () => {} }
1139
+ : new FinalizationRegistry(ptr => wasm.__wbg_cogbuilder_free(ptr, 1));
1140
+ const CogStreamFinalization = (typeof FinalizationRegistry === 'undefined')
1141
+ ? { register: () => {}, unregister: () => {} }
1142
+ : new FinalizationRegistry(ptr => wasm.__wbg_cogstream_free(ptr, 1));
1143
+ const GeoTiffReaderFinalization = (typeof FinalizationRegistry === 'undefined')
1144
+ ? { register: () => {}, unregister: () => {} }
1145
+ : new FinalizationRegistry(ptr => wasm.__wbg_geotiffreader_free(ptr, 1));
1146
+
1147
+ function addHeapObject(obj) {
1148
+ if (heap_next === heap.length) heap.push(heap.length + 1);
1149
+ const idx = heap_next;
1150
+ heap_next = heap[idx];
1151
+
1152
+ heap[idx] = obj;
1153
+ return idx;
1154
+ }
1155
+
1156
+ function dropObject(idx) {
1157
+ if (idx < 1028) return;
1158
+ heap[idx] = heap_next;
1159
+ heap_next = idx;
1160
+ }
1161
+
1162
+ function getArrayF32FromWasm0(ptr, len) {
1163
+ ptr = ptr >>> 0;
1164
+ return getFloat32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len);
1165
+ }
1166
+
1167
+ function getArrayF64FromWasm0(ptr, len) {
1168
+ ptr = ptr >>> 0;
1169
+ return getFloat64ArrayMemory0().subarray(ptr / 8, ptr / 8 + len);
1170
+ }
1171
+
1172
+ function getArrayI16FromWasm0(ptr, len) {
1173
+ ptr = ptr >>> 0;
1174
+ return getInt16ArrayMemory0().subarray(ptr / 2, ptr / 2 + len);
1175
+ }
1176
+
1177
+ function getArrayI32FromWasm0(ptr, len) {
1178
+ ptr = ptr >>> 0;
1179
+ return getInt32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len);
1180
+ }
1181
+
1182
+ function getArrayI8FromWasm0(ptr, len) {
1183
+ ptr = ptr >>> 0;
1184
+ return getInt8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);
1185
+ }
1186
+
1187
+ function getArrayU16FromWasm0(ptr, len) {
1188
+ ptr = ptr >>> 0;
1189
+ return getUint16ArrayMemory0().subarray(ptr / 2, ptr / 2 + len);
1190
+ }
1191
+
1192
+ function getArrayU32FromWasm0(ptr, len) {
1193
+ ptr = ptr >>> 0;
1194
+ return getUint32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len);
1195
+ }
1196
+
1197
+ function getArrayU8FromWasm0(ptr, len) {
1198
+ ptr = ptr >>> 0;
1199
+ return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);
1200
+ }
1201
+
89
1202
  let cachedDataViewMemory0 = null;
90
1203
  function getDataViewMemory0() {
91
1204
  if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {
@@ -94,10 +1207,66 @@ function getDataViewMemory0() {
94
1207
  return cachedDataViewMemory0;
95
1208
  }
96
1209
 
1210
+ let cachedFloat32ArrayMemory0 = null;
1211
+ function getFloat32ArrayMemory0() {
1212
+ if (cachedFloat32ArrayMemory0 === null || cachedFloat32ArrayMemory0.byteLength === 0) {
1213
+ cachedFloat32ArrayMemory0 = new Float32Array(wasm.memory.buffer);
1214
+ }
1215
+ return cachedFloat32ArrayMemory0;
1216
+ }
1217
+
1218
+ let cachedFloat64ArrayMemory0 = null;
1219
+ function getFloat64ArrayMemory0() {
1220
+ if (cachedFloat64ArrayMemory0 === null || cachedFloat64ArrayMemory0.byteLength === 0) {
1221
+ cachedFloat64ArrayMemory0 = new Float64Array(wasm.memory.buffer);
1222
+ }
1223
+ return cachedFloat64ArrayMemory0;
1224
+ }
1225
+
1226
+ let cachedInt16ArrayMemory0 = null;
1227
+ function getInt16ArrayMemory0() {
1228
+ if (cachedInt16ArrayMemory0 === null || cachedInt16ArrayMemory0.byteLength === 0) {
1229
+ cachedInt16ArrayMemory0 = new Int16Array(wasm.memory.buffer);
1230
+ }
1231
+ return cachedInt16ArrayMemory0;
1232
+ }
1233
+
1234
+ let cachedInt32ArrayMemory0 = null;
1235
+ function getInt32ArrayMemory0() {
1236
+ if (cachedInt32ArrayMemory0 === null || cachedInt32ArrayMemory0.byteLength === 0) {
1237
+ cachedInt32ArrayMemory0 = new Int32Array(wasm.memory.buffer);
1238
+ }
1239
+ return cachedInt32ArrayMemory0;
1240
+ }
1241
+
1242
+ let cachedInt8ArrayMemory0 = null;
1243
+ function getInt8ArrayMemory0() {
1244
+ if (cachedInt8ArrayMemory0 === null || cachedInt8ArrayMemory0.byteLength === 0) {
1245
+ cachedInt8ArrayMemory0 = new Int8Array(wasm.memory.buffer);
1246
+ }
1247
+ return cachedInt8ArrayMemory0;
1248
+ }
1249
+
97
1250
  function getStringFromWasm0(ptr, len) {
98
1251
  return decodeText(ptr >>> 0, len);
99
1252
  }
100
1253
 
1254
+ let cachedUint16ArrayMemory0 = null;
1255
+ function getUint16ArrayMemory0() {
1256
+ if (cachedUint16ArrayMemory0 === null || cachedUint16ArrayMemory0.byteLength === 0) {
1257
+ cachedUint16ArrayMemory0 = new Uint16Array(wasm.memory.buffer);
1258
+ }
1259
+ return cachedUint16ArrayMemory0;
1260
+ }
1261
+
1262
+ let cachedUint32ArrayMemory0 = null;
1263
+ function getUint32ArrayMemory0() {
1264
+ if (cachedUint32ArrayMemory0 === null || cachedUint32ArrayMemory0.byteLength === 0) {
1265
+ cachedUint32ArrayMemory0 = new Uint32Array(wasm.memory.buffer);
1266
+ }
1267
+ return cachedUint32ArrayMemory0;
1268
+ }
1269
+
101
1270
  let cachedUint8ArrayMemory0 = null;
102
1271
  function getUint8ArrayMemory0() {
103
1272
  if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
@@ -106,6 +1275,20 @@ function getUint8ArrayMemory0() {
106
1275
  return cachedUint8ArrayMemory0;
107
1276
  }
108
1277
 
1278
+ function getObject(idx) { return heap[idx]; }
1279
+
1280
+ let heap = new Array(1024).fill(undefined);
1281
+ heap.push(undefined, null, true, false);
1282
+
1283
+ let heap_next = heap.length;
1284
+
1285
+ function passArray32ToWasm0(arg, malloc) {
1286
+ const ptr = malloc(arg.length * 4, 4) >>> 0;
1287
+ getUint32ArrayMemory0().set(arg, ptr / 4);
1288
+ WASM_VECTOR_LEN = arg.length;
1289
+ return ptr;
1290
+ }
1291
+
109
1292
  function passArray8ToWasm0(arg, malloc) {
110
1293
  const ptr = malloc(arg.length * 1, 1) >>> 0;
111
1294
  getUint8ArrayMemory0().set(arg, ptr / 1);
@@ -113,6 +1296,63 @@ function passArray8ToWasm0(arg, malloc) {
113
1296
  return ptr;
114
1297
  }
115
1298
 
1299
+ function passArrayF32ToWasm0(arg, malloc) {
1300
+ const ptr = malloc(arg.length * 4, 4) >>> 0;
1301
+ getFloat32ArrayMemory0().set(arg, ptr / 4);
1302
+ WASM_VECTOR_LEN = arg.length;
1303
+ return ptr;
1304
+ }
1305
+
1306
+ function passArrayF64ToWasm0(arg, malloc) {
1307
+ const ptr = malloc(arg.length * 8, 8) >>> 0;
1308
+ getFloat64ArrayMemory0().set(arg, ptr / 8);
1309
+ WASM_VECTOR_LEN = arg.length;
1310
+ return ptr;
1311
+ }
1312
+
1313
+ function passStringToWasm0(arg, malloc, realloc) {
1314
+ if (realloc === undefined) {
1315
+ const buf = cachedTextEncoder.encode(arg);
1316
+ const ptr = malloc(buf.length, 1) >>> 0;
1317
+ getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);
1318
+ WASM_VECTOR_LEN = buf.length;
1319
+ return ptr;
1320
+ }
1321
+
1322
+ let len = arg.length;
1323
+ let ptr = malloc(len, 1) >>> 0;
1324
+
1325
+ const mem = getUint8ArrayMemory0();
1326
+
1327
+ let offset = 0;
1328
+
1329
+ for (; offset < len; offset++) {
1330
+ const code = arg.charCodeAt(offset);
1331
+ if (code > 0x7F) break;
1332
+ mem[ptr + offset] = code;
1333
+ }
1334
+ if (offset !== len) {
1335
+ if (offset !== 0) {
1336
+ arg = arg.slice(offset);
1337
+ }
1338
+ ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
1339
+ const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);
1340
+ const ret = cachedTextEncoder.encodeInto(arg, view);
1341
+
1342
+ offset += ret.written;
1343
+ ptr = realloc(ptr, len, offset, 1) >>> 0;
1344
+ }
1345
+
1346
+ WASM_VECTOR_LEN = offset;
1347
+ return ptr;
1348
+ }
1349
+
1350
+ function takeObject(idx) {
1351
+ const ret = getObject(idx);
1352
+ dropObject(idx);
1353
+ return ret;
1354
+ }
1355
+
116
1356
  let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
117
1357
  cachedTextDecoder.decode();
118
1358
  const MAX_SAFARI_DECODE_BYTES = 2146435072;
@@ -127,6 +1367,19 @@ function decodeText(ptr, len) {
127
1367
  return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
128
1368
  }
129
1369
 
1370
+ const cachedTextEncoder = new TextEncoder();
1371
+
1372
+ if (!('encodeInto' in cachedTextEncoder)) {
1373
+ cachedTextEncoder.encodeInto = function (arg, view) {
1374
+ const buf = cachedTextEncoder.encode(arg);
1375
+ view.set(buf);
1376
+ return {
1377
+ read: arg.length,
1378
+ written: buf.length
1379
+ };
1380
+ };
1381
+ }
1382
+
130
1383
  let WASM_VECTOR_LEN = 0;
131
1384
 
132
1385
  let wasmModule, wasmInstance, wasm;
@@ -135,7 +1388,15 @@ function __wbg_finalize_init(instance, module) {
135
1388
  wasm = instance.exports;
136
1389
  wasmModule = module;
137
1390
  cachedDataViewMemory0 = null;
1391
+ cachedFloat32ArrayMemory0 = null;
1392
+ cachedFloat64ArrayMemory0 = null;
1393
+ cachedInt16ArrayMemory0 = null;
1394
+ cachedInt32ArrayMemory0 = null;
1395
+ cachedInt8ArrayMemory0 = null;
1396
+ cachedUint16ArrayMemory0 = null;
1397
+ cachedUint32ArrayMemory0 = null;
138
1398
  cachedUint8ArrayMemory0 = null;
1399
+ wasm.__wbindgen_start();
139
1400
  return wasm;
140
1401
  }
141
1402