@loaders.gl/las 3.4.0-alpha.1 → 3.4.0-alpha.3

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.
@@ -16,7 +16,6 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
16
16
  function parseLAS(arrayBuffer, options) {
17
17
  return parseLASMesh(arrayBuffer, options);
18
18
  }
19
-
20
19
  function parseLASMesh(arrayBuffer) {
21
20
  var _options$las;
22
21
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
@@ -38,7 +37,6 @@ function parseLASMesh(arrayBuffer) {
38
37
  topology: 'point-list',
39
38
  mode: 0
40
39
  };
41
-
42
40
  parseLASChunked(arrayBuffer, (_options$las = options.las) === null || _options$las === void 0 ? void 0 : _options$las.skip, function () {
43
41
  var _options$las3, _options$onProgress;
44
42
  var decoder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -117,7 +115,6 @@ function parseLASMesh(arrayBuffer) {
117
115
  });
118
116
  options === null || options === void 0 ? void 0 : (_options$onProgress = options.onProgress) === null || _options$onProgress === void 0 ? void 0 : _options$onProgress.call(options, meshBatch);
119
117
  });
120
-
121
118
  lasMesh.header = {
122
119
  vertexCount: originalHeader.totalToRead,
123
120
  boundingBox: (0, _schema.getMeshBoundingBox)((lasMesh === null || lasMesh === void 0 ? void 0 : lasMesh.attributes) || {})
@@ -127,7 +124,6 @@ function parseLASMesh(arrayBuffer) {
127
124
  }
128
125
  return lasMesh;
129
126
  }
130
-
131
127
  function parseLASChunked(rawData, skip) {
132
128
  var onParseData = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
133
129
  var dataHandler = new _laslazDecoder.LASFile(rawData);
@@ -138,7 +134,6 @@ function parseLASChunked(rawData, skip) {
138
134
  var totalToRead = Math.ceil(header.pointsCount / Math.max(1, skip));
139
135
  header.totalToRead = totalToRead;
140
136
  var totalRead = 0;
141
-
142
137
  while (true) {
143
138
  var chunk = dataHandler.readData(1000 * 100, 0, skip);
144
139
  totalRead += chunk.count;
@@ -146,7 +141,6 @@ function parseLASChunked(rawData, skip) {
146
141
  header.versionAsString = chunk.versionAsString;
147
142
  header.isCompressed = chunk.isCompressed;
148
143
  var unpacker = new Unpacker(chunk.buffer, chunk.count, header);
149
-
150
144
  onParseData(unpacker, header);
151
145
  if (!chunk.hasMoreData || totalRead >= totalToRead) {
152
146
  break;
@@ -158,7 +152,6 @@ function parseLASChunked(rawData, skip) {
158
152
  dataHandler.close();
159
153
  }
160
154
  }
161
-
162
155
  function detectTwoByteColors() {
163
156
  var decoder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
164
157
  var batchSize = arguments.length > 1 ? arguments[1] : undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"parse-las.js","names":["parseLAS","arrayBuffer","options","parseLASMesh","pointIndex","positions","colors","intensities","classifications","originalHeader","lasMesh","loader","loaderData","schema","Schema","header","vertexCount","boundingBox","attributes","topology","mode","parseLASChunked","las","skip","decoder","lasHeader","total","totalToRead","PositionsType","fp64","Float64Array","Float32Array","pointsFormatId","Uint8Array","Uint16Array","POSITION","value","size","intensity","classification","COLOR_0","batchSize","pointsCount","scale","scaleX","scaleY","scaleZ","offset","offsetX","offsetY","offsetZ","twoByteColor","detectTwoByteColors","colorDepth","i","getPoint","position","color","meshBatch","totalRead","progress","onProgress","getMeshBoundingBox","getLASSchema","rawData","onParseData","dataHandler","LASFile","open","getHeader","Unpacker","getUnpacker","Math","ceil","max","chunk","readData","count","versionAsString","isCompressed","unpacker","buffer","hasMoreData","e","close","console","warn"],"sources":["../../../src/lib/parse-las.ts"],"sourcesContent":["// ported and es6-ified from https://github.com/verma/plasio/\nimport type {ArrowTable, ColumnarTable} from '@loaders.gl/schema';\nimport type {LASLoaderOptions} from '../las-loader';\nimport type {LASMesh, LASHeader} from './las-types';\nimport {Schema, getMeshBoundingBox /* , convertMesh */} from '@loaders.gl/schema';\nimport {LASFile} from './laslaz-decoder';\nimport {getLASSchema} from './get-las-schema';\n\ntype LASChunk = {\n count: number;\n buffer: ArrayBuffer;\n hasMoreData: boolean;\n versionAsString?: string;\n isCompressed?: boolean;\n};\n\n/**\n * Parsing of .las file\n * @param arrayBuffer\n * @param options\n * @returns LASHeader\n */\nexport default function parseLAS(\n arrayBuffer: ArrayBuffer,\n options?: LASLoaderOptions\n): LASMesh | ArrowTable | ColumnarTable {\n return parseLASMesh(arrayBuffer, options);\n // This code breaks pointcloud example on the website\n // const mesh = parseLASMesh(arrayBuffer, options);\n // return convertMesh(mesh, options?.las?.shape || 'mesh') as LASMesh | ArrowTable | ColumnarTable;\n}\n\n/**\n * Parsing of .las file\n * @param arrayBuffer\n * @param options\n * @returns LASHeader\n */\nfunction parseLASMesh(arrayBuffer: ArrayBuffer, options: LASLoaderOptions = {}): LASMesh {\n let pointIndex: number = 0;\n\n let positions: Float32Array | Float64Array;\n let colors: Uint8Array | null;\n let intensities: Uint16Array;\n let classifications: Uint8Array;\n let originalHeader: any;\n\n const lasMesh: LASMesh = {\n loader: 'las',\n loaderData: {} as LASHeader,\n // shape: 'mesh',\n schema: new Schema([]),\n header: {\n vertexCount: 0,\n boundingBox: [\n [0, 0, 0],\n [0, 0, 0]\n ]\n },\n attributes: {},\n topology: 'point-list',\n mode: 0 // GL.POINTS\n };\n\n /* eslint-disable max-statements */\n // @ts-ignore Possibly undefined\n parseLASChunked(arrayBuffer, options.las?.skip, (decoder: any = {}, lasHeader: LASHeader) => {\n if (!originalHeader) {\n originalHeader = lasHeader;\n const total = lasHeader.totalToRead;\n\n const PositionsType = options.las?.fp64 ? Float64Array : Float32Array;\n positions = new PositionsType(total * 3);\n // laslaz-decoder.js `pointFormatReaders`\n colors = lasHeader.pointsFormatId >= 2 ? new Uint8Array(total * 4) : null;\n intensities = new Uint16Array(total);\n classifications = new Uint8Array(total);\n\n lasMesh.loaderData = lasHeader;\n lasMesh.attributes = {\n POSITION: {value: positions, size: 3},\n // non-gltf attributes, use non-capitalized names for now\n intensity: {value: intensities, size: 1},\n classification: {value: classifications, size: 1}\n };\n\n if (colors) {\n lasMesh.attributes.COLOR_0 = {value: colors, size: 4};\n }\n }\n\n const batchSize = decoder.pointsCount;\n const {\n scale: [scaleX, scaleY, scaleZ],\n offset: [offsetX, offsetY, offsetZ]\n } = lasHeader;\n\n const twoByteColor = detectTwoByteColors(decoder, batchSize, options.las?.colorDepth);\n\n for (let i = 0; i < batchSize; i++) {\n const {position, color, intensity, classification} = decoder.getPoint(i);\n\n positions[pointIndex * 3] = position[0] * scaleX + offsetX;\n positions[pointIndex * 3 + 1] = position[1] * scaleY + offsetY;\n positions[pointIndex * 3 + 2] = position[2] * scaleZ + offsetZ;\n\n if (color && colors) {\n if (twoByteColor) {\n colors[pointIndex * 4] = color[0] / 256;\n colors[pointIndex * 4 + 1] = color[1] / 256;\n colors[pointIndex * 4 + 2] = color[2] / 256;\n } else {\n colors[pointIndex * 4] = color[0];\n colors[pointIndex * 4 + 1] = color[1];\n colors[pointIndex * 4 + 2] = color[2];\n }\n colors[pointIndex * 4 + 3] = 255;\n }\n\n intensities[pointIndex] = intensity;\n classifications[pointIndex] = classification;\n\n pointIndex++;\n }\n\n const meshBatch = {\n ...lasMesh,\n header: {\n vertexCount: lasHeader.totalRead\n },\n progress: lasHeader.totalRead / lasHeader.totalToRead\n };\n\n options?.onProgress?.(meshBatch);\n });\n /* eslint-enable max-statements */\n\n lasMesh.header = {\n vertexCount: originalHeader.totalToRead,\n boundingBox: getMeshBoundingBox(lasMesh?.attributes || {})\n };\n\n if (lasMesh) {\n lasMesh.schema = getLASSchema(lasMesh.loaderData, lasMesh.attributes);\n }\n return lasMesh;\n}\n\n/**\n * parse laz data\n * @param rawData\n * @param skip\n * @param onParseData\n * @return parsed point cloud\n */\n/* eslint-enable max-statements */\nexport function parseLASChunked(rawData: ArrayBuffer, skip: number, onParseData: any = {}): void {\n const dataHandler = new LASFile(rawData);\n\n try {\n // open data\n dataHandler.open();\n\n const header = dataHandler.getHeader();\n // start loading\n const Unpacker = dataHandler.getUnpacker();\n\n const totalToRead = Math.ceil(header.pointsCount / Math.max(1, skip));\n header.totalToRead = totalToRead;\n let totalRead = 0;\n\n /* eslint-disable no-constant-condition */\n while (true) {\n const chunk: LASChunk = dataHandler.readData(1000 * 100, 0, skip);\n\n totalRead += chunk.count;\n\n header.totalRead = totalRead;\n header.versionAsString = chunk.versionAsString;\n header.isCompressed = chunk.isCompressed;\n\n const unpacker = new Unpacker(chunk.buffer, chunk.count, header);\n\n // surface unpacker and progress via call back\n // use unpacker.pointsCount and unpacker.getPoint(i) to handle data in app\n onParseData(unpacker, header);\n\n if (!chunk.hasMoreData || totalRead >= totalToRead) {\n break;\n }\n }\n } catch (e) {\n throw e;\n } finally {\n dataHandler.close();\n }\n}\n\n/**\n * @param decoder\n * @param batchSize\n * @param colorDepth\n * @returns boolean\n */\nfunction detectTwoByteColors(\n decoder: any = {},\n batchSize: number,\n colorDepth?: number | string\n): boolean {\n let twoByteColor = false;\n switch (colorDepth) {\n case 8:\n twoByteColor = false;\n break;\n case 16:\n twoByteColor = true;\n break;\n case 'auto':\n if (decoder.getPoint(0).color) {\n for (let i = 0; i < batchSize; i++) {\n const {color} = decoder.getPoint(i);\n // eslint-disable-next-line max-depth\n if (color[0] > 255 || color[1] > 255 || color[2] > 255) {\n twoByteColor = true;\n }\n }\n }\n break;\n default:\n // eslint-disable-next-line\n console.warn('las: illegal value for options.las.colorDepth');\n break;\n }\n return twoByteColor;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"parse-las.js","names":["_schema","require","_laslazDecoder","_getLasSchema","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","parseLAS","arrayBuffer","options","parseLASMesh","_options$las","undefined","pointIndex","positions","colors","intensities","classifications","originalHeader","lasMesh","loader","loaderData","schema","Schema","header","vertexCount","boundingBox","attributes","topology","mode","parseLASChunked","las","skip","_options$las3","_options$onProgress","decoder","lasHeader","_options$las2","total","totalToRead","PositionsType","fp64","Float64Array","Float32Array","pointsFormatId","Uint8Array","Uint16Array","POSITION","value","size","intensity","classification","COLOR_0","batchSize","pointsCount","_lasHeader$scale","_slicedToArray2","scale","scaleX","scaleY","scaleZ","_lasHeader$offset","offset","offsetX","offsetY","offsetZ","twoByteColor","detectTwoByteColors","colorDepth","_decoder$getPoint","getPoint","position","color","meshBatch","totalRead","progress","onProgress","call","getMeshBoundingBox","getLASSchema","rawData","onParseData","dataHandler","LASFile","open","getHeader","Unpacker","getUnpacker","Math","ceil","max","chunk","readData","count","versionAsString","isCompressed","unpacker","buffer","hasMoreData","e","close","_decoder$getPoint2","console","warn"],"sources":["../../../src/lib/parse-las.ts"],"sourcesContent":["// ported and es6-ified from https://github.com/verma/plasio/\nimport type {ArrowTable, ColumnarTable} from '@loaders.gl/schema';\nimport type {LASLoaderOptions} from '../las-loader';\nimport type {LASMesh, LASHeader} from './las-types';\nimport {Schema, getMeshBoundingBox /* , convertMesh */} from '@loaders.gl/schema';\nimport {LASFile} from './laslaz-decoder';\nimport {getLASSchema} from './get-las-schema';\n\ntype LASChunk = {\n count: number;\n buffer: ArrayBuffer;\n hasMoreData: boolean;\n versionAsString?: string;\n isCompressed?: boolean;\n};\n\n/**\n * Parsing of .las file\n * @param arrayBuffer\n * @param options\n * @returns LASHeader\n */\nexport default function parseLAS(\n arrayBuffer: ArrayBuffer,\n options?: LASLoaderOptions\n): LASMesh | ArrowTable | ColumnarTable {\n return parseLASMesh(arrayBuffer, options);\n // This code breaks pointcloud example on the website\n // const mesh = parseLASMesh(arrayBuffer, options);\n // return convertMesh(mesh, options?.las?.shape || 'mesh') as LASMesh | ArrowTable | ColumnarTable;\n}\n\n/**\n * Parsing of .las file\n * @param arrayBuffer\n * @param options\n * @returns LASHeader\n */\nfunction parseLASMesh(arrayBuffer: ArrayBuffer, options: LASLoaderOptions = {}): LASMesh {\n let pointIndex: number = 0;\n\n let positions: Float32Array | Float64Array;\n let colors: Uint8Array | null;\n let intensities: Uint16Array;\n let classifications: Uint8Array;\n let originalHeader: any;\n\n const lasMesh: LASMesh = {\n loader: 'las',\n loaderData: {} as LASHeader,\n // shape: 'mesh',\n schema: new Schema([]),\n header: {\n vertexCount: 0,\n boundingBox: [\n [0, 0, 0],\n [0, 0, 0]\n ]\n },\n attributes: {},\n topology: 'point-list',\n mode: 0 // GL.POINTS\n };\n\n /* eslint-disable max-statements */\n // @ts-ignore Possibly undefined\n parseLASChunked(arrayBuffer, options.las?.skip, (decoder: any = {}, lasHeader: LASHeader) => {\n if (!originalHeader) {\n originalHeader = lasHeader;\n const total = lasHeader.totalToRead;\n\n const PositionsType = options.las?.fp64 ? Float64Array : Float32Array;\n positions = new PositionsType(total * 3);\n // laslaz-decoder.js `pointFormatReaders`\n colors = lasHeader.pointsFormatId >= 2 ? new Uint8Array(total * 4) : null;\n intensities = new Uint16Array(total);\n classifications = new Uint8Array(total);\n\n lasMesh.loaderData = lasHeader;\n lasMesh.attributes = {\n POSITION: {value: positions, size: 3},\n // non-gltf attributes, use non-capitalized names for now\n intensity: {value: intensities, size: 1},\n classification: {value: classifications, size: 1}\n };\n\n if (colors) {\n lasMesh.attributes.COLOR_0 = {value: colors, size: 4};\n }\n }\n\n const batchSize = decoder.pointsCount;\n const {\n scale: [scaleX, scaleY, scaleZ],\n offset: [offsetX, offsetY, offsetZ]\n } = lasHeader;\n\n const twoByteColor = detectTwoByteColors(decoder, batchSize, options.las?.colorDepth);\n\n for (let i = 0; i < batchSize; i++) {\n const {position, color, intensity, classification} = decoder.getPoint(i);\n\n positions[pointIndex * 3] = position[0] * scaleX + offsetX;\n positions[pointIndex * 3 + 1] = position[1] * scaleY + offsetY;\n positions[pointIndex * 3 + 2] = position[2] * scaleZ + offsetZ;\n\n if (color && colors) {\n if (twoByteColor) {\n colors[pointIndex * 4] = color[0] / 256;\n colors[pointIndex * 4 + 1] = color[1] / 256;\n colors[pointIndex * 4 + 2] = color[2] / 256;\n } else {\n colors[pointIndex * 4] = color[0];\n colors[pointIndex * 4 + 1] = color[1];\n colors[pointIndex * 4 + 2] = color[2];\n }\n colors[pointIndex * 4 + 3] = 255;\n }\n\n intensities[pointIndex] = intensity;\n classifications[pointIndex] = classification;\n\n pointIndex++;\n }\n\n const meshBatch = {\n ...lasMesh,\n header: {\n vertexCount: lasHeader.totalRead\n },\n progress: lasHeader.totalRead / lasHeader.totalToRead\n };\n\n options?.onProgress?.(meshBatch);\n });\n /* eslint-enable max-statements */\n\n lasMesh.header = {\n vertexCount: originalHeader.totalToRead,\n boundingBox: getMeshBoundingBox(lasMesh?.attributes || {})\n };\n\n if (lasMesh) {\n lasMesh.schema = getLASSchema(lasMesh.loaderData, lasMesh.attributes);\n }\n return lasMesh;\n}\n\n/**\n * parse laz data\n * @param rawData\n * @param skip\n * @param onParseData\n * @return parsed point cloud\n */\n/* eslint-enable max-statements */\nexport function parseLASChunked(rawData: ArrayBuffer, skip: number, onParseData: any = {}): void {\n const dataHandler = new LASFile(rawData);\n\n try {\n // open data\n dataHandler.open();\n\n const header = dataHandler.getHeader();\n // start loading\n const Unpacker = dataHandler.getUnpacker();\n\n const totalToRead = Math.ceil(header.pointsCount / Math.max(1, skip));\n header.totalToRead = totalToRead;\n let totalRead = 0;\n\n /* eslint-disable no-constant-condition */\n while (true) {\n const chunk: LASChunk = dataHandler.readData(1000 * 100, 0, skip);\n\n totalRead += chunk.count;\n\n header.totalRead = totalRead;\n header.versionAsString = chunk.versionAsString;\n header.isCompressed = chunk.isCompressed;\n\n const unpacker = new Unpacker(chunk.buffer, chunk.count, header);\n\n // surface unpacker and progress via call back\n // use unpacker.pointsCount and unpacker.getPoint(i) to handle data in app\n onParseData(unpacker, header);\n\n if (!chunk.hasMoreData || totalRead >= totalToRead) {\n break;\n }\n }\n } catch (e) {\n throw e;\n } finally {\n dataHandler.close();\n }\n}\n\n/**\n * @param decoder\n * @param batchSize\n * @param colorDepth\n * @returns boolean\n */\nfunction detectTwoByteColors(\n decoder: any = {},\n batchSize: number,\n colorDepth?: number | string\n): boolean {\n let twoByteColor = false;\n switch (colorDepth) {\n case 8:\n twoByteColor = false;\n break;\n case 16:\n twoByteColor = true;\n break;\n case 'auto':\n if (decoder.getPoint(0).color) {\n for (let i = 0; i < batchSize; i++) {\n const {color} = decoder.getPoint(i);\n // eslint-disable-next-line max-depth\n if (color[0] > 255 || color[1] > 255 || color[2] > 255) {\n twoByteColor = true;\n }\n }\n }\n break;\n default:\n // eslint-disable-next-line\n console.warn('las: illegal value for options.las.colorDepth');\n break;\n }\n return twoByteColor;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"las-worker.js","names":["createLoaderWorker","LASLoader"],"sources":["../../../src/workers/las-worker.ts"],"sourcesContent":["import {createLoaderWorker} from '@loaders.gl/loader-utils';\nimport {LASLoader} from '../index';\n\ncreateLoaderWorker(LASLoader);\n"],"mappings":";;AAAA;AACA;AAEA,IAAAA,+BAAkB,EAACC,gBAAS,CAAC"}
1
+ {"version":3,"file":"las-worker.js","names":["_loaderUtils","require","_index","createLoaderWorker","LASLoader"],"sources":["../../../src/workers/las-worker.ts"],"sourcesContent":["import {createLoaderWorker} from '@loaders.gl/loader-utils';\nimport {LASLoader} from '../index';\n\ncreateLoaderWorker(LASLoader);\n"],"mappings":";;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEA,IAAAE,+BAAkB,EAACC,gBAAS,CAAC"}
@@ -1,4 +1,3 @@
1
-
2
1
  const moduleExports = require('./index');
3
2
  globalThis.loaders = globalThis.loaders || {};
4
3
  module.exports = Object.assign(globalThis.loaders, moduleExports);
@@ -1 +1 @@
1
- {"version":3,"file":"bundle.js","names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"sources":["../../src/bundle.ts"],"sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"mappings":";AACA,MAAMA,aAAa,GAAGC,OAAO,CAAC,SAAS,CAAC;AACxCC,UAAU,CAACC,OAAO,GAAGD,UAAU,CAACC,OAAO,IAAI,CAAC,CAAC;AAC7CC,MAAM,CAACC,OAAO,GAAGC,MAAM,CAACC,MAAM,CAACL,UAAU,CAACC,OAAO,EAAEH,aAAa,CAAC"}
1
+ {"version":3,"file":"bundle.js","names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"sources":["../../src/bundle.ts"],"sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"mappings":"AACA,MAAMA,aAAa,GAAGC,OAAO,CAAC,SAAS,CAAC;AACxCC,UAAU,CAACC,OAAO,GAAGD,UAAU,CAACC,OAAO,IAAI,CAAC,CAAC;AAC7CC,MAAM,CAACC,OAAO,GAAGC,MAAM,CAACC,MAAM,CAACL,UAAU,CAACC,OAAO,EAAEH,aAAa,CAAC"}
package/dist/esm/index.js CHANGED
@@ -1,8 +1,6 @@
1
1
  import { LASLoader as LASWorkerLoader } from './las-loader';
2
2
  import parseLAS from './lib/parse-las';
3
-
4
3
  export { LASWorkerLoader };
5
-
6
4
  export const LASLoader = {
7
5
  ...LASWorkerLoader,
8
6
  parse: async (arrayBuffer, options) => parseLAS(arrayBuffer, options),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["LASLoader","LASWorkerLoader","parseLAS","parse","arrayBuffer","options","parseSync","_typecheckLoader"],"sources":["../../src/index.ts"],"sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport type {LASLoaderOptions} from './las-loader';\nimport {LASLoader as LASWorkerLoader} from './las-loader';\nimport parseLAS from './lib/parse-las';\n\n// LASLoader\n\nexport type {LASLoaderOptions};\nexport {LASWorkerLoader};\n\n/**\n * Loader for the LAS (LASer) point cloud format\n */\nexport const LASLoader = {\n ...LASWorkerLoader,\n parse: async (arrayBuffer: ArrayBuffer, options?: LASLoaderOptions) =>\n parseLAS(arrayBuffer, options),\n parseSync: (arrayBuffer: ArrayBuffer, options?: LASLoaderOptions) =>\n parseLAS(arrayBuffer, options)\n};\n\nexport const _typecheckLoader: LoaderWithParser = LASLoader;\n"],"mappings":"AAEA,SAAQA,SAAS,IAAIC,eAAe,QAAO,cAAc;AACzD,OAAOC,QAAQ,MAAM,iBAAiB;;AAKtC,SAAQD,eAAe;;AAKvB,OAAO,MAAMD,SAAS,GAAG;EACvB,GAAGC,eAAe;EAClBE,KAAK,EAAE,OAAOC,WAAwB,EAAEC,OAA0B,KAChEH,QAAQ,CAACE,WAAW,EAAEC,OAAO,CAAC;EAChCC,SAAS,EAAE,CAACF,WAAwB,EAAEC,OAA0B,KAC9DH,QAAQ,CAACE,WAAW,EAAEC,OAAO;AACjC,CAAC;AAED,OAAO,MAAME,gBAAkC,GAAGP,SAAS"}
1
+ {"version":3,"file":"index.js","names":["LASLoader","LASWorkerLoader","parseLAS","parse","arrayBuffer","options","parseSync","_typecheckLoader"],"sources":["../../src/index.ts"],"sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport type {LASLoaderOptions} from './las-loader';\nimport {LASLoader as LASWorkerLoader} from './las-loader';\nimport parseLAS from './lib/parse-las';\n\n// LASLoader\n\nexport type {LASLoaderOptions};\nexport {LASWorkerLoader};\n\n/**\n * Loader for the LAS (LASer) point cloud format\n */\nexport const LASLoader = {\n ...LASWorkerLoader,\n parse: async (arrayBuffer: ArrayBuffer, options?: LASLoaderOptions) =>\n parseLAS(arrayBuffer, options),\n parseSync: (arrayBuffer: ArrayBuffer, options?: LASLoaderOptions) =>\n parseLAS(arrayBuffer, options)\n};\n\nexport const _typecheckLoader: LoaderWithParser = LASLoader;\n"],"mappings":"AAEA,SAAQA,SAAS,IAAIC,eAAe,QAAO,cAAc;AACzD,OAAOC,QAAQ,MAAM,iBAAiB;AAKtC,SAAQD,eAAe;AAKvB,OAAO,MAAMD,SAAS,GAAG;EACvB,GAAGC,eAAe;EAClBE,KAAK,EAAE,MAAAA,CAAOC,WAAwB,EAAEC,OAA0B,KAChEH,QAAQ,CAACE,WAAW,EAAEC,OAAO,CAAC;EAChCC,SAAS,EAAEA,CAACF,WAAwB,EAAEC,OAA0B,KAC9DH,QAAQ,CAACE,WAAW,EAAEC,OAAO;AACjC,CAAC;AAED,OAAO,MAAME,gBAAkC,GAAGP,SAAS"}
@@ -1,6 +1,4 @@
1
-
2
-
3
- const VERSION = typeof "3.4.0-alpha.1" !== 'undefined' ? "3.4.0-alpha.1" : 'latest';
1
+ const VERSION = typeof "3.4.0-alpha.3" !== 'undefined' ? "3.4.0-alpha.3" : 'latest';
4
2
  const DEFAULT_LAS_OPTIONS = {
5
3
  las: {
6
4
  shape: 'mesh',
@@ -9,7 +7,6 @@ const DEFAULT_LAS_OPTIONS = {
9
7
  colorDepth: 8
10
8
  }
11
9
  };
12
-
13
10
  export const LASLoader = {
14
11
  name: 'LAS',
15
12
  id: 'las',
@@ -1 +1 @@
1
- {"version":3,"file":"las-loader.js","names":["VERSION","DEFAULT_LAS_OPTIONS","las","shape","fp64","skip","colorDepth","LASLoader","name","id","module","version","worker","extensions","mimeTypes","text","binary","tests","options","_typecheckLoader"],"sources":["../../src/las-loader.ts"],"sourcesContent":["// LASER (LAS) FILE FORMAT\nimport type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type LASLoaderOptions = LoaderOptions & {\n las?: {\n shape?: 'mesh' | 'columnar-table' | 'arrow-table';\n fp64?: boolean;\n skip?: number;\n colorDepth?: number | string;\n };\n};\n\nconst DEFAULT_LAS_OPTIONS: LASLoaderOptions = {\n las: {\n shape: 'mesh',\n fp64: false,\n skip: 1,\n colorDepth: 8\n }\n};\n\n/**\n * Loader for the LAS (LASer) point cloud format\n */\nexport const LASLoader = {\n name: 'LAS',\n id: 'las',\n module: 'las',\n version: VERSION,\n worker: true,\n extensions: ['las', 'laz'], // LAZ is the \"compressed\" flavor of LAS,\n mimeTypes: ['application/octet-stream'], // TODO - text version?\n text: true,\n binary: true,\n tests: ['LAS'],\n options: DEFAULT_LAS_OPTIONS\n};\n\nexport const _typecheckLoader: Loader = LASLoader;\n"],"mappings":";;AAKA,MAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;AAW3E,MAAMC,mBAAqC,GAAG;EAC5CC,GAAG,EAAE;IACHC,KAAK,EAAE,MAAM;IACbC,IAAI,EAAE,KAAK;IACXC,IAAI,EAAE,CAAC;IACPC,UAAU,EAAE;EACd;AACF,CAAC;;AAKD,OAAO,MAAMC,SAAS,GAAG;EACvBC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEX,OAAO;EAChBY,MAAM,EAAE,IAAI;EACZC,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;EAC1BC,SAAS,EAAE,CAAC,0BAA0B,CAAC;EACvCC,IAAI,EAAE,IAAI;EACVC,MAAM,EAAE,IAAI;EACZC,KAAK,EAAE,CAAC,KAAK,CAAC;EACdC,OAAO,EAAEjB;AACX,CAAC;AAED,OAAO,MAAMkB,gBAAwB,GAAGZ,SAAS"}
1
+ {"version":3,"file":"las-loader.js","names":["VERSION","DEFAULT_LAS_OPTIONS","las","shape","fp64","skip","colorDepth","LASLoader","name","id","module","version","worker","extensions","mimeTypes","text","binary","tests","options","_typecheckLoader"],"sources":["../../src/las-loader.ts"],"sourcesContent":["// LASER (LAS) FILE FORMAT\nimport type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type LASLoaderOptions = LoaderOptions & {\n las?: {\n shape?: 'mesh' | 'columnar-table' | 'arrow-table';\n fp64?: boolean;\n skip?: number;\n colorDepth?: number | string;\n };\n onProgress?: Function;\n};\n\nconst DEFAULT_LAS_OPTIONS: LASLoaderOptions = {\n las: {\n shape: 'mesh',\n fp64: false,\n skip: 1,\n colorDepth: 8\n }\n};\n\n/**\n * Loader for the LAS (LASer) point cloud format\n */\nexport const LASLoader = {\n name: 'LAS',\n id: 'las',\n module: 'las',\n version: VERSION,\n worker: true,\n extensions: ['las', 'laz'], // LAZ is the \"compressed\" flavor of LAS,\n mimeTypes: ['application/octet-stream'], // TODO - text version?\n text: true,\n binary: true,\n tests: ['LAS'],\n options: DEFAULT_LAS_OPTIONS\n};\n\nexport const _typecheckLoader: Loader = LASLoader;\n"],"mappings":"AAKA,MAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;AAY3E,MAAMC,mBAAqC,GAAG;EAC5CC,GAAG,EAAE;IACHC,KAAK,EAAE,MAAM;IACbC,IAAI,EAAE,KAAK;IACXC,IAAI,EAAE,CAAC;IACPC,UAAU,EAAE;EACd;AACF,CAAC;AAKD,OAAO,MAAMC,SAAS,GAAG;EACvBC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEX,OAAO;EAChBY,MAAM,EAAE,IAAI;EACZC,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;EAC1BC,SAAS,EAAE,CAAC,0BAA0B,CAAC;EACvCC,IAAI,EAAE,IAAI;EACVC,MAAM,EAAE,IAAI;EACZC,KAAK,EAAE,CAAC,KAAK,CAAC;EACdC,OAAO,EAAEjB;AACX,CAAC;AAED,OAAO,MAAMkB,gBAAwB,GAAGZ,SAAS"}
@@ -4,7 +4,6 @@ export function getLASSchema(lasHeader, attributes) {
4
4
  const schema = deduceMeshSchema(attributes, metadataMap);
5
5
  return schema;
6
6
  }
7
-
8
7
  export function makeMetadataFromLasHeader(lasHeader) {
9
8
  const metadataMap = new Map();
10
9
  metadataMap.set('las_pointsOffset', lasHeader.pointsOffset.toString(10));
@@ -1 +1 @@
1
- {"version":3,"file":"get-las-schema.js","names":["deduceMeshSchema","getLASSchema","lasHeader","attributes","metadataMap","makeMetadataFromLasHeader","schema","Map","set","pointsOffset","toString","pointsFormatId","pointsStructSize","pointsCount","JSON","stringify","scale","offset","maxs","undefined","mins","totalToRead","totalRead","versionAsString","isCompressed"],"sources":["../../../src/lib/get-las-schema.ts"],"sourcesContent":["import {Schema, MeshAttributes, deduceMeshSchema} from '@loaders.gl/schema';\nimport type {LASHeader} from './las-types';\n\n/**\n * Gets schema from PLY header\n * @param lasHeader\n * @param metadata\n * @returns Schema\n */\nexport function getLASSchema(lasHeader: LASHeader, attributes: MeshAttributes): Schema {\n const metadataMap = makeMetadataFromLasHeader(lasHeader);\n const schema = deduceMeshSchema(attributes, metadataMap);\n return schema;\n}\n\n/**\n * Make arrow like schema metadata by LASHeader properties\n * @param lasHeader\n * @returns\n */\nexport function makeMetadataFromLasHeader(lasHeader: LASHeader): Map<string, string> {\n const metadataMap = new Map();\n metadataMap.set('las_pointsOffset', lasHeader.pointsOffset.toString(10));\n metadataMap.set('las_pointsFormatId', lasHeader.pointsFormatId.toString(10));\n metadataMap.set('las_pointsStructSize', lasHeader.pointsStructSize.toString(10));\n metadataMap.set('las_pointsCount', lasHeader.pointsCount.toString(10));\n metadataMap.set('las_scale', JSON.stringify(lasHeader.scale));\n metadataMap.set('las_offset', JSON.stringify(lasHeader.offset));\n if (lasHeader.maxs !== undefined) {\n metadataMap.set('las_maxs', JSON.stringify(lasHeader.maxs));\n }\n if (lasHeader.mins !== undefined) {\n metadataMap.set('las_mins', JSON.stringify(lasHeader.mins));\n }\n metadataMap.set('las_totalToRead', lasHeader.totalToRead.toString(10));\n metadataMap.set('las_pointsFortotalReadmatId', lasHeader.totalRead.toString(10));\n if (lasHeader.versionAsString !== undefined) {\n metadataMap.set('las_versionAsString', lasHeader.versionAsString);\n }\n if (lasHeader.isCompressed !== undefined) {\n metadataMap.set('las_isCompressed', lasHeader.isCompressed.toString());\n }\n return metadataMap;\n}\n"],"mappings":"AAAA,SAAgCA,gBAAgB,QAAO,oBAAoB;AAS3E,OAAO,SAASC,YAAY,CAACC,SAAoB,EAAEC,UAA0B,EAAU;EACrF,MAAMC,WAAW,GAAGC,yBAAyB,CAACH,SAAS,CAAC;EACxD,MAAMI,MAAM,GAAGN,gBAAgB,CAACG,UAAU,EAAEC,WAAW,CAAC;EACxD,OAAOE,MAAM;AACf;;AAOA,OAAO,SAASD,yBAAyB,CAACH,SAAoB,EAAuB;EACnF,MAAME,WAAW,GAAG,IAAIG,GAAG,EAAE;EAC7BH,WAAW,CAACI,GAAG,CAAC,kBAAkB,EAAEN,SAAS,CAACO,YAAY,CAACC,QAAQ,CAAC,EAAE,CAAC,CAAC;EACxEN,WAAW,CAACI,GAAG,CAAC,oBAAoB,EAAEN,SAAS,CAACS,cAAc,CAACD,QAAQ,CAAC,EAAE,CAAC,CAAC;EAC5EN,WAAW,CAACI,GAAG,CAAC,sBAAsB,EAAEN,SAAS,CAACU,gBAAgB,CAACF,QAAQ,CAAC,EAAE,CAAC,CAAC;EAChFN,WAAW,CAACI,GAAG,CAAC,iBAAiB,EAAEN,SAAS,CAACW,WAAW,CAACH,QAAQ,CAAC,EAAE,CAAC,CAAC;EACtEN,WAAW,CAACI,GAAG,CAAC,WAAW,EAAEM,IAAI,CAACC,SAAS,CAACb,SAAS,CAACc,KAAK,CAAC,CAAC;EAC7DZ,WAAW,CAACI,GAAG,CAAC,YAAY,EAAEM,IAAI,CAACC,SAAS,CAACb,SAAS,CAACe,MAAM,CAAC,CAAC;EAC/D,IAAIf,SAAS,CAACgB,IAAI,KAAKC,SAAS,EAAE;IAChCf,WAAW,CAACI,GAAG,CAAC,UAAU,EAAEM,IAAI,CAACC,SAAS,CAACb,SAAS,CAACgB,IAAI,CAAC,CAAC;EAC7D;EACA,IAAIhB,SAAS,CAACkB,IAAI,KAAKD,SAAS,EAAE;IAChCf,WAAW,CAACI,GAAG,CAAC,UAAU,EAAEM,IAAI,CAACC,SAAS,CAACb,SAAS,CAACkB,IAAI,CAAC,CAAC;EAC7D;EACAhB,WAAW,CAACI,GAAG,CAAC,iBAAiB,EAAEN,SAAS,CAACmB,WAAW,CAACX,QAAQ,CAAC,EAAE,CAAC,CAAC;EACtEN,WAAW,CAACI,GAAG,CAAC,6BAA6B,EAAEN,SAAS,CAACoB,SAAS,CAACZ,QAAQ,CAAC,EAAE,CAAC,CAAC;EAChF,IAAIR,SAAS,CAACqB,eAAe,KAAKJ,SAAS,EAAE;IAC3Cf,WAAW,CAACI,GAAG,CAAC,qBAAqB,EAAEN,SAAS,CAACqB,eAAe,CAAC;EACnE;EACA,IAAIrB,SAAS,CAACsB,YAAY,KAAKL,SAAS,EAAE;IACxCf,WAAW,CAACI,GAAG,CAAC,kBAAkB,EAAEN,SAAS,CAACsB,YAAY,CAACd,QAAQ,EAAE,CAAC;EACxE;EACA,OAAON,WAAW;AACpB"}
1
+ {"version":3,"file":"get-las-schema.js","names":["deduceMeshSchema","getLASSchema","lasHeader","attributes","metadataMap","makeMetadataFromLasHeader","schema","Map","set","pointsOffset","toString","pointsFormatId","pointsStructSize","pointsCount","JSON","stringify","scale","offset","maxs","undefined","mins","totalToRead","totalRead","versionAsString","isCompressed"],"sources":["../../../src/lib/get-las-schema.ts"],"sourcesContent":["import {Schema, MeshAttributes, deduceMeshSchema} from '@loaders.gl/schema';\nimport type {LASHeader} from './las-types';\n\n/**\n * Gets schema from PLY header\n * @param lasHeader\n * @param metadata\n * @returns Schema\n */\nexport function getLASSchema(lasHeader: LASHeader, attributes: MeshAttributes): Schema {\n const metadataMap = makeMetadataFromLasHeader(lasHeader);\n const schema = deduceMeshSchema(attributes, metadataMap);\n return schema;\n}\n\n/**\n * Make arrow like schema metadata by LASHeader properties\n * @param lasHeader\n * @returns\n */\nexport function makeMetadataFromLasHeader(lasHeader: LASHeader): Map<string, string> {\n const metadataMap = new Map();\n metadataMap.set('las_pointsOffset', lasHeader.pointsOffset.toString(10));\n metadataMap.set('las_pointsFormatId', lasHeader.pointsFormatId.toString(10));\n metadataMap.set('las_pointsStructSize', lasHeader.pointsStructSize.toString(10));\n metadataMap.set('las_pointsCount', lasHeader.pointsCount.toString(10));\n metadataMap.set('las_scale', JSON.stringify(lasHeader.scale));\n metadataMap.set('las_offset', JSON.stringify(lasHeader.offset));\n if (lasHeader.maxs !== undefined) {\n metadataMap.set('las_maxs', JSON.stringify(lasHeader.maxs));\n }\n if (lasHeader.mins !== undefined) {\n metadataMap.set('las_mins', JSON.stringify(lasHeader.mins));\n }\n metadataMap.set('las_totalToRead', lasHeader.totalToRead.toString(10));\n metadataMap.set('las_pointsFortotalReadmatId', lasHeader.totalRead.toString(10));\n if (lasHeader.versionAsString !== undefined) {\n metadataMap.set('las_versionAsString', lasHeader.versionAsString);\n }\n if (lasHeader.isCompressed !== undefined) {\n metadataMap.set('las_isCompressed', lasHeader.isCompressed.toString());\n }\n return metadataMap;\n}\n"],"mappings":"AAAA,SAAgCA,gBAAgB,QAAO,oBAAoB;AAS3E,OAAO,SAASC,YAAYA,CAACC,SAAoB,EAAEC,UAA0B,EAAU;EACrF,MAAMC,WAAW,GAAGC,yBAAyB,CAACH,SAAS,CAAC;EACxD,MAAMI,MAAM,GAAGN,gBAAgB,CAACG,UAAU,EAAEC,WAAW,CAAC;EACxD,OAAOE,MAAM;AACf;AAOA,OAAO,SAASD,yBAAyBA,CAACH,SAAoB,EAAuB;EACnF,MAAME,WAAW,GAAG,IAAIG,GAAG,EAAE;EAC7BH,WAAW,CAACI,GAAG,CAAC,kBAAkB,EAAEN,SAAS,CAACO,YAAY,CAACC,QAAQ,CAAC,EAAE,CAAC,CAAC;EACxEN,WAAW,CAACI,GAAG,CAAC,oBAAoB,EAAEN,SAAS,CAACS,cAAc,CAACD,QAAQ,CAAC,EAAE,CAAC,CAAC;EAC5EN,WAAW,CAACI,GAAG,CAAC,sBAAsB,EAAEN,SAAS,CAACU,gBAAgB,CAACF,QAAQ,CAAC,EAAE,CAAC,CAAC;EAChFN,WAAW,CAACI,GAAG,CAAC,iBAAiB,EAAEN,SAAS,CAACW,WAAW,CAACH,QAAQ,CAAC,EAAE,CAAC,CAAC;EACtEN,WAAW,CAACI,GAAG,CAAC,WAAW,EAAEM,IAAI,CAACC,SAAS,CAACb,SAAS,CAACc,KAAK,CAAC,CAAC;EAC7DZ,WAAW,CAACI,GAAG,CAAC,YAAY,EAAEM,IAAI,CAACC,SAAS,CAACb,SAAS,CAACe,MAAM,CAAC,CAAC;EAC/D,IAAIf,SAAS,CAACgB,IAAI,KAAKC,SAAS,EAAE;IAChCf,WAAW,CAACI,GAAG,CAAC,UAAU,EAAEM,IAAI,CAACC,SAAS,CAACb,SAAS,CAACgB,IAAI,CAAC,CAAC;EAC7D;EACA,IAAIhB,SAAS,CAACkB,IAAI,KAAKD,SAAS,EAAE;IAChCf,WAAW,CAACI,GAAG,CAAC,UAAU,EAAEM,IAAI,CAACC,SAAS,CAACb,SAAS,CAACkB,IAAI,CAAC,CAAC;EAC7D;EACAhB,WAAW,CAACI,GAAG,CAAC,iBAAiB,EAAEN,SAAS,CAACmB,WAAW,CAACX,QAAQ,CAAC,EAAE,CAAC,CAAC;EACtEN,WAAW,CAACI,GAAG,CAAC,6BAA6B,EAAEN,SAAS,CAACoB,SAAS,CAACZ,QAAQ,CAAC,EAAE,CAAC,CAAC;EAChF,IAAIR,SAAS,CAACqB,eAAe,KAAKJ,SAAS,EAAE;IAC3Cf,WAAW,CAACI,GAAG,CAAC,qBAAqB,EAAEN,SAAS,CAACqB,eAAe,CAAC;EACnE;EACA,IAAIrB,SAAS,CAACsB,YAAY,KAAKL,SAAS,EAAE;IACxCf,WAAW,CAACI,GAAG,CAAC,kBAAkB,EAAEN,SAAS,CAACsB,YAAY,CAACd,QAAQ,EAAE,CAAC;EACxE;EACA,OAAON,WAAW;AACpB"}
@@ -1,5 +1,4 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
-
3
2
  import getModule from './libs/laz-perf';
4
3
  let Module = null;
5
4
  const POINT_FORMAT_READERS = {
@@ -34,7 +33,6 @@ const POINT_FORMAT_READERS = {
34
33
  };
35
34
  }
36
35
  };
37
-
38
36
  function readAs(buf) {
39
37
  let Type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
40
38
  let offset = arguments.length > 2 ? arguments[2] : undefined;
@@ -51,7 +49,6 @@ function readAs(buf) {
51
49
  }
52
50
  return ret;
53
51
  }
54
-
55
52
  function parseLASHeader(arraybuffer) {
56
53
  let start = 32 * 3 + 35;
57
54
  const o = {
@@ -70,7 +67,6 @@ function parseLASHeader(arraybuffer) {
70
67
  o.mins = [bounds[1], bounds[3], bounds[5]];
71
68
  return o;
72
69
  }
73
-
74
70
  class LASLoader {
75
71
  constructor(arraybuffer) {
76
72
  _defineProperty(this, "arraybuffer", void 0);
@@ -91,7 +87,6 @@ class LASLoader {
91
87
  });
92
88
  this.arraybuffer = arraybuffer;
93
89
  }
94
-
95
90
  open() {
96
91
  return true;
97
92
  }
@@ -99,7 +94,6 @@ class LASLoader {
99
94
  this.header = parseLASHeader(this.arraybuffer);
100
95
  return this.header;
101
96
  }
102
-
103
97
  readData(count, skip) {
104
98
  const {
105
99
  header,
@@ -149,9 +143,7 @@ class LASLoader {
149
143
  return true;
150
144
  }
151
145
  }
152
-
153
146
  class LAZLoader {
154
-
155
147
  constructor(arraybuffer) {
156
148
  _defineProperty(this, "arraybuffer", void 0);
157
149
  _defineProperty(this, "instance", null);
@@ -161,7 +153,6 @@ class LAZLoader {
161
153
  Module = getModule();
162
154
  }
163
155
  }
164
-
165
156
  open() {
166
157
  try {
167
158
  const {
@@ -228,7 +219,6 @@ class LAZLoader {
228
219
  throw new Error("Failed to read data: ".concat(error.message));
229
220
  }
230
221
  }
231
-
232
222
  close() {
233
223
  try {
234
224
  if (this.instance !== null) {
@@ -241,7 +231,6 @@ class LAZLoader {
241
231
  }
242
232
  }
243
233
  }
244
-
245
234
  class LASDecoder {
246
235
  constructor(buffer, len, header) {
247
236
  _defineProperty(this, "arrayb", void 0);
@@ -261,7 +250,6 @@ class LASDecoder {
261
250
  this.mins = header.mins;
262
251
  this.maxs = header.maxs;
263
252
  }
264
-
265
253
  getPoint(index) {
266
254
  if (index < 0 || index >= this.pointsCount) {
267
255
  throw new Error('Point index out of range');
@@ -270,7 +258,6 @@ class LASDecoder {
270
258
  return this.decoder(dv);
271
259
  }
272
260
  }
273
-
274
261
  export class LASFile {
275
262
  constructor(arraybuffer) {
276
263
  _defineProperty(this, "arraybuffer", void 0);
@@ -290,7 +277,6 @@ export class LASFile {
290
277
  }
291
278
  this.loader = this.isCompressed ? new LAZLoader(this.arraybuffer) : new LASLoader(this.arraybuffer);
292
279
  }
293
-
294
280
  determineFormat() {
295
281
  const formatId = readAs(this.arraybuffer, Uint8Array, 32 * 3 + 8);
296
282
  const bit7 = (formatId & 0x80) >> 7;
@@ -301,14 +287,12 @@ export class LASFile {
301
287
  this.formatId = formatId & 0x3f;
302
288
  this.isCompressed = bit7 === 1 || bit6 === 1;
303
289
  }
304
-
305
290
  determineVersion() {
306
291
  const ver = new Int8Array(this.arraybuffer, 24, 2);
307
292
  this.version = ver[0] * 10 + ver[1];
308
293
  this.versionAsString = "".concat(ver[0], ".").concat(ver[1]);
309
294
  return this.version;
310
295
  }
311
-
312
296
  open() {
313
297
  if (this.loader.open()) {
314
298
  this.isOpen = true;
@@ -317,11 +301,9 @@ export class LASFile {
317
301
  getHeader() {
318
302
  return this.loader.getHeader();
319
303
  }
320
-
321
304
  readData(count, start, skip) {
322
305
  return this.loader.readData(count, start, skip);
323
306
  }
324
-
325
307
  close() {
326
308
  if (this.loader.close()) {
327
309
  this.isOpen = false;
@@ -1 +1 @@
1
- {"version":3,"file":"laslaz-decoder.js","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"],"sources":["../../../src/lib/laslaz-decoder.ts"],"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"],"mappings":"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"}
1
+ {"version":3,"file":"laslaz-decoder.js","names":["getModule","Module","POINT_FORMAT_READERS","dv","position","getInt32","intensity","getUint16","classification","getUint8","color","readAs","buf","Type","arguments","length","undefined","offset","count","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","_defineProperty","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","concat","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"],"sources":["../../../src/lib/laslaz-decoder.ts"],"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"],"mappings":"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"}