@loaders.gl/las 3.1.0-alpha.4 → 3.1.0-beta.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.
Files changed (62) hide show
  1. package/dist/bundle.d.ts +2 -0
  2. package/dist/bundle.d.ts.map +1 -0
  3. package/dist/bundle.js +19596 -0
  4. package/dist/es5/bundle.js +1 -1
  5. package/dist/es5/bundle.js.map +1 -1
  6. package/dist/es5/index.js +6 -40
  7. package/dist/es5/index.js.map +1 -1
  8. package/dist/es5/las-loader.js +4 -4
  9. package/dist/es5/las-loader.js.map +1 -1
  10. package/dist/es5/lib/get-las-schema.js +3 -3
  11. package/dist/es5/lib/get-las-schema.js.map +1 -1
  12. package/dist/es5/lib/laslaz-decoder.js +207 -234
  13. package/dist/es5/lib/laslaz-decoder.js.map +1 -1
  14. package/dist/es5/lib/libs/laz-perf.js +2 -0
  15. package/dist/es5/lib/libs/laz-perf.js.map +1 -0
  16. package/dist/es5/lib/parse-las.js +42 -66
  17. package/dist/es5/lib/parse-las.js.map +1 -1
  18. package/dist/es5/workers/las-worker.js +7 -3
  19. package/dist/es5/workers/las-worker.js.map +1 -0
  20. package/dist/esm/las-loader.js +1 -1
  21. package/dist/esm/las-loader.js.map +1 -1
  22. package/dist/esm/lib/laslaz-decoder.js +6 -6
  23. package/dist/esm/lib/laslaz-decoder.js.map +1 -1
  24. package/dist/esm/lib/libs/laz-perf.js +2 -0
  25. package/dist/esm/lib/libs/laz-perf.js.map +1 -0
  26. package/dist/esm/workers/las-worker.js +3 -3
  27. package/dist/esm/workers/las-worker.js.map +1 -0
  28. package/dist/index.d.ts +25 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +18 -0
  31. package/dist/las-loader.d.ts +27 -0
  32. package/dist/las-loader.d.ts.map +1 -0
  33. package/dist/las-loader.js +31 -0
  34. package/dist/las-worker.js +19627 -2
  35. package/dist/lib/get-las-schema.d.ts +16 -0
  36. package/dist/lib/get-las-schema.d.ts.map +1 -0
  37. package/dist/lib/get-las-schema.js +46 -0
  38. package/dist/lib/las-types.d.ts +28 -0
  39. package/dist/lib/las-types.d.ts.map +1 -0
  40. package/dist/lib/las-types.js +2 -0
  41. package/dist/lib/laslaz-decoder.d.ts +134 -0
  42. package/dist/lib/laslaz-decoder.d.ts.map +1 -0
  43. package/dist/lib/laslaz-decoder.js +395 -0
  44. package/dist/lib/libs/laz-perf.d.ts +2 -0
  45. package/dist/lib/libs/laz-perf.d.ts.map +1 -0
  46. package/dist/lib/libs/laz-perf.js +19006 -0
  47. package/dist/lib/parse-las.d.ts +19 -0
  48. package/dist/lib/parse-las.d.ts.map +1 -0
  49. package/dist/lib/parse-las.js +189 -0
  50. package/dist/workers/las-worker.d.ts +2 -0
  51. package/dist/workers/las-worker.d.ts.map +1 -0
  52. package/dist/workers/las-worker.js +5 -0
  53. package/package.json +7 -8
  54. package/src/lib/laslaz-decoder.ts +1 -1
  55. package/src/lib/libs/laz-perf.ts +20615 -0
  56. package/src/workers/{las-worker.js → las-worker.ts} +0 -0
  57. package/dist/dist.min.js +0 -2
  58. package/dist/dist.min.js.map +0 -1
  59. package/dist/es5/libs/laz-perf.js +0 -19492
  60. package/dist/esm/libs/laz-perf.js +0 -19492
  61. package/dist/las-worker.js.map +0 -1
  62. package/src/libs/laz-perf.js +0 -19492
@@ -1,45 +1,34 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
8
6
  exports.default = parseLAS;
9
7
  exports.parseLASChunked = parseLASChunked;
10
8
 
11
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
-
13
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
14
-
15
9
  var _schema = require("@loaders.gl/schema");
16
10
 
17
11
  var _laslazDecoder = require("./laslaz-decoder");
18
12
 
19
13
  var _getLasSchema = require("./get-las-schema");
20
14
 
21
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
22
-
23
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
24
-
25
15
  function parseLAS(arrayBuffer, options) {
26
16
  var _options$las;
27
17
 
28
- var mesh = parseLASMesh(arrayBuffer, options);
18
+ const mesh = parseLASMesh(arrayBuffer, options);
29
19
  return (0, _schema.convertMesh)(mesh, (options === null || options === void 0 ? void 0 : (_options$las = options.las) === null || _options$las === void 0 ? void 0 : _options$las.shape) || 'mesh');
30
20
  }
31
21
 
32
- function parseLASMesh(arrayBuffer) {
22
+ function parseLASMesh(arrayBuffer, options = {}) {
33
23
  var _options$las2;
34
24
 
35
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
36
- var pointIndex = 0;
37
- var positions;
38
- var colors;
39
- var intensities;
40
- var classifications;
41
- var originalHeader;
42
- var lasMesh = {
25
+ let pointIndex = 0;
26
+ let positions;
27
+ let colors;
28
+ let intensities;
29
+ let classifications;
30
+ let originalHeader;
31
+ const lasMesh = {
43
32
  loader: 'las',
44
33
  loaderData: {},
45
34
  schema: new _schema.Schema([]),
@@ -51,18 +40,15 @@ function parseLASMesh(arrayBuffer) {
51
40
  topology: 'point-list',
52
41
  mode: 0
53
42
  };
54
- parseLASChunked(arrayBuffer, (_options$las2 = options.las) === null || _options$las2 === void 0 ? void 0 : _options$las2.skip, function () {
43
+ parseLASChunked(arrayBuffer, (_options$las2 = options.las) === null || _options$las2 === void 0 ? void 0 : _options$las2.skip, (decoder = {}, lasHeader) => {
55
44
  var _options$las4, _options$onProgress;
56
45
 
57
- var decoder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
58
- var lasHeader = arguments.length > 1 ? arguments[1] : undefined;
59
-
60
46
  if (!originalHeader) {
61
47
  var _options$las3;
62
48
 
63
49
  originalHeader = lasHeader;
64
- var total = lasHeader.totalToRead;
65
- var PositionsType = (_options$las3 = options.las) !== null && _options$las3 !== void 0 && _options$las3.fp64 ? Float64Array : Float32Array;
50
+ const total = lasHeader.totalToRead;
51
+ const PositionsType = (_options$las3 = options.las) !== null && _options$las3 !== void 0 && _options$las3.fp64 ? Float64Array : Float32Array;
66
52
  positions = new PositionsType(total * 3);
67
53
  colors = lasHeader.pointsFormatId >= 2 ? new Uint8Array(total * 4) : null;
68
54
  intensities = new Uint16Array(total);
@@ -91,26 +77,20 @@ function parseLASMesh(arrayBuffer) {
91
77
  }
92
78
  }
93
79
 
94
- var batchSize = decoder.pointsCount;
95
-
96
- var _lasHeader$scale = (0, _slicedToArray2.default)(lasHeader.scale, 3),
97
- scaleX = _lasHeader$scale[0],
98
- scaleY = _lasHeader$scale[1],
99
- scaleZ = _lasHeader$scale[2],
100
- _lasHeader$offset = (0, _slicedToArray2.default)(lasHeader.offset, 3),
101
- offsetX = _lasHeader$offset[0],
102
- offsetY = _lasHeader$offset[1],
103
- offsetZ = _lasHeader$offset[2];
104
-
105
- var twoByteColor = detectTwoByteColors(decoder, batchSize, (_options$las4 = options.las) === null || _options$las4 === void 0 ? void 0 : _options$las4.colorDepth);
106
-
107
- for (var i = 0; i < batchSize; i++) {
108
- var _decoder$getPoint = decoder.getPoint(i),
109
- position = _decoder$getPoint.position,
110
- color = _decoder$getPoint.color,
111
- intensity = _decoder$getPoint.intensity,
112
- classification = _decoder$getPoint.classification;
113
-
80
+ const batchSize = decoder.pointsCount;
81
+ const {
82
+ scale: [scaleX, scaleY, scaleZ],
83
+ offset: [offsetX, offsetY, offsetZ]
84
+ } = lasHeader;
85
+ const twoByteColor = detectTwoByteColors(decoder, batchSize, (_options$las4 = options.las) === null || _options$las4 === void 0 ? void 0 : _options$las4.colorDepth);
86
+
87
+ for (let i = 0; i < batchSize; i++) {
88
+ const {
89
+ position,
90
+ color,
91
+ intensity,
92
+ classification
93
+ } = decoder.getPoint(i);
114
94
  positions[pointIndex * 3] = position[0] * scaleX + offsetX;
115
95
  positions[pointIndex * 3 + 1] = position[1] * scaleY + offsetY;
116
96
  positions[pointIndex * 3 + 2] = position[2] * scaleZ + offsetZ;
@@ -134,13 +114,12 @@ function parseLASMesh(arrayBuffer) {
134
114
  pointIndex++;
135
115
  }
136
116
 
137
- var meshBatch = _objectSpread(_objectSpread({}, lasMesh), {}, {
117
+ const meshBatch = { ...lasMesh,
138
118
  header: {
139
119
  vertexCount: lasHeader.totalRead
140
120
  },
141
121
  progress: lasHeader.totalRead / lasHeader.totalToRead
142
- });
143
-
122
+ };
144
123
  options === null || options === void 0 ? void 0 : (_options$onProgress = options.onProgress) === null || _options$onProgress === void 0 ? void 0 : _options$onProgress.call(options, meshBatch);
145
124
  });
146
125
  lasMesh.header = {
@@ -155,25 +134,24 @@ function parseLASMesh(arrayBuffer) {
155
134
  return lasMesh;
156
135
  }
157
136
 
158
- function parseLASChunked(rawData, skip) {
159
- var onParseData = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
160
- var dataHandler = new _laslazDecoder.LASFile(rawData);
137
+ function parseLASChunked(rawData, skip, onParseData = {}) {
138
+ const dataHandler = new _laslazDecoder.LASFile(rawData);
161
139
 
162
140
  try {
163
141
  dataHandler.open();
164
- var header = dataHandler.getHeader();
165
- var Unpacker = dataHandler.getUnpacker();
166
- var totalToRead = Math.ceil(header.pointsCount / Math.max(1, skip));
142
+ const header = dataHandler.getHeader();
143
+ const Unpacker = dataHandler.getUnpacker();
144
+ const totalToRead = Math.ceil(header.pointsCount / Math.max(1, skip));
167
145
  header.totalToRead = totalToRead;
168
- var totalRead = 0;
146
+ let totalRead = 0;
169
147
 
170
148
  while (true) {
171
- var chunk = dataHandler.readData(1000 * 100, 0, skip);
149
+ const chunk = dataHandler.readData(1000 * 100, 0, skip);
172
150
  totalRead += chunk.count;
173
151
  header.totalRead = totalRead;
174
152
  header.versionAsString = chunk.versionAsString;
175
153
  header.isCompressed = chunk.isCompressed;
176
- var unpacker = new Unpacker(chunk.buffer, chunk.count, header);
154
+ const unpacker = new Unpacker(chunk.buffer, chunk.count, header);
177
155
  onParseData(unpacker, header);
178
156
 
179
157
  if (!chunk.hasMoreData || totalRead >= totalToRead) {
@@ -187,11 +165,8 @@ function parseLASChunked(rawData, skip) {
187
165
  }
188
166
  }
189
167
 
190
- function detectTwoByteColors() {
191
- var decoder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
192
- var batchSize = arguments.length > 1 ? arguments[1] : undefined;
193
- var colorDepth = arguments.length > 2 ? arguments[2] : undefined;
194
- var twoByteColor = false;
168
+ function detectTwoByteColors(decoder = {}, batchSize, colorDepth) {
169
+ let twoByteColor = false;
195
170
 
196
171
  switch (colorDepth) {
197
172
  case 8:
@@ -204,9 +179,10 @@ function detectTwoByteColors() {
204
179
 
205
180
  case 'auto':
206
181
  if (decoder.getPoint(0).color) {
207
- for (var i = 0; i < batchSize; i++) {
208
- var _decoder$getPoint2 = decoder.getPoint(i),
209
- color = _decoder$getPoint2.color;
182
+ for (let i = 0; i < batchSize; i++) {
183
+ const {
184
+ color
185
+ } = decoder.getPoint(i);
210
186
 
211
187
  if (color[0] > 255 || color[1] > 255 || color[2] > 255) {
212
188
  twoByteColor = true;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/parse-las.ts"],"names":["parseLAS","arrayBuffer","options","mesh","parseLASMesh","las","shape","pointIndex","positions","colors","intensities","classifications","originalHeader","lasMesh","loader","loaderData","schema","Schema","header","vertexCount","boundingBox","attributes","topology","mode","parseLASChunked","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","rawData","onParseData","dataHandler","LASFile","open","getHeader","Unpacker","getUnpacker","Math","ceil","max","chunk","readData","count","versionAsString","isCompressed","unpacker","buffer","hasMoreData","e","close","console","warn"],"mappings":"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","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 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"],"file":"parse-las.js"}
1
+ {"version":3,"sources":["../../../src/lib/parse-las.ts"],"names":["parseLAS","arrayBuffer","options","mesh","parseLASMesh","las","shape","pointIndex","positions","colors","intensities","classifications","originalHeader","lasMesh","loader","loaderData","schema","Schema","header","vertexCount","boundingBox","attributes","topology","mode","parseLASChunked","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","position","color","getPoint","meshBatch","totalRead","progress","onProgress","rawData","onParseData","dataHandler","LASFile","open","getHeader","Unpacker","getUnpacker","Math","ceil","max","chunk","readData","count","versionAsString","isCompressed","unpacker","buffer","hasMoreData","e","close","console","warn"],"mappings":"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","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 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"],"file":"parse-las.js"}
@@ -1,4 +1,8 @@
1
- import {createLoaderWorker} from '@loaders.gl/loader-utils';
2
- import {LASLoader} from '../index';
1
+ "use strict";
3
2
 
4
- createLoaderWorker(LASLoader);
3
+ var _loaderUtils = require("@loaders.gl/loader-utils");
4
+
5
+ var _index = require("../index");
6
+
7
+ (0, _loaderUtils.createLoaderWorker)(_index.LASLoader);
8
+ //# sourceMappingURL=las-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/workers/las-worker.ts"],"names":["LASLoader"],"mappings":";;AAAA;;AACA;;AAEA,qCAAmBA,gBAAnB","sourcesContent":["import {createLoaderWorker} from '@loaders.gl/loader-utils';\nimport {LASLoader} from '../index';\n\ncreateLoaderWorker(LASLoader);\n"],"file":"las-worker.js"}
@@ -1,4 +1,4 @@
1
- const VERSION = typeof "3.1.0-alpha.4" !== 'undefined' ? "3.1.0-alpha.4" : 'latest';
1
+ const VERSION = typeof "3.1.0-beta.3" !== 'undefined' ? "3.1.0-beta.3" : 'latest';
2
2
  const DEFAULT_LAS_OPTIONS = {
3
3
  las: {
4
4
  shape: 'mesh',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/las-loader.ts"],"names":["VERSION","DEFAULT_LAS_OPTIONS","las","shape","fp64","skip","colorDepth","LASLoader","name","id","module","version","worker","extensions","mimeTypes","text","binary","tests","options","_typecheckLoader"],"mappings":"AAKA,MAAMA,OAAO,GAAG,2BAAuB,WAAvB,qBAAmD,QAAnE;AAWA,MAAMC,mBAAqC,GAAG;AAC5CC,EAAAA,GAAG,EAAE;AACHC,IAAAA,KAAK,EAAE,MADJ;AAEHC,IAAAA,IAAI,EAAE,KAFH;AAGHC,IAAAA,IAAI,EAAE,CAHH;AAIHC,IAAAA,UAAU,EAAE;AAJT;AADuC,CAA9C;AAYA,OAAO,MAAMC,SAAS,GAAG;AACvBC,EAAAA,IAAI,EAAE,KADiB;AAEvBC,EAAAA,EAAE,EAAE,KAFmB;AAGvBC,EAAAA,MAAM,EAAE,KAHe;AAIvBC,EAAAA,OAAO,EAAEX,OAJc;AAKvBY,EAAAA,MAAM,EAAE,IALe;AAMvBC,EAAAA,UAAU,EAAE,CAAC,KAAD,EAAQ,KAAR,CANW;AAOvBC,EAAAA,SAAS,EAAE,CAAC,0BAAD,CAPY;AAQvBC,EAAAA,IAAI,EAAE,IARiB;AASvBC,EAAAA,MAAM,EAAE,IATe;AAUvBC,EAAAA,KAAK,EAAE,CAAC,KAAD,CAVgB;AAWvBC,EAAAA,OAAO,EAAEjB;AAXc,CAAlB;AAcP,OAAO,MAAMkB,gBAAwB,GAAGZ,SAAjC","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"],"file":"las-loader.js"}
1
+ {"version":3,"sources":["../../src/las-loader.ts"],"names":["VERSION","DEFAULT_LAS_OPTIONS","las","shape","fp64","skip","colorDepth","LASLoader","name","id","module","version","worker","extensions","mimeTypes","text","binary","tests","options","_typecheckLoader"],"mappings":"AAKA,MAAMA,OAAO,GAAG,0BAAuB,WAAvB,oBAAmD,QAAnE;AAWA,MAAMC,mBAAqC,GAAG;AAC5CC,EAAAA,GAAG,EAAE;AACHC,IAAAA,KAAK,EAAE,MADJ;AAEHC,IAAAA,IAAI,EAAE,KAFH;AAGHC,IAAAA,IAAI,EAAE,CAHH;AAIHC,IAAAA,UAAU,EAAE;AAJT;AADuC,CAA9C;AAYA,OAAO,MAAMC,SAAS,GAAG;AACvBC,EAAAA,IAAI,EAAE,KADiB;AAEvBC,EAAAA,EAAE,EAAE,KAFmB;AAGvBC,EAAAA,MAAM,EAAE,KAHe;AAIvBC,EAAAA,OAAO,EAAEX,OAJc;AAKvBY,EAAAA,MAAM,EAAE,IALe;AAMvBC,EAAAA,UAAU,EAAE,CAAC,KAAD,EAAQ,KAAR,CANW;AAOvBC,EAAAA,SAAS,EAAE,CAAC,0BAAD,CAPY;AAQvBC,EAAAA,IAAI,EAAE,IARiB;AASvBC,EAAAA,MAAM,EAAE,IATe;AAUvBC,EAAAA,KAAK,EAAE,CAAC,KAAD,CAVgB;AAWvBC,EAAAA,OAAO,EAAEjB;AAXc,CAAlB;AAcP,OAAO,MAAMkB,gBAAwB,GAAGZ,SAAjC","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"],"file":"las-loader.js"}
@@ -1,5 +1,5 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- import getModule from '../libs/laz-perf';
2
+ import getModule from './libs/laz-perf';
3
3
  let Module = null;
4
4
  const POINT_FORMAT_READERS = {
5
5
  0: dv => {
@@ -195,7 +195,7 @@ class LAZLoader {
195
195
  this.instance.readOffset = 0;
196
196
  return true;
197
197
  } catch (error) {
198
- throw new Error(`Failed to open file: ${error.message}`);
198
+ throw new Error("Failed to open file: ".concat(error.message));
199
199
  }
200
200
  }
201
201
 
@@ -210,7 +210,7 @@ class LAZLoader {
210
210
  this.header = header;
211
211
  return header;
212
212
  } catch (error) {
213
- throw new Error(`Failed to get header: ${error.message}`);
213
+ throw new Error("Failed to get header: ".concat(error.message));
214
214
  }
215
215
  }
216
216
 
@@ -254,7 +254,7 @@ class LAZLoader {
254
254
  hasMoreData: instance.readOffset < header.pointsCount
255
255
  };
256
256
  } catch (error) {
257
- throw new Error(`Failed to read data: ${error.message}`);
257
+ throw new Error("Failed to read data: ".concat(error.message));
258
258
  }
259
259
  }
260
260
 
@@ -267,7 +267,7 @@ class LAZLoader {
267
267
 
268
268
  return true;
269
269
  } catch (error) {
270
- throw new Error(`Failed to close file: ${error.message}`);
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","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"}
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"}