@loaders.gl/las 3.3.0-alpha.1 → 3.3.0-alpha.11
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.
- package/dist/es5/bundle.js +0 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/index.js +4 -16
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/las-loader.js +3 -1
- package/dist/es5/las-loader.js.map +1 -1
- package/dist/es5/lib/get-las-schema.js +0 -8
- package/dist/es5/lib/get-las-schema.js.map +1 -1
- package/dist/es5/lib/las-types.js.map +1 -1
- package/dist/es5/lib/laslaz-decoder.js +40 -57
- package/dist/es5/lib/laslaz-decoder.js.map +1 -1
- package/dist/es5/lib/libs/laz-perf.js.map +1 -1
- package/dist/es5/lib/parse-las.js +17 -49
- package/dist/es5/lib/parse-las.js.map +1 -1
- package/dist/es5/workers/las-worker.js +0 -2
- package/dist/es5/workers/las-worker.js.map +1 -1
- package/dist/esm/bundle.js +1 -1
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/index.js +4 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/las-loader.js +4 -1
- package/dist/esm/las-loader.js.map +1 -1
- package/dist/esm/lib/get-las-schema.js +1 -6
- package/dist/esm/lib/get-las-schema.js.map +1 -1
- package/dist/esm/lib/las-types.js.map +1 -1
- package/dist/esm/lib/laslaz-decoder.js +6 -63
- package/dist/esm/lib/laslaz-decoder.js.map +1 -1
- package/dist/esm/lib/libs/laz-perf.js.map +1 -1
- package/dist/esm/lib/parse-las.js +18 -26
- package/dist/esm/lib/parse-las.js.map +1 -1
- package/dist/esm/workers/las-worker.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/las-loader.d.ts +1 -1
- package/dist/las-loader.d.ts.map +1 -1
- package/dist/las-worker.js +1 -1
- package/dist/lib/las-types.d.ts +2 -2
- package/dist/lib/las-types.d.ts.map +1 -1
- package/dist/lib/laslaz-decoder.d.ts +1 -1
- package/dist/lib/laslaz-decoder.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
|
|
2
3
|
import getModule from './libs/laz-perf';
|
|
3
4
|
let Module = null;
|
|
4
5
|
const POINT_FORMAT_READERS = {
|
|
@@ -34,21 +35,20 @@ const POINT_FORMAT_READERS = {
|
|
|
34
35
|
}
|
|
35
36
|
};
|
|
36
37
|
|
|
37
|
-
function readAs(buf
|
|
38
|
+
function readAs(buf) {
|
|
39
|
+
let Type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
40
|
+
let offset = arguments.length > 2 ? arguments[2] : undefined;
|
|
41
|
+
let count = arguments.length > 3 ? arguments[3] : undefined;
|
|
38
42
|
count = count === undefined || count === 0 ? 1 : count;
|
|
39
43
|
const sub = buf.slice(offset, offset + Type.BYTES_PER_ELEMENT * count);
|
|
40
44
|
const r = new Type(sub);
|
|
41
|
-
|
|
42
45
|
if (count === 1) {
|
|
43
46
|
return r[0];
|
|
44
47
|
}
|
|
45
|
-
|
|
46
48
|
const ret = [];
|
|
47
|
-
|
|
48
49
|
for (let i = 0; i < count; i++) {
|
|
49
50
|
ret.push(r[i]);
|
|
50
51
|
}
|
|
51
|
-
|
|
52
52
|
return ret;
|
|
53
53
|
}
|
|
54
54
|
|
|
@@ -74,9 +74,7 @@ function parseLASHeader(arraybuffer) {
|
|
|
74
74
|
class LASLoader {
|
|
75
75
|
constructor(arraybuffer) {
|
|
76
76
|
_defineProperty(this, "arraybuffer", void 0);
|
|
77
|
-
|
|
78
77
|
_defineProperty(this, "readOffset", 0);
|
|
79
|
-
|
|
80
78
|
_defineProperty(this, "header", {
|
|
81
79
|
pointsOffset: 0,
|
|
82
80
|
pointsFormatId: 0,
|
|
@@ -91,14 +89,12 @@ class LASLoader {
|
|
|
91
89
|
versionAsString: '',
|
|
92
90
|
isCompressed: true
|
|
93
91
|
});
|
|
94
|
-
|
|
95
92
|
this.arraybuffer = arraybuffer;
|
|
96
93
|
}
|
|
97
94
|
|
|
98
95
|
open() {
|
|
99
96
|
return true;
|
|
100
97
|
}
|
|
101
|
-
|
|
102
98
|
getHeader() {
|
|
103
99
|
this.header = parseLASHeader(this.arraybuffer);
|
|
104
100
|
return this.header;
|
|
@@ -109,16 +105,13 @@ class LASLoader {
|
|
|
109
105
|
header,
|
|
110
106
|
arraybuffer
|
|
111
107
|
} = this;
|
|
112
|
-
|
|
113
108
|
if (!header) {
|
|
114
109
|
throw new Error('Cannot start reading data till a header request is issued');
|
|
115
110
|
}
|
|
116
|
-
|
|
117
111
|
let {
|
|
118
112
|
readOffset
|
|
119
113
|
} = this;
|
|
120
114
|
let start;
|
|
121
|
-
|
|
122
115
|
if (skip <= 1) {
|
|
123
116
|
count = Math.min(count, header.pointsCount - readOffset);
|
|
124
117
|
start = header.pointsOffset + readOffset * header.pointsStructSize;
|
|
@@ -131,12 +124,10 @@ class LASLoader {
|
|
|
131
124
|
hasMoreData: readOffset < header.pointsCount
|
|
132
125
|
};
|
|
133
126
|
}
|
|
134
|
-
|
|
135
127
|
const pointsToRead = Math.min(count * skip, header.pointsCount - readOffset);
|
|
136
128
|
const bufferSize = Math.ceil(pointsToRead / skip);
|
|
137
129
|
let pointsRead = 0;
|
|
138
130
|
const buf = new Uint8Array(bufferSize * header.pointsStructSize);
|
|
139
|
-
|
|
140
131
|
for (let i = 0; i < pointsToRead; i++) {
|
|
141
132
|
if (i % skip === 0) {
|
|
142
133
|
start = header.pointsOffset + readOffset * header.pointsStructSize;
|
|
@@ -144,10 +135,8 @@ class LASLoader {
|
|
|
144
135
|
buf.set(src, pointsRead * header.pointsStructSize);
|
|
145
136
|
pointsRead++;
|
|
146
137
|
}
|
|
147
|
-
|
|
148
138
|
readOffset++;
|
|
149
139
|
}
|
|
150
|
-
|
|
151
140
|
this.readOffset = readOffset;
|
|
152
141
|
return {
|
|
153
142
|
buffer: buf.buffer,
|
|
@@ -155,24 +144,19 @@ class LASLoader {
|
|
|
155
144
|
hasMoreData: readOffset < header.pointsCount
|
|
156
145
|
};
|
|
157
146
|
}
|
|
158
|
-
|
|
159
147
|
close() {
|
|
160
148
|
this.arraybuffer = null;
|
|
161
149
|
return true;
|
|
162
150
|
}
|
|
163
|
-
|
|
164
151
|
}
|
|
165
152
|
|
|
166
153
|
class LAZLoader {
|
|
154
|
+
|
|
167
155
|
constructor(arraybuffer) {
|
|
168
156
|
_defineProperty(this, "arraybuffer", void 0);
|
|
169
|
-
|
|
170
157
|
_defineProperty(this, "instance", null);
|
|
171
|
-
|
|
172
158
|
_defineProperty(this, "header", null);
|
|
173
|
-
|
|
174
159
|
this.arraybuffer = arraybuffer;
|
|
175
|
-
|
|
176
160
|
if (!Module) {
|
|
177
161
|
Module = getModule();
|
|
178
162
|
}
|
|
@@ -185,9 +169,7 @@ class LAZLoader {
|
|
|
185
169
|
} = this;
|
|
186
170
|
this.instance = new Module.LASZip();
|
|
187
171
|
const abInt = new Uint8Array(arraybuffer);
|
|
188
|
-
|
|
189
172
|
const buf = Module._malloc(arraybuffer.byteLength);
|
|
190
|
-
|
|
191
173
|
this.instance.arraybuffer = arraybuffer;
|
|
192
174
|
this.instance.buf = buf;
|
|
193
175
|
Module.HEAPU8.set(abInt, buf);
|
|
@@ -198,12 +180,10 @@ class LAZLoader {
|
|
|
198
180
|
throw new Error("Failed to open file: ".concat(error.message));
|
|
199
181
|
}
|
|
200
182
|
}
|
|
201
|
-
|
|
202
183
|
getHeader() {
|
|
203
184
|
if (!this.instance) {
|
|
204
185
|
throw new Error('You need to open the file before trying to read header');
|
|
205
186
|
}
|
|
206
|
-
|
|
207
187
|
try {
|
|
208
188
|
const header = parseLASHeader(this.instance.arraybuffer);
|
|
209
189
|
header.pointsFormatId &= 0x3f;
|
|
@@ -213,41 +193,32 @@ class LAZLoader {
|
|
|
213
193
|
throw new Error("Failed to get header: ".concat(error.message));
|
|
214
194
|
}
|
|
215
195
|
}
|
|
216
|
-
|
|
217
196
|
readData(count, offset, skip) {
|
|
218
197
|
if (!this.instance) {
|
|
219
198
|
throw new Error('You need to open the file before trying to read stuff');
|
|
220
199
|
}
|
|
221
|
-
|
|
222
200
|
const {
|
|
223
201
|
header,
|
|
224
202
|
instance
|
|
225
203
|
} = this;
|
|
226
|
-
|
|
227
204
|
if (!header) {
|
|
228
205
|
throw new Error('You need to query header before reading, I maintain state that way, sorry :(');
|
|
229
206
|
}
|
|
230
|
-
|
|
231
207
|
try {
|
|
232
208
|
const pointsToRead = Math.min(count * skip, header.pointsCount - instance.readOffset);
|
|
233
209
|
const bufferSize = Math.ceil(pointsToRead / skip);
|
|
234
210
|
let pointsRead = 0;
|
|
235
211
|
const thisBuf = new Uint8Array(bufferSize * header.pointsStructSize);
|
|
236
|
-
|
|
237
212
|
const bufRead = Module._malloc(header.pointsStructSize);
|
|
238
|
-
|
|
239
213
|
for (let i = 0; i < pointsToRead; i++) {
|
|
240
214
|
instance.getPoint(bufRead);
|
|
241
|
-
|
|
242
215
|
if (i % skip === 0) {
|
|
243
216
|
const a = new Uint8Array(Module.HEAPU8.buffer, bufRead, header.pointsStructSize);
|
|
244
217
|
thisBuf.set(a, pointsRead * header.pointsStructSize);
|
|
245
218
|
pointsRead++;
|
|
246
219
|
}
|
|
247
|
-
|
|
248
220
|
instance.readOffset++;
|
|
249
221
|
}
|
|
250
|
-
|
|
251
222
|
return {
|
|
252
223
|
buffer: thisBuf.buffer,
|
|
253
224
|
count: pointsRead,
|
|
@@ -264,33 +235,23 @@ class LAZLoader {
|
|
|
264
235
|
this.instance.delete();
|
|
265
236
|
this.instance = null;
|
|
266
237
|
}
|
|
267
|
-
|
|
268
238
|
return true;
|
|
269
239
|
} catch (error) {
|
|
270
240
|
throw new Error("Failed to close file: ".concat(error.message));
|
|
271
241
|
}
|
|
272
242
|
}
|
|
273
|
-
|
|
274
243
|
}
|
|
275
244
|
|
|
276
245
|
class LASDecoder {
|
|
277
246
|
constructor(buffer, len, header) {
|
|
278
247
|
_defineProperty(this, "arrayb", void 0);
|
|
279
|
-
|
|
280
248
|
_defineProperty(this, "decoder", void 0);
|
|
281
|
-
|
|
282
249
|
_defineProperty(this, "pointsCount", void 0);
|
|
283
|
-
|
|
284
250
|
_defineProperty(this, "pointSize", void 0);
|
|
285
|
-
|
|
286
251
|
_defineProperty(this, "scale", void 0);
|
|
287
|
-
|
|
288
252
|
_defineProperty(this, "offset", void 0);
|
|
289
|
-
|
|
290
253
|
_defineProperty(this, "mins", void 0);
|
|
291
|
-
|
|
292
254
|
_defineProperty(this, "maxs", void 0);
|
|
293
|
-
|
|
294
255
|
this.arrayb = buffer;
|
|
295
256
|
this.decoder = POINT_FORMAT_READERS[header.pointsFormatId];
|
|
296
257
|
this.pointsCount = len;
|
|
@@ -305,41 +266,28 @@ class LASDecoder {
|
|
|
305
266
|
if (index < 0 || index >= this.pointsCount) {
|
|
306
267
|
throw new Error('Point index out of range');
|
|
307
268
|
}
|
|
308
|
-
|
|
309
269
|
const dv = new DataView(this.arrayb, index * this.pointSize, this.pointSize);
|
|
310
270
|
return this.decoder(dv);
|
|
311
271
|
}
|
|
312
|
-
|
|
313
272
|
}
|
|
314
273
|
|
|
315
274
|
export class LASFile {
|
|
316
275
|
constructor(arraybuffer) {
|
|
317
276
|
_defineProperty(this, "arraybuffer", void 0);
|
|
318
|
-
|
|
319
277
|
_defineProperty(this, "formatId", 0);
|
|
320
|
-
|
|
321
278
|
_defineProperty(this, "loader", void 0);
|
|
322
|
-
|
|
323
279
|
_defineProperty(this, "isCompressed", true);
|
|
324
|
-
|
|
325
280
|
_defineProperty(this, "isOpen", false);
|
|
326
|
-
|
|
327
281
|
_defineProperty(this, "version", 0);
|
|
328
|
-
|
|
329
282
|
_defineProperty(this, "versionAsString", '');
|
|
330
|
-
|
|
331
283
|
this.arraybuffer = arraybuffer;
|
|
332
|
-
|
|
333
284
|
if (this.determineVersion() > 13) {
|
|
334
285
|
throw new Error('Only file versions <= 1.3 are supported at this time');
|
|
335
286
|
}
|
|
336
|
-
|
|
337
287
|
this.determineFormat();
|
|
338
|
-
|
|
339
288
|
if (POINT_FORMAT_READERS[this.formatId] === undefined) {
|
|
340
289
|
throw new Error('The point format ID is not supported');
|
|
341
290
|
}
|
|
342
|
-
|
|
343
291
|
this.loader = this.isCompressed ? new LAZLoader(this.arraybuffer) : new LASLoader(this.arraybuffer);
|
|
344
292
|
}
|
|
345
293
|
|
|
@@ -347,11 +295,9 @@ export class LASFile {
|
|
|
347
295
|
const formatId = readAs(this.arraybuffer, Uint8Array, 32 * 3 + 8);
|
|
348
296
|
const bit7 = (formatId & 0x80) >> 7;
|
|
349
297
|
const bit6 = (formatId & 0x40) >> 6;
|
|
350
|
-
|
|
351
298
|
if (bit7 === 1 && bit6 === 1) {
|
|
352
299
|
throw new Error('Old style compression not supported');
|
|
353
300
|
}
|
|
354
|
-
|
|
355
301
|
this.formatId = formatId & 0x3f;
|
|
356
302
|
this.isCompressed = bit7 === 1 || bit6 === 1;
|
|
357
303
|
}
|
|
@@ -368,7 +314,6 @@ export class LASFile {
|
|
|
368
314
|
this.isOpen = true;
|
|
369
315
|
}
|
|
370
316
|
}
|
|
371
|
-
|
|
372
317
|
getHeader() {
|
|
373
318
|
return this.loader.getHeader();
|
|
374
319
|
}
|
|
@@ -382,11 +327,9 @@ export class LASFile {
|
|
|
382
327
|
this.isOpen = false;
|
|
383
328
|
}
|
|
384
329
|
}
|
|
385
|
-
|
|
386
330
|
getUnpacker() {
|
|
387
331
|
return LASDecoder;
|
|
388
332
|
}
|
|
389
|
-
|
|
390
333
|
}
|
|
391
334
|
export const LASModuleWasLoaded = false;
|
|
392
335
|
//# sourceMappingURL=laslaz-decoder.js.map
|
|
@@ -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,"file":"laslaz-decoder.js","names":["getModule","Module","POINT_FORMAT_READERS","dv","position","getInt32","intensity","getUint16","classification","getUint8","color","readAs","buf","Type","offset","count","undefined","sub","slice","BYTES_PER_ELEMENT","r","ret","i","push","parseLASHeader","arraybuffer","start","o","pointsOffset","Uint32Array","pointsFormatId","Uint8Array","pointsStructSize","Uint16Array","pointsCount","scale","Float64Array","bounds","maxs","mins","LASLoader","constructor","totalToRead","totalRead","versionAsString","isCompressed","open","getHeader","header","readData","skip","Error","readOffset","Math","min","end","buffer","hasMoreData","pointsToRead","bufferSize","ceil","pointsRead","src","set","close","LAZLoader","instance","LASZip","abInt","_malloc","byteLength","HEAPU8","error","message","thisBuf","bufRead","getPoint","a","delete","LASDecoder","len","arrayb","decoder","pointSize","index","DataView","LASFile","determineVersion","determineFormat","formatId","loader","bit7","bit6","ver","Int8Array","version","isOpen","getUnpacker","LASModuleWasLoaded"],"sources":["../../../src/lib/laslaz-decoder.ts"],"sourcesContent":["/*\n Modified from Uday Verma and Howard Butler's plasio\n https://github.com/verma/plasio/\n MIT License\n*/\n// laslaz.js - treat as compiled code\nimport type {LASHeader} from './las-types';\nimport getModule from './libs/laz-perf';\n\nlet Module: any = null;\n\ntype LASReader = (dv: DataView) => {\n [LASAttribute: string]: number | number[];\n};\n\ntype LASReaders = {\n [key: number]: LASReader;\n};\n\ntype LASData = {\n buffer: ArrayBuffer;\n count: number;\n hasMoreData: boolean;\n};\n\nconst POINT_FORMAT_READERS: LASReaders = {\n 0: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15)\n };\n },\n 1: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15)\n };\n },\n 2: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15),\n color: [dv.getUint16(20, true), dv.getUint16(22, true), dv.getUint16(24, true)]\n };\n },\n 3: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15),\n color: [dv.getUint16(28, true), dv.getUint16(30, true), dv.getUint16(32, true)]\n };\n }\n};\n\n/**\n * Reads incoming binary data depends on the Type parameter\n * @param buf\n * @param Type\n * @param offset\n * @param count\n * @returns number | number[] from incoming binary data\n */\nfunction readAs(buf: ArrayBuffer, Type: any = {}, offset: number, count?: number) {\n count = count === undefined || count === 0 ? 1 : count;\n const sub = buf.slice(offset, offset + Type.BYTES_PER_ELEMENT * count);\n\n const r = new Type(sub);\n if (count === 1) {\n return r[0];\n }\n\n const ret: number[] = [];\n for (let i = 0; i < count; i++) {\n ret.push(r[i]);\n }\n\n return ret;\n}\n\n/**\n * Parsing of header's attributes\n * @param arraybuffer\n * @returns header as LASHeader\n */\nfunction parseLASHeader(arraybuffer: ArrayBuffer): LASHeader {\n let start = 32 * 3 + 35;\n\n const o: Partial<LASHeader> = {\n pointsOffset: readAs(arraybuffer, Uint32Array, 32 * 3),\n pointsFormatId: readAs(arraybuffer, Uint8Array, 32 * 3 + 8),\n pointsStructSize: readAs(arraybuffer, Uint16Array, 32 * 3 + 8 + 1),\n pointsCount: readAs(arraybuffer, Uint32Array, 32 * 3 + 11),\n scale: readAs(arraybuffer, Float64Array, start, 3)\n };\n start += 24; // 8*3\n o.offset = readAs(arraybuffer, Float64Array, start, 3);\n start += 24;\n\n const bounds = readAs(arraybuffer, Float64Array, start, 6);\n start += 48; // 8*6;\n o.maxs = [bounds[0], bounds[2], bounds[4]];\n o.mins = [bounds[1], bounds[3], bounds[5]];\n\n return o as LASHeader;\n}\n\n// LAS Loader\n// Loads uncompressed files\n//\nclass LASLoader {\n arraybuffer: ArrayBuffer;\n readOffset: number = 0;\n header: LASHeader = {\n pointsOffset: 0,\n pointsFormatId: 0,\n pointsStructSize: 0,\n pointsCount: 0,\n scale: [0, 0, 0],\n offset: [0, 0, 0],\n maxs: [0],\n mins: [0],\n totalToRead: 0,\n totalRead: 0,\n versionAsString: '',\n isCompressed: true\n };\n\n constructor(arraybuffer: ArrayBuffer) {\n this.arraybuffer = arraybuffer;\n }\n\n /**\n * @returns boolean\n */\n open() {\n // Nothing needs to be done to open this\n return true;\n }\n /**\n * Parsing of incoming binary\n * @returns LASHeader\n */\n getHeader() {\n this.header = parseLASHeader(this.arraybuffer);\n return this.header;\n }\n\n /**\n * Reading data\n * @param count\n * @param skip\n * @returns new ArrayBuffer, count, hasMoreData\n */\n readData(count: number, skip: number) {\n const {header, arraybuffer} = this;\n if (!header) {\n throw new Error('Cannot start reading data till a header request is issued');\n }\n\n let {readOffset} = this;\n let start: number;\n\n if (skip <= 1) {\n count = Math.min(count, header.pointsCount - readOffset);\n start = header.pointsOffset + readOffset * header.pointsStructSize;\n const end = start + count * header.pointsStructSize;\n readOffset += count;\n this.readOffset = readOffset;\n return {\n buffer: arraybuffer.slice(start, end),\n count,\n hasMoreData: readOffset < header.pointsCount\n };\n }\n\n const pointsToRead = Math.min(count * skip, header.pointsCount - readOffset);\n const bufferSize = Math.ceil(pointsToRead / skip);\n let pointsRead = 0;\n\n const buf = new Uint8Array(bufferSize * header.pointsStructSize);\n for (let i = 0; i < pointsToRead; i++) {\n if (i % skip === 0) {\n start = header.pointsOffset + readOffset * header.pointsStructSize;\n const src = new Uint8Array(arraybuffer, start, header.pointsStructSize);\n\n buf.set(src, pointsRead * header.pointsStructSize);\n pointsRead++;\n }\n\n readOffset++;\n }\n this.readOffset = readOffset;\n\n return {\n buffer: buf.buffer,\n count: pointsRead,\n hasMoreData: readOffset < header.pointsCount\n };\n }\n /**\n * Method which brings data to null to close the file\n * @returns\n */\n close() {\n // @ts-ignore Possibly null\n this.arraybuffer = null;\n return true;\n }\n}\n\n/**\n * LAZ Loader\n * Uses NaCL module to load LAZ files\n */\nclass LAZLoader {\n arraybuffer: ArrayBuffer;\n instance: any = null; // LASZip instance\n header: LASHeader | null = null;\n\n constructor(arraybuffer: ArrayBuffer) {\n this.arraybuffer = arraybuffer;\n\n if (!Module) {\n // Avoid executing laz-perf on import\n Module = getModule();\n }\n }\n\n /**\n * Opens the file\n * @returns boolean\n */\n open(): boolean {\n try {\n const {arraybuffer} = this;\n this.instance = new Module.LASZip();\n const abInt = new Uint8Array(arraybuffer);\n const buf = Module._malloc(arraybuffer.byteLength);\n\n this.instance.arraybuffer = arraybuffer;\n this.instance.buf = buf;\n Module.HEAPU8.set(abInt, buf);\n this.instance.open(buf, arraybuffer.byteLength);\n\n this.instance.readOffset = 0;\n\n return true;\n } catch (error) {\n throw new Error(`Failed to open file: ${(error as Error).message}`);\n }\n }\n\n getHeader(): LASHeader {\n if (!this.instance) {\n throw new Error('You need to open the file before trying to read header');\n }\n\n try {\n const header = parseLASHeader(this.instance.arraybuffer);\n header.pointsFormatId &= 0x3f;\n this.header = header;\n return header;\n } catch (error) {\n throw new Error(`Failed to get header: ${(error as Error).message}`);\n }\n }\n /**\n * @param count\n * @param offset\n * @param skip\n * @returns Data\n */\n readData(count: number, offset: number, skip: number): LASData {\n if (!this.instance) {\n throw new Error('You need to open the file before trying to read stuff');\n }\n\n const {header, instance} = this;\n\n if (!header) {\n throw new Error(\n 'You need to query header before reading, I maintain state that way, sorry :('\n );\n }\n\n try {\n const pointsToRead = Math.min(count * skip, header.pointsCount - instance.readOffset);\n const bufferSize = Math.ceil(pointsToRead / skip);\n let pointsRead = 0;\n\n const thisBuf = new Uint8Array(bufferSize * header.pointsStructSize);\n const bufRead = Module._malloc(header.pointsStructSize);\n for (let i = 0; i < pointsToRead; i++) {\n instance.getPoint(bufRead);\n\n if (i % skip === 0) {\n const a = new Uint8Array(Module.HEAPU8.buffer, bufRead, header.pointsStructSize);\n thisBuf.set(a, pointsRead * header.pointsStructSize);\n pointsRead++;\n }\n\n instance.readOffset++;\n }\n\n return {\n buffer: thisBuf.buffer,\n count: pointsRead,\n hasMoreData: instance.readOffset < header.pointsCount\n };\n } catch (error) {\n throw new Error(`Failed to read data: ${(error as Error).message}`);\n }\n }\n\n /**\n * Deletes the instance\n * @returns boolean\n */\n close(): boolean {\n try {\n if (this.instance !== null) {\n this.instance.delete();\n this.instance = null;\n }\n return true;\n } catch (error) {\n throw new Error(`Failed to close file: ${(error as Error).message}`);\n }\n }\n}\n\n/**\n * Helper class: Decodes LAS records into points\n */\nclass LASDecoder {\n arrayb: ArrayBuffer;\n decoder: (dv: DataView) => {};\n pointsCount: number;\n pointSize: number;\n scale: [number, number, number];\n offset?: [number, number, number];\n mins?: number[];\n maxs?: number[];\n\n constructor(buffer: ArrayBuffer, len: number, header: LASHeader) {\n this.arrayb = buffer;\n this.decoder = POINT_FORMAT_READERS[header.pointsFormatId];\n this.pointsCount = len;\n this.pointSize = header.pointsStructSize;\n this.scale = header.scale;\n this.offset = header.offset;\n this.mins = header.mins;\n this.maxs = header.maxs;\n }\n\n /**\n * Decodes data depends on this point size\n * @param index\n * @returns New object\n */\n getPoint(index: number): {} {\n if (index < 0 || index >= this.pointsCount) {\n throw new Error('Point index out of range');\n }\n\n const dv = new DataView(this.arrayb, index * this.pointSize, this.pointSize);\n return this.decoder(dv);\n }\n}\n\n/**\n * A single consistent interface for loading LAS/LAZ files\n */\nexport class LASFile {\n arraybuffer: ArrayBuffer;\n formatId: number = 0;\n loader: LASLoader | LAZLoader;\n isCompressed: boolean = true;\n isOpen: boolean = false;\n version: number = 0;\n versionAsString: string = '';\n\n constructor(arraybuffer: ArrayBuffer) {\n this.arraybuffer = arraybuffer;\n\n if (this.determineVersion() > 13) {\n throw new Error('Only file versions <= 1.3 are supported at this time');\n }\n\n this.determineFormat();\n if (POINT_FORMAT_READERS[this.formatId] === undefined) {\n throw new Error('The point format ID is not supported');\n }\n\n this.loader = this.isCompressed\n ? new LAZLoader(this.arraybuffer)\n : new LASLoader(this.arraybuffer);\n }\n\n /**\n * Determines format in parameters of LASHeaer\n */\n determineFormat(): void {\n const formatId = readAs(this.arraybuffer, Uint8Array, 32 * 3 + 8);\n const bit7 = (formatId & 0x80) >> 7;\n const bit6 = (formatId & 0x40) >> 6;\n\n if (bit7 === 1 && bit6 === 1) {\n throw new Error('Old style compression not supported');\n }\n\n this.formatId = formatId & 0x3f;\n this.isCompressed = bit7 === 1 || bit6 === 1;\n }\n\n /**\n * Determines version\n * @returns version\n */\n determineVersion(): number {\n const ver = new Int8Array(this.arraybuffer, 24, 2);\n this.version = ver[0] * 10 + ver[1];\n this.versionAsString = `${ver[0]}.${ver[1]}`;\n return this.version;\n }\n\n /**\n * Reads if the file is open\n * @returns boolean\n */\n open(): void {\n if (this.loader.open()) {\n this.isOpen = true;\n }\n }\n /**\n * Gets the header\n * @returns Header\n */\n getHeader(): LASHeader {\n return this.loader.getHeader();\n }\n\n /**\n * @param count\n * @param start\n * @param skip\n * @returns Data\n */\n readData(count: number, start: number, skip: number): LASData {\n return this.loader.readData(count, start, skip);\n }\n\n /**\n * Closes the file\n */\n close(): void {\n if (this.loader.close()) {\n this.isOpen = false;\n }\n }\n /**\n */\n getUnpacker(): typeof LASDecoder {\n return LASDecoder;\n }\n}\n\nexport const LASModuleWasLoaded = false;\n\n/* eslint no-use-before-define: 2 */\n"],"mappings":"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"}
|