@loaders.gl/las 3.0.10 → 3.0.14

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.
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports._typecheckLoader = exports.LASLoader = void 0;
7
- var VERSION = typeof "3.0.10" !== 'undefined' ? "3.0.10" : 'latest';
7
+ var VERSION = typeof "3.0.14" !== 'undefined' ? "3.0.14" : 'latest';
8
8
  var DEFAULT_LAS_OPTIONS = {
9
9
  las: {
10
10
  fp64: false,
@@ -210,8 +210,8 @@ var LAZLoader = function () {
210
210
  this.instance.open(buf, arraybuffer.byteLength);
211
211
  this.instance.readOffset = 0;
212
212
  return true;
213
- } catch (e) {
214
- throw new Error("Failed to open file: ".concat(e.message));
213
+ } catch (error) {
214
+ throw new Error("Failed to open file: ".concat(error.message));
215
215
  }
216
216
  }
217
217
  }, {
@@ -226,8 +226,8 @@ var LAZLoader = function () {
226
226
  header.pointsFormatId &= 0x3f;
227
227
  this.header = header;
228
228
  return header;
229
- } catch (e) {
230
- throw new Error("Failed to get header: ".concat(e.message));
229
+ } catch (error) {
230
+ throw new Error("Failed to get header: ".concat(error.message));
231
231
  }
232
232
  }
233
233
  }, {
@@ -269,8 +269,8 @@ var LAZLoader = function () {
269
269
  count: pointsRead,
270
270
  hasMoreData: instance.readOffset < header.pointsCount
271
271
  };
272
- } catch (e) {
273
- throw new Error("Failed to read data: ".concat(e.message));
272
+ } catch (error) {
273
+ throw new Error("Failed to read data: ".concat(error.message));
274
274
  }
275
275
  }
276
276
  }, {
@@ -283,8 +283,8 @@ var LAZLoader = function () {
283
283
  }
284
284
 
285
285
  return true;
286
- } catch (e) {
287
- throw new Error("Failed to close file: ".concat(e.message));
286
+ } catch (error) {
287
+ throw new Error("Failed to close file: ".concat(error.message));
288
288
  }
289
289
  }
290
290
  }]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/laslaz-decoder.ts"],"names":["Module","POINT_FORMAT_READERS","dv","position","getInt32","intensity","getUint16","classification","getUint8","color","readAs","buf","Type","offset","count","undefined","sub","slice","BYTES_PER_ELEMENT","r","ret","i","push","parseLASHeader","arraybuffer","start","o","pointsOffset","Uint32Array","pointsFormatId","Uint8Array","pointsStructSize","Uint16Array","pointsCount","scale","Float64Array","bounds","maxs","mins","LASLoader","totalToRead","totalRead","versionAsString","isCompressed","header","skip","Error","readOffset","Math","min","end","buffer","hasMoreData","pointsToRead","bufferSize","ceil","pointsRead","src","set","LAZLoader","instance","LASZip","abInt","_malloc","byteLength","HEAPU8","open","e","message","thisBuf","bufRead","getPoint","a","delete","LASDecoder","len","arrayb","decoder","pointSize","index","DataView","LASFile","determineVersion","determineFormat","formatId","loader","bit7","bit6","ver","Int8Array","version","isOpen","getHeader","readData","close","LASModuleWasLoaded"],"mappings":"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","sourcesContent":["/*\n Modified from Uday Verma and Howard Butler's plasio\n https://github.com/verma/plasio/\n MIT License\n*/\n// laslaz.js - treat as compiled code\nimport type {LASHeader} from './las-types';\nimport getModule from '../libs/laz-perf';\n\nlet Module: any = null;\n\ntype LASReader = (dv: DataView) => {\n [LASAttribute: string]: number | number[];\n};\n\ntype LASReaders = {\n [key: number]: LASReader;\n};\n\ntype LASData = {\n buffer: ArrayBuffer;\n count: number;\n hasMoreData: boolean;\n};\n\nconst POINT_FORMAT_READERS: LASReaders = {\n 0: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15)\n };\n },\n 1: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15)\n };\n },\n 2: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15),\n color: [dv.getUint16(20, true), dv.getUint16(22, true), dv.getUint16(24, true)]\n };\n },\n 3: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15),\n color: [dv.getUint16(28, true), dv.getUint16(30, true), dv.getUint16(32, true)]\n };\n }\n};\n\n/**\n * Reads incoming binary data depends on the Type parameter\n * @param buf\n * @param Type\n * @param offset\n * @param count\n * @returns number | number[] from incoming binary data\n */\nfunction readAs(buf: ArrayBuffer, Type: any = {}, offset: number, count?: number) {\n count = count === undefined || count === 0 ? 1 : count;\n const sub = buf.slice(offset, offset + Type.BYTES_PER_ELEMENT * count);\n\n const r = new Type(sub);\n if (count === 1) {\n return r[0];\n }\n\n const ret: number[] = [];\n for (let i = 0; i < count; i++) {\n ret.push(r[i]);\n }\n\n return ret;\n}\n\n/**\n * Parsing of header's attributes\n * @param arraybuffer\n * @returns header as LASHeader\n */\nfunction parseLASHeader(arraybuffer: ArrayBuffer): LASHeader {\n let start = 32 * 3 + 35;\n\n const o: Partial<LASHeader> = {\n pointsOffset: readAs(arraybuffer, Uint32Array, 32 * 3),\n pointsFormatId: readAs(arraybuffer, Uint8Array, 32 * 3 + 8),\n pointsStructSize: readAs(arraybuffer, Uint16Array, 32 * 3 + 8 + 1),\n pointsCount: readAs(arraybuffer, Uint32Array, 32 * 3 + 11),\n scale: readAs(arraybuffer, Float64Array, start, 3)\n };\n start += 24; // 8*3\n o.offset = readAs(arraybuffer, Float64Array, start, 3);\n start += 24;\n\n const bounds = readAs(arraybuffer, Float64Array, start, 6);\n start += 48; // 8*6;\n o.maxs = [bounds[0], bounds[2], bounds[4]];\n o.mins = [bounds[1], bounds[3], bounds[5]];\n\n return o as LASHeader;\n}\n\n// LAS Loader\n// Loads uncompressed files\n//\nclass LASLoader {\n arraybuffer: ArrayBuffer;\n readOffset: number = 0;\n header: LASHeader = {\n pointsOffset: 0,\n pointsFormatId: 0,\n pointsStructSize: 0,\n pointsCount: 0,\n scale: [0, 0, 0],\n offset: [0, 0, 0],\n maxs: [0],\n mins: [0],\n totalToRead: 0,\n totalRead: 0,\n versionAsString: '',\n isCompressed: true\n };\n\n constructor(arraybuffer: ArrayBuffer) {\n this.arraybuffer = arraybuffer;\n }\n\n /**\n * @returns boolean\n */\n open() {\n // Nothing needs to be done to open this\n return true;\n }\n /**\n * Parsing of incoming binary\n * @returns LASHeader\n */\n getHeader() {\n this.header = parseLASHeader(this.arraybuffer);\n return this.header;\n }\n\n /**\n * Reading data\n * @param count\n * @param skip\n * @returns new ArrayBuffer, count, hasMoreData\n */\n readData(count: number, skip: number) {\n const {header, arraybuffer} = this;\n if (!header) {\n throw new Error('Cannot start reading data till a header request is issued');\n }\n\n let {readOffset} = this;\n let start: number;\n\n if (skip <= 1) {\n count = Math.min(count, header.pointsCount - readOffset);\n start = header.pointsOffset + readOffset * header.pointsStructSize;\n const end = start + count * header.pointsStructSize;\n readOffset += count;\n this.readOffset = readOffset;\n return {\n buffer: arraybuffer.slice(start, end),\n count,\n hasMoreData: readOffset < header.pointsCount\n };\n }\n\n const pointsToRead = Math.min(count * skip, header.pointsCount - readOffset);\n const bufferSize = Math.ceil(pointsToRead / skip);\n let pointsRead = 0;\n\n const buf = new Uint8Array(bufferSize * header.pointsStructSize);\n for (let i = 0; i < pointsToRead; i++) {\n if (i % skip === 0) {\n start = header.pointsOffset + readOffset * header.pointsStructSize;\n const src = new Uint8Array(arraybuffer, start, header.pointsStructSize);\n\n buf.set(src, pointsRead * header.pointsStructSize);\n pointsRead++;\n }\n\n readOffset++;\n }\n this.readOffset = readOffset;\n\n return {\n buffer: buf.buffer,\n count: pointsRead,\n hasMoreData: readOffset < header.pointsCount\n };\n }\n /**\n * Method which brings data to null to close the file\n * @returns\n */\n close() {\n // @ts-ignore Possibly null\n this.arraybuffer = null;\n return true;\n }\n}\n\n/**\n * LAZ Loader\n * Uses NaCL module to load LAZ files\n */\nclass LAZLoader {\n arraybuffer: ArrayBuffer;\n instance: any = null; // LASZip instance\n header: LASHeader | null = null;\n\n constructor(arraybuffer: ArrayBuffer) {\n this.arraybuffer = arraybuffer;\n\n if (!Module) {\n // Avoid executing laz-perf on import\n Module = getModule();\n }\n }\n\n /**\n * Opens the file\n * @returns boolean\n */\n open(): boolean {\n try {\n const {arraybuffer} = this;\n this.instance = new Module.LASZip();\n const abInt = new Uint8Array(arraybuffer);\n const buf = Module._malloc(arraybuffer.byteLength);\n\n this.instance.arraybuffer = arraybuffer;\n this.instance.buf = buf;\n Module.HEAPU8.set(abInt, buf);\n this.instance.open(buf, arraybuffer.byteLength);\n\n this.instance.readOffset = 0;\n\n return true;\n } catch (e) {\n throw new Error(`Failed to open file: ${e.message}`);\n }\n }\n\n getHeader(): LASHeader {\n if (!this.instance) {\n throw new Error('You need to open the file before trying to read header');\n }\n\n try {\n const header = parseLASHeader(this.instance.arraybuffer);\n header.pointsFormatId &= 0x3f;\n this.header = header;\n return header;\n } catch (e) {\n throw new Error(`Failed to get header: ${e.message}`);\n }\n }\n /**\n * @param count\n * @param offset\n * @param skip\n * @returns Data\n */\n readData(count: number, offset: number, skip: number): LASData {\n if (!this.instance) {\n throw new Error('You need to open the file before trying to read stuff');\n }\n\n const {header, instance} = this;\n\n if (!header) {\n throw new Error(\n 'You need to query header before reading, I maintain state that way, sorry :('\n );\n }\n\n try {\n const pointsToRead = Math.min(count * skip, header.pointsCount - instance.readOffset);\n const bufferSize = Math.ceil(pointsToRead / skip);\n let pointsRead = 0;\n\n const thisBuf = new Uint8Array(bufferSize * header.pointsStructSize);\n const bufRead = Module._malloc(header.pointsStructSize);\n for (let i = 0; i < pointsToRead; i++) {\n instance.getPoint(bufRead);\n\n if (i % skip === 0) {\n const a = new Uint8Array(Module.HEAPU8.buffer, bufRead, header.pointsStructSize);\n thisBuf.set(a, pointsRead * header.pointsStructSize);\n pointsRead++;\n }\n\n instance.readOffset++;\n }\n\n return {\n buffer: thisBuf.buffer,\n count: pointsRead,\n hasMoreData: instance.readOffset < header.pointsCount\n };\n } catch (e) {\n throw new Error(`Failed to read data: ${e.message}`);\n }\n }\n\n /**\n * Deletes the instance\n * @returns boolean\n */\n close(): boolean {\n try {\n if (this.instance !== null) {\n this.instance.delete();\n this.instance = null;\n }\n return true;\n } catch (e) {\n throw new Error(`Failed to close file: ${e.message}`);\n }\n }\n}\n\n/**\n * Helper class: Decodes LAS records into points\n */\nclass LASDecoder {\n arrayb: ArrayBuffer;\n decoder: (dv: DataView) => {};\n pointsCount: number;\n pointSize: number;\n scale: [number, number, number];\n offset?: [number, number, number];\n mins?: number[];\n maxs?: number[];\n\n constructor(buffer: ArrayBuffer, len: number, header: LASHeader) {\n this.arrayb = buffer;\n this.decoder = POINT_FORMAT_READERS[header.pointsFormatId];\n this.pointsCount = len;\n this.pointSize = header.pointsStructSize;\n this.scale = header.scale;\n this.offset = header.offset;\n this.mins = header.mins;\n this.maxs = header.maxs;\n }\n\n /**\n * Decodes data depends on this point size\n * @param index\n * @returns New object\n */\n getPoint(index: number): {} {\n if (index < 0 || index >= this.pointsCount) {\n throw new Error('Point index out of range');\n }\n\n const dv = new DataView(this.arrayb, index * this.pointSize, this.pointSize);\n return this.decoder(dv);\n }\n}\n\n/**\n * A single consistent interface for loading LAS/LAZ files\n */\nexport class LASFile {\n arraybuffer: ArrayBuffer;\n formatId: number = 0;\n loader: LASLoader | LAZLoader;\n isCompressed: boolean = true;\n isOpen: boolean = false;\n version: number = 0;\n versionAsString: string = '';\n\n constructor(arraybuffer: ArrayBuffer) {\n this.arraybuffer = arraybuffer;\n\n if (this.determineVersion() > 13) {\n throw new Error('Only file versions <= 1.3 are supported at this time');\n }\n\n this.determineFormat();\n if (POINT_FORMAT_READERS[this.formatId] === undefined) {\n throw new Error('The point format ID is not supported');\n }\n\n this.loader = this.isCompressed\n ? new LAZLoader(this.arraybuffer)\n : new LASLoader(this.arraybuffer);\n }\n\n /**\n * Determines format in parameters of LASHeaer\n */\n determineFormat(): void {\n const formatId = readAs(this.arraybuffer, Uint8Array, 32 * 3 + 8);\n const bit7 = (formatId & 0x80) >> 7;\n const bit6 = (formatId & 0x40) >> 6;\n\n if (bit7 === 1 && bit6 === 1) {\n throw new Error('Old style compression not supported');\n }\n\n this.formatId = formatId & 0x3f;\n this.isCompressed = bit7 === 1 || bit6 === 1;\n }\n\n /**\n * Determines version\n * @returns version\n */\n determineVersion(): number {\n const ver = new Int8Array(this.arraybuffer, 24, 2);\n this.version = ver[0] * 10 + ver[1];\n this.versionAsString = `${ver[0]}.${ver[1]}`;\n return this.version;\n }\n\n /**\n * Reads if the file is open\n * @returns boolean\n */\n open(): void {\n if (this.loader.open()) {\n this.isOpen = true;\n }\n }\n /**\n * Gets the header\n * @returns Header\n */\n getHeader(): LASHeader {\n return this.loader.getHeader();\n }\n\n /**\n * @param count\n * @param start\n * @param skip\n * @returns Data\n */\n readData(count: number, start: number, skip: number): LASData {\n return this.loader.readData(count, start, skip);\n }\n\n /**\n * Closes the file\n */\n close(): void {\n if (this.loader.close()) {\n this.isOpen = false;\n }\n }\n /**\n */\n getUnpacker(): typeof LASDecoder {\n return LASDecoder;\n }\n}\n\nexport const LASModuleWasLoaded = false;\n\n/* eslint no-use-before-define: 2 */\n"],"file":"laslaz-decoder.js"}
1
+ {"version":3,"sources":["../../../src/lib/laslaz-decoder.ts"],"names":["Module","POINT_FORMAT_READERS","dv","position","getInt32","intensity","getUint16","classification","getUint8","color","readAs","buf","Type","offset","count","undefined","sub","slice","BYTES_PER_ELEMENT","r","ret","i","push","parseLASHeader","arraybuffer","start","o","pointsOffset","Uint32Array","pointsFormatId","Uint8Array","pointsStructSize","Uint16Array","pointsCount","scale","Float64Array","bounds","maxs","mins","LASLoader","totalToRead","totalRead","versionAsString","isCompressed","header","skip","Error","readOffset","Math","min","end","buffer","hasMoreData","pointsToRead","bufferSize","ceil","pointsRead","src","set","LAZLoader","instance","LASZip","abInt","_malloc","byteLength","HEAPU8","open","error","message","thisBuf","bufRead","getPoint","a","delete","LASDecoder","len","arrayb","decoder","pointSize","index","DataView","LASFile","determineVersion","determineFormat","formatId","loader","bit7","bit6","ver","Int8Array","version","isOpen","getHeader","readData","close","LASModuleWasLoaded"],"mappings":"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","sourcesContent":["/*\n Modified from Uday Verma and Howard Butler's plasio\n https://github.com/verma/plasio/\n MIT License\n*/\n// laslaz.js - treat as compiled code\nimport type {LASHeader} from './las-types';\nimport getModule from '../libs/laz-perf';\n\nlet Module: any = null;\n\ntype LASReader = (dv: DataView) => {\n [LASAttribute: string]: number | number[];\n};\n\ntype LASReaders = {\n [key: number]: LASReader;\n};\n\ntype LASData = {\n buffer: ArrayBuffer;\n count: number;\n hasMoreData: boolean;\n};\n\nconst POINT_FORMAT_READERS: LASReaders = {\n 0: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15)\n };\n },\n 1: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15)\n };\n },\n 2: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15),\n color: [dv.getUint16(20, true), dv.getUint16(22, true), dv.getUint16(24, true)]\n };\n },\n 3: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15),\n color: [dv.getUint16(28, true), dv.getUint16(30, true), dv.getUint16(32, true)]\n };\n }\n};\n\n/**\n * Reads incoming binary data depends on the Type parameter\n * @param buf\n * @param Type\n * @param offset\n * @param count\n * @returns number | number[] from incoming binary data\n */\nfunction readAs(buf: ArrayBuffer, Type: any = {}, offset: number, count?: number) {\n count = count === undefined || count === 0 ? 1 : count;\n const sub = buf.slice(offset, offset + Type.BYTES_PER_ELEMENT * count);\n\n const r = new Type(sub);\n if (count === 1) {\n return r[0];\n }\n\n const ret: number[] = [];\n for (let i = 0; i < count; i++) {\n ret.push(r[i]);\n }\n\n return ret;\n}\n\n/**\n * Parsing of header's attributes\n * @param arraybuffer\n * @returns header as LASHeader\n */\nfunction parseLASHeader(arraybuffer: ArrayBuffer): LASHeader {\n let start = 32 * 3 + 35;\n\n const o: Partial<LASHeader> = {\n pointsOffset: readAs(arraybuffer, Uint32Array, 32 * 3),\n pointsFormatId: readAs(arraybuffer, Uint8Array, 32 * 3 + 8),\n pointsStructSize: readAs(arraybuffer, Uint16Array, 32 * 3 + 8 + 1),\n pointsCount: readAs(arraybuffer, Uint32Array, 32 * 3 + 11),\n scale: readAs(arraybuffer, Float64Array, start, 3)\n };\n start += 24; // 8*3\n o.offset = readAs(arraybuffer, Float64Array, start, 3);\n start += 24;\n\n const bounds = readAs(arraybuffer, Float64Array, start, 6);\n start += 48; // 8*6;\n o.maxs = [bounds[0], bounds[2], bounds[4]];\n o.mins = [bounds[1], bounds[3], bounds[5]];\n\n return o as LASHeader;\n}\n\n// LAS Loader\n// Loads uncompressed files\n//\nclass LASLoader {\n arraybuffer: ArrayBuffer;\n readOffset: number = 0;\n header: LASHeader = {\n pointsOffset: 0,\n pointsFormatId: 0,\n pointsStructSize: 0,\n pointsCount: 0,\n scale: [0, 0, 0],\n offset: [0, 0, 0],\n maxs: [0],\n mins: [0],\n totalToRead: 0,\n totalRead: 0,\n versionAsString: '',\n isCompressed: true\n };\n\n constructor(arraybuffer: ArrayBuffer) {\n this.arraybuffer = arraybuffer;\n }\n\n /**\n * @returns boolean\n */\n open() {\n // Nothing needs to be done to open this\n return true;\n }\n /**\n * Parsing of incoming binary\n * @returns LASHeader\n */\n getHeader() {\n this.header = parseLASHeader(this.arraybuffer);\n return this.header;\n }\n\n /**\n * Reading data\n * @param count\n * @param skip\n * @returns new ArrayBuffer, count, hasMoreData\n */\n readData(count: number, skip: number) {\n const {header, arraybuffer} = this;\n if (!header) {\n throw new Error('Cannot start reading data till a header request is issued');\n }\n\n let {readOffset} = this;\n let start: number;\n\n if (skip <= 1) {\n count = Math.min(count, header.pointsCount - readOffset);\n start = header.pointsOffset + readOffset * header.pointsStructSize;\n const end = start + count * header.pointsStructSize;\n readOffset += count;\n this.readOffset = readOffset;\n return {\n buffer: arraybuffer.slice(start, end),\n count,\n hasMoreData: readOffset < header.pointsCount\n };\n }\n\n const pointsToRead = Math.min(count * skip, header.pointsCount - readOffset);\n const bufferSize = Math.ceil(pointsToRead / skip);\n let pointsRead = 0;\n\n const buf = new Uint8Array(bufferSize * header.pointsStructSize);\n for (let i = 0; i < pointsToRead; i++) {\n if (i % skip === 0) {\n start = header.pointsOffset + readOffset * header.pointsStructSize;\n const src = new Uint8Array(arraybuffer, start, header.pointsStructSize);\n\n buf.set(src, pointsRead * header.pointsStructSize);\n pointsRead++;\n }\n\n readOffset++;\n }\n this.readOffset = readOffset;\n\n return {\n buffer: buf.buffer,\n count: pointsRead,\n hasMoreData: readOffset < header.pointsCount\n };\n }\n /**\n * Method which brings data to null to close the file\n * @returns\n */\n close() {\n // @ts-ignore Possibly null\n this.arraybuffer = null;\n return true;\n }\n}\n\n/**\n * LAZ Loader\n * Uses NaCL module to load LAZ files\n */\nclass LAZLoader {\n arraybuffer: ArrayBuffer;\n instance: any = null; // LASZip instance\n header: LASHeader | null = null;\n\n constructor(arraybuffer: ArrayBuffer) {\n this.arraybuffer = arraybuffer;\n\n if (!Module) {\n // Avoid executing laz-perf on import\n Module = getModule();\n }\n }\n\n /**\n * Opens the file\n * @returns boolean\n */\n open(): boolean {\n try {\n const {arraybuffer} = this;\n this.instance = new Module.LASZip();\n const abInt = new Uint8Array(arraybuffer);\n const buf = Module._malloc(arraybuffer.byteLength);\n\n this.instance.arraybuffer = arraybuffer;\n this.instance.buf = buf;\n Module.HEAPU8.set(abInt, buf);\n this.instance.open(buf, arraybuffer.byteLength);\n\n this.instance.readOffset = 0;\n\n return true;\n } catch (error) {\n throw new Error(`Failed to open file: ${(error as Error).message}`);\n }\n }\n\n getHeader(): LASHeader {\n if (!this.instance) {\n throw new Error('You need to open the file before trying to read header');\n }\n\n try {\n const header = parseLASHeader(this.instance.arraybuffer);\n header.pointsFormatId &= 0x3f;\n this.header = header;\n return header;\n } catch (error) {\n throw new Error(`Failed to get header: ${(error as Error).message}`);\n }\n }\n /**\n * @param count\n * @param offset\n * @param skip\n * @returns Data\n */\n readData(count: number, offset: number, skip: number): LASData {\n if (!this.instance) {\n throw new Error('You need to open the file before trying to read stuff');\n }\n\n const {header, instance} = this;\n\n if (!header) {\n throw new Error(\n 'You need to query header before reading, I maintain state that way, sorry :('\n );\n }\n\n try {\n const pointsToRead = Math.min(count * skip, header.pointsCount - instance.readOffset);\n const bufferSize = Math.ceil(pointsToRead / skip);\n let pointsRead = 0;\n\n const thisBuf = new Uint8Array(bufferSize * header.pointsStructSize);\n const bufRead = Module._malloc(header.pointsStructSize);\n for (let i = 0; i < pointsToRead; i++) {\n instance.getPoint(bufRead);\n\n if (i % skip === 0) {\n const a = new Uint8Array(Module.HEAPU8.buffer, bufRead, header.pointsStructSize);\n thisBuf.set(a, pointsRead * header.pointsStructSize);\n pointsRead++;\n }\n\n instance.readOffset++;\n }\n\n return {\n buffer: thisBuf.buffer,\n count: pointsRead,\n hasMoreData: instance.readOffset < header.pointsCount\n };\n } catch (error) {\n throw new Error(`Failed to read data: ${(error as Error).message}`);\n }\n }\n\n /**\n * Deletes the instance\n * @returns boolean\n */\n close(): boolean {\n try {\n if (this.instance !== null) {\n this.instance.delete();\n this.instance = null;\n }\n return true;\n } catch (error) {\n throw new Error(`Failed to close file: ${(error as Error).message}`);\n }\n }\n}\n\n/**\n * Helper class: Decodes LAS records into points\n */\nclass LASDecoder {\n arrayb: ArrayBuffer;\n decoder: (dv: DataView) => {};\n pointsCount: number;\n pointSize: number;\n scale: [number, number, number];\n offset?: [number, number, number];\n mins?: number[];\n maxs?: number[];\n\n constructor(buffer: ArrayBuffer, len: number, header: LASHeader) {\n this.arrayb = buffer;\n this.decoder = POINT_FORMAT_READERS[header.pointsFormatId];\n this.pointsCount = len;\n this.pointSize = header.pointsStructSize;\n this.scale = header.scale;\n this.offset = header.offset;\n this.mins = header.mins;\n this.maxs = header.maxs;\n }\n\n /**\n * Decodes data depends on this point size\n * @param index\n * @returns New object\n */\n getPoint(index: number): {} {\n if (index < 0 || index >= this.pointsCount) {\n throw new Error('Point index out of range');\n }\n\n const dv = new DataView(this.arrayb, index * this.pointSize, this.pointSize);\n return this.decoder(dv);\n }\n}\n\n/**\n * A single consistent interface for loading LAS/LAZ files\n */\nexport class LASFile {\n arraybuffer: ArrayBuffer;\n formatId: number = 0;\n loader: LASLoader | LAZLoader;\n isCompressed: boolean = true;\n isOpen: boolean = false;\n version: number = 0;\n versionAsString: string = '';\n\n constructor(arraybuffer: ArrayBuffer) {\n this.arraybuffer = arraybuffer;\n\n if (this.determineVersion() > 13) {\n throw new Error('Only file versions <= 1.3 are supported at this time');\n }\n\n this.determineFormat();\n if (POINT_FORMAT_READERS[this.formatId] === undefined) {\n throw new Error('The point format ID is not supported');\n }\n\n this.loader = this.isCompressed\n ? new LAZLoader(this.arraybuffer)\n : new LASLoader(this.arraybuffer);\n }\n\n /**\n * Determines format in parameters of LASHeaer\n */\n determineFormat(): void {\n const formatId = readAs(this.arraybuffer, Uint8Array, 32 * 3 + 8);\n const bit7 = (formatId & 0x80) >> 7;\n const bit6 = (formatId & 0x40) >> 6;\n\n if (bit7 === 1 && bit6 === 1) {\n throw new Error('Old style compression not supported');\n }\n\n this.formatId = formatId & 0x3f;\n this.isCompressed = bit7 === 1 || bit6 === 1;\n }\n\n /**\n * Determines version\n * @returns version\n */\n determineVersion(): number {\n const ver = new Int8Array(this.arraybuffer, 24, 2);\n this.version = ver[0] * 10 + ver[1];\n this.versionAsString = `${ver[0]}.${ver[1]}`;\n return this.version;\n }\n\n /**\n * Reads if the file is open\n * @returns boolean\n */\n open(): void {\n if (this.loader.open()) {\n this.isOpen = true;\n }\n }\n /**\n * Gets the header\n * @returns Header\n */\n getHeader(): LASHeader {\n return this.loader.getHeader();\n }\n\n /**\n * @param count\n * @param start\n * @param skip\n * @returns Data\n */\n readData(count: number, start: number, skip: number): LASData {\n return this.loader.readData(count, start, skip);\n }\n\n /**\n * Closes the file\n */\n close(): void {\n if (this.loader.close()) {\n this.isOpen = false;\n }\n }\n /**\n */\n getUnpacker(): typeof LASDecoder {\n return LASDecoder;\n }\n}\n\nexport const LASModuleWasLoaded = false;\n\n/* eslint no-use-before-define: 2 */\n"],"file":"laslaz-decoder.js"}
@@ -1,4 +1,4 @@
1
- const VERSION = typeof "3.0.10" !== 'undefined' ? "3.0.10" : 'latest';
1
+ const VERSION = typeof "3.0.14" !== 'undefined' ? "3.0.14" : 'latest';
2
2
  const DEFAULT_LAS_OPTIONS = {
3
3
  las: {
4
4
  fp64: false,
@@ -194,8 +194,8 @@ class LAZLoader {
194
194
  this.instance.open(buf, arraybuffer.byteLength);
195
195
  this.instance.readOffset = 0;
196
196
  return true;
197
- } catch (e) {
198
- throw new Error(`Failed to open file: ${e.message}`);
197
+ } catch (error) {
198
+ throw new Error("Failed to open file: ".concat(error.message));
199
199
  }
200
200
  }
201
201
 
@@ -209,8 +209,8 @@ class LAZLoader {
209
209
  header.pointsFormatId &= 0x3f;
210
210
  this.header = header;
211
211
  return header;
212
- } catch (e) {
213
- throw new Error(`Failed to get header: ${e.message}`);
212
+ } catch (error) {
213
+ throw new Error("Failed to get header: ".concat(error.message));
214
214
  }
215
215
  }
216
216
 
@@ -253,8 +253,8 @@ class LAZLoader {
253
253
  count: pointsRead,
254
254
  hasMoreData: instance.readOffset < header.pointsCount
255
255
  };
256
- } catch (e) {
257
- throw new Error(`Failed to read data: ${e.message}`);
256
+ } catch (error) {
257
+ throw new Error("Failed to read data: ".concat(error.message));
258
258
  }
259
259
  }
260
260
 
@@ -266,8 +266,8 @@ class LAZLoader {
266
266
  }
267
267
 
268
268
  return true;
269
- } catch (e) {
270
- throw new Error(`Failed to close file: ${e.message}`);
269
+ } catch (error) {
270
+ throw new Error("Failed to close file: ".concat(error.message));
271
271
  }
272
272
  }
273
273
 
@@ -359,7 +359,7 @@ export class LASFile {
359
359
  determineVersion() {
360
360
  const ver = new Int8Array(this.arraybuffer, 24, 2);
361
361
  this.version = ver[0] * 10 + ver[1];
362
- this.versionAsString = `${ver[0]}.${ver[1]}`;
362
+ this.versionAsString = "".concat(ver[0], ".").concat(ver[1]);
363
363
  return this.version;
364
364
  }
365
365
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/laslaz-decoder.ts"],"names":["getModule","Module","POINT_FORMAT_READERS","dv","position","getInt32","intensity","getUint16","classification","getUint8","color","readAs","buf","Type","offset","count","undefined","sub","slice","BYTES_PER_ELEMENT","r","ret","i","push","parseLASHeader","arraybuffer","start","o","pointsOffset","Uint32Array","pointsFormatId","Uint8Array","pointsStructSize","Uint16Array","pointsCount","scale","Float64Array","bounds","maxs","mins","LASLoader","constructor","totalToRead","totalRead","versionAsString","isCompressed","open","getHeader","header","readData","skip","Error","readOffset","Math","min","end","buffer","hasMoreData","pointsToRead","bufferSize","ceil","pointsRead","src","set","close","LAZLoader","instance","LASZip","abInt","_malloc","byteLength","HEAPU8","e","message","thisBuf","bufRead","getPoint","a","delete","LASDecoder","len","arrayb","decoder","pointSize","index","DataView","LASFile","determineVersion","determineFormat","formatId","loader","bit7","bit6","ver","Int8Array","version","isOpen","getUnpacker","LASModuleWasLoaded"],"mappings":"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","sourcesContent":["/*\n Modified from Uday Verma and Howard Butler's plasio\n https://github.com/verma/plasio/\n MIT License\n*/\n// laslaz.js - treat as compiled code\nimport type {LASHeader} from './las-types';\nimport getModule from '../libs/laz-perf';\n\nlet Module: any = null;\n\ntype LASReader = (dv: DataView) => {\n [LASAttribute: string]: number | number[];\n};\n\ntype LASReaders = {\n [key: number]: LASReader;\n};\n\ntype LASData = {\n buffer: ArrayBuffer;\n count: number;\n hasMoreData: boolean;\n};\n\nconst POINT_FORMAT_READERS: LASReaders = {\n 0: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15)\n };\n },\n 1: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15)\n };\n },\n 2: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15),\n color: [dv.getUint16(20, true), dv.getUint16(22, true), dv.getUint16(24, true)]\n };\n },\n 3: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15),\n color: [dv.getUint16(28, true), dv.getUint16(30, true), dv.getUint16(32, true)]\n };\n }\n};\n\n/**\n * Reads incoming binary data depends on the Type parameter\n * @param buf\n * @param Type\n * @param offset\n * @param count\n * @returns number | number[] from incoming binary data\n */\nfunction readAs(buf: ArrayBuffer, Type: any = {}, offset: number, count?: number) {\n count = count === undefined || count === 0 ? 1 : count;\n const sub = buf.slice(offset, offset + Type.BYTES_PER_ELEMENT * count);\n\n const r = new Type(sub);\n if (count === 1) {\n return r[0];\n }\n\n const ret: number[] = [];\n for (let i = 0; i < count; i++) {\n ret.push(r[i]);\n }\n\n return ret;\n}\n\n/**\n * Parsing of header's attributes\n * @param arraybuffer\n * @returns header as LASHeader\n */\nfunction parseLASHeader(arraybuffer: ArrayBuffer): LASHeader {\n let start = 32 * 3 + 35;\n\n const o: Partial<LASHeader> = {\n pointsOffset: readAs(arraybuffer, Uint32Array, 32 * 3),\n pointsFormatId: readAs(arraybuffer, Uint8Array, 32 * 3 + 8),\n pointsStructSize: readAs(arraybuffer, Uint16Array, 32 * 3 + 8 + 1),\n pointsCount: readAs(arraybuffer, Uint32Array, 32 * 3 + 11),\n scale: readAs(arraybuffer, Float64Array, start, 3)\n };\n start += 24; // 8*3\n o.offset = readAs(arraybuffer, Float64Array, start, 3);\n start += 24;\n\n const bounds = readAs(arraybuffer, Float64Array, start, 6);\n start += 48; // 8*6;\n o.maxs = [bounds[0], bounds[2], bounds[4]];\n o.mins = [bounds[1], bounds[3], bounds[5]];\n\n return o as LASHeader;\n}\n\n// LAS Loader\n// Loads uncompressed files\n//\nclass LASLoader {\n arraybuffer: ArrayBuffer;\n readOffset: number = 0;\n header: LASHeader = {\n pointsOffset: 0,\n pointsFormatId: 0,\n pointsStructSize: 0,\n pointsCount: 0,\n scale: [0, 0, 0],\n offset: [0, 0, 0],\n maxs: [0],\n mins: [0],\n totalToRead: 0,\n totalRead: 0,\n versionAsString: '',\n isCompressed: true\n };\n\n constructor(arraybuffer: ArrayBuffer) {\n this.arraybuffer = arraybuffer;\n }\n\n /**\n * @returns boolean\n */\n open() {\n // Nothing needs to be done to open this\n return true;\n }\n /**\n * Parsing of incoming binary\n * @returns LASHeader\n */\n getHeader() {\n this.header = parseLASHeader(this.arraybuffer);\n return this.header;\n }\n\n /**\n * Reading data\n * @param count\n * @param skip\n * @returns new ArrayBuffer, count, hasMoreData\n */\n readData(count: number, skip: number) {\n const {header, arraybuffer} = this;\n if (!header) {\n throw new Error('Cannot start reading data till a header request is issued');\n }\n\n let {readOffset} = this;\n let start: number;\n\n if (skip <= 1) {\n count = Math.min(count, header.pointsCount - readOffset);\n start = header.pointsOffset + readOffset * header.pointsStructSize;\n const end = start + count * header.pointsStructSize;\n readOffset += count;\n this.readOffset = readOffset;\n return {\n buffer: arraybuffer.slice(start, end),\n count,\n hasMoreData: readOffset < header.pointsCount\n };\n }\n\n const pointsToRead = Math.min(count * skip, header.pointsCount - readOffset);\n const bufferSize = Math.ceil(pointsToRead / skip);\n let pointsRead = 0;\n\n const buf = new Uint8Array(bufferSize * header.pointsStructSize);\n for (let i = 0; i < pointsToRead; i++) {\n if (i % skip === 0) {\n start = header.pointsOffset + readOffset * header.pointsStructSize;\n const src = new Uint8Array(arraybuffer, start, header.pointsStructSize);\n\n buf.set(src, pointsRead * header.pointsStructSize);\n pointsRead++;\n }\n\n readOffset++;\n }\n this.readOffset = readOffset;\n\n return {\n buffer: buf.buffer,\n count: pointsRead,\n hasMoreData: readOffset < header.pointsCount\n };\n }\n /**\n * Method which brings data to null to close the file\n * @returns\n */\n close() {\n // @ts-ignore Possibly null\n this.arraybuffer = null;\n return true;\n }\n}\n\n/**\n * LAZ Loader\n * Uses NaCL module to load LAZ files\n */\nclass LAZLoader {\n arraybuffer: ArrayBuffer;\n instance: any = null; // LASZip instance\n header: LASHeader | null = null;\n\n constructor(arraybuffer: ArrayBuffer) {\n this.arraybuffer = arraybuffer;\n\n if (!Module) {\n // Avoid executing laz-perf on import\n Module = getModule();\n }\n }\n\n /**\n * Opens the file\n * @returns boolean\n */\n open(): boolean {\n try {\n const {arraybuffer} = this;\n this.instance = new Module.LASZip();\n const abInt = new Uint8Array(arraybuffer);\n const buf = Module._malloc(arraybuffer.byteLength);\n\n this.instance.arraybuffer = arraybuffer;\n this.instance.buf = buf;\n Module.HEAPU8.set(abInt, buf);\n this.instance.open(buf, arraybuffer.byteLength);\n\n this.instance.readOffset = 0;\n\n return true;\n } catch (e) {\n throw new Error(`Failed to open file: ${e.message}`);\n }\n }\n\n getHeader(): LASHeader {\n if (!this.instance) {\n throw new Error('You need to open the file before trying to read header');\n }\n\n try {\n const header = parseLASHeader(this.instance.arraybuffer);\n header.pointsFormatId &= 0x3f;\n this.header = header;\n return header;\n } catch (e) {\n throw new Error(`Failed to get header: ${e.message}`);\n }\n }\n /**\n * @param count\n * @param offset\n * @param skip\n * @returns Data\n */\n readData(count: number, offset: number, skip: number): LASData {\n if (!this.instance) {\n throw new Error('You need to open the file before trying to read stuff');\n }\n\n const {header, instance} = this;\n\n if (!header) {\n throw new Error(\n 'You need to query header before reading, I maintain state that way, sorry :('\n );\n }\n\n try {\n const pointsToRead = Math.min(count * skip, header.pointsCount - instance.readOffset);\n const bufferSize = Math.ceil(pointsToRead / skip);\n let pointsRead = 0;\n\n const thisBuf = new Uint8Array(bufferSize * header.pointsStructSize);\n const bufRead = Module._malloc(header.pointsStructSize);\n for (let i = 0; i < pointsToRead; i++) {\n instance.getPoint(bufRead);\n\n if (i % skip === 0) {\n const a = new Uint8Array(Module.HEAPU8.buffer, bufRead, header.pointsStructSize);\n thisBuf.set(a, pointsRead * header.pointsStructSize);\n pointsRead++;\n }\n\n instance.readOffset++;\n }\n\n return {\n buffer: thisBuf.buffer,\n count: pointsRead,\n hasMoreData: instance.readOffset < header.pointsCount\n };\n } catch (e) {\n throw new Error(`Failed to read data: ${e.message}`);\n }\n }\n\n /**\n * Deletes the instance\n * @returns boolean\n */\n close(): boolean {\n try {\n if (this.instance !== null) {\n this.instance.delete();\n this.instance = null;\n }\n return true;\n } catch (e) {\n throw new Error(`Failed to close file: ${e.message}`);\n }\n }\n}\n\n/**\n * Helper class: Decodes LAS records into points\n */\nclass LASDecoder {\n arrayb: ArrayBuffer;\n decoder: (dv: DataView) => {};\n pointsCount: number;\n pointSize: number;\n scale: [number, number, number];\n offset?: [number, number, number];\n mins?: number[];\n maxs?: number[];\n\n constructor(buffer: ArrayBuffer, len: number, header: LASHeader) {\n this.arrayb = buffer;\n this.decoder = POINT_FORMAT_READERS[header.pointsFormatId];\n this.pointsCount = len;\n this.pointSize = header.pointsStructSize;\n this.scale = header.scale;\n this.offset = header.offset;\n this.mins = header.mins;\n this.maxs = header.maxs;\n }\n\n /**\n * Decodes data depends on this point size\n * @param index\n * @returns New object\n */\n getPoint(index: number): {} {\n if (index < 0 || index >= this.pointsCount) {\n throw new Error('Point index out of range');\n }\n\n const dv = new DataView(this.arrayb, index * this.pointSize, this.pointSize);\n return this.decoder(dv);\n }\n}\n\n/**\n * A single consistent interface for loading LAS/LAZ files\n */\nexport class LASFile {\n arraybuffer: ArrayBuffer;\n formatId: number = 0;\n loader: LASLoader | LAZLoader;\n isCompressed: boolean = true;\n isOpen: boolean = false;\n version: number = 0;\n versionAsString: string = '';\n\n constructor(arraybuffer: ArrayBuffer) {\n this.arraybuffer = arraybuffer;\n\n if (this.determineVersion() > 13) {\n throw new Error('Only file versions <= 1.3 are supported at this time');\n }\n\n this.determineFormat();\n if (POINT_FORMAT_READERS[this.formatId] === undefined) {\n throw new Error('The point format ID is not supported');\n }\n\n this.loader = this.isCompressed\n ? new LAZLoader(this.arraybuffer)\n : new LASLoader(this.arraybuffer);\n }\n\n /**\n * Determines format in parameters of LASHeaer\n */\n determineFormat(): void {\n const formatId = readAs(this.arraybuffer, Uint8Array, 32 * 3 + 8);\n const bit7 = (formatId & 0x80) >> 7;\n const bit6 = (formatId & 0x40) >> 6;\n\n if (bit7 === 1 && bit6 === 1) {\n throw new Error('Old style compression not supported');\n }\n\n this.formatId = formatId & 0x3f;\n this.isCompressed = bit7 === 1 || bit6 === 1;\n }\n\n /**\n * Determines version\n * @returns version\n */\n determineVersion(): number {\n const ver = new Int8Array(this.arraybuffer, 24, 2);\n this.version = ver[0] * 10 + ver[1];\n this.versionAsString = `${ver[0]}.${ver[1]}`;\n return this.version;\n }\n\n /**\n * Reads if the file is open\n * @returns boolean\n */\n open(): void {\n if (this.loader.open()) {\n this.isOpen = true;\n }\n }\n /**\n * Gets the header\n * @returns Header\n */\n getHeader(): LASHeader {\n return this.loader.getHeader();\n }\n\n /**\n * @param count\n * @param start\n * @param skip\n * @returns Data\n */\n readData(count: number, start: number, skip: number): LASData {\n return this.loader.readData(count, start, skip);\n }\n\n /**\n * Closes the file\n */\n close(): void {\n if (this.loader.close()) {\n this.isOpen = false;\n }\n }\n /**\n */\n getUnpacker(): typeof LASDecoder {\n return LASDecoder;\n }\n}\n\nexport const LASModuleWasLoaded = false;\n\n/* eslint no-use-before-define: 2 */\n"],"file":"laslaz-decoder.js"}
1
+ {"version":3,"sources":["../../../src/lib/laslaz-decoder.ts"],"names":["getModule","Module","POINT_FORMAT_READERS","dv","position","getInt32","intensity","getUint16","classification","getUint8","color","readAs","buf","Type","offset","count","undefined","sub","slice","BYTES_PER_ELEMENT","r","ret","i","push","parseLASHeader","arraybuffer","start","o","pointsOffset","Uint32Array","pointsFormatId","Uint8Array","pointsStructSize","Uint16Array","pointsCount","scale","Float64Array","bounds","maxs","mins","LASLoader","constructor","totalToRead","totalRead","versionAsString","isCompressed","open","getHeader","header","readData","skip","Error","readOffset","Math","min","end","buffer","hasMoreData","pointsToRead","bufferSize","ceil","pointsRead","src","set","close","LAZLoader","instance","LASZip","abInt","_malloc","byteLength","HEAPU8","error","message","thisBuf","bufRead","getPoint","a","delete","LASDecoder","len","arrayb","decoder","pointSize","index","DataView","LASFile","determineVersion","determineFormat","formatId","loader","bit7","bit6","ver","Int8Array","version","isOpen","getUnpacker","LASModuleWasLoaded"],"mappings":"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","sourcesContent":["/*\n Modified from Uday Verma and Howard Butler's plasio\n https://github.com/verma/plasio/\n MIT License\n*/\n// laslaz.js - treat as compiled code\nimport type {LASHeader} from './las-types';\nimport getModule from '../libs/laz-perf';\n\nlet Module: any = null;\n\ntype LASReader = (dv: DataView) => {\n [LASAttribute: string]: number | number[];\n};\n\ntype LASReaders = {\n [key: number]: LASReader;\n};\n\ntype LASData = {\n buffer: ArrayBuffer;\n count: number;\n hasMoreData: boolean;\n};\n\nconst POINT_FORMAT_READERS: LASReaders = {\n 0: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15)\n };\n },\n 1: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15)\n };\n },\n 2: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15),\n color: [dv.getUint16(20, true), dv.getUint16(22, true), dv.getUint16(24, true)]\n };\n },\n 3: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15),\n color: [dv.getUint16(28, true), dv.getUint16(30, true), dv.getUint16(32, true)]\n };\n }\n};\n\n/**\n * Reads incoming binary data depends on the Type parameter\n * @param buf\n * @param Type\n * @param offset\n * @param count\n * @returns number | number[] from incoming binary data\n */\nfunction readAs(buf: ArrayBuffer, Type: any = {}, offset: number, count?: number) {\n count = count === undefined || count === 0 ? 1 : count;\n const sub = buf.slice(offset, offset + Type.BYTES_PER_ELEMENT * count);\n\n const r = new Type(sub);\n if (count === 1) {\n return r[0];\n }\n\n const ret: number[] = [];\n for (let i = 0; i < count; i++) {\n ret.push(r[i]);\n }\n\n return ret;\n}\n\n/**\n * Parsing of header's attributes\n * @param arraybuffer\n * @returns header as LASHeader\n */\nfunction parseLASHeader(arraybuffer: ArrayBuffer): LASHeader {\n let start = 32 * 3 + 35;\n\n const o: Partial<LASHeader> = {\n pointsOffset: readAs(arraybuffer, Uint32Array, 32 * 3),\n pointsFormatId: readAs(arraybuffer, Uint8Array, 32 * 3 + 8),\n pointsStructSize: readAs(arraybuffer, Uint16Array, 32 * 3 + 8 + 1),\n pointsCount: readAs(arraybuffer, Uint32Array, 32 * 3 + 11),\n scale: readAs(arraybuffer, Float64Array, start, 3)\n };\n start += 24; // 8*3\n o.offset = readAs(arraybuffer, Float64Array, start, 3);\n start += 24;\n\n const bounds = readAs(arraybuffer, Float64Array, start, 6);\n start += 48; // 8*6;\n o.maxs = [bounds[0], bounds[2], bounds[4]];\n o.mins = [bounds[1], bounds[3], bounds[5]];\n\n return o as LASHeader;\n}\n\n// LAS Loader\n// Loads uncompressed files\n//\nclass LASLoader {\n arraybuffer: ArrayBuffer;\n readOffset: number = 0;\n header: LASHeader = {\n pointsOffset: 0,\n pointsFormatId: 0,\n pointsStructSize: 0,\n pointsCount: 0,\n scale: [0, 0, 0],\n offset: [0, 0, 0],\n maxs: [0],\n mins: [0],\n totalToRead: 0,\n totalRead: 0,\n versionAsString: '',\n isCompressed: true\n };\n\n constructor(arraybuffer: ArrayBuffer) {\n this.arraybuffer = arraybuffer;\n }\n\n /**\n * @returns boolean\n */\n open() {\n // Nothing needs to be done to open this\n return true;\n }\n /**\n * Parsing of incoming binary\n * @returns LASHeader\n */\n getHeader() {\n this.header = parseLASHeader(this.arraybuffer);\n return this.header;\n }\n\n /**\n * Reading data\n * @param count\n * @param skip\n * @returns new ArrayBuffer, count, hasMoreData\n */\n readData(count: number, skip: number) {\n const {header, arraybuffer} = this;\n if (!header) {\n throw new Error('Cannot start reading data till a header request is issued');\n }\n\n let {readOffset} = this;\n let start: number;\n\n if (skip <= 1) {\n count = Math.min(count, header.pointsCount - readOffset);\n start = header.pointsOffset + readOffset * header.pointsStructSize;\n const end = start + count * header.pointsStructSize;\n readOffset += count;\n this.readOffset = readOffset;\n return {\n buffer: arraybuffer.slice(start, end),\n count,\n hasMoreData: readOffset < header.pointsCount\n };\n }\n\n const pointsToRead = Math.min(count * skip, header.pointsCount - readOffset);\n const bufferSize = Math.ceil(pointsToRead / skip);\n let pointsRead = 0;\n\n const buf = new Uint8Array(bufferSize * header.pointsStructSize);\n for (let i = 0; i < pointsToRead; i++) {\n if (i % skip === 0) {\n start = header.pointsOffset + readOffset * header.pointsStructSize;\n const src = new Uint8Array(arraybuffer, start, header.pointsStructSize);\n\n buf.set(src, pointsRead * header.pointsStructSize);\n pointsRead++;\n }\n\n readOffset++;\n }\n this.readOffset = readOffset;\n\n return {\n buffer: buf.buffer,\n count: pointsRead,\n hasMoreData: readOffset < header.pointsCount\n };\n }\n /**\n * Method which brings data to null to close the file\n * @returns\n */\n close() {\n // @ts-ignore Possibly null\n this.arraybuffer = null;\n return true;\n }\n}\n\n/**\n * LAZ Loader\n * Uses NaCL module to load LAZ files\n */\nclass LAZLoader {\n arraybuffer: ArrayBuffer;\n instance: any = null; // LASZip instance\n header: LASHeader | null = null;\n\n constructor(arraybuffer: ArrayBuffer) {\n this.arraybuffer = arraybuffer;\n\n if (!Module) {\n // Avoid executing laz-perf on import\n Module = getModule();\n }\n }\n\n /**\n * Opens the file\n * @returns boolean\n */\n open(): boolean {\n try {\n const {arraybuffer} = this;\n this.instance = new Module.LASZip();\n const abInt = new Uint8Array(arraybuffer);\n const buf = Module._malloc(arraybuffer.byteLength);\n\n this.instance.arraybuffer = arraybuffer;\n this.instance.buf = buf;\n Module.HEAPU8.set(abInt, buf);\n this.instance.open(buf, arraybuffer.byteLength);\n\n this.instance.readOffset = 0;\n\n return true;\n } catch (error) {\n throw new Error(`Failed to open file: ${(error as Error).message}`);\n }\n }\n\n getHeader(): LASHeader {\n if (!this.instance) {\n throw new Error('You need to open the file before trying to read header');\n }\n\n try {\n const header = parseLASHeader(this.instance.arraybuffer);\n header.pointsFormatId &= 0x3f;\n this.header = header;\n return header;\n } catch (error) {\n throw new Error(`Failed to get header: ${(error as Error).message}`);\n }\n }\n /**\n * @param count\n * @param offset\n * @param skip\n * @returns Data\n */\n readData(count: number, offset: number, skip: number): LASData {\n if (!this.instance) {\n throw new Error('You need to open the file before trying to read stuff');\n }\n\n const {header, instance} = this;\n\n if (!header) {\n throw new Error(\n 'You need to query header before reading, I maintain state that way, sorry :('\n );\n }\n\n try {\n const pointsToRead = Math.min(count * skip, header.pointsCount - instance.readOffset);\n const bufferSize = Math.ceil(pointsToRead / skip);\n let pointsRead = 0;\n\n const thisBuf = new Uint8Array(bufferSize * header.pointsStructSize);\n const bufRead = Module._malloc(header.pointsStructSize);\n for (let i = 0; i < pointsToRead; i++) {\n instance.getPoint(bufRead);\n\n if (i % skip === 0) {\n const a = new Uint8Array(Module.HEAPU8.buffer, bufRead, header.pointsStructSize);\n thisBuf.set(a, pointsRead * header.pointsStructSize);\n pointsRead++;\n }\n\n instance.readOffset++;\n }\n\n return {\n buffer: thisBuf.buffer,\n count: pointsRead,\n hasMoreData: instance.readOffset < header.pointsCount\n };\n } catch (error) {\n throw new Error(`Failed to read data: ${(error as Error).message}`);\n }\n }\n\n /**\n * Deletes the instance\n * @returns boolean\n */\n close(): boolean {\n try {\n if (this.instance !== null) {\n this.instance.delete();\n this.instance = null;\n }\n return true;\n } catch (error) {\n throw new Error(`Failed to close file: ${(error as Error).message}`);\n }\n }\n}\n\n/**\n * Helper class: Decodes LAS records into points\n */\nclass LASDecoder {\n arrayb: ArrayBuffer;\n decoder: (dv: DataView) => {};\n pointsCount: number;\n pointSize: number;\n scale: [number, number, number];\n offset?: [number, number, number];\n mins?: number[];\n maxs?: number[];\n\n constructor(buffer: ArrayBuffer, len: number, header: LASHeader) {\n this.arrayb = buffer;\n this.decoder = POINT_FORMAT_READERS[header.pointsFormatId];\n this.pointsCount = len;\n this.pointSize = header.pointsStructSize;\n this.scale = header.scale;\n this.offset = header.offset;\n this.mins = header.mins;\n this.maxs = header.maxs;\n }\n\n /**\n * Decodes data depends on this point size\n * @param index\n * @returns New object\n */\n getPoint(index: number): {} {\n if (index < 0 || index >= this.pointsCount) {\n throw new Error('Point index out of range');\n }\n\n const dv = new DataView(this.arrayb, index * this.pointSize, this.pointSize);\n return this.decoder(dv);\n }\n}\n\n/**\n * A single consistent interface for loading LAS/LAZ files\n */\nexport class LASFile {\n arraybuffer: ArrayBuffer;\n formatId: number = 0;\n loader: LASLoader | LAZLoader;\n isCompressed: boolean = true;\n isOpen: boolean = false;\n version: number = 0;\n versionAsString: string = '';\n\n constructor(arraybuffer: ArrayBuffer) {\n this.arraybuffer = arraybuffer;\n\n if (this.determineVersion() > 13) {\n throw new Error('Only file versions <= 1.3 are supported at this time');\n }\n\n this.determineFormat();\n if (POINT_FORMAT_READERS[this.formatId] === undefined) {\n throw new Error('The point format ID is not supported');\n }\n\n this.loader = this.isCompressed\n ? new LAZLoader(this.arraybuffer)\n : new LASLoader(this.arraybuffer);\n }\n\n /**\n * Determines format in parameters of LASHeaer\n */\n determineFormat(): void {\n const formatId = readAs(this.arraybuffer, Uint8Array, 32 * 3 + 8);\n const bit7 = (formatId & 0x80) >> 7;\n const bit6 = (formatId & 0x40) >> 6;\n\n if (bit7 === 1 && bit6 === 1) {\n throw new Error('Old style compression not supported');\n }\n\n this.formatId = formatId & 0x3f;\n this.isCompressed = bit7 === 1 || bit6 === 1;\n }\n\n /**\n * Determines version\n * @returns version\n */\n determineVersion(): number {\n const ver = new Int8Array(this.arraybuffer, 24, 2);\n this.version = ver[0] * 10 + ver[1];\n this.versionAsString = `${ver[0]}.${ver[1]}`;\n return this.version;\n }\n\n /**\n * Reads if the file is open\n * @returns boolean\n */\n open(): void {\n if (this.loader.open()) {\n this.isOpen = true;\n }\n }\n /**\n * Gets the header\n * @returns Header\n */\n getHeader(): LASHeader {\n return this.loader.getHeader();\n }\n\n /**\n * @param count\n * @param start\n * @param skip\n * @returns Data\n */\n readData(count: number, start: number, skip: number): LASData {\n return this.loader.readData(count, start, skip);\n }\n\n /**\n * Closes the file\n */\n close(): void {\n if (this.loader.close()) {\n this.isOpen = false;\n }\n }\n /**\n */\n getUnpacker(): typeof LASDecoder {\n return LASDecoder;\n }\n}\n\nexport const LASModuleWasLoaded = false;\n\n/* eslint no-use-before-define: 2 */\n"],"file":"laslaz-decoder.js"}