@loaders.gl/las 4.4.0-alpha.2 → 4.4.0-alpha.9

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 +8 -5
  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/index.cjs CHANGED
@@ -22,8 +22,10 @@ var dist_exports = {};
22
22
  __export(dist_exports, {
23
23
  LASArrowLoader: () => LASArrowLoader,
24
24
  LASFormat: () => LASFormat,
25
- LASLoader: () => LASLoader2,
26
- LASWorkerLoader: () => LASWorkerLoader
25
+ LASLoader: () => LAZPerfLoader,
26
+ LASWorkerLoader: () => LASWorkerLoader,
27
+ LAZPerfLoader: () => LAZPerfLoader,
28
+ LAZRsLoader: () => LAZRsLoader
27
29
  });
28
30
  module.exports = __toCommonJS(dist_exports);
29
31
 
@@ -36,15 +38,65 @@ var LASFormat = {
36
38
  // LAZ is the "compressed" flavor of LAS,
37
39
  mimeTypes: ["application/octet-stream"],
38
40
  // TODO - text version?
39
- text: true,
41
+ text: false,
40
42
  binary: true,
41
- tests: ["LAS"]
43
+ tests: ["LASF"]
42
44
  };
43
45
 
44
- // dist/lib/parse-las.js
46
+ // dist/las-loader.js
47
+ var VERSION = true ? "4.4.0-alpha.9" : "latest";
48
+ var LASWorkerLoader = {
49
+ ...LASFormat,
50
+ dataType: null,
51
+ batchType: null,
52
+ version: VERSION,
53
+ worker: true,
54
+ options: {
55
+ las: {
56
+ shape: "mesh",
57
+ fp64: false,
58
+ skip: 1,
59
+ colorDepth: 8
60
+ }
61
+ }
62
+ };
63
+
64
+ // dist/lib/laz-perf/parse-las.js
45
65
  var import_schema_utils2 = require("@loaders.gl/schema-utils");
46
66
 
47
- // dist/lib/libs/laz-perf.js
67
+ // dist/lib/get-las-schema.js
68
+ var import_schema_utils = require("@loaders.gl/schema-utils");
69
+ function getLASSchema(lasHeader, attributes) {
70
+ const metadataMap = makeMetadataFromLasHeader(lasHeader);
71
+ const schema = (0, import_schema_utils.deduceMeshSchema)(attributes, metadataMap);
72
+ return schema;
73
+ }
74
+ function makeMetadataFromLasHeader(lasHeader) {
75
+ const metadata = {};
76
+ metadata.las_pointsOffset = lasHeader.pointsOffset.toString(10);
77
+ metadata.las_pointsFormatId = lasHeader.pointsFormatId.toString(10);
78
+ metadata.las_pointsStructSize = lasHeader.pointsStructSize.toString(10);
79
+ metadata.las_pointsCount = lasHeader.pointsCount.toString(10);
80
+ metadata.las_scale = JSON.stringify(lasHeader.scale);
81
+ metadata.las_offset = JSON.stringify(lasHeader.offset);
82
+ if (lasHeader.maxs !== void 0) {
83
+ metadata.las_maxs = JSON.stringify(lasHeader.maxs);
84
+ }
85
+ if (lasHeader.mins !== void 0) {
86
+ metadata.las_mins = JSON.stringify(lasHeader.mins);
87
+ }
88
+ metadata.las_totalToRead = lasHeader.totalToRead.toString(10);
89
+ metadata.las_pointsFortotalReadmatId = lasHeader.totalRead.toString(10);
90
+ if (lasHeader.versionAsString !== void 0) {
91
+ metadata.las_versionAsString = lasHeader.versionAsString;
92
+ }
93
+ if (lasHeader.isCompressed !== void 0) {
94
+ metadata.las_isCompressed = lasHeader.isCompressed.toString();
95
+ }
96
+ return metadata;
97
+ }
98
+
99
+ // dist/libs/laz-perf/laz-perf.js
48
100
  function getModule() {
49
101
  var Module2 = typeof Module2 !== "undefined" ? Module2 : {};
50
102
  var moduleOverrides = {};
@@ -2064,10 +2116,10 @@ function getModule() {
2064
2116
  }
2065
2117
  function __embind_register_std_wstring(rawType, charSize, name) {
2066
2118
  name = readLatin1String(name);
2067
- var decodeString, encodeString, getHeap, lengthBytesUTF, shift;
2119
+ var decodeString, encodeString2, getHeap, lengthBytesUTF, shift;
2068
2120
  if (charSize === 2) {
2069
2121
  decodeString = UTF16ToString;
2070
- encodeString = stringToUTF16;
2122
+ encodeString2 = stringToUTF16;
2071
2123
  lengthBytesUTF = lengthBytesUTF16;
2072
2124
  getHeap = function() {
2073
2125
  return HEAPU16;
@@ -2075,7 +2127,7 @@ function getModule() {
2075
2127
  shift = 1;
2076
2128
  } else if (charSize === 4) {
2077
2129
  decodeString = UTF32ToString;
2078
- encodeString = stringToUTF32;
2130
+ encodeString2 = stringToUTF32;
2079
2131
  lengthBytesUTF = lengthBytesUTF32;
2080
2132
  getHeap = function() {
2081
2133
  return HEAPU32;
@@ -2113,7 +2165,7 @@ function getModule() {
2113
2165
  var length = lengthBytesUTF(value);
2114
2166
  var ptr = _malloc(4 + length + charSize);
2115
2167
  HEAPU32[ptr >> 2] = length >> shift;
2116
- encodeString(value, ptr + 4, length + charSize);
2168
+ encodeString2(value, ptr + 4, length + charSize);
2117
2169
  if (destructors !== null) {
2118
2170
  destructors.push(_free, ptr);
2119
2171
  }
@@ -18459,7 +18511,7 @@ function getModule() {
18459
18511
  return Module2;
18460
18512
  }
18461
18513
 
18462
- // dist/lib/laslaz-decoder.js
18514
+ // dist/lib/laz-perf/laslaz-decoder.js
18463
18515
  var Module = null;
18464
18516
  var POINT_FORMAT_READERS = {
18465
18517
  0: (dv) => {
@@ -18539,7 +18591,8 @@ var LASLoader = class {
18539
18591
  totalToRead: 0,
18540
18592
  totalRead: 0,
18541
18593
  versionAsString: "",
18542
- isCompressed: true
18594
+ isCompressed: true,
18595
+ hasColor: false
18543
18596
  };
18544
18597
  constructor(arraybuffer) {
18545
18598
  this.arraybuffer = arraybuffer;
@@ -18826,39 +18879,7 @@ var LASFile = class {
18826
18879
  }
18827
18880
  };
18828
18881
 
18829
- // dist/lib/get-las-schema.js
18830
- var import_schema_utils = require("@loaders.gl/schema-utils");
18831
- function getLASSchema(lasHeader, attributes) {
18832
- const metadataMap = makeMetadataFromLasHeader(lasHeader);
18833
- const schema = (0, import_schema_utils.deduceMeshSchema)(attributes, metadataMap);
18834
- return schema;
18835
- }
18836
- function makeMetadataFromLasHeader(lasHeader) {
18837
- const metadata = {};
18838
- metadata.las_pointsOffset = lasHeader.pointsOffset.toString(10);
18839
- metadata.las_pointsFormatId = lasHeader.pointsFormatId.toString(10);
18840
- metadata.las_pointsStructSize = lasHeader.pointsStructSize.toString(10);
18841
- metadata.las_pointsCount = lasHeader.pointsCount.toString(10);
18842
- metadata.las_scale = JSON.stringify(lasHeader.scale);
18843
- metadata.las_offset = JSON.stringify(lasHeader.offset);
18844
- if (lasHeader.maxs !== void 0) {
18845
- metadata.las_maxs = JSON.stringify(lasHeader.maxs);
18846
- }
18847
- if (lasHeader.mins !== void 0) {
18848
- metadata.las_mins = JSON.stringify(lasHeader.mins);
18849
- }
18850
- metadata.las_totalToRead = lasHeader.totalToRead.toString(10);
18851
- metadata.las_pointsFortotalReadmatId = lasHeader.totalRead.toString(10);
18852
- if (lasHeader.versionAsString !== void 0) {
18853
- metadata.las_versionAsString = lasHeader.versionAsString;
18854
- }
18855
- if (lasHeader.isCompressed !== void 0) {
18856
- metadata.las_isCompressed = lasHeader.isCompressed.toString();
18857
- }
18858
- return metadata;
18859
- }
18860
-
18861
- // dist/lib/parse-las.js
18882
+ // dist/lib/laz-perf/parse-las.js
18862
18883
  function parseLAS(arrayBuffer, options) {
18863
18884
  return parseLASMesh(arrayBuffer, options);
18864
18885
  }
@@ -18894,7 +18915,7 @@ function parseLASMesh(arrayBuffer, options = {}) {
18894
18915
  const total = lasHeader.totalToRead;
18895
18916
  const PositionsType = ((_a2 = options.las) == null ? void 0 : _a2.fp64) ? Float64Array : Float32Array;
18896
18917
  positions = new PositionsType(total * 3);
18897
- colors = lasHeader.pointsFormatId >= 2 ? new Uint8Array(total * 4) : null;
18918
+ colors = lasHeader.hasColor ? new Uint8Array(total * 4) : null;
18898
18919
  intensities = new Uint16Array(total);
18899
18920
  classifications = new Uint8Array(total);
18900
18921
  lasMesh.loaderData = lasHeader;
@@ -18960,11 +18981,9 @@ function parseLASChunked(rawData, skip, onParseData = {}) {
18960
18981
  header.totalToRead = totalToRead;
18961
18982
  let totalRead = 0;
18962
18983
  while (true) {
18963
- const chunk = dataHandler.readData(1e3 * 100, 0, skip);
18984
+ const chunk = dataHandler.readData(1e3 * 100, skip);
18964
18985
  totalRead += chunk.count;
18965
18986
  header.totalRead = totalRead;
18966
- header.versionAsString = chunk.versionAsString;
18967
- header.isCompressed = chunk.isCompressed;
18968
18987
  const unpacker = new Unpacker(chunk.buffer, chunk.count, header);
18969
18988
  onParseData(unpacker, header);
18970
18989
  if (!chunk.hasMoreData || totalRead >= totalToRead) {
@@ -19003,34 +19022,8 @@ function detectTwoByteColors(decoder = {}, batchSize, colorDepth) {
19003
19022
  return twoByteColor;
19004
19023
  }
19005
19024
 
19006
- // dist/las-loader.js
19007
- var VERSION = true ? "4.4.0-alpha.1" : "latest";
19008
- var LASWorkerLoader = {
19009
- ...LASFormat,
19010
- dataType: null,
19011
- batchType: null,
19012
- name: "LAS",
19013
- id: "las",
19014
- module: "las",
19015
- version: VERSION,
19016
- worker: true,
19017
- extensions: ["las", "laz"],
19018
- // LAZ is the "compressed" flavor of LAS,
19019
- mimeTypes: ["application/octet-stream"],
19020
- // TODO - text version?
19021
- text: true,
19022
- binary: true,
19023
- tests: ["LAS"],
19024
- options: {
19025
- las: {
19026
- shape: "mesh",
19027
- fp64: false,
19028
- skip: 1,
19029
- colorDepth: 8
19030
- }
19031
- }
19032
- };
19033
- var LASLoader2 = {
19025
+ // dist/lazperf-loader.js
19026
+ var LAZPerfLoader = {
19034
19027
  ...LASWorkerLoader,
19035
19028
  parse: async (arrayBuffer, options) => parseLAS(arrayBuffer, options),
19036
19029
  parseSync: (arrayBuffer, options) => parseLAS(arrayBuffer, options)
@@ -19039,14 +19032,966 @@ var LASLoader2 = {
19039
19032
  // dist/las-arrow-loader.js
19040
19033
  var import_schema_utils3 = require("@loaders.gl/schema-utils");
19041
19034
  var LASArrowLoader = {
19042
- ...LASWorkerLoader,
19035
+ ...LAZPerfLoader,
19043
19036
  dataType: null,
19044
19037
  batchType: null,
19045
19038
  worker: false,
19046
19039
  parse: async (arrayBuffer) => {
19047
- const mesh = parseLAS(arrayBuffer);
19040
+ const mesh = await LAZPerfLoader.parse(arrayBuffer);
19048
19041
  const arrowTable = (0, import_schema_utils3.convertMeshToTable)(mesh, "arrow-table");
19049
19042
  return arrowTable;
19050
19043
  }
19044
+ // @ts-expect-error parseSync
19045
+ };
19046
+
19047
+ // dist/lib/laz-rs-wasm/parse-las.js
19048
+ var import_schema_utils4 = require("@loaders.gl/schema-utils");
19049
+
19050
+ // dist/libs/laz-rs-wasm/laz_rs_wasm.js
19051
+ var import_meta = {};
19052
+ var wasm;
19053
+ var cachedUint8ArrayMemory0 = null;
19054
+ function getUint8ArrayMemory0() {
19055
+ if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
19056
+ cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);
19057
+ }
19058
+ return cachedUint8ArrayMemory0;
19059
+ }
19060
+ function getArrayU8FromWasm0(ptr, len) {
19061
+ ptr = ptr >>> 0;
19062
+ return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);
19063
+ }
19064
+ var cachedTextDecoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf-8", { ignoreBOM: true, fatal: true }) : { decode: () => {
19065
+ throw Error("TextDecoder not available");
19066
+ } };
19067
+ if (typeof TextDecoder !== "undefined") {
19068
+ cachedTextDecoder.decode();
19069
+ }
19070
+ function getStringFromWasm0(ptr, len) {
19071
+ ptr = ptr >>> 0;
19072
+ return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
19073
+ }
19074
+ function _assertClass(instance, klass) {
19075
+ if (!(instance instanceof klass)) {
19076
+ throw new Error(`expected instance of ${klass.name}`);
19077
+ }
19078
+ return instance.ptr;
19079
+ }
19080
+ function takeFromExternrefTable0(idx) {
19081
+ const value = wasm.__wbindgen_export_0.get(idx);
19082
+ wasm.__externref_table_dealloc(idx);
19083
+ return value;
19084
+ }
19085
+ var WASM_VECTOR_LEN = 0;
19086
+ function passArray8ToWasm0(arg, malloc) {
19087
+ const ptr = malloc(arg.length * 1, 1) >>> 0;
19088
+ getUint8ArrayMemory0().set(arg, ptr / 1);
19089
+ WASM_VECTOR_LEN = arg.length;
19090
+ return ptr;
19091
+ }
19092
+ var cachedTextEncoder = typeof TextEncoder !== "undefined" ? new TextEncoder("utf-8") : { encode: () => {
19093
+ throw Error("TextEncoder not available");
19094
+ } };
19095
+ var encodeString = typeof cachedTextEncoder.encodeInto === "function" ? function(arg, view) {
19096
+ return cachedTextEncoder.encodeInto(arg, view);
19097
+ } : function(arg, view) {
19098
+ const buf = cachedTextEncoder.encode(arg);
19099
+ view.set(buf);
19100
+ return {
19101
+ read: arg.length,
19102
+ written: buf.length
19103
+ };
19104
+ };
19105
+ function passStringToWasm0(arg, malloc, realloc) {
19106
+ if (realloc === void 0) {
19107
+ const buf = cachedTextEncoder.encode(arg);
19108
+ const ptr2 = malloc(buf.length, 1) >>> 0;
19109
+ getUint8ArrayMemory0().subarray(ptr2, ptr2 + buf.length).set(buf);
19110
+ WASM_VECTOR_LEN = buf.length;
19111
+ return ptr2;
19112
+ }
19113
+ let len = arg.length;
19114
+ let ptr = malloc(len, 1) >>> 0;
19115
+ const mem = getUint8ArrayMemory0();
19116
+ let offset = 0;
19117
+ for (; offset < len; offset++) {
19118
+ const code = arg.charCodeAt(offset);
19119
+ if (code > 127)
19120
+ break;
19121
+ mem[ptr + offset] = code;
19122
+ }
19123
+ if (offset !== len) {
19124
+ if (offset !== 0) {
19125
+ arg = arg.slice(offset);
19126
+ }
19127
+ ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
19128
+ const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);
19129
+ const ret = encodeString(arg, view);
19130
+ offset += ret.written;
19131
+ ptr = realloc(ptr, len, offset, 1) >>> 0;
19132
+ }
19133
+ WASM_VECTOR_LEN = offset;
19134
+ return ptr;
19135
+ }
19136
+ var cachedDataViewMemory0 = null;
19137
+ function getDataViewMemory0() {
19138
+ if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || cachedDataViewMemory0.buffer.detached === void 0 && cachedDataViewMemory0.buffer !== wasm.memory.buffer) {
19139
+ cachedDataViewMemory0 = new DataView(wasm.memory.buffer);
19140
+ }
19141
+ return cachedDataViewMemory0;
19142
+ }
19143
+ var WasmLasZipDecompressorFinalization = typeof FinalizationRegistry === "undefined" ? { register: () => {
19144
+ }, unregister: () => {
19145
+ } } : new FinalizationRegistry((ptr) => wasm.__wbg_wasmlaszipdecompressor_free(ptr >>> 0, 1));
19146
+ var WasmLasZipDecompressor = class {
19147
+ __destroy_into_raw() {
19148
+ const ptr = this.__wbg_ptr;
19149
+ this.__wbg_ptr = 0;
19150
+ WasmLasZipDecompressorFinalization.unregister(this);
19151
+ return ptr;
19152
+ }
19153
+ free() {
19154
+ const ptr = this.__destroy_into_raw();
19155
+ wasm.__wbg_wasmlaszipdecompressor_free(ptr, 0);
19156
+ }
19157
+ /**
19158
+ * @returns {WasmQuickHeader}
19159
+ */
19160
+ get header() {
19161
+ const ret = wasm.__wbg_get_wasmlaszipdecompressor_header(this.__wbg_ptr);
19162
+ return WasmQuickHeader.__wrap(ret);
19163
+ }
19164
+ /**
19165
+ * @param {WasmQuickHeader} arg0
19166
+ */
19167
+ set header(arg0) {
19168
+ _assertClass(arg0, WasmQuickHeader);
19169
+ var ptr0 = arg0.__destroy_into_raw();
19170
+ wasm.__wbg_set_wasmlaszipdecompressor_header(this.__wbg_ptr, ptr0);
19171
+ }
19172
+ /**
19173
+ * @param {Uint8Array} buf
19174
+ */
19175
+ constructor(buf) {
19176
+ const ret = wasm.wasmlaszipdecompressor_new(buf);
19177
+ if (ret[2]) {
19178
+ throw takeFromExternrefTable0(ret[1]);
19179
+ }
19180
+ this.__wbg_ptr = ret[0] >>> 0;
19181
+ WasmLasZipDecompressorFinalization.register(this, this.__wbg_ptr, this);
19182
+ return this;
19183
+ }
19184
+ /**
19185
+ * @param {Uint8Array} out
19186
+ */
19187
+ decompress_many(out) {
19188
+ var ptr0 = passArray8ToWasm0(out, wasm.__wbindgen_malloc);
19189
+ var len0 = WASM_VECTOR_LEN;
19190
+ const ret = wasm.wasmlaszipdecompressor_decompress_many(this.__wbg_ptr, ptr0, len0, out);
19191
+ if (ret[1]) {
19192
+ throw takeFromExternrefTable0(ret[0]);
19193
+ }
19194
+ }
19195
+ };
19196
+ var WasmQuickHeaderFinalization = typeof FinalizationRegistry === "undefined" ? { register: () => {
19197
+ }, unregister: () => {
19198
+ } } : new FinalizationRegistry((ptr) => wasm.__wbg_wasmquickheader_free(ptr >>> 0, 1));
19199
+ var WasmQuickHeader = class {
19200
+ static __wrap(ptr) {
19201
+ ptr = ptr >>> 0;
19202
+ const obj = Object.create(WasmQuickHeader.prototype);
19203
+ obj.__wbg_ptr = ptr;
19204
+ WasmQuickHeaderFinalization.register(obj, obj.__wbg_ptr, obj);
19205
+ return obj;
19206
+ }
19207
+ __destroy_into_raw() {
19208
+ const ptr = this.__wbg_ptr;
19209
+ this.__wbg_ptr = 0;
19210
+ WasmQuickHeaderFinalization.unregister(this);
19211
+ return ptr;
19212
+ }
19213
+ free() {
19214
+ const ptr = this.__destroy_into_raw();
19215
+ wasm.__wbg_wasmquickheader_free(ptr, 0);
19216
+ }
19217
+ /**
19218
+ * @returns {number}
19219
+ */
19220
+ get major() {
19221
+ const ret = wasm.__wbg_get_wasmquickheader_major(this.__wbg_ptr);
19222
+ return ret;
19223
+ }
19224
+ /**
19225
+ * @param {number} arg0
19226
+ */
19227
+ set major(arg0) {
19228
+ wasm.__wbg_set_wasmquickheader_major(this.__wbg_ptr, arg0);
19229
+ }
19230
+ /**
19231
+ * @returns {number}
19232
+ */
19233
+ get minor() {
19234
+ const ret = wasm.__wbg_get_wasmquickheader_minor(this.__wbg_ptr);
19235
+ return ret;
19236
+ }
19237
+ /**
19238
+ * @param {number} arg0
19239
+ */
19240
+ set minor(arg0) {
19241
+ wasm.__wbg_set_wasmquickheader_minor(this.__wbg_ptr, arg0);
19242
+ }
19243
+ /**
19244
+ * @returns {number}
19245
+ */
19246
+ get offset_to_points() {
19247
+ const ret = wasm.__wbg_get_wasmquickheader_offset_to_points(this.__wbg_ptr);
19248
+ return ret >>> 0;
19249
+ }
19250
+ /**
19251
+ * @param {number} arg0
19252
+ */
19253
+ set offset_to_points(arg0) {
19254
+ wasm.__wbg_set_wasmquickheader_offset_to_points(this.__wbg_ptr, arg0);
19255
+ }
19256
+ /**
19257
+ * @returns {number}
19258
+ */
19259
+ get num_vlrs() {
19260
+ const ret = wasm.__wbg_get_wasmquickheader_num_vlrs(this.__wbg_ptr);
19261
+ return ret >>> 0;
19262
+ }
19263
+ /**
19264
+ * @param {number} arg0
19265
+ */
19266
+ set num_vlrs(arg0) {
19267
+ wasm.__wbg_set_wasmquickheader_num_vlrs(this.__wbg_ptr, arg0);
19268
+ }
19269
+ /**
19270
+ * @returns {number}
19271
+ */
19272
+ get point_format_id() {
19273
+ const ret = wasm.__wbg_get_wasmquickheader_point_format_id(this.__wbg_ptr);
19274
+ return ret;
19275
+ }
19276
+ /**
19277
+ * @param {number} arg0
19278
+ */
19279
+ set point_format_id(arg0) {
19280
+ wasm.__wbg_set_wasmquickheader_point_format_id(this.__wbg_ptr, arg0);
19281
+ }
19282
+ /**
19283
+ * @returns {number}
19284
+ */
19285
+ get point_size() {
19286
+ const ret = wasm.__wbg_get_wasmquickheader_point_size(this.__wbg_ptr);
19287
+ return ret;
19288
+ }
19289
+ /**
19290
+ * @param {number} arg0
19291
+ */
19292
+ set point_size(arg0) {
19293
+ wasm.__wbg_set_wasmquickheader_point_size(this.__wbg_ptr, arg0);
19294
+ }
19295
+ /**
19296
+ * @returns {bigint}
19297
+ */
19298
+ get num_points() {
19299
+ const ret = wasm.__wbg_get_wasmquickheader_num_points(this.__wbg_ptr);
19300
+ return BigInt.asUintN(64, ret);
19301
+ }
19302
+ /**
19303
+ * @param {bigint} arg0
19304
+ */
19305
+ set num_points(arg0) {
19306
+ wasm.__wbg_set_wasmquickheader_num_points(this.__wbg_ptr, arg0);
19307
+ }
19308
+ /**
19309
+ * @returns {number}
19310
+ */
19311
+ get header_size() {
19312
+ const ret = wasm.__wbg_get_wasmquickheader_header_size(this.__wbg_ptr);
19313
+ return ret;
19314
+ }
19315
+ /**
19316
+ * @param {number} arg0
19317
+ */
19318
+ set header_size(arg0) {
19319
+ wasm.__wbg_set_wasmquickheader_header_size(this.__wbg_ptr, arg0);
19320
+ }
19321
+ };
19322
+ async function __wbg_load(module2, imports) {
19323
+ if (typeof Response === "function" && module2 instanceof Response) {
19324
+ if (typeof WebAssembly.instantiateStreaming === "function") {
19325
+ try {
19326
+ return await WebAssembly.instantiateStreaming(module2, imports);
19327
+ } catch (e) {
19328
+ if (module2.headers.get("Content-Type") != "application/wasm") {
19329
+ 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);
19330
+ } else {
19331
+ throw e;
19332
+ }
19333
+ }
19334
+ }
19335
+ const bytes = await module2.arrayBuffer();
19336
+ return await WebAssembly.instantiate(bytes, imports);
19337
+ } else {
19338
+ const instance = await WebAssembly.instantiate(module2, imports);
19339
+ if (instance instanceof WebAssembly.Instance) {
19340
+ return { instance, module: module2 };
19341
+ } else {
19342
+ return instance;
19343
+ }
19344
+ }
19345
+ }
19346
+ function __wbg_get_imports() {
19347
+ const imports = {};
19348
+ imports.wbg = {};
19349
+ imports.wbg.__wbindgen_copy_to_typed_array = function(arg0, arg1, arg2) {
19350
+ new Uint8Array(arg2.buffer, arg2.byteOffset, arg2.byteLength).set(getArrayU8FromWasm0(arg0, arg1));
19351
+ };
19352
+ imports.wbg.__wbg_buffer_ccaed51a635d8a2d = function(arg0) {
19353
+ const ret = arg0.buffer;
19354
+ return ret;
19355
+ };
19356
+ imports.wbg.__wbg_new_fec2611eb9180f95 = function(arg0) {
19357
+ const ret = new Uint8Array(arg0);
19358
+ return ret;
19359
+ };
19360
+ imports.wbg.__wbg_set_ec2fcf81bc573fd9 = function(arg0, arg1, arg2) {
19361
+ arg0.set(arg1, arg2 >>> 0);
19362
+ };
19363
+ imports.wbg.__wbg_length_9254c4bd3b9f23c4 = function(arg0) {
19364
+ const ret = arg0.length;
19365
+ return ret;
19366
+ };
19367
+ imports.wbg.__wbg_new_abda76e883ba8a5f = function() {
19368
+ const ret = new Error();
19369
+ return ret;
19370
+ };
19371
+ imports.wbg.__wbg_stack_658279fe44541cf6 = function(arg0, arg1) {
19372
+ const ret = arg1.stack;
19373
+ const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
19374
+ const len1 = WASM_VECTOR_LEN;
19375
+ getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
19376
+ getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
19377
+ };
19378
+ imports.wbg.__wbg_error_f851667af71bcfc6 = function(arg0, arg1) {
19379
+ let deferred0_0;
19380
+ let deferred0_1;
19381
+ try {
19382
+ deferred0_0 = arg0;
19383
+ deferred0_1 = arg1;
19384
+ console.error(getStringFromWasm0(arg0, arg1));
19385
+ } finally {
19386
+ wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);
19387
+ }
19388
+ };
19389
+ imports.wbg.__wbindgen_throw = function(arg0, arg1) {
19390
+ throw new Error(getStringFromWasm0(arg0, arg1));
19391
+ };
19392
+ imports.wbg.__wbindgen_memory = function() {
19393
+ const ret = wasm.memory;
19394
+ return ret;
19395
+ };
19396
+ imports.wbg.__wbindgen_init_externref_table = function() {
19397
+ const table = wasm.__wbindgen_export_0;
19398
+ const offset = table.grow(4);
19399
+ table.set(0, void 0);
19400
+ table.set(offset + 0, void 0);
19401
+ table.set(offset + 1, null);
19402
+ table.set(offset + 2, true);
19403
+ table.set(offset + 3, false);
19404
+ ;
19405
+ };
19406
+ return imports;
19407
+ }
19408
+ function __wbg_init_memory(imports, memory) {
19409
+ }
19410
+ function __wbg_finalize_init(instance, module2) {
19411
+ wasm = instance.exports;
19412
+ __wbg_init.__wbindgen_wasm_module = module2;
19413
+ cachedDataViewMemory0 = null;
19414
+ cachedUint8ArrayMemory0 = null;
19415
+ wasm.__wbindgen_start();
19416
+ return wasm;
19417
+ }
19418
+ async function __wbg_init(module_or_path) {
19419
+ if (wasm !== void 0)
19420
+ return wasm;
19421
+ if (typeof module_or_path !== "undefined") {
19422
+ if (Object.getPrototypeOf(module_or_path) === Object.prototype) {
19423
+ ({ module_or_path } = module_or_path);
19424
+ } else {
19425
+ console.warn("using deprecated parameters for the initialization function; pass a single object instead");
19426
+ }
19427
+ }
19428
+ if (typeof module_or_path === "undefined") {
19429
+ module_or_path = new URL("laz_rs_wasm_bg.wasm", import_meta.url);
19430
+ }
19431
+ const imports = __wbg_get_imports();
19432
+ if (typeof module_or_path === "string" || typeof Request === "function" && module_or_path instanceof Request || typeof URL === "function" && module_or_path instanceof URL) {
19433
+ module_or_path = fetch(module_or_path);
19434
+ }
19435
+ __wbg_init_memory(imports);
19436
+ const { instance, module: module2 } = await __wbg_load(await module_or_path, imports);
19437
+ return __wbg_finalize_init(instance, module2);
19438
+ }
19439
+ var laz_rs_wasm_default = __wbg_init;
19440
+
19441
+ // dist/lib/laz-rs-wasm/laslaz-decoder.js
19442
+ var POINT_FORMAT_READERS2 = {
19443
+ 0: (dv) => {
19444
+ return {
19445
+ position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
19446
+ intensity: dv.getUint16(12, true),
19447
+ classification: dv.getUint8(15)
19448
+ };
19449
+ },
19450
+ 1: (dv) => {
19451
+ return {
19452
+ position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
19453
+ intensity: dv.getUint16(12, true),
19454
+ classification: dv.getUint8(15)
19455
+ };
19456
+ },
19457
+ 2: (dv) => {
19458
+ return {
19459
+ position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
19460
+ intensity: dv.getUint16(12, true),
19461
+ classification: dv.getUint8(15),
19462
+ color: [dv.getUint16(20, true), dv.getUint16(22, true), dv.getUint16(24, true)]
19463
+ };
19464
+ },
19465
+ 3: (dv) => {
19466
+ return {
19467
+ position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
19468
+ intensity: dv.getUint16(12, true),
19469
+ classification: dv.getUint8(15),
19470
+ color: [dv.getUint16(28, true), dv.getUint16(30, true), dv.getUint16(32, true)]
19471
+ };
19472
+ },
19473
+ 4: (dv) => {
19474
+ return {
19475
+ position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
19476
+ intensity: dv.getUint16(12, true),
19477
+ classification: dv.getUint8(15)
19478
+ };
19479
+ },
19480
+ 5: (dv) => {
19481
+ return {
19482
+ position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
19483
+ intensity: dv.getUint16(12, true),
19484
+ classification: dv.getUint8(15),
19485
+ color: [dv.getUint16(28, true), dv.getUint16(30, true), dv.getUint16(32, true)]
19486
+ };
19487
+ },
19488
+ 6: (dv) => {
19489
+ return {
19490
+ position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
19491
+ intensity: dv.getUint16(12, true),
19492
+ classification: dv.getUint8(16)
19493
+ };
19494
+ },
19495
+ 7: (dv) => {
19496
+ return {
19497
+ position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
19498
+ intensity: dv.getUint16(12, true),
19499
+ classification: dv.getUint8(16),
19500
+ color: [dv.getUint16(30, true), dv.getUint16(32, true), dv.getUint16(34, true)]
19501
+ };
19502
+ },
19503
+ 8: (dv) => {
19504
+ return {
19505
+ position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
19506
+ intensity: dv.getUint16(12, true),
19507
+ classification: dv.getUint8(16),
19508
+ color: [dv.getUint16(30, true), dv.getUint16(32, true), dv.getUint16(34, true)]
19509
+ };
19510
+ },
19511
+ 9: (dv) => {
19512
+ return {
19513
+ position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
19514
+ intensity: dv.getUint16(12, true),
19515
+ classification: dv.getUint8(16)
19516
+ };
19517
+ },
19518
+ 10: (dv) => {
19519
+ return {
19520
+ position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
19521
+ intensity: dv.getUint16(12, true),
19522
+ classification: dv.getUint8(16),
19523
+ color: [dv.getUint16(30, true), dv.getUint16(32, true), dv.getUint16(34, true)]
19524
+ };
19525
+ }
19526
+ };
19527
+ function readAs2(buf, Type = {}, offset, count) {
19528
+ count = count === void 0 || count === 0 ? 1 : count;
19529
+ const sub = buf.slice(offset, offset + Type.BYTES_PER_ELEMENT * count);
19530
+ const r = new Type(sub);
19531
+ if (count === 1) {
19532
+ return r[0];
19533
+ }
19534
+ const ret = [];
19535
+ for (let i = 0; i < count; i++) {
19536
+ ret.push(r[i]);
19537
+ }
19538
+ return ret;
19539
+ }
19540
+ function parseLASHeader2(arraybuffer) {
19541
+ const ver = new Uint8Array(arraybuffer, 24, 2);
19542
+ const version = ver[0] * 10 + ver[1];
19543
+ const versionAsString = `${ver[0]}.${ver[1]}`;
19544
+ const rawPointsFormatId = readAs2(arraybuffer, Uint8Array, 32 * 3 + 8);
19545
+ const bit7 = (rawPointsFormatId & 128) >> 7;
19546
+ const bit6 = (rawPointsFormatId & 64) >> 6;
19547
+ const isCompressed = bit7 === 1 || bit6 === 1;
19548
+ const pointsFormatId = rawPointsFormatId & 63;
19549
+ const o = {
19550
+ pointsOffset: readAs2(arraybuffer, Uint32Array, 32 * 3),
19551
+ pointsFormatId,
19552
+ pointsStructSize: readAs2(arraybuffer, Uint16Array, 32 * 3 + 8 + 1),
19553
+ pointsCount: readAs2(arraybuffer, Uint32Array, 32 * 3 + 11),
19554
+ versionAsString,
19555
+ isCompressed
19556
+ };
19557
+ let start = 32 * 3 + 35;
19558
+ o.scale = readAs2(arraybuffer, Float64Array, start, 3);
19559
+ start += 24;
19560
+ o.offset = readAs2(arraybuffer, Float64Array, start, 3);
19561
+ start += 24;
19562
+ const bounds = readAs2(arraybuffer, Float64Array, start, 6);
19563
+ start += 48;
19564
+ o.maxs = [bounds[0], bounds[2], bounds[4]];
19565
+ o.mins = [bounds[1], bounds[3], bounds[5]];
19566
+ start += 20;
19567
+ if (version === 14) {
19568
+ o.pointsCount = Number(readAs2(arraybuffer, BigUint64Array, start));
19569
+ }
19570
+ const colorPointFormats = /* @__PURE__ */ new Set([2, 3, 5, 7, 8, 10]);
19571
+ o.hasColor = colorPointFormats.has(pointsFormatId);
19572
+ return o;
19573
+ }
19574
+ var LASLoader2 = class {
19575
+ arraybuffer;
19576
+ readOffset = 0;
19577
+ header = null;
19578
+ constructor(arraybuffer) {
19579
+ this.arraybuffer = arraybuffer;
19580
+ }
19581
+ /**
19582
+ * @returns boolean
19583
+ */
19584
+ open() {
19585
+ return true;
19586
+ }
19587
+ /**
19588
+ * Parsing of incoming binary
19589
+ * @returns LASHeader
19590
+ */
19591
+ getHeader() {
19592
+ this.header = parseLASHeader2(this.arraybuffer);
19593
+ return this.header;
19594
+ }
19595
+ /**
19596
+ * Reading data
19597
+ * @param count
19598
+ * @param skip
19599
+ * @returns LasData
19600
+ */
19601
+ readData(count, skip) {
19602
+ const { header, arraybuffer } = this;
19603
+ if (!header) {
19604
+ throw new Error("Cannot start reading data till a header request is issued");
19605
+ }
19606
+ let { readOffset } = this;
19607
+ let start;
19608
+ if (skip <= 1) {
19609
+ count = Math.min(count, header.pointsCount - readOffset);
19610
+ start = header.pointsOffset + readOffset * header.pointsStructSize;
19611
+ const end = start + count * header.pointsStructSize;
19612
+ readOffset += count;
19613
+ this.readOffset = readOffset;
19614
+ return {
19615
+ buffer: arraybuffer.slice(start, end),
19616
+ count,
19617
+ hasMoreData: readOffset < header.pointsCount
19618
+ };
19619
+ }
19620
+ const pointsToRead = Math.min(count * skip, header.pointsCount - readOffset);
19621
+ const bufferSize = Math.ceil(pointsToRead / skip);
19622
+ let pointsRead = 0;
19623
+ const buf = new Uint8Array(bufferSize * header.pointsStructSize);
19624
+ for (let i = 0; i < pointsToRead; i++) {
19625
+ if (i % skip === 0) {
19626
+ start = header.pointsOffset + readOffset * header.pointsStructSize;
19627
+ const src = new Uint8Array(arraybuffer, start, header.pointsStructSize);
19628
+ buf.set(src, pointsRead * header.pointsStructSize);
19629
+ pointsRead++;
19630
+ }
19631
+ readOffset++;
19632
+ }
19633
+ this.readOffset = readOffset;
19634
+ return {
19635
+ buffer: buf.buffer,
19636
+ count: pointsRead,
19637
+ hasMoreData: readOffset < header.pointsCount
19638
+ };
19639
+ }
19640
+ /**
19641
+ * Method which brings data to null to close the file
19642
+ * @returns
19643
+ */
19644
+ close() {
19645
+ this.arraybuffer = null;
19646
+ return true;
19647
+ }
19648
+ };
19649
+ var LAZLoader2 = class {
19650
+ arraybuffer;
19651
+ readOffset = 0;
19652
+ instance = null;
19653
+ header = null;
19654
+ constructor(arraybuffer) {
19655
+ this.arraybuffer = arraybuffer;
19656
+ }
19657
+ /**
19658
+ * Opens the file
19659
+ * @returns boolean
19660
+ */
19661
+ open() {
19662
+ try {
19663
+ const abInt = new Uint8Array(this.arraybuffer);
19664
+ this.instance = new WasmLasZipDecompressor(abInt);
19665
+ return true;
19666
+ } catch (error) {
19667
+ throw new Error(`Failed to open file: ${error.message}`);
19668
+ }
19669
+ }
19670
+ getHeader() {
19671
+ try {
19672
+ this.header = parseLASHeader2(this.arraybuffer);
19673
+ return this.header;
19674
+ } catch (error) {
19675
+ throw new Error(`Failed to get header: ${error.message}`);
19676
+ }
19677
+ }
19678
+ /**
19679
+ * @param count
19680
+ * @param offset
19681
+ * @param skip
19682
+ * @returns LASData
19683
+ */
19684
+ readData(count, skip) {
19685
+ if (!this.instance) {
19686
+ throw new Error("You need to open the file before trying to read stuff");
19687
+ }
19688
+ const { header, instance } = this;
19689
+ if (!header) {
19690
+ throw new Error("You need to query header before reading, I maintain state that way, sorry :(");
19691
+ }
19692
+ try {
19693
+ const pointsToRead = Math.min(count * skip, header.pointsCount - this.readOffset);
19694
+ const bufferSize = Math.ceil(pointsToRead / skip);
19695
+ let pointsRead = 0;
19696
+ const buf = new Uint8Array(bufferSize * header.pointsStructSize);
19697
+ const bufRead = new Uint8Array(header.pointsStructSize);
19698
+ for (let i = 0; i < pointsToRead; i++) {
19699
+ instance.decompress_many(bufRead);
19700
+ if (i % skip === 0) {
19701
+ buf.set(bufRead, pointsRead * header.pointsStructSize);
19702
+ pointsRead++;
19703
+ }
19704
+ this.readOffset++;
19705
+ }
19706
+ return {
19707
+ buffer: buf.buffer,
19708
+ count: pointsRead,
19709
+ hasMoreData: this.readOffset < header.pointsCount
19710
+ };
19711
+ } catch (error) {
19712
+ throw new Error(`Failed to read data: ${error.message}`);
19713
+ }
19714
+ }
19715
+ /**
19716
+ * Deletes the instance
19717
+ * @returns boolean
19718
+ */
19719
+ close() {
19720
+ try {
19721
+ if (this.instance !== null) {
19722
+ this.instance.free();
19723
+ this.instance = null;
19724
+ }
19725
+ this.arraybuffer = null;
19726
+ return true;
19727
+ } catch (error) {
19728
+ throw new Error(`Failed to close file: ${error.message}`);
19729
+ }
19730
+ }
19731
+ };
19732
+ var LASDecoder2 = class {
19733
+ arrayb;
19734
+ decoder;
19735
+ pointsCount;
19736
+ pointSize;
19737
+ constructor(buffer, len, header) {
19738
+ this.arrayb = buffer;
19739
+ this.decoder = POINT_FORMAT_READERS2[header.pointsFormatId];
19740
+ this.pointsCount = len;
19741
+ this.pointSize = header.pointsStructSize;
19742
+ }
19743
+ /**
19744
+ * Decodes data depends on this point size
19745
+ * @param index
19746
+ * @returns New object
19747
+ */
19748
+ getPoint(index) {
19749
+ if (index < 0 || index >= this.pointsCount) {
19750
+ throw new Error("Point index out of range");
19751
+ }
19752
+ const dv = new DataView(this.arrayb, index * this.pointSize, this.pointSize);
19753
+ return this.decoder(dv);
19754
+ }
19755
+ };
19756
+ var LASFile2 = class {
19757
+ arraybuffer;
19758
+ formatId = 0;
19759
+ loader;
19760
+ isCompressed = true;
19761
+ isOpen = false;
19762
+ version = 0;
19763
+ versionAsString = "";
19764
+ constructor(arraybuffer) {
19765
+ this.arraybuffer = arraybuffer;
19766
+ this.validate();
19767
+ this.loader = this.isCompressed ? new LAZLoader2(this.arraybuffer) : new LASLoader2(this.arraybuffer);
19768
+ }
19769
+ validate() {
19770
+ const signature = readAs2(this.arraybuffer, Uint8Array, 0, 4);
19771
+ const check = String.fromCharCode(...signature);
19772
+ if (check !== "LASF") {
19773
+ throw new Error("Invalid LAS file");
19774
+ }
19775
+ if (this.determineVersion() > 14) {
19776
+ throw new Error("Only file versions <= 1.4 are supported");
19777
+ }
19778
+ this.determineFormat();
19779
+ if (POINT_FORMAT_READERS2[this.formatId] === void 0) {
19780
+ throw new Error("The point format ID is not supported");
19781
+ }
19782
+ }
19783
+ /**
19784
+ * Determines format in parameters of LASHeader
19785
+ */
19786
+ determineFormat() {
19787
+ const formatId = readAs2(this.arraybuffer, Uint8Array, 32 * 3 + 8);
19788
+ const bit7 = (formatId & 128) >> 7;
19789
+ const bit6 = (formatId & 64) >> 6;
19790
+ if (bit7 === 1 && bit6 === 1) {
19791
+ throw new Error("Old style compression not supported");
19792
+ }
19793
+ this.formatId = formatId & 63;
19794
+ this.isCompressed = bit7 === 1 || bit6 === 1;
19795
+ }
19796
+ /**
19797
+ * Determines version
19798
+ * @returns version
19799
+ */
19800
+ determineVersion() {
19801
+ const ver = new Uint8Array(this.arraybuffer, 24, 2);
19802
+ this.version = ver[0] * 10 + ver[1];
19803
+ this.versionAsString = `${ver[0]}.${ver[1]}`;
19804
+ return this.version;
19805
+ }
19806
+ /**
19807
+ * Reads if the file is open
19808
+ * @returns boolean
19809
+ */
19810
+ open() {
19811
+ if (this.loader.open()) {
19812
+ this.isOpen = true;
19813
+ }
19814
+ }
19815
+ /**
19816
+ * Gets the header
19817
+ * @returns Header
19818
+ */
19819
+ getHeader() {
19820
+ return this.loader.getHeader();
19821
+ }
19822
+ /**
19823
+ * @param count
19824
+ * @param start
19825
+ * @param skip
19826
+ * @returns LASData
19827
+ */
19828
+ readData(count, skip) {
19829
+ return this.loader.readData(count, skip);
19830
+ }
19831
+ /**
19832
+ * Closes the file
19833
+ */
19834
+ close() {
19835
+ if (this.loader.close()) {
19836
+ this.isOpen = false;
19837
+ }
19838
+ }
19839
+ /**
19840
+ */
19841
+ getUnpacker() {
19842
+ return LASDecoder2;
19843
+ }
19844
+ };
19845
+
19846
+ // dist/lib/laz-rs-wasm/parse-las.js
19847
+ function parseLAS2(arrayBuffer, options) {
19848
+ return parseLASMesh2(arrayBuffer, options);
19849
+ }
19850
+ function parseLASMesh2(arrayBuffer, options = {}) {
19851
+ var _a;
19852
+ let pointIndex = 0;
19853
+ let positions;
19854
+ let colors;
19855
+ let intensities;
19856
+ let classifications;
19857
+ let originalHeader;
19858
+ const lasMesh = {
19859
+ loader: "las",
19860
+ loaderData: {},
19861
+ // shape: 'mesh',
19862
+ schema: { fields: [], metadata: {} },
19863
+ header: {
19864
+ vertexCount: 0,
19865
+ boundingBox: [
19866
+ [0, 0, 0],
19867
+ [0, 0, 0]
19868
+ ]
19869
+ },
19870
+ attributes: {},
19871
+ topology: "point-list",
19872
+ mode: 0
19873
+ // GL.POINTS
19874
+ };
19875
+ parseLASChunked2(arrayBuffer, (_a = options.las) == null ? void 0 : _a.skip, (decoder = {}, lasHeader) => {
19876
+ var _a2, _b, _c;
19877
+ if (!originalHeader) {
19878
+ originalHeader = lasHeader;
19879
+ const total = lasHeader.totalToRead;
19880
+ const PositionsType = ((_a2 = options.las) == null ? void 0 : _a2.fp64) ? Float64Array : Float32Array;
19881
+ positions = new PositionsType(total * 3);
19882
+ colors = lasHeader.hasColor ? new Uint8Array(total * 4) : null;
19883
+ intensities = new Uint16Array(total);
19884
+ classifications = new Uint8Array(total);
19885
+ lasMesh.loaderData = lasHeader;
19886
+ lasMesh.attributes = {
19887
+ POSITION: { value: positions, size: 3 },
19888
+ // non-gltf attributes, use non-capitalized names for now
19889
+ intensity: { value: intensities, size: 1 },
19890
+ classification: { value: classifications, size: 1 }
19891
+ };
19892
+ if (colors) {
19893
+ lasMesh.attributes.COLOR_0 = { value: colors, size: 4 };
19894
+ }
19895
+ }
19896
+ const batchSize = decoder.pointsCount;
19897
+ const { scale: [scaleX, scaleY, scaleZ], offset: [offsetX, offsetY, offsetZ] } = lasHeader;
19898
+ const twoByteColor = detectTwoByteColors2(decoder, batchSize, (_b = options.las) == null ? void 0 : _b.colorDepth);
19899
+ for (let i = 0; i < batchSize; i++) {
19900
+ const { position, color, intensity, classification } = decoder.getPoint(i);
19901
+ positions[pointIndex * 3] = position[0] * scaleX + offsetX;
19902
+ positions[pointIndex * 3 + 1] = position[1] * scaleY + offsetY;
19903
+ positions[pointIndex * 3 + 2] = position[2] * scaleZ + offsetZ;
19904
+ if (color && colors) {
19905
+ if (twoByteColor) {
19906
+ colors[pointIndex * 4] = color[0] / 256;
19907
+ colors[pointIndex * 4 + 1] = color[1] / 256;
19908
+ colors[pointIndex * 4 + 2] = color[2] / 256;
19909
+ } else {
19910
+ colors[pointIndex * 4] = color[0];
19911
+ colors[pointIndex * 4 + 1] = color[1];
19912
+ colors[pointIndex * 4 + 2] = color[2];
19913
+ }
19914
+ colors[pointIndex * 4 + 3] = 255;
19915
+ }
19916
+ intensities[pointIndex] = intensity;
19917
+ classifications[pointIndex] = classification;
19918
+ pointIndex++;
19919
+ }
19920
+ const meshBatch = {
19921
+ ...lasMesh,
19922
+ header: {
19923
+ vertexCount: lasHeader.totalRead
19924
+ },
19925
+ progress: lasHeader.totalRead / lasHeader.totalToRead
19926
+ };
19927
+ (_c = options == null ? void 0 : options.onProgress) == null ? void 0 : _c.call(options, meshBatch);
19928
+ });
19929
+ lasMesh.header = {
19930
+ vertexCount: originalHeader.totalToRead,
19931
+ boundingBox: (0, import_schema_utils4.getMeshBoundingBox)((lasMesh == null ? void 0 : lasMesh.attributes) || {})
19932
+ };
19933
+ if (lasMesh) {
19934
+ lasMesh.schema = getLASSchema(lasMesh.loaderData, lasMesh.attributes);
19935
+ }
19936
+ return lasMesh;
19937
+ }
19938
+ function parseLASChunked2(rawData, skip, onParseData = {}) {
19939
+ const dataHandler = new LASFile2(rawData);
19940
+ try {
19941
+ dataHandler.open();
19942
+ const header = dataHandler.getHeader();
19943
+ const Unpacker = dataHandler.getUnpacker();
19944
+ const totalToRead = Math.ceil(header.pointsCount / Math.max(1, skip));
19945
+ header.totalToRead = totalToRead;
19946
+ let totalRead = 0;
19947
+ while (true) {
19948
+ const chunk = dataHandler.readData(1e3 * 100, skip);
19949
+ totalRead += chunk.count;
19950
+ header.totalRead = totalRead;
19951
+ const unpacker = new Unpacker(chunk.buffer, chunk.count, header);
19952
+ onParseData(unpacker, header);
19953
+ if (!chunk.hasMoreData || totalRead >= totalToRead) {
19954
+ break;
19955
+ }
19956
+ }
19957
+ } catch (e) {
19958
+ throw e;
19959
+ } finally {
19960
+ dataHandler.close();
19961
+ }
19962
+ }
19963
+ function detectTwoByteColors2(decoder = {}, batchSize, colorDepth) {
19964
+ let twoByteColor = false;
19965
+ switch (colorDepth) {
19966
+ case 8:
19967
+ twoByteColor = false;
19968
+ break;
19969
+ case 16:
19970
+ twoByteColor = true;
19971
+ break;
19972
+ case "auto":
19973
+ if (decoder.getPoint(0).color) {
19974
+ for (let i = 0; i < batchSize; i++) {
19975
+ const { color } = decoder.getPoint(i);
19976
+ if (color[0] > 255 || color[1] > 255 || color[2] > 255) {
19977
+ twoByteColor = true;
19978
+ }
19979
+ }
19980
+ }
19981
+ break;
19982
+ default:
19983
+ console.warn("las: illegal value for options.las.colorDepth");
19984
+ break;
19985
+ }
19986
+ return twoByteColor;
19987
+ }
19988
+
19989
+ // dist/laz-rs-loader.js
19990
+ var LAZRsLoader = {
19991
+ ...LASWorkerLoader,
19992
+ parse: async (arrayBuffer, options) => {
19993
+ await laz_rs_wasm_default();
19994
+ return parseLAS2(arrayBuffer, { ...options });
19995
+ }
19051
19996
  };
19052
19997
  //# sourceMappingURL=index.cjs.map