geolibre-wasm 0.5.3 → 0.7.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/README.md +80 -0
- package/geolibre-cli.wasm +0 -0
- package/geolibre_wasm.d.ts +102 -0
- package/geolibre_wasm.js +372 -0
- package/geolibre_wasm_bg.wasm +0 -0
- package/geolibre_wasm_bg.wasm.d.ts +16 -0
- package/package.json +1 -1
- package/tools.d.ts +91 -0
- package/tools.mjs +1059 -2
package/README.md
CHANGED
|
@@ -65,10 +65,87 @@ const { exitCode, stdout, files } = await runTool("slope", {
|
|
|
65
65
|
const slopeCog = files["slope.tif"]; // Uint8Array (Cloud Optimized GeoTIFF)
|
|
66
66
|
```
|
|
67
67
|
|
|
68
|
+
COG subsets can be extracted from a local file or an HTTP source. HTTP sources
|
|
69
|
+
use byte-range requests and do not download the full object:
|
|
70
|
+
|
|
71
|
+
```js
|
|
72
|
+
const { files } = await runTool("extract_cog_subset", {
|
|
73
|
+
args: [
|
|
74
|
+
"--url=https://example.com/scene.cog.tif",
|
|
75
|
+
"--bbox=-122.55,37.70,-122.35,37.84",
|
|
76
|
+
"--bbox_crs=4326",
|
|
77
|
+
"--output_crs=3857",
|
|
78
|
+
"--resolution=10",
|
|
79
|
+
"--nodata=-9999",
|
|
80
|
+
"--output=/work/subset.tif",
|
|
81
|
+
],
|
|
82
|
+
});
|
|
83
|
+
const subsetCog = files["subset.tif"];
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
WMS subsets can be requested from a GetMap endpoint that supports GeoTIFF
|
|
87
|
+
responses:
|
|
88
|
+
|
|
89
|
+
```js
|
|
90
|
+
const { files } = await runTool("extract_wms_subset", {
|
|
91
|
+
args: [
|
|
92
|
+
"--url=https://example.com/geoserver/wms",
|
|
93
|
+
"--layers=workspace:layer",
|
|
94
|
+
"--bbox=-122.55,37.70,-122.35,37.84",
|
|
95
|
+
"--bbox_crs=4326",
|
|
96
|
+
"--resolution=0.0001",
|
|
97
|
+
"--format=image/geotiff",
|
|
98
|
+
"--output=/work/wms_subset.tif",
|
|
99
|
+
],
|
|
100
|
+
});
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
XYZ tile subsets can be mosaicked from raster tiles and written as an RGB COG:
|
|
104
|
+
|
|
105
|
+
```js
|
|
106
|
+
const { files } = await runTool("extract_xyz_tile_subset", {
|
|
107
|
+
args: [
|
|
108
|
+
"--url=https://tile.openstreetmap.org/{z}/{x}/{y}.png",
|
|
109
|
+
"--zoom=10",
|
|
110
|
+
"--bbox=-122.55,37.70,-122.35,37.84",
|
|
111
|
+
"--bbox_crs=4326",
|
|
112
|
+
"--width=512",
|
|
113
|
+
"--height=512",
|
|
114
|
+
"--output=/work/xyz_subset.tif",
|
|
115
|
+
],
|
|
116
|
+
});
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
For a local COG, upload/provide bytes through `input` and point `--input` at
|
|
120
|
+
the `/work` path:
|
|
121
|
+
|
|
122
|
+
```js
|
|
123
|
+
const { files } = await runTool("extract_cog_subset", {
|
|
124
|
+
args: [
|
|
125
|
+
"--input=/work/local.cog.tif",
|
|
126
|
+
"--bbox=-122.55,37.70,-122.35,37.84",
|
|
127
|
+
"--bbox_crs=4326",
|
|
128
|
+
"--output=/work/subset.tif",
|
|
129
|
+
],
|
|
130
|
+
input: { "local.cog.tif": localCogBytes },
|
|
131
|
+
});
|
|
132
|
+
```
|
|
133
|
+
|
|
68
134
|
Inputs are placed under `/work` (keyed by filename); any file a tool writes is
|
|
69
135
|
returned in `files`. Raster outputs are Cloud Optimized GeoTIFFs; vector outputs
|
|
70
136
|
are GeoJSON.
|
|
71
137
|
|
|
138
|
+
When `output_crs` is set, `resolution` is interpreted in output CRS units and
|
|
139
|
+
the subset is reprojected with nearest-neighbor resampling. Without
|
|
140
|
+
`output_crs`, the output usually stays on the source COG grid. Sources with
|
|
141
|
+
user-defined projection strings that cannot be written as EPSG metadata, such as
|
|
142
|
+
the NLCD sample, default to `bbox_crs` output so GIS viewers can place the
|
|
143
|
+
result. Outputs are Deflate-compressed by default. `nodata` overrides the output
|
|
144
|
+
nodata metadata and is used to fill pixels introduced during reprojection.
|
|
145
|
+
The subset writer preserves the source sample type for supported COG types
|
|
146
|
+
(`uint8`, `float32`, and `float64`); palette-indexed `uint8` rasters retain
|
|
147
|
+
their source ColorMap.
|
|
148
|
+
|
|
72
149
|
## API
|
|
73
150
|
|
|
74
151
|
| Export | Description |
|
|
@@ -77,6 +154,9 @@ are GeoJSON.
|
|
|
77
154
|
| `listTools(): Promise<string[]>` | Every available tool id. |
|
|
78
155
|
| `listManifests(): Promise<ToolManifest[]>` | All tool manifests (parameter schemas), for building UIs offline. |
|
|
79
156
|
| `runTool(tool, { args?, input? }): Promise<ToolResult>` | Run one tool over the in-memory filesystem. |
|
|
157
|
+
| `extractCogSubset(source, opts): Promise<Uint8Array>` | Extract a local or HTTP COG subset directly. |
|
|
158
|
+
| `extractWmsSubset(url, opts): Promise<Uint8Array>` | Request a WMS GeoTIFF subset and encode it as a COG. |
|
|
159
|
+
| `extractXyzTileSubset(url, opts): Promise<Uint8Array>` | Mosaic XYZ raster tiles and encode them as an RGB COG. |
|
|
80
160
|
|
|
81
161
|
`ToolResult` is `{ exitCode: number, stdout: string[], files: Record<string, Uint8Array> }`.
|
|
82
162
|
|
package/geolibre-cli.wasm
CHANGED
|
Binary file
|
package/geolibre_wasm.d.ts
CHANGED
|
@@ -79,6 +79,14 @@ export class CogBuilder {
|
|
|
79
79
|
export class CogStream {
|
|
80
80
|
free(): void;
|
|
81
81
|
[Symbol.dispose](): void;
|
|
82
|
+
/**
|
|
83
|
+
* Reproject a bbox from `bbox_epsg` into this COG's dataset CRS.
|
|
84
|
+
*
|
|
85
|
+
* The COG projection string is preferred over its EPSG tag when available,
|
|
86
|
+
* because some user-defined projected GeoTIFFs expose only their geographic
|
|
87
|
+
* base EPSG code.
|
|
88
|
+
*/
|
|
89
|
+
bbox_to_dataset_crs(bbox_epsg: number, bbox: Float64Array): Float64Array;
|
|
82
90
|
/**
|
|
83
91
|
* Bounding box `[min_x, min_y, max_x, max_y]` in the dataset CRS, or empty.
|
|
84
92
|
*/
|
|
@@ -115,6 +123,14 @@ export class CogStream {
|
|
|
115
123
|
* Parse a COG's tile layout from front-of-file header bytes.
|
|
116
124
|
*/
|
|
117
125
|
constructor(header_bytes: Uint8Array);
|
|
126
|
+
/**
|
|
127
|
+
* Reproject x,y coordinate pairs from this COG's dataset CRS to an EPSG CRS.
|
|
128
|
+
*/
|
|
129
|
+
points_from_dataset_crs(dst_epsg: number, xy: Float64Array): Float64Array;
|
|
130
|
+
/**
|
|
131
|
+
* Reproject x,y coordinate pairs from an EPSG CRS into this COG's dataset CRS.
|
|
132
|
+
*/
|
|
133
|
+
points_to_dataset_crs(src_epsg: number, xy: Float64Array): Float64Array;
|
|
118
134
|
/**
|
|
119
135
|
* `[offset, length]` byte range of the tile at `(col, row)` on `level`.
|
|
120
136
|
*/
|
|
@@ -128,6 +144,10 @@ export class CogStream {
|
|
|
128
144
|
* EPSG code of the full-resolution level, if any.
|
|
129
145
|
*/
|
|
130
146
|
readonly epsg: number | undefined;
|
|
147
|
+
/**
|
|
148
|
+
* True when the COG CRS is represented by a user-defined projection string.
|
|
149
|
+
*/
|
|
150
|
+
readonly has_projection_string: boolean;
|
|
131
151
|
/**
|
|
132
152
|
* No-data sentinel, if declared.
|
|
133
153
|
*/
|
|
@@ -242,6 +262,58 @@ export class GeoTiffReader {
|
|
|
242
262
|
readonly width: number;
|
|
243
263
|
}
|
|
244
264
|
|
|
265
|
+
export class PmtilesExtractor {
|
|
266
|
+
free(): void;
|
|
267
|
+
[Symbol.dispose](): void;
|
|
268
|
+
/**
|
|
269
|
+
* Hand back the bytes of one `wanted_json()` range, identified by its
|
|
270
|
+
* offset. Ranges may be fed in any order.
|
|
271
|
+
*/
|
|
272
|
+
feed(offset: number, bytes: Uint8Array): void;
|
|
273
|
+
/**
|
|
274
|
+
* Assemble the extracted archive. Consumes the extractor's buffers; the
|
|
275
|
+
* returned `Uint8Array` is a complete `.pmtiles` file.
|
|
276
|
+
*/
|
|
277
|
+
finish(): Uint8Array;
|
|
278
|
+
/**
|
|
279
|
+
* Source archive header as JSON (`{}` until the first feed): zooms,
|
|
280
|
+
* bounds, tile type/compression, tile counts. Lets a UI validate the
|
|
281
|
+
* request and describe the source before committing to the download.
|
|
282
|
+
*/
|
|
283
|
+
header_json(): string;
|
|
284
|
+
/**
|
|
285
|
+
* Plan an extraction of `min_zoom..=max_zoom` tiles intersecting the
|
|
286
|
+
* WGS84 bbox. Zooms are clamped to what the source archive contains once
|
|
287
|
+
* its header arrives; `min_zoom` 0 keeps the basemap usable zoomed out.
|
|
288
|
+
*/
|
|
289
|
+
constructor(min_lon: number, min_lat: number, max_lon: number, max_lat: number, min_zoom: number, max_zoom: number);
|
|
290
|
+
/**
|
|
291
|
+
* Progress as JSON: `{"phase":"header|directories|data|done",
|
|
292
|
+
* "tiles_selected":n,"blobs_total":n,"data_bytes_total":n,
|
|
293
|
+
* "data_bytes_received":n,"estimated_output_bytes":n}`.
|
|
294
|
+
*/
|
|
295
|
+
progress_json(): string;
|
|
296
|
+
/**
|
|
297
|
+
* Coalesce tile-data requests whose byte gap is at most this (default
|
|
298
|
+
* 65,536). Larger values trade overfetch for fewer HTTP round-trips.
|
|
299
|
+
*/
|
|
300
|
+
set_max_range_gap(max_gap: number): void;
|
|
301
|
+
/**
|
|
302
|
+
* Cap on addressed tiles (default 2,000,000). Raise for huge desktop
|
|
303
|
+
* extracts; lower to fail fast in memory-constrained embeds.
|
|
304
|
+
*/
|
|
305
|
+
set_max_tiles(max_tiles: number): void;
|
|
306
|
+
/**
|
|
307
|
+
* Outstanding byte ranges the host should fetch, as a JSON array of
|
|
308
|
+
* `{"offset":n,"length":n}`. Empty array when nothing is outstanding.
|
|
309
|
+
*/
|
|
310
|
+
wanted_json(): string;
|
|
311
|
+
/**
|
|
312
|
+
* True once every needed range has been fed; `finish()` is then valid.
|
|
313
|
+
*/
|
|
314
|
+
readonly done: boolean;
|
|
315
|
+
}
|
|
316
|
+
|
|
245
317
|
/**
|
|
246
318
|
* Install a panic hook so Rust panics surface as readable `console.error`
|
|
247
319
|
* messages instead of an opaque `RuntimeError: unreachable`.
|
|
@@ -319,6 +391,20 @@ export function lidar_read_xyz(data: Uint8Array, format: string): Float64Array;
|
|
|
319
391
|
*/
|
|
320
392
|
export function morans_i(points_xy: Float64Array, values: Float64Array, distance_threshold: number): string;
|
|
321
393
|
|
|
394
|
+
/**
|
|
395
|
+
* Reproject a bbox between two EPSG CRSs.
|
|
396
|
+
*
|
|
397
|
+
* Input and output order is `[min_x, min_y, max_x, max_y]`. The bbox edges are
|
|
398
|
+
* densified so projected extrema that fall along an edge are preserved better
|
|
399
|
+
* than a corner-only transform.
|
|
400
|
+
*/
|
|
401
|
+
export function transform_bbox_epsg(src_epsg: number, dst_epsg: number, bbox: Float64Array): Float64Array;
|
|
402
|
+
|
|
403
|
+
/**
|
|
404
|
+
* Reproject x,y coordinate pairs between two EPSG CRSs.
|
|
405
|
+
*/
|
|
406
|
+
export function transform_points_epsg(src_epsg: number, dst_epsg: number, xy: Float64Array): Float64Array;
|
|
407
|
+
|
|
322
408
|
/**
|
|
323
409
|
* Vector formats this build can read from memory (comma-separated).
|
|
324
410
|
*/
|
|
@@ -358,6 +444,7 @@ export interface InitOutput {
|
|
|
358
444
|
readonly __wbg_cogbuilder_free: (a: number, b: number) => void;
|
|
359
445
|
readonly __wbg_cogstream_free: (a: number, b: number) => void;
|
|
360
446
|
readonly __wbg_geotiffreader_free: (a: number, b: number) => void;
|
|
447
|
+
readonly __wbg_pmtilesextractor_free: (a: number, b: number) => void;
|
|
361
448
|
readonly cogbuilder_new: (a: number, b: number, c: number) => number;
|
|
362
449
|
readonly cogbuilder_set_bigtiff: (a: number, b: number) => void;
|
|
363
450
|
readonly cogbuilder_set_compression: (a: number, b: number, c: number, d: number) => void;
|
|
@@ -370,6 +457,7 @@ export interface InitOutput {
|
|
|
370
457
|
readonly cogbuilder_write_f32: (a: number, b: number, c: number, d: number) => void;
|
|
371
458
|
readonly cogbuilder_write_f64: (a: number, b: number, c: number, d: number) => void;
|
|
372
459
|
readonly cogbuilder_write_u8: (a: number, b: number, c: number, d: number) => void;
|
|
460
|
+
readonly cogstream_bbox_to_dataset_crs: (a: number, b: number, c: number, d: number, e: number) => void;
|
|
373
461
|
readonly cogstream_bounding_box: (a: number, b: number) => void;
|
|
374
462
|
readonly cogstream_bounds_lonlat: (a: number, b: number) => void;
|
|
375
463
|
readonly cogstream_center: (a: number, b: number) => void;
|
|
@@ -377,10 +465,13 @@ export interface InitOutput {
|
|
|
377
465
|
readonly cogstream_decode_tile_f64: (a: number, b: number, c: number, d: number, e: number) => void;
|
|
378
466
|
readonly cogstream_epsg: (a: number) => number;
|
|
379
467
|
readonly cogstream_geo_transform: (a: number, b: number) => void;
|
|
468
|
+
readonly cogstream_has_projection_string: (a: number) => number;
|
|
380
469
|
readonly cogstream_levels_json: (a: number, b: number) => void;
|
|
381
470
|
readonly cogstream_new: (a: number, b: number, c: number) => void;
|
|
382
471
|
readonly cogstream_nodata: (a: number, b: number) => void;
|
|
383
472
|
readonly cogstream_num_levels: (a: number) => number;
|
|
473
|
+
readonly cogstream_points_from_dataset_crs: (a: number, b: number, c: number, d: number, e: number) => void;
|
|
474
|
+
readonly cogstream_points_to_dataset_crs: (a: number, b: number, c: number, d: number, e: number) => void;
|
|
384
475
|
readonly cogstream_tile_range: (a: number, b: number, c: number, d: number, e: number) => void;
|
|
385
476
|
readonly cogstream_tiles_for_window: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
|
|
386
477
|
readonly convex_hull: (a: number, b: number, c: number) => void;
|
|
@@ -421,6 +512,17 @@ export interface InitOutput {
|
|
|
421
512
|
readonly lidar_read_intensity: (a: number, b: number, c: number, d: number, e: number) => void;
|
|
422
513
|
readonly lidar_read_xyz: (a: number, b: number, c: number, d: number, e: number) => void;
|
|
423
514
|
readonly morans_i: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
|
|
515
|
+
readonly pmtilesextractor_done: (a: number) => number;
|
|
516
|
+
readonly pmtilesextractor_feed: (a: number, b: number, c: number, d: number, e: number) => void;
|
|
517
|
+
readonly pmtilesextractor_finish: (a: number, b: number) => void;
|
|
518
|
+
readonly pmtilesextractor_header_json: (a: number, b: number) => void;
|
|
519
|
+
readonly pmtilesextractor_new: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
|
|
520
|
+
readonly pmtilesextractor_progress_json: (a: number, b: number) => void;
|
|
521
|
+
readonly pmtilesextractor_set_max_range_gap: (a: number, b: number, c: number) => void;
|
|
522
|
+
readonly pmtilesextractor_set_max_tiles: (a: number, b: number, c: number) => void;
|
|
523
|
+
readonly pmtilesextractor_wanted_json: (a: number, b: number) => void;
|
|
524
|
+
readonly transform_bbox_epsg: (a: number, b: number, c: number, d: number, e: number) => void;
|
|
525
|
+
readonly transform_points_epsg: (a: number, b: number, c: number, d: number, e: number) => void;
|
|
424
526
|
readonly vector_formats: (a: number) => void;
|
|
425
527
|
readonly vector_info: (a: number, b: number, c: number, d: number, e: number) => void;
|
|
426
528
|
readonly vector_to_geojson: (a: number, b: number, c: number, d: number, e: number) => void;
|
package/geolibre_wasm.js
CHANGED
|
@@ -218,6 +218,36 @@ export class CogStream {
|
|
|
218
218
|
const ptr = this.__destroy_into_raw();
|
|
219
219
|
wasm.__wbg_cogstream_free(ptr, 0);
|
|
220
220
|
}
|
|
221
|
+
/**
|
|
222
|
+
* Reproject a bbox from `bbox_epsg` into this COG's dataset CRS.
|
|
223
|
+
*
|
|
224
|
+
* The COG projection string is preferred over its EPSG tag when available,
|
|
225
|
+
* because some user-defined projected GeoTIFFs expose only their geographic
|
|
226
|
+
* base EPSG code.
|
|
227
|
+
* @param {number} bbox_epsg
|
|
228
|
+
* @param {Float64Array} bbox
|
|
229
|
+
* @returns {Float64Array}
|
|
230
|
+
*/
|
|
231
|
+
bbox_to_dataset_crs(bbox_epsg, bbox) {
|
|
232
|
+
try {
|
|
233
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
234
|
+
const ptr0 = passArrayF64ToWasm0(bbox, wasm.__wbindgen_export2);
|
|
235
|
+
const len0 = WASM_VECTOR_LEN;
|
|
236
|
+
wasm.cogstream_bbox_to_dataset_crs(retptr, this.__wbg_ptr, bbox_epsg, ptr0, len0);
|
|
237
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
238
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
239
|
+
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
|
|
240
|
+
var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
|
|
241
|
+
if (r3) {
|
|
242
|
+
throw takeObject(r2);
|
|
243
|
+
}
|
|
244
|
+
var v2 = getArrayF64FromWasm0(r0, r1).slice();
|
|
245
|
+
wasm.__wbindgen_export(r0, r1 * 8, 8);
|
|
246
|
+
return v2;
|
|
247
|
+
} finally {
|
|
248
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
221
251
|
/**
|
|
222
252
|
* Bounding box `[min_x, min_y, max_x, max_y]` in the dataset CRS, or empty.
|
|
223
253
|
* @returns {Float64Array}
|
|
@@ -340,6 +370,14 @@ export class CogStream {
|
|
|
340
370
|
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
341
371
|
}
|
|
342
372
|
}
|
|
373
|
+
/**
|
|
374
|
+
* True when the COG CRS is represented by a user-defined projection string.
|
|
375
|
+
* @returns {boolean}
|
|
376
|
+
*/
|
|
377
|
+
get has_projection_string() {
|
|
378
|
+
const ret = wasm.cogstream_has_projection_string(this.__wbg_ptr);
|
|
379
|
+
return ret !== 0;
|
|
380
|
+
}
|
|
343
381
|
/**
|
|
344
382
|
* JSON array describing every level: `[{level,width,height,tile_width,
|
|
345
383
|
* tile_height,tiles_x,tiles_y,bands,bits_per_sample,sample_format,compression}]`.
|
|
@@ -407,6 +445,58 @@ export class CogStream {
|
|
|
407
445
|
const ret = wasm.cogstream_num_levels(this.__wbg_ptr);
|
|
408
446
|
return ret >>> 0;
|
|
409
447
|
}
|
|
448
|
+
/**
|
|
449
|
+
* Reproject x,y coordinate pairs from this COG's dataset CRS to an EPSG CRS.
|
|
450
|
+
* @param {number} dst_epsg
|
|
451
|
+
* @param {Float64Array} xy
|
|
452
|
+
* @returns {Float64Array}
|
|
453
|
+
*/
|
|
454
|
+
points_from_dataset_crs(dst_epsg, xy) {
|
|
455
|
+
try {
|
|
456
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
457
|
+
const ptr0 = passArrayF64ToWasm0(xy, wasm.__wbindgen_export2);
|
|
458
|
+
const len0 = WASM_VECTOR_LEN;
|
|
459
|
+
wasm.cogstream_points_from_dataset_crs(retptr, this.__wbg_ptr, dst_epsg, ptr0, len0);
|
|
460
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
461
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
462
|
+
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
|
|
463
|
+
var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
|
|
464
|
+
if (r3) {
|
|
465
|
+
throw takeObject(r2);
|
|
466
|
+
}
|
|
467
|
+
var v2 = getArrayF64FromWasm0(r0, r1).slice();
|
|
468
|
+
wasm.__wbindgen_export(r0, r1 * 8, 8);
|
|
469
|
+
return v2;
|
|
470
|
+
} finally {
|
|
471
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
/**
|
|
475
|
+
* Reproject x,y coordinate pairs from an EPSG CRS into this COG's dataset CRS.
|
|
476
|
+
* @param {number} src_epsg
|
|
477
|
+
* @param {Float64Array} xy
|
|
478
|
+
* @returns {Float64Array}
|
|
479
|
+
*/
|
|
480
|
+
points_to_dataset_crs(src_epsg, xy) {
|
|
481
|
+
try {
|
|
482
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
483
|
+
const ptr0 = passArrayF64ToWasm0(xy, wasm.__wbindgen_export2);
|
|
484
|
+
const len0 = WASM_VECTOR_LEN;
|
|
485
|
+
wasm.cogstream_points_to_dataset_crs(retptr, this.__wbg_ptr, src_epsg, ptr0, len0);
|
|
486
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
487
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
488
|
+
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
|
|
489
|
+
var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
|
|
490
|
+
if (r3) {
|
|
491
|
+
throw takeObject(r2);
|
|
492
|
+
}
|
|
493
|
+
var v2 = getArrayF64FromWasm0(r0, r1).slice();
|
|
494
|
+
wasm.__wbindgen_export(r0, r1 * 8, 8);
|
|
495
|
+
return v2;
|
|
496
|
+
} finally {
|
|
497
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
498
|
+
}
|
|
499
|
+
}
|
|
410
500
|
/**
|
|
411
501
|
* `[offset, length]` byte range of the tile at `(col, row)` on `level`.
|
|
412
502
|
* @param {number} level
|
|
@@ -981,6 +1071,225 @@ export class GeoTiffReader {
|
|
|
981
1071
|
}
|
|
982
1072
|
if (Symbol.dispose) GeoTiffReader.prototype[Symbol.dispose] = GeoTiffReader.prototype.free;
|
|
983
1073
|
|
|
1074
|
+
export class PmtilesExtractor {
|
|
1075
|
+
__destroy_into_raw() {
|
|
1076
|
+
const ptr = this.__wbg_ptr;
|
|
1077
|
+
this.__wbg_ptr = 0;
|
|
1078
|
+
PmtilesExtractorFinalization.unregister(this);
|
|
1079
|
+
return ptr;
|
|
1080
|
+
}
|
|
1081
|
+
free() {
|
|
1082
|
+
const ptr = this.__destroy_into_raw();
|
|
1083
|
+
wasm.__wbg_pmtilesextractor_free(ptr, 0);
|
|
1084
|
+
}
|
|
1085
|
+
/**
|
|
1086
|
+
* True once every needed range has been fed; `finish()` is then valid.
|
|
1087
|
+
* @returns {boolean}
|
|
1088
|
+
*/
|
|
1089
|
+
get done() {
|
|
1090
|
+
const ret = wasm.pmtilesextractor_done(this.__wbg_ptr);
|
|
1091
|
+
return ret !== 0;
|
|
1092
|
+
}
|
|
1093
|
+
/**
|
|
1094
|
+
* Hand back the bytes of one `wanted_json()` range, identified by its
|
|
1095
|
+
* offset. Ranges may be fed in any order.
|
|
1096
|
+
* @param {number} offset
|
|
1097
|
+
* @param {Uint8Array} bytes
|
|
1098
|
+
*/
|
|
1099
|
+
feed(offset, bytes) {
|
|
1100
|
+
try {
|
|
1101
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
1102
|
+
const ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_export2);
|
|
1103
|
+
const len0 = WASM_VECTOR_LEN;
|
|
1104
|
+
wasm.pmtilesextractor_feed(retptr, this.__wbg_ptr, offset, ptr0, len0);
|
|
1105
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
1106
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
1107
|
+
if (r1) {
|
|
1108
|
+
throw takeObject(r0);
|
|
1109
|
+
}
|
|
1110
|
+
} finally {
|
|
1111
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
1112
|
+
}
|
|
1113
|
+
}
|
|
1114
|
+
/**
|
|
1115
|
+
* Assemble the extracted archive. Consumes the extractor's buffers; the
|
|
1116
|
+
* returned `Uint8Array` is a complete `.pmtiles` file.
|
|
1117
|
+
* @returns {Uint8Array}
|
|
1118
|
+
*/
|
|
1119
|
+
finish() {
|
|
1120
|
+
try {
|
|
1121
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
1122
|
+
wasm.pmtilesextractor_finish(retptr, this.__wbg_ptr);
|
|
1123
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
1124
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
1125
|
+
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
|
|
1126
|
+
var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
|
|
1127
|
+
if (r3) {
|
|
1128
|
+
throw takeObject(r2);
|
|
1129
|
+
}
|
|
1130
|
+
var v1 = getArrayU8FromWasm0(r0, r1).slice();
|
|
1131
|
+
wasm.__wbindgen_export(r0, r1 * 1, 1);
|
|
1132
|
+
return v1;
|
|
1133
|
+
} finally {
|
|
1134
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
1135
|
+
}
|
|
1136
|
+
}
|
|
1137
|
+
/**
|
|
1138
|
+
* Source archive header as JSON (`{}` until the first feed): zooms,
|
|
1139
|
+
* bounds, tile type/compression, tile counts. Lets a UI validate the
|
|
1140
|
+
* request and describe the source before committing to the download.
|
|
1141
|
+
* @returns {string}
|
|
1142
|
+
*/
|
|
1143
|
+
header_json() {
|
|
1144
|
+
let deferred2_0;
|
|
1145
|
+
let deferred2_1;
|
|
1146
|
+
try {
|
|
1147
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
1148
|
+
wasm.pmtilesextractor_header_json(retptr, this.__wbg_ptr);
|
|
1149
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
1150
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
1151
|
+
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
|
|
1152
|
+
var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
|
|
1153
|
+
var ptr1 = r0;
|
|
1154
|
+
var len1 = r1;
|
|
1155
|
+
if (r3) {
|
|
1156
|
+
ptr1 = 0; len1 = 0;
|
|
1157
|
+
throw takeObject(r2);
|
|
1158
|
+
}
|
|
1159
|
+
deferred2_0 = ptr1;
|
|
1160
|
+
deferred2_1 = len1;
|
|
1161
|
+
return getStringFromWasm0(ptr1, len1);
|
|
1162
|
+
} finally {
|
|
1163
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
1164
|
+
wasm.__wbindgen_export(deferred2_0, deferred2_1, 1);
|
|
1165
|
+
}
|
|
1166
|
+
}
|
|
1167
|
+
/**
|
|
1168
|
+
* Plan an extraction of `min_zoom..=max_zoom` tiles intersecting the
|
|
1169
|
+
* WGS84 bbox. Zooms are clamped to what the source archive contains once
|
|
1170
|
+
* its header arrives; `min_zoom` 0 keeps the basemap usable zoomed out.
|
|
1171
|
+
* @param {number} min_lon
|
|
1172
|
+
* @param {number} min_lat
|
|
1173
|
+
* @param {number} max_lon
|
|
1174
|
+
* @param {number} max_lat
|
|
1175
|
+
* @param {number} min_zoom
|
|
1176
|
+
* @param {number} max_zoom
|
|
1177
|
+
*/
|
|
1178
|
+
constructor(min_lon, min_lat, max_lon, max_lat, min_zoom, max_zoom) {
|
|
1179
|
+
try {
|
|
1180
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
1181
|
+
wasm.pmtilesextractor_new(retptr, min_lon, min_lat, max_lon, max_lat, min_zoom, max_zoom);
|
|
1182
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
1183
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
1184
|
+
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
|
|
1185
|
+
if (r2) {
|
|
1186
|
+
throw takeObject(r1);
|
|
1187
|
+
}
|
|
1188
|
+
this.__wbg_ptr = r0;
|
|
1189
|
+
PmtilesExtractorFinalization.register(this, this.__wbg_ptr, this);
|
|
1190
|
+
return this;
|
|
1191
|
+
} finally {
|
|
1192
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
1193
|
+
}
|
|
1194
|
+
}
|
|
1195
|
+
/**
|
|
1196
|
+
* Progress as JSON: `{"phase":"header|directories|data|done",
|
|
1197
|
+
* "tiles_selected":n,"blobs_total":n,"data_bytes_total":n,
|
|
1198
|
+
* "data_bytes_received":n,"estimated_output_bytes":n}`.
|
|
1199
|
+
* @returns {string}
|
|
1200
|
+
*/
|
|
1201
|
+
progress_json() {
|
|
1202
|
+
let deferred2_0;
|
|
1203
|
+
let deferred2_1;
|
|
1204
|
+
try {
|
|
1205
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
1206
|
+
wasm.pmtilesextractor_progress_json(retptr, this.__wbg_ptr);
|
|
1207
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
1208
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
1209
|
+
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
|
|
1210
|
+
var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
|
|
1211
|
+
var ptr1 = r0;
|
|
1212
|
+
var len1 = r1;
|
|
1213
|
+
if (r3) {
|
|
1214
|
+
ptr1 = 0; len1 = 0;
|
|
1215
|
+
throw takeObject(r2);
|
|
1216
|
+
}
|
|
1217
|
+
deferred2_0 = ptr1;
|
|
1218
|
+
deferred2_1 = len1;
|
|
1219
|
+
return getStringFromWasm0(ptr1, len1);
|
|
1220
|
+
} finally {
|
|
1221
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
1222
|
+
wasm.__wbindgen_export(deferred2_0, deferred2_1, 1);
|
|
1223
|
+
}
|
|
1224
|
+
}
|
|
1225
|
+
/**
|
|
1226
|
+
* Coalesce tile-data requests whose byte gap is at most this (default
|
|
1227
|
+
* 65,536). Larger values trade overfetch for fewer HTTP round-trips.
|
|
1228
|
+
* @param {number} max_gap
|
|
1229
|
+
*/
|
|
1230
|
+
set_max_range_gap(max_gap) {
|
|
1231
|
+
try {
|
|
1232
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
1233
|
+
wasm.pmtilesextractor_set_max_range_gap(retptr, this.__wbg_ptr, max_gap);
|
|
1234
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
1235
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
1236
|
+
if (r1) {
|
|
1237
|
+
throw takeObject(r0);
|
|
1238
|
+
}
|
|
1239
|
+
} finally {
|
|
1240
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
1241
|
+
}
|
|
1242
|
+
}
|
|
1243
|
+
/**
|
|
1244
|
+
* Cap on addressed tiles (default 2,000,000). Raise for huge desktop
|
|
1245
|
+
* extracts; lower to fail fast in memory-constrained embeds.
|
|
1246
|
+
* @param {number} max_tiles
|
|
1247
|
+
*/
|
|
1248
|
+
set_max_tiles(max_tiles) {
|
|
1249
|
+
try {
|
|
1250
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
1251
|
+
wasm.pmtilesextractor_set_max_tiles(retptr, this.__wbg_ptr, max_tiles);
|
|
1252
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
1253
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
1254
|
+
if (r1) {
|
|
1255
|
+
throw takeObject(r0);
|
|
1256
|
+
}
|
|
1257
|
+
} finally {
|
|
1258
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
1259
|
+
}
|
|
1260
|
+
}
|
|
1261
|
+
/**
|
|
1262
|
+
* Outstanding byte ranges the host should fetch, as a JSON array of
|
|
1263
|
+
* `{"offset":n,"length":n}`. Empty array when nothing is outstanding.
|
|
1264
|
+
* @returns {string}
|
|
1265
|
+
*/
|
|
1266
|
+
wanted_json() {
|
|
1267
|
+
let deferred2_0;
|
|
1268
|
+
let deferred2_1;
|
|
1269
|
+
try {
|
|
1270
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
1271
|
+
wasm.pmtilesextractor_wanted_json(retptr, this.__wbg_ptr);
|
|
1272
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
1273
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
1274
|
+
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
|
|
1275
|
+
var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
|
|
1276
|
+
var ptr1 = r0;
|
|
1277
|
+
var len1 = r1;
|
|
1278
|
+
if (r3) {
|
|
1279
|
+
ptr1 = 0; len1 = 0;
|
|
1280
|
+
throw takeObject(r2);
|
|
1281
|
+
}
|
|
1282
|
+
deferred2_0 = ptr1;
|
|
1283
|
+
deferred2_1 = len1;
|
|
1284
|
+
return getStringFromWasm0(ptr1, len1);
|
|
1285
|
+
} finally {
|
|
1286
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
1287
|
+
wasm.__wbindgen_export(deferred2_0, deferred2_1, 1);
|
|
1288
|
+
}
|
|
1289
|
+
}
|
|
1290
|
+
}
|
|
1291
|
+
if (Symbol.dispose) PmtilesExtractor.prototype[Symbol.dispose] = PmtilesExtractor.prototype.free;
|
|
1292
|
+
|
|
984
1293
|
/**
|
|
985
1294
|
* Install a panic hook so Rust panics surface as readable `console.error`
|
|
986
1295
|
* messages instead of an opaque `RuntimeError: unreachable`.
|
|
@@ -1290,6 +1599,66 @@ export function morans_i(points_xy, values, distance_threshold) {
|
|
|
1290
1599
|
}
|
|
1291
1600
|
}
|
|
1292
1601
|
|
|
1602
|
+
/**
|
|
1603
|
+
* Reproject a bbox between two EPSG CRSs.
|
|
1604
|
+
*
|
|
1605
|
+
* Input and output order is `[min_x, min_y, max_x, max_y]`. The bbox edges are
|
|
1606
|
+
* densified so projected extrema that fall along an edge are preserved better
|
|
1607
|
+
* than a corner-only transform.
|
|
1608
|
+
* @param {number} src_epsg
|
|
1609
|
+
* @param {number} dst_epsg
|
|
1610
|
+
* @param {Float64Array} bbox
|
|
1611
|
+
* @returns {Float64Array}
|
|
1612
|
+
*/
|
|
1613
|
+
export function transform_bbox_epsg(src_epsg, dst_epsg, bbox) {
|
|
1614
|
+
try {
|
|
1615
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
1616
|
+
const ptr0 = passArrayF64ToWasm0(bbox, wasm.__wbindgen_export2);
|
|
1617
|
+
const len0 = WASM_VECTOR_LEN;
|
|
1618
|
+
wasm.transform_bbox_epsg(retptr, src_epsg, dst_epsg, ptr0, len0);
|
|
1619
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
1620
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
1621
|
+
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
|
|
1622
|
+
var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
|
|
1623
|
+
if (r3) {
|
|
1624
|
+
throw takeObject(r2);
|
|
1625
|
+
}
|
|
1626
|
+
var v2 = getArrayF64FromWasm0(r0, r1).slice();
|
|
1627
|
+
wasm.__wbindgen_export(r0, r1 * 8, 8);
|
|
1628
|
+
return v2;
|
|
1629
|
+
} finally {
|
|
1630
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
1631
|
+
}
|
|
1632
|
+
}
|
|
1633
|
+
|
|
1634
|
+
/**
|
|
1635
|
+
* Reproject x,y coordinate pairs between two EPSG CRSs.
|
|
1636
|
+
* @param {number} src_epsg
|
|
1637
|
+
* @param {number} dst_epsg
|
|
1638
|
+
* @param {Float64Array} xy
|
|
1639
|
+
* @returns {Float64Array}
|
|
1640
|
+
*/
|
|
1641
|
+
export function transform_points_epsg(src_epsg, dst_epsg, xy) {
|
|
1642
|
+
try {
|
|
1643
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
1644
|
+
const ptr0 = passArrayF64ToWasm0(xy, wasm.__wbindgen_export2);
|
|
1645
|
+
const len0 = WASM_VECTOR_LEN;
|
|
1646
|
+
wasm.transform_points_epsg(retptr, src_epsg, dst_epsg, ptr0, len0);
|
|
1647
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
1648
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
1649
|
+
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
|
|
1650
|
+
var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
|
|
1651
|
+
if (r3) {
|
|
1652
|
+
throw takeObject(r2);
|
|
1653
|
+
}
|
|
1654
|
+
var v2 = getArrayF64FromWasm0(r0, r1).slice();
|
|
1655
|
+
wasm.__wbindgen_export(r0, r1 * 8, 8);
|
|
1656
|
+
return v2;
|
|
1657
|
+
} finally {
|
|
1658
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
1659
|
+
}
|
|
1660
|
+
}
|
|
1661
|
+
|
|
1293
1662
|
/**
|
|
1294
1663
|
* Vector formats this build can read from memory (comma-separated).
|
|
1295
1664
|
* @returns {string}
|
|
@@ -1496,6 +1865,9 @@ const CogStreamFinalization = (typeof FinalizationRegistry === 'undefined')
|
|
|
1496
1865
|
const GeoTiffReaderFinalization = (typeof FinalizationRegistry === 'undefined')
|
|
1497
1866
|
? { register: () => {}, unregister: () => {} }
|
|
1498
1867
|
: new FinalizationRegistry(ptr => wasm.__wbg_geotiffreader_free(ptr, 1));
|
|
1868
|
+
const PmtilesExtractorFinalization = (typeof FinalizationRegistry === 'undefined')
|
|
1869
|
+
? { register: () => {}, unregister: () => {} }
|
|
1870
|
+
: new FinalizationRegistry(ptr => wasm.__wbg_pmtilesextractor_free(ptr, 1));
|
|
1499
1871
|
|
|
1500
1872
|
function addHeapObject(obj) {
|
|
1501
1873
|
if (heap_next === heap.length) heap.push(heap.length + 1);
|
package/geolibre_wasm_bg.wasm
CHANGED
|
Binary file
|