@loaders.gl/las 3.4.14 → 3.4.15

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.
@@ -5,27 +5,25 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.LASModuleWasLoaded = exports.LASFile = void 0;
8
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
9
  var _lazPerf = _interopRequireDefault(require("./libs/laz-perf"));
12
- var Module = null;
13
- var POINT_FORMAT_READERS = {
14
- 0: function _(dv) {
10
+ let Module = null;
11
+ const POINT_FORMAT_READERS = {
12
+ 0: dv => {
15
13
  return {
16
14
  position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
17
15
  intensity: dv.getUint16(12, true),
18
16
  classification: dv.getUint8(15)
19
17
  };
20
18
  },
21
- 1: function _(dv) {
19
+ 1: dv => {
22
20
  return {
23
21
  position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
24
22
  intensity: dv.getUint16(12, true),
25
23
  classification: dv.getUint8(15)
26
24
  };
27
25
  },
28
- 2: function _(dv) {
26
+ 2: dv => {
29
27
  return {
30
28
  position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
31
29
  intensity: dv.getUint16(12, true),
@@ -33,7 +31,7 @@ var POINT_FORMAT_READERS = {
33
31
  color: [dv.getUint16(20, true), dv.getUint16(22, true), dv.getUint16(24, true)]
34
32
  };
35
33
  },
36
- 3: function _(dv) {
34
+ 3: dv => {
37
35
  return {
38
36
  position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
39
37
  intensity: dv.getUint16(12, true),
@@ -43,24 +41,24 @@ var POINT_FORMAT_READERS = {
43
41
  }
44
42
  };
45
43
  function readAs(buf) {
46
- var Type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
47
- var offset = arguments.length > 2 ? arguments[2] : undefined;
48
- var count = arguments.length > 3 ? arguments[3] : undefined;
44
+ let Type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
45
+ let offset = arguments.length > 2 ? arguments[2] : undefined;
46
+ let count = arguments.length > 3 ? arguments[3] : undefined;
49
47
  count = count === undefined || count === 0 ? 1 : count;
50
- var sub = buf.slice(offset, offset + Type.BYTES_PER_ELEMENT * count);
51
- var r = new Type(sub);
48
+ const sub = buf.slice(offset, offset + Type.BYTES_PER_ELEMENT * count);
49
+ const r = new Type(sub);
52
50
  if (count === 1) {
53
51
  return r[0];
54
52
  }
55
- var ret = [];
56
- for (var i = 0; i < count; i++) {
53
+ const ret = [];
54
+ for (let i = 0; i < count; i++) {
57
55
  ret.push(r[i]);
58
56
  }
59
57
  return ret;
60
58
  }
61
59
  function parseLASHeader(arraybuffer) {
62
- var start = 32 * 3 + 35;
63
- var o = {
60
+ let start = 32 * 3 + 35;
61
+ const o = {
64
62
  pointsOffset: readAs(arraybuffer, Uint32Array, 32 * 3),
65
63
  pointsFormatId: readAs(arraybuffer, Uint8Array, 32 * 3 + 8),
66
64
  pointsStructSize: readAs(arraybuffer, Uint16Array, 32 * 3 + 8 + 1),
@@ -70,15 +68,14 @@ function parseLASHeader(arraybuffer) {
70
68
  start += 24;
71
69
  o.offset = readAs(arraybuffer, Float64Array, start, 3);
72
70
  start += 24;
73
- var bounds = readAs(arraybuffer, Float64Array, start, 6);
71
+ const bounds = readAs(arraybuffer, Float64Array, start, 6);
74
72
  start += 48;
75
73
  o.maxs = [bounds[0], bounds[2], bounds[4]];
76
74
  o.mins = [bounds[1], bounds[3], bounds[5]];
77
75
  return o;
78
76
  }
79
- var LASLoader = function () {
80
- function LASLoader(arraybuffer) {
81
- (0, _classCallCheck2.default)(this, LASLoader);
77
+ class LASLoader {
78
+ constructor(arraybuffer) {
82
79
  (0, _defineProperty2.default)(this, "arraybuffer", void 0);
83
80
  (0, _defineProperty2.default)(this, "readOffset", 0);
84
81
  (0, _defineProperty2.default)(this, "header", {
@@ -97,71 +94,64 @@ var LASLoader = function () {
97
94
  });
98
95
  this.arraybuffer = arraybuffer;
99
96
  }
100
- (0, _createClass2.default)(LASLoader, [{
101
- key: "open",
102
- value: function open() {
103
- return true;
104
- }
105
- }, {
106
- key: "getHeader",
107
- value: function getHeader() {
108
- this.header = parseLASHeader(this.arraybuffer);
109
- return this.header;
97
+ open() {
98
+ return true;
99
+ }
100
+ getHeader() {
101
+ this.header = parseLASHeader(this.arraybuffer);
102
+ return this.header;
103
+ }
104
+ readData(count, skip) {
105
+ const {
106
+ header,
107
+ arraybuffer
108
+ } = this;
109
+ if (!header) {
110
+ throw new Error('Cannot start reading data till a header request is issued');
110
111
  }
111
- }, {
112
- key: "readData",
113
- value: function readData(count, skip) {
114
- var header = this.header,
115
- arraybuffer = this.arraybuffer;
116
- if (!header) {
117
- throw new Error('Cannot start reading data till a header request is issued');
118
- }
119
- var readOffset = this.readOffset;
120
- var start;
121
- if (skip <= 1) {
122
- count = Math.min(count, header.pointsCount - readOffset);
123
- start = header.pointsOffset + readOffset * header.pointsStructSize;
124
- var end = start + count * header.pointsStructSize;
125
- readOffset += count;
126
- this.readOffset = readOffset;
127
- return {
128
- buffer: arraybuffer.slice(start, end),
129
- count: count,
130
- hasMoreData: readOffset < header.pointsCount
131
- };
132
- }
133
- var pointsToRead = Math.min(count * skip, header.pointsCount - readOffset);
134
- var bufferSize = Math.ceil(pointsToRead / skip);
135
- var pointsRead = 0;
136
- var buf = new Uint8Array(bufferSize * header.pointsStructSize);
137
- for (var i = 0; i < pointsToRead; i++) {
138
- if (i % skip === 0) {
139
- start = header.pointsOffset + readOffset * header.pointsStructSize;
140
- var src = new Uint8Array(arraybuffer, start, header.pointsStructSize);
141
- buf.set(src, pointsRead * header.pointsStructSize);
142
- pointsRead++;
143
- }
144
- readOffset++;
145
- }
112
+ let {
113
+ readOffset
114
+ } = this;
115
+ let start;
116
+ if (skip <= 1) {
117
+ count = Math.min(count, header.pointsCount - readOffset);
118
+ start = header.pointsOffset + readOffset * header.pointsStructSize;
119
+ const end = start + count * header.pointsStructSize;
120
+ readOffset += count;
146
121
  this.readOffset = readOffset;
147
122
  return {
148
- buffer: buf.buffer,
149
- count: pointsRead,
123
+ buffer: arraybuffer.slice(start, end),
124
+ count,
150
125
  hasMoreData: readOffset < header.pointsCount
151
126
  };
152
127
  }
153
- }, {
154
- key: "close",
155
- value: function close() {
156
- this.arraybuffer = null;
157
- return true;
128
+ const pointsToRead = Math.min(count * skip, header.pointsCount - readOffset);
129
+ const bufferSize = Math.ceil(pointsToRead / skip);
130
+ let pointsRead = 0;
131
+ const buf = new Uint8Array(bufferSize * header.pointsStructSize);
132
+ for (let i = 0; i < pointsToRead; i++) {
133
+ if (i % skip === 0) {
134
+ start = header.pointsOffset + readOffset * header.pointsStructSize;
135
+ const src = new Uint8Array(arraybuffer, start, header.pointsStructSize);
136
+ buf.set(src, pointsRead * header.pointsStructSize);
137
+ pointsRead++;
138
+ }
139
+ readOffset++;
158
140
  }
159
- }]);
160
- return LASLoader;
161
- }();
162
- var LAZLoader = function () {
163
- function LAZLoader(arraybuffer) {
164
- (0, _classCallCheck2.default)(this, LAZLoader);
141
+ this.readOffset = readOffset;
142
+ return {
143
+ buffer: buf.buffer,
144
+ count: pointsRead,
145
+ hasMoreData: readOffset < header.pointsCount
146
+ };
147
+ }
148
+ close() {
149
+ this.arraybuffer = null;
150
+ return true;
151
+ }
152
+ }
153
+ class LAZLoader {
154
+ constructor(arraybuffer) {
165
155
  (0, _defineProperty2.default)(this, "arraybuffer", void 0);
166
156
  (0, _defineProperty2.default)(this, "instance", null);
167
157
  (0, _defineProperty2.default)(this, "header", null);
@@ -170,93 +160,86 @@ var LAZLoader = function () {
170
160
  Module = (0, _lazPerf.default)();
171
161
  }
172
162
  }
173
- (0, _createClass2.default)(LAZLoader, [{
174
- key: "open",
175
- value: function open() {
176
- try {
177
- var arraybuffer = this.arraybuffer;
178
- this.instance = new Module.LASZip();
179
- var abInt = new Uint8Array(arraybuffer);
180
- var buf = Module._malloc(arraybuffer.byteLength);
181
- this.instance.arraybuffer = arraybuffer;
182
- this.instance.buf = buf;
183
- Module.HEAPU8.set(abInt, buf);
184
- this.instance.open(buf, arraybuffer.byteLength);
185
- this.instance.readOffset = 0;
186
- return true;
187
- } catch (error) {
188
- throw new Error("Failed to open file: ".concat(error.message));
189
- }
163
+ open() {
164
+ try {
165
+ const {
166
+ arraybuffer
167
+ } = this;
168
+ this.instance = new Module.LASZip();
169
+ const abInt = new Uint8Array(arraybuffer);
170
+ const buf = Module._malloc(arraybuffer.byteLength);
171
+ this.instance.arraybuffer = arraybuffer;
172
+ this.instance.buf = buf;
173
+ Module.HEAPU8.set(abInt, buf);
174
+ this.instance.open(buf, arraybuffer.byteLength);
175
+ this.instance.readOffset = 0;
176
+ return true;
177
+ } catch (error) {
178
+ throw new Error("Failed to open file: ".concat(error.message));
190
179
  }
191
- }, {
192
- key: "getHeader",
193
- value: function getHeader() {
194
- if (!this.instance) {
195
- throw new Error('You need to open the file before trying to read header');
196
- }
197
- try {
198
- var header = parseLASHeader(this.instance.arraybuffer);
199
- header.pointsFormatId &= 0x3f;
200
- this.header = header;
201
- return header;
202
- } catch (error) {
203
- throw new Error("Failed to get header: ".concat(error.message));
204
- }
180
+ }
181
+ getHeader() {
182
+ if (!this.instance) {
183
+ throw new Error('You need to open the file before trying to read header');
205
184
  }
206
- }, {
207
- key: "readData",
208
- value: function readData(count, offset, skip) {
209
- if (!this.instance) {
210
- throw new Error('You need to open the file before trying to read stuff');
211
- }
212
- var header = this.header,
213
- instance = this.instance;
214
- if (!header) {
215
- throw new Error('You need to query header before reading, I maintain state that way, sorry :(');
216
- }
217
- try {
218
- var pointsToRead = Math.min(count * skip, header.pointsCount - instance.readOffset);
219
- var bufferSize = Math.ceil(pointsToRead / skip);
220
- var pointsRead = 0;
221
- var thisBuf = new Uint8Array(bufferSize * header.pointsStructSize);
222
- var bufRead = Module._malloc(header.pointsStructSize);
223
- for (var i = 0; i < pointsToRead; i++) {
224
- instance.getPoint(bufRead);
225
- if (i % skip === 0) {
226
- var a = new Uint8Array(Module.HEAPU8.buffer, bufRead, header.pointsStructSize);
227
- thisBuf.set(a, pointsRead * header.pointsStructSize);
228
- pointsRead++;
229
- }
230
- instance.readOffset++;
185
+ try {
186
+ const header = parseLASHeader(this.instance.arraybuffer);
187
+ header.pointsFormatId &= 0x3f;
188
+ this.header = header;
189
+ return header;
190
+ } catch (error) {
191
+ throw new Error("Failed to get header: ".concat(error.message));
192
+ }
193
+ }
194
+ readData(count, offset, skip) {
195
+ if (!this.instance) {
196
+ throw new Error('You need to open the file before trying to read stuff');
197
+ }
198
+ const {
199
+ header,
200
+ instance
201
+ } = this;
202
+ if (!header) {
203
+ throw new Error('You need to query header before reading, I maintain state that way, sorry :(');
204
+ }
205
+ try {
206
+ const pointsToRead = Math.min(count * skip, header.pointsCount - instance.readOffset);
207
+ const bufferSize = Math.ceil(pointsToRead / skip);
208
+ let pointsRead = 0;
209
+ const thisBuf = new Uint8Array(bufferSize * header.pointsStructSize);
210
+ const bufRead = Module._malloc(header.pointsStructSize);
211
+ for (let i = 0; i < pointsToRead; i++) {
212
+ instance.getPoint(bufRead);
213
+ if (i % skip === 0) {
214
+ const a = new Uint8Array(Module.HEAPU8.buffer, bufRead, header.pointsStructSize);
215
+ thisBuf.set(a, pointsRead * header.pointsStructSize);
216
+ pointsRead++;
231
217
  }
232
- return {
233
- buffer: thisBuf.buffer,
234
- count: pointsRead,
235
- hasMoreData: instance.readOffset < header.pointsCount
236
- };
237
- } catch (error) {
238
- throw new Error("Failed to read data: ".concat(error.message));
218
+ instance.readOffset++;
239
219
  }
220
+ return {
221
+ buffer: thisBuf.buffer,
222
+ count: pointsRead,
223
+ hasMoreData: instance.readOffset < header.pointsCount
224
+ };
225
+ } catch (error) {
226
+ throw new Error("Failed to read data: ".concat(error.message));
240
227
  }
241
- }, {
242
- key: "close",
243
- value: function close() {
244
- try {
245
- if (this.instance !== null) {
246
- this.instance.delete();
247
- this.instance = null;
248
- }
249
- return true;
250
- } catch (error) {
251
- throw new Error("Failed to close file: ".concat(error.message));
228
+ }
229
+ close() {
230
+ try {
231
+ if (this.instance !== null) {
232
+ this.instance.delete();
233
+ this.instance = null;
252
234
  }
235
+ return true;
236
+ } catch (error) {
237
+ throw new Error("Failed to close file: ".concat(error.message));
253
238
  }
254
- }]);
255
- return LAZLoader;
256
- }();
257
- var LASDecoder = function () {
258
- function LASDecoder(buffer, len, header) {
259
- (0, _classCallCheck2.default)(this, LASDecoder);
239
+ }
240
+ }
241
+ class LASDecoder {
242
+ constructor(buffer, len, header) {
260
243
  (0, _defineProperty2.default)(this, "arrayb", void 0);
261
244
  (0, _defineProperty2.default)(this, "decoder", void 0);
262
245
  (0, _defineProperty2.default)(this, "pointsCount", void 0);
@@ -274,21 +257,16 @@ var LASDecoder = function () {
274
257
  this.mins = header.mins;
275
258
  this.maxs = header.maxs;
276
259
  }
277
- (0, _createClass2.default)(LASDecoder, [{
278
- key: "getPoint",
279
- value: function getPoint(index) {
280
- if (index < 0 || index >= this.pointsCount) {
281
- throw new Error('Point index out of range');
282
- }
283
- var dv = new DataView(this.arrayb, index * this.pointSize, this.pointSize);
284
- return this.decoder(dv);
260
+ getPoint(index) {
261
+ if (index < 0 || index >= this.pointsCount) {
262
+ throw new Error('Point index out of range');
285
263
  }
286
- }]);
287
- return LASDecoder;
288
- }();
289
- var LASFile = function () {
290
- function LASFile(arraybuffer) {
291
- (0, _classCallCheck2.default)(this, LASFile);
264
+ const dv = new DataView(this.arrayb, index * this.pointSize, this.pointSize);
265
+ return this.decoder(dv);
266
+ }
267
+ }
268
+ class LASFile {
269
+ constructor(arraybuffer) {
292
270
  (0, _defineProperty2.default)(this, "arraybuffer", void 0);
293
271
  (0, _defineProperty2.default)(this, "formatId", 0);
294
272
  (0, _defineProperty2.default)(this, "loader", void 0);
@@ -306,59 +284,43 @@ var LASFile = function () {
306
284
  }
307
285
  this.loader = this.isCompressed ? new LAZLoader(this.arraybuffer) : new LASLoader(this.arraybuffer);
308
286
  }
309
- (0, _createClass2.default)(LASFile, [{
310
- key: "determineFormat",
311
- value: function determineFormat() {
312
- var formatId = readAs(this.arraybuffer, Uint8Array, 32 * 3 + 8);
313
- var bit7 = (formatId & 0x80) >> 7;
314
- var bit6 = (formatId & 0x40) >> 6;
315
- if (bit7 === 1 && bit6 === 1) {
316
- throw new Error('Old style compression not supported');
317
- }
318
- this.formatId = formatId & 0x3f;
319
- this.isCompressed = bit7 === 1 || bit6 === 1;
287
+ determineFormat() {
288
+ const formatId = readAs(this.arraybuffer, Uint8Array, 32 * 3 + 8);
289
+ const bit7 = (formatId & 0x80) >> 7;
290
+ const bit6 = (formatId & 0x40) >> 6;
291
+ if (bit7 === 1 && bit6 === 1) {
292
+ throw new Error('Old style compression not supported');
320
293
  }
321
- }, {
322
- key: "determineVersion",
323
- value: function determineVersion() {
324
- var ver = new Int8Array(this.arraybuffer, 24, 2);
325
- this.version = ver[0] * 10 + ver[1];
326
- this.versionAsString = "".concat(ver[0], ".").concat(ver[1]);
327
- return this.version;
328
- }
329
- }, {
330
- key: "open",
331
- value: function open() {
332
- if (this.loader.open()) {
333
- this.isOpen = true;
334
- }
335
- }
336
- }, {
337
- key: "getHeader",
338
- value: function getHeader() {
339
- return this.loader.getHeader();
340
- }
341
- }, {
342
- key: "readData",
343
- value: function readData(count, start, skip) {
344
- return this.loader.readData(count, start, skip);
345
- }
346
- }, {
347
- key: "close",
348
- value: function close() {
349
- if (this.loader.close()) {
350
- this.isOpen = false;
351
- }
294
+ this.formatId = formatId & 0x3f;
295
+ this.isCompressed = bit7 === 1 || bit6 === 1;
296
+ }
297
+ determineVersion() {
298
+ const ver = new Int8Array(this.arraybuffer, 24, 2);
299
+ this.version = ver[0] * 10 + ver[1];
300
+ this.versionAsString = "".concat(ver[0], ".").concat(ver[1]);
301
+ return this.version;
302
+ }
303
+ open() {
304
+ if (this.loader.open()) {
305
+ this.isOpen = true;
352
306
  }
353
- }, {
354
- key: "getUnpacker",
355
- value: function getUnpacker() {
356
- return LASDecoder;
307
+ }
308
+ getHeader() {
309
+ return this.loader.getHeader();
310
+ }
311
+ readData(count, start, skip) {
312
+ return this.loader.readData(count, start, skip);
313
+ }
314
+ close() {
315
+ if (this.loader.close()) {
316
+ this.isOpen = false;
357
317
  }
358
- }]);
359
- return LASFile;
360
- }();
318
+ }
319
+ getUnpacker() {
320
+ return LASDecoder;
321
+ }
322
+ }
361
323
  exports.LASFile = LASFile;
362
- var LASModuleWasLoaded = false;
324
+ const LASModuleWasLoaded = false;
363
325
  exports.LASModuleWasLoaded = LASModuleWasLoaded;
364
326
  //# sourceMappingURL=laslaz-decoder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"laslaz-decoder.js","names":["_lazPerf","_interopRequireDefault","require","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","_classCallCheck2","default","_defineProperty2","totalToRead","totalRead","versionAsString","isCompressed","_createClass2","key","value","open","getHeader","header","readData","skip","Error","readOffset","Math","min","end","buffer","hasMoreData","pointsToRead","bufferSize","ceil","pointsRead","src","set","close","LAZLoader","getModule","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","exports","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":["_lazPerf","_interopRequireDefault","require","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","_defineProperty2","default","totalToRead","totalRead","versionAsString","isCompressed","open","getHeader","header","readData","skip","Error","readOffset","Math","min","end","buffer","hasMoreData","pointsToRead","bufferSize","ceil","pointsRead","src","set","close","LAZLoader","getModule","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","exports","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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"}