@loaders.gl/las 4.4.0-alpha.1 → 4.4.0-alpha.10

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.
Files changed (83) hide show
  1. package/dist/dist.dev.js +1022 -77
  2. package/dist/dist.min.js +21 -21
  3. package/dist/index.cjs +1024 -79
  4. package/dist/index.cjs.map +4 -4
  5. package/dist/index.d.ts +4 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +7 -1
  8. package/dist/index.js.map +1 -0
  9. package/dist/las-arrow-loader.d.ts +10 -8
  10. package/dist/las-arrow-loader.d.ts.map +1 -1
  11. package/dist/las-arrow-loader.js +5 -4
  12. package/dist/las-arrow-loader.js.map +1 -0
  13. package/dist/las-format.d.ts +2 -2
  14. package/dist/las-format.js +3 -2
  15. package/dist/las-format.js.map +1 -0
  16. package/dist/las-loader.d.ts +2 -31
  17. package/dist/las-loader.d.ts.map +1 -1
  18. package/dist/las-loader.js +2 -20
  19. package/dist/las-loader.js.map +1 -0
  20. package/dist/las-worker.js +65 -71
  21. package/dist/laz-rs-loader.d.ts +29 -0
  22. package/dist/laz-rs-loader.d.ts.map +1 -0
  23. package/dist/laz-rs-loader.js +17 -0
  24. package/dist/laz-rs-loader.js.map +1 -0
  25. package/dist/lazperf-loader.d.ts +31 -0
  26. package/dist/lazperf-loader.d.ts.map +1 -0
  27. package/dist/lazperf-loader.js +15 -0
  28. package/dist/lazperf-loader.js.map +1 -0
  29. package/dist/lib/get-las-schema.d.ts +1 -1
  30. package/dist/lib/get-las-schema.js +2 -1
  31. package/dist/lib/get-las-schema.js.map +1 -0
  32. package/dist/lib/las-types.d.ts +1 -0
  33. package/dist/lib/las-types.d.ts.map +1 -1
  34. package/dist/lib/las-types.js +1 -0
  35. package/dist/lib/las-types.js.map +1 -0
  36. package/dist/lib/{laslaz-decoder.d.ts → laz-perf/laslaz-decoder.d.ts} +1 -1
  37. package/dist/lib/laz-perf/laslaz-decoder.d.ts.map +1 -0
  38. package/dist/lib/{laslaz-decoder.js → laz-perf/laslaz-decoder.js} +4 -2
  39. package/dist/lib/laz-perf/laslaz-decoder.js.map +1 -0
  40. package/dist/lib/{parse-las.d.ts → laz-perf/parse-las.d.ts} +3 -3
  41. package/dist/lib/laz-perf/parse-las.d.ts.map +1 -0
  42. package/dist/lib/{parse-las.js → laz-perf/parse-las.js} +6 -6
  43. package/dist/lib/laz-perf/parse-las.js.map +1 -0
  44. package/dist/lib/laz-rs-wasm/laslaz-decoder.d.ts +134 -0
  45. package/dist/lib/laz-rs-wasm/laslaz-decoder.d.ts.map +1 -0
  46. package/dist/lib/laz-rs-wasm/laslaz-decoder.js +446 -0
  47. package/dist/lib/laz-rs-wasm/laslaz-decoder.js.map +1 -0
  48. package/dist/lib/laz-rs-wasm/parse-las.d.ts +18 -0
  49. package/dist/lib/laz-rs-wasm/parse-las.d.ts.map +1 -0
  50. package/dist/lib/laz-rs-wasm/parse-las.js +188 -0
  51. package/dist/lib/laz-rs-wasm/parse-las.js.map +1 -0
  52. package/dist/libs/laz-perf/laz-perf.d.ts.map +1 -0
  53. package/dist/{lib/libs → libs/laz-perf}/laz-perf.js +1 -0
  54. package/dist/libs/laz-perf/laz-perf.js.map +1 -0
  55. package/dist/libs/laz-rs-wasm/laz_rs_wasm.d.ts +95 -0
  56. package/dist/libs/laz-rs-wasm/laz_rs_wasm.d.ts.map +1 -0
  57. package/dist/libs/laz-rs-wasm/laz_rs_wasm.js +425 -0
  58. package/dist/libs/laz-rs-wasm/laz_rs_wasm.js.map +1 -0
  59. package/dist/workers/las-worker.js +1 -0
  60. package/dist/workers/las-worker.js.map +1 -0
  61. package/package.json +9 -6
  62. package/src/index.ts +8 -1
  63. package/src/las-arrow-loader.ts +6 -5
  64. package/src/las-format.ts +2 -2
  65. package/src/las-loader.ts +1 -23
  66. package/src/laz-rs-loader.ts +22 -0
  67. package/src/lazperf-loader.ts +22 -0
  68. package/src/lib/get-las-schema.ts +1 -1
  69. package/src/lib/las-types.ts +1 -0
  70. package/src/lib/{laslaz-decoder.ts → laz-perf/laslaz-decoder.ts} +4 -3
  71. package/src/lib/{parse-las.ts → laz-perf/parse-las.ts} +7 -10
  72. package/src/lib/laz-rs-wasm/laslaz-decoder.ts +528 -0
  73. package/src/lib/laz-rs-wasm/parse-las.ts +232 -0
  74. package/src/libs/laz-rs-wasm/laz_rs_wasm.d.ts +80 -0
  75. package/src/libs/laz-rs-wasm/laz_rs_wasm.js +477 -0
  76. package/src/libs/laz-rs-wasm/laz_rs_wasm_bg.wasm +0 -0
  77. package/src/libs/laz-rs-wasm/laz_rs_wasm_bg.wasm.d.ts +31 -0
  78. package/src/libs/laz-rs-wasm/package.json +19 -0
  79. package/dist/lib/laslaz-decoder.d.ts.map +0 -1
  80. package/dist/lib/libs/laz-perf.d.ts.map +0 -1
  81. package/dist/lib/parse-las.d.ts.map +0 -1
  82. /package/dist/{lib/libs → libs/laz-perf}/laz-perf.d.ts +0 -0
  83. /package/src/{lib/libs → libs/laz-perf}/laz-perf.ts +0 -0
package/dist/dist.dev.js CHANGED
@@ -62,8 +62,10 @@ var __exports__ = (() => {
62
62
  __export(bundle_exports, {
63
63
  LASArrowLoader: () => LASArrowLoader,
64
64
  LASFormat: () => LASFormat,
65
- LASLoader: () => LASLoader2,
66
- LASWorkerLoader: () => LASWorkerLoader
65
+ LASLoader: () => LAZPerfLoader,
66
+ LASWorkerLoader: () => LASWorkerLoader,
67
+ LAZPerfLoader: () => LAZPerfLoader,
68
+ LAZRsLoader: () => LAZRsLoader
67
69
  });
68
70
  __reExport(bundle_exports, __toESM(require_core(), 1));
69
71
 
@@ -76,9 +78,27 @@ var __exports__ = (() => {
76
78
  // LAZ is the "compressed" flavor of LAS,
77
79
  mimeTypes: ["application/octet-stream"],
78
80
  // TODO - text version?
79
- text: true,
81
+ text: false,
80
82
  binary: true,
81
- tests: ["LAS"]
83
+ tests: ["LASF"]
84
+ };
85
+
86
+ // src/las-loader.ts
87
+ var VERSION = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
88
+ var LASWorkerLoader = {
89
+ ...LASFormat,
90
+ dataType: null,
91
+ batchType: null,
92
+ version: VERSION,
93
+ worker: true,
94
+ options: {
95
+ las: {
96
+ shape: "mesh",
97
+ fp64: false,
98
+ skip: 1,
99
+ colorDepth: 8
100
+ }
101
+ }
82
102
  };
83
103
 
84
104
  // ../schema-utils/src/lib/schema/data-type.ts
@@ -12107,7 +12127,38 @@ return true;`);
12107
12127
  return result;
12108
12128
  }
12109
12129
 
12110
- // src/lib/libs/laz-perf.ts
12130
+ // src/lib/get-las-schema.ts
12131
+ function getLASSchema(lasHeader, attributes) {
12132
+ const metadataMap = makeMetadataFromLasHeader(lasHeader);
12133
+ const schema = deduceMeshSchema(attributes, metadataMap);
12134
+ return schema;
12135
+ }
12136
+ function makeMetadataFromLasHeader(lasHeader) {
12137
+ const metadata = {};
12138
+ metadata.las_pointsOffset = lasHeader.pointsOffset.toString(10);
12139
+ metadata.las_pointsFormatId = lasHeader.pointsFormatId.toString(10);
12140
+ metadata.las_pointsStructSize = lasHeader.pointsStructSize.toString(10);
12141
+ metadata.las_pointsCount = lasHeader.pointsCount.toString(10);
12142
+ metadata.las_scale = JSON.stringify(lasHeader.scale);
12143
+ metadata.las_offset = JSON.stringify(lasHeader.offset);
12144
+ if (lasHeader.maxs !== void 0) {
12145
+ metadata.las_maxs = JSON.stringify(lasHeader.maxs);
12146
+ }
12147
+ if (lasHeader.mins !== void 0) {
12148
+ metadata.las_mins = JSON.stringify(lasHeader.mins);
12149
+ }
12150
+ metadata.las_totalToRead = lasHeader.totalToRead.toString(10);
12151
+ metadata.las_pointsFortotalReadmatId = lasHeader.totalRead.toString(10);
12152
+ if (lasHeader.versionAsString !== void 0) {
12153
+ metadata.las_versionAsString = lasHeader.versionAsString;
12154
+ }
12155
+ if (lasHeader.isCompressed !== void 0) {
12156
+ metadata.las_isCompressed = lasHeader.isCompressed.toString();
12157
+ }
12158
+ return metadata;
12159
+ }
12160
+
12161
+ // src/libs/laz-perf/laz-perf.ts
12111
12162
  function getModule() {
12112
12163
  var Module2 = typeof Module2 !== "undefined" ? Module2 : {};
12113
12164
  var moduleOverrides = {};
@@ -14201,10 +14252,10 @@ return true;`);
14201
14252
  }
14202
14253
  function __embind_register_std_wstring(rawType, charSize, name) {
14203
14254
  name = readLatin1String(name);
14204
- var decodeString, encodeString, getHeap, lengthBytesUTF, shift;
14255
+ var decodeString, encodeString2, getHeap, lengthBytesUTF, shift;
14205
14256
  if (charSize === 2) {
14206
14257
  decodeString = UTF16ToString;
14207
- encodeString = stringToUTF16;
14258
+ encodeString2 = stringToUTF16;
14208
14259
  lengthBytesUTF = lengthBytesUTF16;
14209
14260
  getHeap = function() {
14210
14261
  return HEAPU16;
@@ -14212,7 +14263,7 @@ return true;`);
14212
14263
  shift = 1;
14213
14264
  } else if (charSize === 4) {
14214
14265
  decodeString = UTF32ToString;
14215
- encodeString = stringToUTF32;
14266
+ encodeString2 = stringToUTF32;
14216
14267
  lengthBytesUTF = lengthBytesUTF32;
14217
14268
  getHeap = function() {
14218
14269
  return HEAPU32;
@@ -14250,7 +14301,7 @@ return true;`);
14250
14301
  var length = lengthBytesUTF(value);
14251
14302
  var ptr = _malloc(4 + length + charSize);
14252
14303
  HEAPU32[ptr >> 2] = length >> shift;
14253
- encodeString(value, ptr + 4, length + charSize);
14304
+ encodeString2(value, ptr + 4, length + charSize);
14254
14305
  if (destructors !== null) {
14255
14306
  destructors.push(_free, ptr);
14256
14307
  }
@@ -30725,7 +30776,7 @@ return true;`);
30725
30776
  return Module2;
30726
30777
  }
30727
30778
 
30728
- // src/lib/laslaz-decoder.ts
30779
+ // src/lib/laz-perf/laslaz-decoder.ts
30729
30780
  var Module = null;
30730
30781
  var POINT_FORMAT_READERS = {
30731
30782
  0: (dv) => {
@@ -30805,7 +30856,8 @@ return true;`);
30805
30856
  totalToRead: 0,
30806
30857
  totalRead: 0,
30807
30858
  versionAsString: "",
30808
- isCompressed: true
30859
+ isCompressed: true,
30860
+ hasColor: false
30809
30861
  };
30810
30862
  constructor(arraybuffer) {
30811
30863
  this.arraybuffer = arraybuffer;
@@ -31094,38 +31146,7 @@ return true;`);
31094
31146
  }
31095
31147
  };
31096
31148
 
31097
- // src/lib/get-las-schema.ts
31098
- function getLASSchema(lasHeader, attributes) {
31099
- const metadataMap = makeMetadataFromLasHeader(lasHeader);
31100
- const schema = deduceMeshSchema(attributes, metadataMap);
31101
- return schema;
31102
- }
31103
- function makeMetadataFromLasHeader(lasHeader) {
31104
- const metadata = {};
31105
- metadata.las_pointsOffset = lasHeader.pointsOffset.toString(10);
31106
- metadata.las_pointsFormatId = lasHeader.pointsFormatId.toString(10);
31107
- metadata.las_pointsStructSize = lasHeader.pointsStructSize.toString(10);
31108
- metadata.las_pointsCount = lasHeader.pointsCount.toString(10);
31109
- metadata.las_scale = JSON.stringify(lasHeader.scale);
31110
- metadata.las_offset = JSON.stringify(lasHeader.offset);
31111
- if (lasHeader.maxs !== void 0) {
31112
- metadata.las_maxs = JSON.stringify(lasHeader.maxs);
31113
- }
31114
- if (lasHeader.mins !== void 0) {
31115
- metadata.las_mins = JSON.stringify(lasHeader.mins);
31116
- }
31117
- metadata.las_totalToRead = lasHeader.totalToRead.toString(10);
31118
- metadata.las_pointsFortotalReadmatId = lasHeader.totalRead.toString(10);
31119
- if (lasHeader.versionAsString !== void 0) {
31120
- metadata.las_versionAsString = lasHeader.versionAsString;
31121
- }
31122
- if (lasHeader.isCompressed !== void 0) {
31123
- metadata.las_isCompressed = lasHeader.isCompressed.toString();
31124
- }
31125
- return metadata;
31126
- }
31127
-
31128
- // src/lib/parse-las.ts
31149
+ // src/lib/laz-perf/parse-las.ts
31129
31150
  function parseLAS(arrayBuffer, options) {
31130
31151
  return parseLASMesh(arrayBuffer, options);
31131
31152
  }
@@ -31159,7 +31180,7 @@ return true;`);
31159
31180
  const total = lasHeader.totalToRead;
31160
31181
  const PositionsType = options.las?.fp64 ? Float64Array : Float32Array;
31161
31182
  positions = new PositionsType(total * 3);
31162
- colors = lasHeader.pointsFormatId >= 2 ? new Uint8Array(total * 4) : null;
31183
+ colors = lasHeader.hasColor ? new Uint8Array(total * 4) : null;
31163
31184
  intensities = new Uint16Array(total);
31164
31185
  classifications = new Uint8Array(total);
31165
31186
  lasMesh.loaderData = lasHeader;
@@ -31228,11 +31249,9 @@ return true;`);
31228
31249
  header.totalToRead = totalToRead;
31229
31250
  let totalRead = 0;
31230
31251
  while (true) {
31231
- const chunk = dataHandler.readData(1e3 * 100, 0, skip);
31252
+ const chunk = dataHandler.readData(1e3 * 100, skip);
31232
31253
  totalRead += chunk.count;
31233
31254
  header.totalRead = totalRead;
31234
- header.versionAsString = chunk.versionAsString;
31235
- header.isCompressed = chunk.isCompressed;
31236
31255
  const unpacker = new Unpacker(chunk.buffer, chunk.count, header);
31237
31256
  onParseData(unpacker, header);
31238
31257
  if (!chunk.hasMoreData || totalRead >= totalToRead) {
@@ -31271,34 +31290,8 @@ return true;`);
31271
31290
  return twoByteColor;
31272
31291
  }
31273
31292
 
31274
- // src/las-loader.ts
31275
- var VERSION = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
31276
- var LASWorkerLoader = {
31277
- ...LASFormat,
31278
- dataType: null,
31279
- batchType: null,
31280
- name: "LAS",
31281
- id: "las",
31282
- module: "las",
31283
- version: VERSION,
31284
- worker: true,
31285
- extensions: ["las", "laz"],
31286
- // LAZ is the "compressed" flavor of LAS,
31287
- mimeTypes: ["application/octet-stream"],
31288
- // TODO - text version?
31289
- text: true,
31290
- binary: true,
31291
- tests: ["LAS"],
31292
- options: {
31293
- las: {
31294
- shape: "mesh",
31295
- fp64: false,
31296
- skip: 1,
31297
- colorDepth: 8
31298
- }
31299
- }
31300
- };
31301
- var LASLoader2 = {
31293
+ // src/lazperf-loader.ts
31294
+ var LAZPerfLoader = {
31302
31295
  ...LASWorkerLoader,
31303
31296
  parse: async (arrayBuffer, options) => parseLAS(arrayBuffer, options),
31304
31297
  parseSync: (arrayBuffer, options) => parseLAS(arrayBuffer, options)
@@ -31306,15 +31299,967 @@ return true;`);
31306
31299
 
31307
31300
  // src/las-arrow-loader.ts
31308
31301
  var LASArrowLoader = {
31309
- ...LASWorkerLoader,
31302
+ ...LAZPerfLoader,
31310
31303
  dataType: null,
31311
31304
  batchType: null,
31312
31305
  worker: false,
31313
31306
  parse: async (arrayBuffer) => {
31314
- const mesh = parseLAS(arrayBuffer);
31307
+ const mesh = await LAZPerfLoader.parse(arrayBuffer);
31315
31308
  const arrowTable = convertMeshToTable(mesh, "arrow-table");
31316
31309
  return arrowTable;
31317
31310
  }
31311
+ // @ts-expect-error parseSync
31312
+ };
31313
+
31314
+ // src/libs/laz-rs-wasm/laz_rs_wasm.js
31315
+ var import_meta = {};
31316
+ var wasm;
31317
+ var cachedUint8ArrayMemory0 = null;
31318
+ function getUint8ArrayMemory0() {
31319
+ if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
31320
+ cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);
31321
+ }
31322
+ return cachedUint8ArrayMemory0;
31323
+ }
31324
+ function getArrayU8FromWasm0(ptr, len) {
31325
+ ptr = ptr >>> 0;
31326
+ return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);
31327
+ }
31328
+ var cachedTextDecoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf-8", { ignoreBOM: true, fatal: true }) : { decode: () => {
31329
+ throw Error("TextDecoder not available");
31330
+ } };
31331
+ if (typeof TextDecoder !== "undefined") {
31332
+ cachedTextDecoder.decode();
31333
+ }
31334
+ function getStringFromWasm0(ptr, len) {
31335
+ ptr = ptr >>> 0;
31336
+ return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
31337
+ }
31338
+ function _assertClass(instance8, klass) {
31339
+ if (!(instance8 instanceof klass)) {
31340
+ throw new Error(`expected instance of ${klass.name}`);
31341
+ }
31342
+ return instance8.ptr;
31343
+ }
31344
+ function takeFromExternrefTable0(idx) {
31345
+ const value = wasm.__wbindgen_export_0.get(idx);
31346
+ wasm.__externref_table_dealloc(idx);
31347
+ return value;
31348
+ }
31349
+ var WASM_VECTOR_LEN = 0;
31350
+ function passArray8ToWasm0(arg, malloc) {
31351
+ const ptr = malloc(arg.length * 1, 1) >>> 0;
31352
+ getUint8ArrayMemory0().set(arg, ptr / 1);
31353
+ WASM_VECTOR_LEN = arg.length;
31354
+ return ptr;
31355
+ }
31356
+ var cachedTextEncoder = typeof TextEncoder !== "undefined" ? new TextEncoder("utf-8") : { encode: () => {
31357
+ throw Error("TextEncoder not available");
31358
+ } };
31359
+ var encodeString = typeof cachedTextEncoder.encodeInto === "function" ? function(arg, view) {
31360
+ return cachedTextEncoder.encodeInto(arg, view);
31361
+ } : function(arg, view) {
31362
+ const buf = cachedTextEncoder.encode(arg);
31363
+ view.set(buf);
31364
+ return {
31365
+ read: arg.length,
31366
+ written: buf.length
31367
+ };
31368
+ };
31369
+ function passStringToWasm0(arg, malloc, realloc) {
31370
+ if (realloc === void 0) {
31371
+ const buf = cachedTextEncoder.encode(arg);
31372
+ const ptr2 = malloc(buf.length, 1) >>> 0;
31373
+ getUint8ArrayMemory0().subarray(ptr2, ptr2 + buf.length).set(buf);
31374
+ WASM_VECTOR_LEN = buf.length;
31375
+ return ptr2;
31376
+ }
31377
+ let len = arg.length;
31378
+ let ptr = malloc(len, 1) >>> 0;
31379
+ const mem = getUint8ArrayMemory0();
31380
+ let offset = 0;
31381
+ for (; offset < len; offset++) {
31382
+ const code = arg.charCodeAt(offset);
31383
+ if (code > 127)
31384
+ break;
31385
+ mem[ptr + offset] = code;
31386
+ }
31387
+ if (offset !== len) {
31388
+ if (offset !== 0) {
31389
+ arg = arg.slice(offset);
31390
+ }
31391
+ ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
31392
+ const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);
31393
+ const ret = encodeString(arg, view);
31394
+ offset += ret.written;
31395
+ ptr = realloc(ptr, len, offset, 1) >>> 0;
31396
+ }
31397
+ WASM_VECTOR_LEN = offset;
31398
+ return ptr;
31399
+ }
31400
+ var cachedDataViewMemory0 = null;
31401
+ function getDataViewMemory0() {
31402
+ if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || cachedDataViewMemory0.buffer.detached === void 0 && cachedDataViewMemory0.buffer !== wasm.memory.buffer) {
31403
+ cachedDataViewMemory0 = new DataView(wasm.memory.buffer);
31404
+ }
31405
+ return cachedDataViewMemory0;
31406
+ }
31407
+ var WasmLasZipDecompressorFinalization = typeof FinalizationRegistry === "undefined" ? { register: () => {
31408
+ }, unregister: () => {
31409
+ } } : new FinalizationRegistry((ptr) => wasm.__wbg_wasmlaszipdecompressor_free(ptr >>> 0, 1));
31410
+ var WasmLasZipDecompressor = class {
31411
+ __destroy_into_raw() {
31412
+ const ptr = this.__wbg_ptr;
31413
+ this.__wbg_ptr = 0;
31414
+ WasmLasZipDecompressorFinalization.unregister(this);
31415
+ return ptr;
31416
+ }
31417
+ free() {
31418
+ const ptr = this.__destroy_into_raw();
31419
+ wasm.__wbg_wasmlaszipdecompressor_free(ptr, 0);
31420
+ }
31421
+ /**
31422
+ * @returns {WasmQuickHeader}
31423
+ */
31424
+ get header() {
31425
+ const ret = wasm.__wbg_get_wasmlaszipdecompressor_header(this.__wbg_ptr);
31426
+ return WasmQuickHeader.__wrap(ret);
31427
+ }
31428
+ /**
31429
+ * @param {WasmQuickHeader} arg0
31430
+ */
31431
+ set header(arg0) {
31432
+ _assertClass(arg0, WasmQuickHeader);
31433
+ var ptr0 = arg0.__destroy_into_raw();
31434
+ wasm.__wbg_set_wasmlaszipdecompressor_header(this.__wbg_ptr, ptr0);
31435
+ }
31436
+ /**
31437
+ * @param {Uint8Array} buf
31438
+ */
31439
+ constructor(buf) {
31440
+ const ret = wasm.wasmlaszipdecompressor_new(buf);
31441
+ if (ret[2]) {
31442
+ throw takeFromExternrefTable0(ret[1]);
31443
+ }
31444
+ this.__wbg_ptr = ret[0] >>> 0;
31445
+ WasmLasZipDecompressorFinalization.register(this, this.__wbg_ptr, this);
31446
+ return this;
31447
+ }
31448
+ /**
31449
+ * @param {Uint8Array} out
31450
+ */
31451
+ decompress_many(out) {
31452
+ var ptr0 = passArray8ToWasm0(out, wasm.__wbindgen_malloc);
31453
+ var len0 = WASM_VECTOR_LEN;
31454
+ const ret = wasm.wasmlaszipdecompressor_decompress_many(this.__wbg_ptr, ptr0, len0, out);
31455
+ if (ret[1]) {
31456
+ throw takeFromExternrefTable0(ret[0]);
31457
+ }
31458
+ }
31459
+ };
31460
+ var WasmQuickHeaderFinalization = typeof FinalizationRegistry === "undefined" ? { register: () => {
31461
+ }, unregister: () => {
31462
+ } } : new FinalizationRegistry((ptr) => wasm.__wbg_wasmquickheader_free(ptr >>> 0, 1));
31463
+ var WasmQuickHeader = class {
31464
+ static __wrap(ptr) {
31465
+ ptr = ptr >>> 0;
31466
+ const obj = Object.create(WasmQuickHeader.prototype);
31467
+ obj.__wbg_ptr = ptr;
31468
+ WasmQuickHeaderFinalization.register(obj, obj.__wbg_ptr, obj);
31469
+ return obj;
31470
+ }
31471
+ __destroy_into_raw() {
31472
+ const ptr = this.__wbg_ptr;
31473
+ this.__wbg_ptr = 0;
31474
+ WasmQuickHeaderFinalization.unregister(this);
31475
+ return ptr;
31476
+ }
31477
+ free() {
31478
+ const ptr = this.__destroy_into_raw();
31479
+ wasm.__wbg_wasmquickheader_free(ptr, 0);
31480
+ }
31481
+ /**
31482
+ * @returns {number}
31483
+ */
31484
+ get major() {
31485
+ const ret = wasm.__wbg_get_wasmquickheader_major(this.__wbg_ptr);
31486
+ return ret;
31487
+ }
31488
+ /**
31489
+ * @param {number} arg0
31490
+ */
31491
+ set major(arg0) {
31492
+ wasm.__wbg_set_wasmquickheader_major(this.__wbg_ptr, arg0);
31493
+ }
31494
+ /**
31495
+ * @returns {number}
31496
+ */
31497
+ get minor() {
31498
+ const ret = wasm.__wbg_get_wasmquickheader_minor(this.__wbg_ptr);
31499
+ return ret;
31500
+ }
31501
+ /**
31502
+ * @param {number} arg0
31503
+ */
31504
+ set minor(arg0) {
31505
+ wasm.__wbg_set_wasmquickheader_minor(this.__wbg_ptr, arg0);
31506
+ }
31507
+ /**
31508
+ * @returns {number}
31509
+ */
31510
+ get offset_to_points() {
31511
+ const ret = wasm.__wbg_get_wasmquickheader_offset_to_points(this.__wbg_ptr);
31512
+ return ret >>> 0;
31513
+ }
31514
+ /**
31515
+ * @param {number} arg0
31516
+ */
31517
+ set offset_to_points(arg0) {
31518
+ wasm.__wbg_set_wasmquickheader_offset_to_points(this.__wbg_ptr, arg0);
31519
+ }
31520
+ /**
31521
+ * @returns {number}
31522
+ */
31523
+ get num_vlrs() {
31524
+ const ret = wasm.__wbg_get_wasmquickheader_num_vlrs(this.__wbg_ptr);
31525
+ return ret >>> 0;
31526
+ }
31527
+ /**
31528
+ * @param {number} arg0
31529
+ */
31530
+ set num_vlrs(arg0) {
31531
+ wasm.__wbg_set_wasmquickheader_num_vlrs(this.__wbg_ptr, arg0);
31532
+ }
31533
+ /**
31534
+ * @returns {number}
31535
+ */
31536
+ get point_format_id() {
31537
+ const ret = wasm.__wbg_get_wasmquickheader_point_format_id(this.__wbg_ptr);
31538
+ return ret;
31539
+ }
31540
+ /**
31541
+ * @param {number} arg0
31542
+ */
31543
+ set point_format_id(arg0) {
31544
+ wasm.__wbg_set_wasmquickheader_point_format_id(this.__wbg_ptr, arg0);
31545
+ }
31546
+ /**
31547
+ * @returns {number}
31548
+ */
31549
+ get point_size() {
31550
+ const ret = wasm.__wbg_get_wasmquickheader_point_size(this.__wbg_ptr);
31551
+ return ret;
31552
+ }
31553
+ /**
31554
+ * @param {number} arg0
31555
+ */
31556
+ set point_size(arg0) {
31557
+ wasm.__wbg_set_wasmquickheader_point_size(this.__wbg_ptr, arg0);
31558
+ }
31559
+ /**
31560
+ * @returns {bigint}
31561
+ */
31562
+ get num_points() {
31563
+ const ret = wasm.__wbg_get_wasmquickheader_num_points(this.__wbg_ptr);
31564
+ return BigInt.asUintN(64, ret);
31565
+ }
31566
+ /**
31567
+ * @param {bigint} arg0
31568
+ */
31569
+ set num_points(arg0) {
31570
+ wasm.__wbg_set_wasmquickheader_num_points(this.__wbg_ptr, arg0);
31571
+ }
31572
+ /**
31573
+ * @returns {number}
31574
+ */
31575
+ get header_size() {
31576
+ const ret = wasm.__wbg_get_wasmquickheader_header_size(this.__wbg_ptr);
31577
+ return ret;
31578
+ }
31579
+ /**
31580
+ * @param {number} arg0
31581
+ */
31582
+ set header_size(arg0) {
31583
+ wasm.__wbg_set_wasmquickheader_header_size(this.__wbg_ptr, arg0);
31584
+ }
31585
+ };
31586
+ async function __wbg_load(module2, imports) {
31587
+ if (typeof Response === "function" && module2 instanceof Response) {
31588
+ if (typeof WebAssembly.instantiateStreaming === "function") {
31589
+ try {
31590
+ return await WebAssembly.instantiateStreaming(module2, imports);
31591
+ } catch (e) {
31592
+ if (module2.headers.get("Content-Type") != "application/wasm") {
31593
+ console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
31594
+ } else {
31595
+ throw e;
31596
+ }
31597
+ }
31598
+ }
31599
+ const bytes = await module2.arrayBuffer();
31600
+ return await WebAssembly.instantiate(bytes, imports);
31601
+ } else {
31602
+ const instance8 = await WebAssembly.instantiate(module2, imports);
31603
+ if (instance8 instanceof WebAssembly.Instance) {
31604
+ return { instance: instance8, module: module2 };
31605
+ } else {
31606
+ return instance8;
31607
+ }
31608
+ }
31609
+ }
31610
+ function __wbg_get_imports() {
31611
+ const imports = {};
31612
+ imports.wbg = {};
31613
+ imports.wbg.__wbindgen_copy_to_typed_array = function(arg0, arg1, arg2) {
31614
+ new Uint8Array(arg2.buffer, arg2.byteOffset, arg2.byteLength).set(getArrayU8FromWasm0(arg0, arg1));
31615
+ };
31616
+ imports.wbg.__wbg_buffer_ccaed51a635d8a2d = function(arg0) {
31617
+ const ret = arg0.buffer;
31618
+ return ret;
31619
+ };
31620
+ imports.wbg.__wbg_new_fec2611eb9180f95 = function(arg0) {
31621
+ const ret = new Uint8Array(arg0);
31622
+ return ret;
31623
+ };
31624
+ imports.wbg.__wbg_set_ec2fcf81bc573fd9 = function(arg0, arg1, arg2) {
31625
+ arg0.set(arg1, arg2 >>> 0);
31626
+ };
31627
+ imports.wbg.__wbg_length_9254c4bd3b9f23c4 = function(arg0) {
31628
+ const ret = arg0.length;
31629
+ return ret;
31630
+ };
31631
+ imports.wbg.__wbg_new_abda76e883ba8a5f = function() {
31632
+ const ret = new Error();
31633
+ return ret;
31634
+ };
31635
+ imports.wbg.__wbg_stack_658279fe44541cf6 = function(arg0, arg1) {
31636
+ const ret = arg1.stack;
31637
+ const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
31638
+ const len1 = WASM_VECTOR_LEN;
31639
+ getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
31640
+ getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
31641
+ };
31642
+ imports.wbg.__wbg_error_f851667af71bcfc6 = function(arg0, arg1) {
31643
+ let deferred0_0;
31644
+ let deferred0_1;
31645
+ try {
31646
+ deferred0_0 = arg0;
31647
+ deferred0_1 = arg1;
31648
+ console.error(getStringFromWasm0(arg0, arg1));
31649
+ } finally {
31650
+ wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);
31651
+ }
31652
+ };
31653
+ imports.wbg.__wbindgen_throw = function(arg0, arg1) {
31654
+ throw new Error(getStringFromWasm0(arg0, arg1));
31655
+ };
31656
+ imports.wbg.__wbindgen_memory = function() {
31657
+ const ret = wasm.memory;
31658
+ return ret;
31659
+ };
31660
+ imports.wbg.__wbindgen_init_externref_table = function() {
31661
+ const table = wasm.__wbindgen_export_0;
31662
+ const offset = table.grow(4);
31663
+ table.set(0, void 0);
31664
+ table.set(offset + 0, void 0);
31665
+ table.set(offset + 1, null);
31666
+ table.set(offset + 2, true);
31667
+ table.set(offset + 3, false);
31668
+ ;
31669
+ };
31670
+ return imports;
31671
+ }
31672
+ function __wbg_init_memory(imports, memory) {
31673
+ }
31674
+ function __wbg_finalize_init(instance8, module2) {
31675
+ wasm = instance8.exports;
31676
+ __wbg_init.__wbindgen_wasm_module = module2;
31677
+ cachedDataViewMemory0 = null;
31678
+ cachedUint8ArrayMemory0 = null;
31679
+ wasm.__wbindgen_start();
31680
+ return wasm;
31681
+ }
31682
+ async function __wbg_init(module_or_path) {
31683
+ if (wasm !== void 0)
31684
+ return wasm;
31685
+ if (typeof module_or_path !== "undefined") {
31686
+ if (Object.getPrototypeOf(module_or_path) === Object.prototype) {
31687
+ ({ module_or_path } = module_or_path);
31688
+ } else {
31689
+ console.warn("using deprecated parameters for the initialization function; pass a single object instead");
31690
+ }
31691
+ }
31692
+ if (typeof module_or_path === "undefined") {
31693
+ module_or_path = new URL("laz_rs_wasm_bg.wasm", import_meta.url);
31694
+ }
31695
+ const imports = __wbg_get_imports();
31696
+ if (typeof module_or_path === "string" || typeof Request === "function" && module_or_path instanceof Request || typeof URL === "function" && module_or_path instanceof URL) {
31697
+ module_or_path = fetch(module_or_path);
31698
+ }
31699
+ __wbg_init_memory(imports);
31700
+ const { instance: instance8, module: module2 } = await __wbg_load(await module_or_path, imports);
31701
+ return __wbg_finalize_init(instance8, module2);
31702
+ }
31703
+ var laz_rs_wasm_default = __wbg_init;
31704
+
31705
+ // src/lib/laz-rs-wasm/laslaz-decoder.ts
31706
+ var POINT_FORMAT_READERS2 = {
31707
+ 0: (dv) => {
31708
+ return {
31709
+ position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
31710
+ intensity: dv.getUint16(12, true),
31711
+ classification: dv.getUint8(15)
31712
+ };
31713
+ },
31714
+ 1: (dv) => {
31715
+ return {
31716
+ position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
31717
+ intensity: dv.getUint16(12, true),
31718
+ classification: dv.getUint8(15)
31719
+ };
31720
+ },
31721
+ 2: (dv) => {
31722
+ return {
31723
+ position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
31724
+ intensity: dv.getUint16(12, true),
31725
+ classification: dv.getUint8(15),
31726
+ color: [dv.getUint16(20, true), dv.getUint16(22, true), dv.getUint16(24, true)]
31727
+ };
31728
+ },
31729
+ 3: (dv) => {
31730
+ return {
31731
+ position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
31732
+ intensity: dv.getUint16(12, true),
31733
+ classification: dv.getUint8(15),
31734
+ color: [dv.getUint16(28, true), dv.getUint16(30, true), dv.getUint16(32, true)]
31735
+ };
31736
+ },
31737
+ 4: (dv) => {
31738
+ return {
31739
+ position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
31740
+ intensity: dv.getUint16(12, true),
31741
+ classification: dv.getUint8(15)
31742
+ };
31743
+ },
31744
+ 5: (dv) => {
31745
+ return {
31746
+ position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
31747
+ intensity: dv.getUint16(12, true),
31748
+ classification: dv.getUint8(15),
31749
+ color: [dv.getUint16(28, true), dv.getUint16(30, true), dv.getUint16(32, true)]
31750
+ };
31751
+ },
31752
+ 6: (dv) => {
31753
+ return {
31754
+ position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
31755
+ intensity: dv.getUint16(12, true),
31756
+ classification: dv.getUint8(16)
31757
+ };
31758
+ },
31759
+ 7: (dv) => {
31760
+ return {
31761
+ position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
31762
+ intensity: dv.getUint16(12, true),
31763
+ classification: dv.getUint8(16),
31764
+ color: [dv.getUint16(30, true), dv.getUint16(32, true), dv.getUint16(34, true)]
31765
+ };
31766
+ },
31767
+ 8: (dv) => {
31768
+ return {
31769
+ position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
31770
+ intensity: dv.getUint16(12, true),
31771
+ classification: dv.getUint8(16),
31772
+ color: [dv.getUint16(30, true), dv.getUint16(32, true), dv.getUint16(34, true)]
31773
+ };
31774
+ },
31775
+ 9: (dv) => {
31776
+ return {
31777
+ position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
31778
+ intensity: dv.getUint16(12, true),
31779
+ classification: dv.getUint8(16)
31780
+ };
31781
+ },
31782
+ 10: (dv) => {
31783
+ return {
31784
+ position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
31785
+ intensity: dv.getUint16(12, true),
31786
+ classification: dv.getUint8(16),
31787
+ color: [dv.getUint16(30, true), dv.getUint16(32, true), dv.getUint16(34, true)]
31788
+ };
31789
+ }
31790
+ };
31791
+ function readAs2(buf, Type3 = {}, offset, count) {
31792
+ count = count === void 0 || count === 0 ? 1 : count;
31793
+ const sub = buf.slice(offset, offset + Type3.BYTES_PER_ELEMENT * count);
31794
+ const r = new Type3(sub);
31795
+ if (count === 1) {
31796
+ return r[0];
31797
+ }
31798
+ const ret = [];
31799
+ for (let i = 0; i < count; i++) {
31800
+ ret.push(r[i]);
31801
+ }
31802
+ return ret;
31803
+ }
31804
+ function parseLASHeader2(arraybuffer) {
31805
+ const ver = new Uint8Array(arraybuffer, 24, 2);
31806
+ const version = ver[0] * 10 + ver[1];
31807
+ const versionAsString = `${ver[0]}.${ver[1]}`;
31808
+ const rawPointsFormatId = readAs2(arraybuffer, Uint8Array, 32 * 3 + 8);
31809
+ const bit7 = (rawPointsFormatId & 128) >> 7;
31810
+ const bit6 = (rawPointsFormatId & 64) >> 6;
31811
+ const isCompressed = bit7 === 1 || bit6 === 1;
31812
+ const pointsFormatId = rawPointsFormatId & 63;
31813
+ const o = {
31814
+ pointsOffset: readAs2(arraybuffer, Uint32Array, 32 * 3),
31815
+ pointsFormatId,
31816
+ pointsStructSize: readAs2(arraybuffer, Uint16Array, 32 * 3 + 8 + 1),
31817
+ pointsCount: readAs2(arraybuffer, Uint32Array, 32 * 3 + 11),
31818
+ versionAsString,
31819
+ isCompressed
31820
+ };
31821
+ let start = 32 * 3 + 35;
31822
+ o.scale = readAs2(arraybuffer, Float64Array, start, 3);
31823
+ start += 24;
31824
+ o.offset = readAs2(arraybuffer, Float64Array, start, 3);
31825
+ start += 24;
31826
+ const bounds = readAs2(arraybuffer, Float64Array, start, 6);
31827
+ start += 48;
31828
+ o.maxs = [bounds[0], bounds[2], bounds[4]];
31829
+ o.mins = [bounds[1], bounds[3], bounds[5]];
31830
+ start += 20;
31831
+ if (version === 14) {
31832
+ o.pointsCount = Number(readAs2(arraybuffer, BigUint64Array, start));
31833
+ }
31834
+ const colorPointFormats = /* @__PURE__ */ new Set([2, 3, 5, 7, 8, 10]);
31835
+ o.hasColor = colorPointFormats.has(pointsFormatId);
31836
+ return o;
31837
+ }
31838
+ var LASLoader2 = class {
31839
+ arraybuffer;
31840
+ readOffset = 0;
31841
+ header = null;
31842
+ constructor(arraybuffer) {
31843
+ this.arraybuffer = arraybuffer;
31844
+ }
31845
+ /**
31846
+ * @returns boolean
31847
+ */
31848
+ open() {
31849
+ return true;
31850
+ }
31851
+ /**
31852
+ * Parsing of incoming binary
31853
+ * @returns LASHeader
31854
+ */
31855
+ getHeader() {
31856
+ this.header = parseLASHeader2(this.arraybuffer);
31857
+ return this.header;
31858
+ }
31859
+ /**
31860
+ * Reading data
31861
+ * @param count
31862
+ * @param skip
31863
+ * @returns LasData
31864
+ */
31865
+ readData(count, skip) {
31866
+ const { header, arraybuffer } = this;
31867
+ if (!header) {
31868
+ throw new Error("Cannot start reading data till a header request is issued");
31869
+ }
31870
+ let { readOffset } = this;
31871
+ let start;
31872
+ if (skip <= 1) {
31873
+ count = Math.min(count, header.pointsCount - readOffset);
31874
+ start = header.pointsOffset + readOffset * header.pointsStructSize;
31875
+ const end = start + count * header.pointsStructSize;
31876
+ readOffset += count;
31877
+ this.readOffset = readOffset;
31878
+ return {
31879
+ buffer: arraybuffer.slice(start, end),
31880
+ count,
31881
+ hasMoreData: readOffset < header.pointsCount
31882
+ };
31883
+ }
31884
+ const pointsToRead = Math.min(count * skip, header.pointsCount - readOffset);
31885
+ const bufferSize = Math.ceil(pointsToRead / skip);
31886
+ let pointsRead = 0;
31887
+ const buf = new Uint8Array(bufferSize * header.pointsStructSize);
31888
+ for (let i = 0; i < pointsToRead; i++) {
31889
+ if (i % skip === 0) {
31890
+ start = header.pointsOffset + readOffset * header.pointsStructSize;
31891
+ const src = new Uint8Array(arraybuffer, start, header.pointsStructSize);
31892
+ buf.set(src, pointsRead * header.pointsStructSize);
31893
+ pointsRead++;
31894
+ }
31895
+ readOffset++;
31896
+ }
31897
+ this.readOffset = readOffset;
31898
+ return {
31899
+ buffer: buf.buffer,
31900
+ count: pointsRead,
31901
+ hasMoreData: readOffset < header.pointsCount
31902
+ };
31903
+ }
31904
+ /**
31905
+ * Method which brings data to null to close the file
31906
+ * @returns
31907
+ */
31908
+ close() {
31909
+ this.arraybuffer = null;
31910
+ return true;
31911
+ }
31912
+ };
31913
+ var LAZLoader2 = class {
31914
+ arraybuffer;
31915
+ readOffset = 0;
31916
+ instance = null;
31917
+ header = null;
31918
+ constructor(arraybuffer) {
31919
+ this.arraybuffer = arraybuffer;
31920
+ }
31921
+ /**
31922
+ * Opens the file
31923
+ * @returns boolean
31924
+ */
31925
+ open() {
31926
+ try {
31927
+ const abInt = new Uint8Array(this.arraybuffer);
31928
+ this.instance = new WasmLasZipDecompressor(abInt);
31929
+ return true;
31930
+ } catch (error) {
31931
+ throw new Error(`Failed to open file: ${error.message}`);
31932
+ }
31933
+ }
31934
+ getHeader() {
31935
+ try {
31936
+ this.header = parseLASHeader2(this.arraybuffer);
31937
+ return this.header;
31938
+ } catch (error) {
31939
+ throw new Error(`Failed to get header: ${error.message}`);
31940
+ }
31941
+ }
31942
+ /**
31943
+ * @param count
31944
+ * @param offset
31945
+ * @param skip
31946
+ * @returns LASData
31947
+ */
31948
+ readData(count, skip) {
31949
+ if (!this.instance) {
31950
+ throw new Error("You need to open the file before trying to read stuff");
31951
+ }
31952
+ const { header, instance: instance8 } = this;
31953
+ if (!header) {
31954
+ throw new Error(
31955
+ "You need to query header before reading, I maintain state that way, sorry :("
31956
+ );
31957
+ }
31958
+ try {
31959
+ const pointsToRead = Math.min(count * skip, header.pointsCount - this.readOffset);
31960
+ const bufferSize = Math.ceil(pointsToRead / skip);
31961
+ let pointsRead = 0;
31962
+ const buf = new Uint8Array(bufferSize * header.pointsStructSize);
31963
+ const bufRead = new Uint8Array(header.pointsStructSize);
31964
+ for (let i = 0; i < pointsToRead; i++) {
31965
+ instance8.decompress_many(bufRead);
31966
+ if (i % skip === 0) {
31967
+ buf.set(bufRead, pointsRead * header.pointsStructSize);
31968
+ pointsRead++;
31969
+ }
31970
+ this.readOffset++;
31971
+ }
31972
+ return {
31973
+ buffer: buf.buffer,
31974
+ count: pointsRead,
31975
+ hasMoreData: this.readOffset < header.pointsCount
31976
+ };
31977
+ } catch (error) {
31978
+ throw new Error(`Failed to read data: ${error.message}`);
31979
+ }
31980
+ }
31981
+ /**
31982
+ * Deletes the instance
31983
+ * @returns boolean
31984
+ */
31985
+ close() {
31986
+ try {
31987
+ if (this.instance !== null) {
31988
+ this.instance.free();
31989
+ this.instance = null;
31990
+ }
31991
+ this.arraybuffer = null;
31992
+ return true;
31993
+ } catch (error) {
31994
+ throw new Error(`Failed to close file: ${error.message}`);
31995
+ }
31996
+ }
31997
+ };
31998
+ var LASDecoder2 = class {
31999
+ arrayb;
32000
+ decoder;
32001
+ pointsCount;
32002
+ pointSize;
32003
+ constructor(buffer, len, header) {
32004
+ this.arrayb = buffer;
32005
+ this.decoder = POINT_FORMAT_READERS2[header.pointsFormatId];
32006
+ this.pointsCount = len;
32007
+ this.pointSize = header.pointsStructSize;
32008
+ }
32009
+ /**
32010
+ * Decodes data depends on this point size
32011
+ * @param index
32012
+ * @returns New object
32013
+ */
32014
+ getPoint(index) {
32015
+ if (index < 0 || index >= this.pointsCount) {
32016
+ throw new Error("Point index out of range");
32017
+ }
32018
+ const dv = new DataView(this.arrayb, index * this.pointSize, this.pointSize);
32019
+ return this.decoder(dv);
32020
+ }
32021
+ };
32022
+ var LASFile2 = class {
32023
+ arraybuffer;
32024
+ formatId = 0;
32025
+ loader;
32026
+ isCompressed = true;
32027
+ isOpen = false;
32028
+ version = 0;
32029
+ versionAsString = "";
32030
+ constructor(arraybuffer) {
32031
+ this.arraybuffer = arraybuffer;
32032
+ this.validate();
32033
+ this.loader = this.isCompressed ? new LAZLoader2(this.arraybuffer) : new LASLoader2(this.arraybuffer);
32034
+ }
32035
+ validate() {
32036
+ const signature = readAs2(this.arraybuffer, Uint8Array, 0, 4);
32037
+ const check = String.fromCharCode(...signature);
32038
+ if (check !== "LASF") {
32039
+ throw new Error("Invalid LAS file");
32040
+ }
32041
+ if (this.determineVersion() > 14) {
32042
+ throw new Error("Only file versions <= 1.4 are supported");
32043
+ }
32044
+ this.determineFormat();
32045
+ if (POINT_FORMAT_READERS2[this.formatId] === void 0) {
32046
+ throw new Error("The point format ID is not supported");
32047
+ }
32048
+ }
32049
+ /**
32050
+ * Determines format in parameters of LASHeader
32051
+ */
32052
+ determineFormat() {
32053
+ const formatId = readAs2(this.arraybuffer, Uint8Array, 32 * 3 + 8);
32054
+ const bit7 = (formatId & 128) >> 7;
32055
+ const bit6 = (formatId & 64) >> 6;
32056
+ if (bit7 === 1 && bit6 === 1) {
32057
+ throw new Error("Old style compression not supported");
32058
+ }
32059
+ this.formatId = formatId & 63;
32060
+ this.isCompressed = bit7 === 1 || bit6 === 1;
32061
+ }
32062
+ /**
32063
+ * Determines version
32064
+ * @returns version
32065
+ */
32066
+ determineVersion() {
32067
+ const ver = new Uint8Array(this.arraybuffer, 24, 2);
32068
+ this.version = ver[0] * 10 + ver[1];
32069
+ this.versionAsString = `${ver[0]}.${ver[1]}`;
32070
+ return this.version;
32071
+ }
32072
+ /**
32073
+ * Reads if the file is open
32074
+ * @returns boolean
32075
+ */
32076
+ open() {
32077
+ if (this.loader.open()) {
32078
+ this.isOpen = true;
32079
+ }
32080
+ }
32081
+ /**
32082
+ * Gets the header
32083
+ * @returns Header
32084
+ */
32085
+ getHeader() {
32086
+ return this.loader.getHeader();
32087
+ }
32088
+ /**
32089
+ * @param count
32090
+ * @param start
32091
+ * @param skip
32092
+ * @returns LASData
32093
+ */
32094
+ readData(count, skip) {
32095
+ return this.loader.readData(count, skip);
32096
+ }
32097
+ /**
32098
+ * Closes the file
32099
+ */
32100
+ close() {
32101
+ if (this.loader.close()) {
32102
+ this.isOpen = false;
32103
+ }
32104
+ }
32105
+ /**
32106
+ */
32107
+ getUnpacker() {
32108
+ return LASDecoder2;
32109
+ }
32110
+ };
32111
+
32112
+ // src/lib/laz-rs-wasm/parse-las.ts
32113
+ function parseLAS2(arrayBuffer, options) {
32114
+ return parseLASMesh2(arrayBuffer, options);
32115
+ }
32116
+ function parseLASMesh2(arrayBuffer, options = {}) {
32117
+ let pointIndex = 0;
32118
+ let positions;
32119
+ let colors;
32120
+ let intensities;
32121
+ let classifications;
32122
+ let originalHeader;
32123
+ const lasMesh = {
32124
+ loader: "las",
32125
+ loaderData: {},
32126
+ // shape: 'mesh',
32127
+ schema: { fields: [], metadata: {} },
32128
+ header: {
32129
+ vertexCount: 0,
32130
+ boundingBox: [
32131
+ [0, 0, 0],
32132
+ [0, 0, 0]
32133
+ ]
32134
+ },
32135
+ attributes: {},
32136
+ topology: "point-list",
32137
+ mode: 0
32138
+ // GL.POINTS
32139
+ };
32140
+ parseLASChunked2(arrayBuffer, options.las?.skip, (decoder2 = {}, lasHeader) => {
32141
+ if (!originalHeader) {
32142
+ originalHeader = lasHeader;
32143
+ const total = lasHeader.totalToRead;
32144
+ const PositionsType = options.las?.fp64 ? Float64Array : Float32Array;
32145
+ positions = new PositionsType(total * 3);
32146
+ colors = lasHeader.hasColor ? new Uint8Array(total * 4) : null;
32147
+ intensities = new Uint16Array(total);
32148
+ classifications = new Uint8Array(total);
32149
+ lasMesh.loaderData = lasHeader;
32150
+ lasMesh.attributes = {
32151
+ POSITION: { value: positions, size: 3 },
32152
+ // non-gltf attributes, use non-capitalized names for now
32153
+ intensity: { value: intensities, size: 1 },
32154
+ classification: { value: classifications, size: 1 }
32155
+ };
32156
+ if (colors) {
32157
+ lasMesh.attributes.COLOR_0 = { value: colors, size: 4 };
32158
+ }
32159
+ }
32160
+ const batchSize = decoder2.pointsCount;
32161
+ const {
32162
+ scale: [scaleX, scaleY, scaleZ],
32163
+ offset: [offsetX, offsetY, offsetZ]
32164
+ } = lasHeader;
32165
+ const twoByteColor = detectTwoByteColors2(decoder2, batchSize, options.las?.colorDepth);
32166
+ for (let i = 0; i < batchSize; i++) {
32167
+ const { position, color, intensity, classification } = decoder2.getPoint(i);
32168
+ positions[pointIndex * 3] = position[0] * scaleX + offsetX;
32169
+ positions[pointIndex * 3 + 1] = position[1] * scaleY + offsetY;
32170
+ positions[pointIndex * 3 + 2] = position[2] * scaleZ + offsetZ;
32171
+ if (color && colors) {
32172
+ if (twoByteColor) {
32173
+ colors[pointIndex * 4] = color[0] / 256;
32174
+ colors[pointIndex * 4 + 1] = color[1] / 256;
32175
+ colors[pointIndex * 4 + 2] = color[2] / 256;
32176
+ } else {
32177
+ colors[pointIndex * 4] = color[0];
32178
+ colors[pointIndex * 4 + 1] = color[1];
32179
+ colors[pointIndex * 4 + 2] = color[2];
32180
+ }
32181
+ colors[pointIndex * 4 + 3] = 255;
32182
+ }
32183
+ intensities[pointIndex] = intensity;
32184
+ classifications[pointIndex] = classification;
32185
+ pointIndex++;
32186
+ }
32187
+ const meshBatch = {
32188
+ ...lasMesh,
32189
+ header: {
32190
+ vertexCount: lasHeader.totalRead
32191
+ },
32192
+ progress: lasHeader.totalRead / lasHeader.totalToRead
32193
+ };
32194
+ options?.onProgress?.(meshBatch);
32195
+ });
32196
+ lasMesh.header = {
32197
+ vertexCount: originalHeader.totalToRead,
32198
+ boundingBox: getMeshBoundingBox(lasMesh?.attributes || {})
32199
+ };
32200
+ if (lasMesh) {
32201
+ lasMesh.schema = getLASSchema(lasMesh.loaderData, lasMesh.attributes);
32202
+ }
32203
+ return lasMesh;
32204
+ }
32205
+ function parseLASChunked2(rawData, skip, onParseData = {}) {
32206
+ const dataHandler = new LASFile2(rawData);
32207
+ try {
32208
+ dataHandler.open();
32209
+ const header = dataHandler.getHeader();
32210
+ const Unpacker = dataHandler.getUnpacker();
32211
+ const totalToRead = Math.ceil(header.pointsCount / Math.max(1, skip));
32212
+ header.totalToRead = totalToRead;
32213
+ let totalRead = 0;
32214
+ while (true) {
32215
+ const chunk = dataHandler.readData(1e3 * 100, skip);
32216
+ totalRead += chunk.count;
32217
+ header.totalRead = totalRead;
32218
+ const unpacker = new Unpacker(chunk.buffer, chunk.count, header);
32219
+ onParseData(unpacker, header);
32220
+ if (!chunk.hasMoreData || totalRead >= totalToRead) {
32221
+ break;
32222
+ }
32223
+ }
32224
+ } catch (e) {
32225
+ throw e;
32226
+ } finally {
32227
+ dataHandler.close();
32228
+ }
32229
+ }
32230
+ function detectTwoByteColors2(decoder2 = {}, batchSize, colorDepth) {
32231
+ let twoByteColor = false;
32232
+ switch (colorDepth) {
32233
+ case 8:
32234
+ twoByteColor = false;
32235
+ break;
32236
+ case 16:
32237
+ twoByteColor = true;
32238
+ break;
32239
+ case "auto":
32240
+ if (decoder2.getPoint(0).color) {
32241
+ for (let i = 0; i < batchSize; i++) {
32242
+ const { color } = decoder2.getPoint(i);
32243
+ if (color[0] > 255 || color[1] > 255 || color[2] > 255) {
32244
+ twoByteColor = true;
32245
+ }
32246
+ }
32247
+ }
32248
+ break;
32249
+ default:
32250
+ console.warn("las: illegal value for options.las.colorDepth");
32251
+ break;
32252
+ }
32253
+ return twoByteColor;
32254
+ }
32255
+
32256
+ // src/laz-rs-loader.ts
32257
+ var LAZRsLoader = {
32258
+ ...LASWorkerLoader,
32259
+ parse: async (arrayBuffer, options) => {
32260
+ await laz_rs_wasm_default();
32261
+ return parseLAS2(arrayBuffer, { ...options });
32262
+ }
31318
32263
  };
31319
32264
  return __toCommonJS(bundle_exports);
31320
32265
  })();