@loaders.gl/las 4.4.0-alpha.1 → 4.4.0-alpha.10
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/dist.dev.js +1022 -77
- package/dist/dist.min.js +21 -21
- package/dist/index.cjs +1024 -79
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -0
- package/dist/las-arrow-loader.d.ts +10 -8
- package/dist/las-arrow-loader.d.ts.map +1 -1
- package/dist/las-arrow-loader.js +5 -4
- package/dist/las-arrow-loader.js.map +1 -0
- package/dist/las-format.d.ts +2 -2
- package/dist/las-format.js +3 -2
- package/dist/las-format.js.map +1 -0
- package/dist/las-loader.d.ts +2 -31
- package/dist/las-loader.d.ts.map +1 -1
- package/dist/las-loader.js +2 -20
- package/dist/las-loader.js.map +1 -0
- package/dist/las-worker.js +65 -71
- package/dist/laz-rs-loader.d.ts +29 -0
- package/dist/laz-rs-loader.d.ts.map +1 -0
- package/dist/laz-rs-loader.js +17 -0
- package/dist/laz-rs-loader.js.map +1 -0
- package/dist/lazperf-loader.d.ts +31 -0
- package/dist/lazperf-loader.d.ts.map +1 -0
- package/dist/lazperf-loader.js +15 -0
- package/dist/lazperf-loader.js.map +1 -0
- package/dist/lib/get-las-schema.d.ts +1 -1
- package/dist/lib/get-las-schema.js +2 -1
- package/dist/lib/get-las-schema.js.map +1 -0
- package/dist/lib/las-types.d.ts +1 -0
- package/dist/lib/las-types.d.ts.map +1 -1
- package/dist/lib/las-types.js +1 -0
- package/dist/lib/las-types.js.map +1 -0
- package/dist/lib/{laslaz-decoder.d.ts → laz-perf/laslaz-decoder.d.ts} +1 -1
- package/dist/lib/laz-perf/laslaz-decoder.d.ts.map +1 -0
- package/dist/lib/{laslaz-decoder.js → laz-perf/laslaz-decoder.js} +4 -2
- package/dist/lib/laz-perf/laslaz-decoder.js.map +1 -0
- package/dist/lib/{parse-las.d.ts → laz-perf/parse-las.d.ts} +3 -3
- package/dist/lib/laz-perf/parse-las.d.ts.map +1 -0
- package/dist/lib/{parse-las.js → laz-perf/parse-las.js} +6 -6
- package/dist/lib/laz-perf/parse-las.js.map +1 -0
- package/dist/lib/laz-rs-wasm/laslaz-decoder.d.ts +134 -0
- package/dist/lib/laz-rs-wasm/laslaz-decoder.d.ts.map +1 -0
- package/dist/lib/laz-rs-wasm/laslaz-decoder.js +446 -0
- package/dist/lib/laz-rs-wasm/laslaz-decoder.js.map +1 -0
- package/dist/lib/laz-rs-wasm/parse-las.d.ts +18 -0
- package/dist/lib/laz-rs-wasm/parse-las.d.ts.map +1 -0
- package/dist/lib/laz-rs-wasm/parse-las.js +188 -0
- package/dist/lib/laz-rs-wasm/parse-las.js.map +1 -0
- package/dist/libs/laz-perf/laz-perf.d.ts.map +1 -0
- package/dist/{lib/libs → libs/laz-perf}/laz-perf.js +1 -0
- package/dist/libs/laz-perf/laz-perf.js.map +1 -0
- package/dist/libs/laz-rs-wasm/laz_rs_wasm.d.ts +95 -0
- package/dist/libs/laz-rs-wasm/laz_rs_wasm.d.ts.map +1 -0
- package/dist/libs/laz-rs-wasm/laz_rs_wasm.js +425 -0
- package/dist/libs/laz-rs-wasm/laz_rs_wasm.js.map +1 -0
- package/dist/workers/las-worker.js +1 -0
- package/dist/workers/las-worker.js.map +1 -0
- package/package.json +9 -6
- package/src/index.ts +8 -1
- package/src/las-arrow-loader.ts +6 -5
- package/src/las-format.ts +2 -2
- package/src/las-loader.ts +1 -23
- package/src/laz-rs-loader.ts +22 -0
- package/src/lazperf-loader.ts +22 -0
- package/src/lib/get-las-schema.ts +1 -1
- package/src/lib/las-types.ts +1 -0
- package/src/lib/{laslaz-decoder.ts → laz-perf/laslaz-decoder.ts} +4 -3
- package/src/lib/{parse-las.ts → laz-perf/parse-las.ts} +7 -10
- package/src/lib/laz-rs-wasm/laslaz-decoder.ts +528 -0
- package/src/lib/laz-rs-wasm/parse-las.ts +232 -0
- package/src/libs/laz-rs-wasm/laz_rs_wasm.d.ts +80 -0
- package/src/libs/laz-rs-wasm/laz_rs_wasm.js +477 -0
- package/src/libs/laz-rs-wasm/laz_rs_wasm_bg.wasm +0 -0
- package/src/libs/laz-rs-wasm/laz_rs_wasm_bg.wasm.d.ts +31 -0
- package/src/libs/laz-rs-wasm/package.json +19 -0
- package/dist/lib/laslaz-decoder.d.ts.map +0 -1
- package/dist/lib/libs/laz-perf.d.ts.map +0 -1
- package/dist/lib/parse-las.d.ts.map +0 -1
- /package/dist/{lib/libs → libs/laz-perf}/laz-perf.d.ts +0 -0
- /package/src/{lib/libs → libs/laz-perf}/laz-perf.ts +0 -0
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { WasmLasZipDecompressor } from "../../libs/laz-rs-wasm/laz_rs_wasm.js";
|
|
5
|
+
const POINT_FORMAT_READERS = {
|
|
6
|
+
0: (dv) => {
|
|
7
|
+
return {
|
|
8
|
+
position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
|
|
9
|
+
intensity: dv.getUint16(12, true),
|
|
10
|
+
classification: dv.getUint8(15)
|
|
11
|
+
};
|
|
12
|
+
},
|
|
13
|
+
1: (dv) => {
|
|
14
|
+
return {
|
|
15
|
+
position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
|
|
16
|
+
intensity: dv.getUint16(12, true),
|
|
17
|
+
classification: dv.getUint8(15)
|
|
18
|
+
};
|
|
19
|
+
},
|
|
20
|
+
2: (dv) => {
|
|
21
|
+
return {
|
|
22
|
+
position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
|
|
23
|
+
intensity: dv.getUint16(12, true),
|
|
24
|
+
classification: dv.getUint8(15),
|
|
25
|
+
color: [dv.getUint16(20, true), dv.getUint16(22, true), dv.getUint16(24, true)]
|
|
26
|
+
};
|
|
27
|
+
},
|
|
28
|
+
3: (dv) => {
|
|
29
|
+
return {
|
|
30
|
+
position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
|
|
31
|
+
intensity: dv.getUint16(12, true),
|
|
32
|
+
classification: dv.getUint8(15),
|
|
33
|
+
color: [dv.getUint16(28, true), dv.getUint16(30, true), dv.getUint16(32, true)]
|
|
34
|
+
};
|
|
35
|
+
},
|
|
36
|
+
4: (dv) => {
|
|
37
|
+
return {
|
|
38
|
+
position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
|
|
39
|
+
intensity: dv.getUint16(12, true),
|
|
40
|
+
classification: dv.getUint8(15)
|
|
41
|
+
};
|
|
42
|
+
},
|
|
43
|
+
5: (dv) => {
|
|
44
|
+
return {
|
|
45
|
+
position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
|
|
46
|
+
intensity: dv.getUint16(12, true),
|
|
47
|
+
classification: dv.getUint8(15),
|
|
48
|
+
color: [dv.getUint16(28, true), dv.getUint16(30, true), dv.getUint16(32, true)]
|
|
49
|
+
};
|
|
50
|
+
},
|
|
51
|
+
6: (dv) => {
|
|
52
|
+
return {
|
|
53
|
+
position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
|
|
54
|
+
intensity: dv.getUint16(12, true),
|
|
55
|
+
classification: dv.getUint8(16)
|
|
56
|
+
};
|
|
57
|
+
},
|
|
58
|
+
7: (dv) => {
|
|
59
|
+
return {
|
|
60
|
+
position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
|
|
61
|
+
intensity: dv.getUint16(12, true),
|
|
62
|
+
classification: dv.getUint8(16),
|
|
63
|
+
color: [dv.getUint16(30, true), dv.getUint16(32, true), dv.getUint16(34, true)]
|
|
64
|
+
};
|
|
65
|
+
},
|
|
66
|
+
8: (dv) => {
|
|
67
|
+
return {
|
|
68
|
+
position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
|
|
69
|
+
intensity: dv.getUint16(12, true),
|
|
70
|
+
classification: dv.getUint8(16),
|
|
71
|
+
color: [dv.getUint16(30, true), dv.getUint16(32, true), dv.getUint16(34, true)]
|
|
72
|
+
};
|
|
73
|
+
},
|
|
74
|
+
9: (dv) => {
|
|
75
|
+
return {
|
|
76
|
+
position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
|
|
77
|
+
intensity: dv.getUint16(12, true),
|
|
78
|
+
classification: dv.getUint8(16)
|
|
79
|
+
};
|
|
80
|
+
},
|
|
81
|
+
10: (dv) => {
|
|
82
|
+
return {
|
|
83
|
+
position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
|
|
84
|
+
intensity: dv.getUint16(12, true),
|
|
85
|
+
classification: dv.getUint8(16),
|
|
86
|
+
color: [dv.getUint16(30, true), dv.getUint16(32, true), dv.getUint16(34, true)]
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Reads incoming binary data depends on the Type parameter
|
|
92
|
+
* @param buf
|
|
93
|
+
* @param Type
|
|
94
|
+
* @param offset
|
|
95
|
+
* @param count
|
|
96
|
+
* @returns number | number[] from incoming binary data
|
|
97
|
+
*/
|
|
98
|
+
function readAs(buf, Type = {}, offset, count) {
|
|
99
|
+
count = count === undefined || count === 0 ? 1 : count;
|
|
100
|
+
const sub = buf.slice(offset, offset + Type.BYTES_PER_ELEMENT * count);
|
|
101
|
+
const r = new Type(sub);
|
|
102
|
+
if (count === 1) {
|
|
103
|
+
return r[0];
|
|
104
|
+
}
|
|
105
|
+
const ret = [];
|
|
106
|
+
for (let i = 0; i < count; i++) {
|
|
107
|
+
ret.push(r[i]);
|
|
108
|
+
}
|
|
109
|
+
return ret;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Parsing of header's attributes
|
|
113
|
+
* @param arraybuffer
|
|
114
|
+
* @returns header as LASHeader
|
|
115
|
+
*/
|
|
116
|
+
function parseLASHeader(arraybuffer) {
|
|
117
|
+
const ver = new Uint8Array(arraybuffer, 24, 2);
|
|
118
|
+
const version = ver[0] * 10 + ver[1];
|
|
119
|
+
const versionAsString = `${ver[0]}.${ver[1]}`;
|
|
120
|
+
const rawPointsFormatId = readAs(arraybuffer, Uint8Array, 32 * 3 + 8);
|
|
121
|
+
const bit7 = (rawPointsFormatId & 0x80) >> 7;
|
|
122
|
+
const bit6 = (rawPointsFormatId & 0x40) >> 6;
|
|
123
|
+
const isCompressed = bit7 === 1 || bit6 === 1;
|
|
124
|
+
const pointsFormatId = rawPointsFormatId & 0x3f;
|
|
125
|
+
const o = {
|
|
126
|
+
pointsOffset: readAs(arraybuffer, Uint32Array, 32 * 3),
|
|
127
|
+
pointsFormatId,
|
|
128
|
+
pointsStructSize: readAs(arraybuffer, Uint16Array, 32 * 3 + 8 + 1),
|
|
129
|
+
pointsCount: readAs(arraybuffer, Uint32Array, 32 * 3 + 11),
|
|
130
|
+
versionAsString,
|
|
131
|
+
isCompressed
|
|
132
|
+
};
|
|
133
|
+
let start = 32 * 3 + 35;
|
|
134
|
+
o.scale = readAs(arraybuffer, Float64Array, start, 3);
|
|
135
|
+
start += 24; // 8*3
|
|
136
|
+
o.offset = readAs(arraybuffer, Float64Array, start, 3);
|
|
137
|
+
start += 24;
|
|
138
|
+
const bounds = readAs(arraybuffer, Float64Array, start, 6);
|
|
139
|
+
start += 48; // 8*6
|
|
140
|
+
o.maxs = [bounds[0], bounds[2], bounds[4]];
|
|
141
|
+
o.mins = [bounds[1], bounds[3], bounds[5]];
|
|
142
|
+
start += 20; // 8*20
|
|
143
|
+
if (version === 14) {
|
|
144
|
+
o.pointsCount = Number(readAs(arraybuffer, BigUint64Array, start));
|
|
145
|
+
}
|
|
146
|
+
const colorPointFormats = new Set([2, 3, 5, 7, 8, 10]);
|
|
147
|
+
o.hasColor = colorPointFormats.has(pointsFormatId);
|
|
148
|
+
// @ts-expect-error Caused when restoring lazperf
|
|
149
|
+
return o;
|
|
150
|
+
}
|
|
151
|
+
// LAS Loader
|
|
152
|
+
// Loads uncompressed files
|
|
153
|
+
//
|
|
154
|
+
class LASLoader {
|
|
155
|
+
arraybuffer;
|
|
156
|
+
readOffset = 0;
|
|
157
|
+
header = null;
|
|
158
|
+
constructor(arraybuffer) {
|
|
159
|
+
this.arraybuffer = arraybuffer;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* @returns boolean
|
|
163
|
+
*/
|
|
164
|
+
open() {
|
|
165
|
+
// Nothing needs to be done to open this
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Parsing of incoming binary
|
|
170
|
+
* @returns LASHeader
|
|
171
|
+
*/
|
|
172
|
+
getHeader() {
|
|
173
|
+
this.header = parseLASHeader(this.arraybuffer);
|
|
174
|
+
return this.header;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Reading data
|
|
178
|
+
* @param count
|
|
179
|
+
* @param skip
|
|
180
|
+
* @returns LasData
|
|
181
|
+
*/
|
|
182
|
+
readData(count, skip) {
|
|
183
|
+
const { header, arraybuffer } = this;
|
|
184
|
+
if (!header) {
|
|
185
|
+
throw new Error('Cannot start reading data till a header request is issued');
|
|
186
|
+
}
|
|
187
|
+
let { readOffset } = this;
|
|
188
|
+
let start;
|
|
189
|
+
if (skip <= 1) {
|
|
190
|
+
count = Math.min(count, header.pointsCount - readOffset);
|
|
191
|
+
start = header.pointsOffset + readOffset * header.pointsStructSize;
|
|
192
|
+
const end = start + count * header.pointsStructSize;
|
|
193
|
+
readOffset += count;
|
|
194
|
+
this.readOffset = readOffset;
|
|
195
|
+
return {
|
|
196
|
+
buffer: arraybuffer.slice(start, end),
|
|
197
|
+
count,
|
|
198
|
+
hasMoreData: readOffset < header.pointsCount
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
const pointsToRead = Math.min(count * skip, header.pointsCount - readOffset);
|
|
202
|
+
const bufferSize = Math.ceil(pointsToRead / skip);
|
|
203
|
+
let pointsRead = 0;
|
|
204
|
+
const buf = new Uint8Array(bufferSize * header.pointsStructSize);
|
|
205
|
+
for (let i = 0; i < pointsToRead; i++) {
|
|
206
|
+
if (i % skip === 0) {
|
|
207
|
+
start = header.pointsOffset + readOffset * header.pointsStructSize;
|
|
208
|
+
const src = new Uint8Array(arraybuffer, start, header.pointsStructSize);
|
|
209
|
+
buf.set(src, pointsRead * header.pointsStructSize);
|
|
210
|
+
pointsRead++;
|
|
211
|
+
}
|
|
212
|
+
readOffset++;
|
|
213
|
+
}
|
|
214
|
+
this.readOffset = readOffset;
|
|
215
|
+
return {
|
|
216
|
+
buffer: buf.buffer,
|
|
217
|
+
count: pointsRead,
|
|
218
|
+
hasMoreData: readOffset < header.pointsCount
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Method which brings data to null to close the file
|
|
223
|
+
* @returns
|
|
224
|
+
*/
|
|
225
|
+
close() {
|
|
226
|
+
// @ts-ignore Possibly null
|
|
227
|
+
this.arraybuffer = null;
|
|
228
|
+
return true;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* LAZ Loader
|
|
233
|
+
* Uses NaCL module to load LAZ files
|
|
234
|
+
*/
|
|
235
|
+
class LAZLoader {
|
|
236
|
+
arraybuffer;
|
|
237
|
+
readOffset = 0;
|
|
238
|
+
instance = null;
|
|
239
|
+
header = null;
|
|
240
|
+
constructor(arraybuffer) {
|
|
241
|
+
this.arraybuffer = arraybuffer;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Opens the file
|
|
245
|
+
* @returns boolean
|
|
246
|
+
*/
|
|
247
|
+
open() {
|
|
248
|
+
try {
|
|
249
|
+
const abInt = new Uint8Array(this.arraybuffer);
|
|
250
|
+
this.instance = new WasmLasZipDecompressor(abInt);
|
|
251
|
+
return true;
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
throw new Error(`Failed to open file: ${error.message}`);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
getHeader() {
|
|
258
|
+
try {
|
|
259
|
+
this.header = parseLASHeader(this.arraybuffer);
|
|
260
|
+
return this.header;
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
throw new Error(`Failed to get header: ${error.message}`);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* @param count
|
|
268
|
+
* @param offset
|
|
269
|
+
* @param skip
|
|
270
|
+
* @returns LASData
|
|
271
|
+
*/
|
|
272
|
+
readData(count, skip) {
|
|
273
|
+
if (!this.instance) {
|
|
274
|
+
throw new Error('You need to open the file before trying to read stuff');
|
|
275
|
+
}
|
|
276
|
+
const { header, instance } = this;
|
|
277
|
+
if (!header) {
|
|
278
|
+
throw new Error('You need to query header before reading, I maintain state that way, sorry :(');
|
|
279
|
+
}
|
|
280
|
+
try {
|
|
281
|
+
const pointsToRead = Math.min(count * skip, header.pointsCount - this.readOffset);
|
|
282
|
+
const bufferSize = Math.ceil(pointsToRead / skip);
|
|
283
|
+
let pointsRead = 0;
|
|
284
|
+
const buf = new Uint8Array(bufferSize * header.pointsStructSize);
|
|
285
|
+
const bufRead = new Uint8Array(header.pointsStructSize);
|
|
286
|
+
for (let i = 0; i < pointsToRead; i++) {
|
|
287
|
+
instance.decompress_many(bufRead);
|
|
288
|
+
if (i % skip === 0) {
|
|
289
|
+
buf.set(bufRead, pointsRead * header.pointsStructSize);
|
|
290
|
+
pointsRead++;
|
|
291
|
+
}
|
|
292
|
+
this.readOffset++;
|
|
293
|
+
}
|
|
294
|
+
return {
|
|
295
|
+
buffer: buf.buffer,
|
|
296
|
+
count: pointsRead,
|
|
297
|
+
hasMoreData: this.readOffset < header.pointsCount
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
catch (error) {
|
|
301
|
+
throw new Error(`Failed to read data: ${error.message}`);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Deletes the instance
|
|
306
|
+
* @returns boolean
|
|
307
|
+
*/
|
|
308
|
+
close() {
|
|
309
|
+
try {
|
|
310
|
+
if (this.instance !== null) {
|
|
311
|
+
this.instance.free();
|
|
312
|
+
this.instance = null;
|
|
313
|
+
}
|
|
314
|
+
// @ts-ignore Possibly null
|
|
315
|
+
this.arraybuffer = null;
|
|
316
|
+
return true;
|
|
317
|
+
}
|
|
318
|
+
catch (error) {
|
|
319
|
+
throw new Error(`Failed to close file: ${error.message}`);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Helper class: Decodes LAS records into points
|
|
325
|
+
*/
|
|
326
|
+
class LASDecoder {
|
|
327
|
+
arrayb;
|
|
328
|
+
decoder;
|
|
329
|
+
pointsCount;
|
|
330
|
+
pointSize;
|
|
331
|
+
constructor(buffer, len, header) {
|
|
332
|
+
this.arrayb = buffer;
|
|
333
|
+
this.decoder = POINT_FORMAT_READERS[header.pointsFormatId];
|
|
334
|
+
this.pointsCount = len;
|
|
335
|
+
this.pointSize = header.pointsStructSize;
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Decodes data depends on this point size
|
|
339
|
+
* @param index
|
|
340
|
+
* @returns New object
|
|
341
|
+
*/
|
|
342
|
+
getPoint(index) {
|
|
343
|
+
if (index < 0 || index >= this.pointsCount) {
|
|
344
|
+
throw new Error('Point index out of range');
|
|
345
|
+
}
|
|
346
|
+
const dv = new DataView(this.arrayb, index * this.pointSize, this.pointSize);
|
|
347
|
+
return this.decoder(dv);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* A single consistent interface for loading LAS/LAZ files
|
|
352
|
+
*/
|
|
353
|
+
export class LASFile {
|
|
354
|
+
arraybuffer;
|
|
355
|
+
formatId = 0;
|
|
356
|
+
loader;
|
|
357
|
+
isCompressed = true;
|
|
358
|
+
isOpen = false;
|
|
359
|
+
version = 0;
|
|
360
|
+
versionAsString = '';
|
|
361
|
+
constructor(arraybuffer) {
|
|
362
|
+
this.arraybuffer = arraybuffer;
|
|
363
|
+
this.validate();
|
|
364
|
+
this.loader = this.isCompressed
|
|
365
|
+
? new LAZLoader(this.arraybuffer)
|
|
366
|
+
: new LASLoader(this.arraybuffer);
|
|
367
|
+
}
|
|
368
|
+
validate() {
|
|
369
|
+
const signature = readAs(this.arraybuffer, Uint8Array, 0, 4);
|
|
370
|
+
const check = String.fromCharCode(...signature);
|
|
371
|
+
if (check !== 'LASF') {
|
|
372
|
+
throw new Error('Invalid LAS file');
|
|
373
|
+
}
|
|
374
|
+
if (this.determineVersion() > 14) {
|
|
375
|
+
throw new Error('Only file versions <= 1.4 are supported');
|
|
376
|
+
}
|
|
377
|
+
this.determineFormat();
|
|
378
|
+
if (POINT_FORMAT_READERS[this.formatId] === undefined) {
|
|
379
|
+
throw new Error('The point format ID is not supported');
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Determines format in parameters of LASHeader
|
|
384
|
+
*/
|
|
385
|
+
determineFormat() {
|
|
386
|
+
const formatId = readAs(this.arraybuffer, Uint8Array, 32 * 3 + 8);
|
|
387
|
+
const bit7 = (formatId & 0x80) >> 7;
|
|
388
|
+
const bit6 = (formatId & 0x40) >> 6;
|
|
389
|
+
if (bit7 === 1 && bit6 === 1) {
|
|
390
|
+
throw new Error('Old style compression not supported');
|
|
391
|
+
}
|
|
392
|
+
this.formatId = formatId & 0x3f;
|
|
393
|
+
this.isCompressed = bit7 === 1 || bit6 === 1;
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Determines version
|
|
397
|
+
* @returns version
|
|
398
|
+
*/
|
|
399
|
+
determineVersion() {
|
|
400
|
+
const ver = new Uint8Array(this.arraybuffer, 24, 2);
|
|
401
|
+
this.version = ver[0] * 10 + ver[1];
|
|
402
|
+
this.versionAsString = `${ver[0]}.${ver[1]}`;
|
|
403
|
+
return this.version;
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Reads if the file is open
|
|
407
|
+
* @returns boolean
|
|
408
|
+
*/
|
|
409
|
+
open() {
|
|
410
|
+
if (this.loader.open()) {
|
|
411
|
+
this.isOpen = true;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Gets the header
|
|
416
|
+
* @returns Header
|
|
417
|
+
*/
|
|
418
|
+
getHeader() {
|
|
419
|
+
return this.loader.getHeader();
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* @param count
|
|
423
|
+
* @param start
|
|
424
|
+
* @param skip
|
|
425
|
+
* @returns LASData
|
|
426
|
+
*/
|
|
427
|
+
readData(count, skip) {
|
|
428
|
+
return this.loader.readData(count, skip);
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Closes the file
|
|
432
|
+
*/
|
|
433
|
+
close() {
|
|
434
|
+
if (this.loader.close()) {
|
|
435
|
+
this.isOpen = false;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
*/
|
|
440
|
+
getUnpacker() {
|
|
441
|
+
return LASDecoder;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
/* eslint no-use-before-define: 2 */
|
|
445
|
+
// export const LASModuleWasLoaded = false;
|
|
446
|
+
//# sourceMappingURL=laslaz-decoder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"laslaz-decoder.js","sourceRoot":"","sources":["../../../src/lib/laz-rs-wasm/laslaz-decoder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { LASLoaderOptions } from "../../las-loader.js";
|
|
2
|
+
import type { LASMesh } from "../las-types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Parsing of .las file
|
|
5
|
+
* @param arrayBuffer
|
|
6
|
+
* @param options
|
|
7
|
+
* @returns LASMesh
|
|
8
|
+
*/
|
|
9
|
+
export declare function parseLAS(arrayBuffer: ArrayBuffer, options?: LASLoaderOptions): LASMesh;
|
|
10
|
+
/**
|
|
11
|
+
* parse laz data
|
|
12
|
+
* @param rawData
|
|
13
|
+
* @param skip
|
|
14
|
+
* @param onParseData
|
|
15
|
+
* @return parsed point cloud
|
|
16
|
+
*/
|
|
17
|
+
export declare function parseLASChunked(rawData: ArrayBuffer, skip: number, onParseData?: any): void;
|
|
18
|
+
//# sourceMappingURL=parse-las.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-las.d.ts","sourceRoot":"","sources":["../../../src/lib/laz-rs-wasm/parse-las.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,gBAAgB,EAAC,4BAAyB;AACvD,OAAO,KAAK,EAAC,OAAO,EAAY,wBAAqB;AAWrD;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAKtF;AAsHD;;;;;;GAMG;AAEH,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,GAAE,GAAQ,GAAG,IAAI,CAsC/F"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { getMeshBoundingBox /* , convertMeshToTable */ } from '@loaders.gl/schema-utils';
|
|
5
|
+
import { getLASSchema } from "../get-las-schema.js";
|
|
6
|
+
import { LASFile } from "./laslaz-decoder.js";
|
|
7
|
+
/**
|
|
8
|
+
* Parsing of .las file
|
|
9
|
+
* @param arrayBuffer
|
|
10
|
+
* @param options
|
|
11
|
+
* @returns LASMesh
|
|
12
|
+
*/
|
|
13
|
+
export function parseLAS(arrayBuffer, options) {
|
|
14
|
+
return parseLASMesh(arrayBuffer, options);
|
|
15
|
+
// This code breaks pointcloud example on the website
|
|
16
|
+
// const mesh = parseLASMesh(arrayBuffer, options);
|
|
17
|
+
// return convertMeshToTable(mesh, options?.las?.shape || 'mesh') as LASMesh | ArrowTable | ColumnarTable;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Parsing of .las file
|
|
21
|
+
* @param arrayBuffer
|
|
22
|
+
* @param options
|
|
23
|
+
* @returns LASHeader
|
|
24
|
+
*/
|
|
25
|
+
function parseLASMesh(arrayBuffer, options = {}) {
|
|
26
|
+
let pointIndex = 0;
|
|
27
|
+
let positions;
|
|
28
|
+
let colors;
|
|
29
|
+
let intensities;
|
|
30
|
+
let classifications;
|
|
31
|
+
let originalHeader;
|
|
32
|
+
const lasMesh = {
|
|
33
|
+
loader: 'las',
|
|
34
|
+
loaderData: {},
|
|
35
|
+
// shape: 'mesh',
|
|
36
|
+
schema: { fields: [], metadata: {} },
|
|
37
|
+
header: {
|
|
38
|
+
vertexCount: 0,
|
|
39
|
+
boundingBox: [
|
|
40
|
+
[0, 0, 0],
|
|
41
|
+
[0, 0, 0]
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
attributes: {},
|
|
45
|
+
topology: 'point-list',
|
|
46
|
+
mode: 0 // GL.POINTS
|
|
47
|
+
};
|
|
48
|
+
/* eslint-disable max-statements */
|
|
49
|
+
// @ts-ignore Possibly undefined
|
|
50
|
+
parseLASChunked(arrayBuffer, options.las?.skip, (decoder = {}, lasHeader) => {
|
|
51
|
+
if (!originalHeader) {
|
|
52
|
+
originalHeader = lasHeader;
|
|
53
|
+
const total = lasHeader.totalToRead;
|
|
54
|
+
const PositionsType = options.las?.fp64 ? Float64Array : Float32Array;
|
|
55
|
+
positions = new PositionsType(total * 3);
|
|
56
|
+
// laslaz-decoder.js `pointFormatReaders`
|
|
57
|
+
colors = lasHeader.hasColor ? new Uint8Array(total * 4) : null;
|
|
58
|
+
intensities = new Uint16Array(total);
|
|
59
|
+
classifications = new Uint8Array(total);
|
|
60
|
+
lasMesh.loaderData = lasHeader;
|
|
61
|
+
lasMesh.attributes = {
|
|
62
|
+
POSITION: { value: positions, size: 3 },
|
|
63
|
+
// non-gltf attributes, use non-capitalized names for now
|
|
64
|
+
intensity: { value: intensities, size: 1 },
|
|
65
|
+
classification: { value: classifications, size: 1 }
|
|
66
|
+
};
|
|
67
|
+
if (colors) {
|
|
68
|
+
lasMesh.attributes.COLOR_0 = { value: colors, size: 4 };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const batchSize = decoder.pointsCount;
|
|
72
|
+
const { scale: [scaleX, scaleY, scaleZ], offset: [offsetX, offsetY, offsetZ] } = lasHeader;
|
|
73
|
+
const twoByteColor = detectTwoByteColors(decoder, batchSize, options.las?.colorDepth);
|
|
74
|
+
for (let i = 0; i < batchSize; i++) {
|
|
75
|
+
const { position, color, intensity, classification } = decoder.getPoint(i);
|
|
76
|
+
positions[pointIndex * 3] = position[0] * scaleX + offsetX;
|
|
77
|
+
positions[pointIndex * 3 + 1] = position[1] * scaleY + offsetY;
|
|
78
|
+
positions[pointIndex * 3 + 2] = position[2] * scaleZ + offsetZ;
|
|
79
|
+
if (color && colors) {
|
|
80
|
+
if (twoByteColor) {
|
|
81
|
+
colors[pointIndex * 4] = color[0] / 256;
|
|
82
|
+
colors[pointIndex * 4 + 1] = color[1] / 256;
|
|
83
|
+
colors[pointIndex * 4 + 2] = color[2] / 256;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
colors[pointIndex * 4] = color[0];
|
|
87
|
+
colors[pointIndex * 4 + 1] = color[1];
|
|
88
|
+
colors[pointIndex * 4 + 2] = color[2];
|
|
89
|
+
}
|
|
90
|
+
colors[pointIndex * 4 + 3] = 255;
|
|
91
|
+
}
|
|
92
|
+
intensities[pointIndex] = intensity;
|
|
93
|
+
classifications[pointIndex] = classification;
|
|
94
|
+
pointIndex++;
|
|
95
|
+
}
|
|
96
|
+
const meshBatch = {
|
|
97
|
+
...lasMesh,
|
|
98
|
+
header: {
|
|
99
|
+
vertexCount: lasHeader.totalRead
|
|
100
|
+
},
|
|
101
|
+
progress: lasHeader.totalRead / lasHeader.totalToRead
|
|
102
|
+
};
|
|
103
|
+
options?.onProgress?.(meshBatch);
|
|
104
|
+
});
|
|
105
|
+
/* eslint-enable max-statements */
|
|
106
|
+
lasMesh.header = {
|
|
107
|
+
vertexCount: originalHeader.totalToRead,
|
|
108
|
+
boundingBox: getMeshBoundingBox(lasMesh?.attributes || {})
|
|
109
|
+
};
|
|
110
|
+
if (lasMesh) {
|
|
111
|
+
lasMesh.schema = getLASSchema(lasMesh.loaderData, lasMesh.attributes);
|
|
112
|
+
}
|
|
113
|
+
return lasMesh;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* parse laz data
|
|
117
|
+
* @param rawData
|
|
118
|
+
* @param skip
|
|
119
|
+
* @param onParseData
|
|
120
|
+
* @return parsed point cloud
|
|
121
|
+
*/
|
|
122
|
+
/* eslint-enable max-statements */
|
|
123
|
+
export function parseLASChunked(rawData, skip, onParseData = {}) {
|
|
124
|
+
const dataHandler = new LASFile(rawData);
|
|
125
|
+
try {
|
|
126
|
+
// open data
|
|
127
|
+
dataHandler.open();
|
|
128
|
+
const header = dataHandler.getHeader();
|
|
129
|
+
// start loading
|
|
130
|
+
const Unpacker = dataHandler.getUnpacker();
|
|
131
|
+
const totalToRead = Math.ceil(header.pointsCount / Math.max(1, skip));
|
|
132
|
+
header.totalToRead = totalToRead;
|
|
133
|
+
let totalRead = 0;
|
|
134
|
+
/* eslint-disable no-constant-condition */
|
|
135
|
+
while (true) {
|
|
136
|
+
const chunk = dataHandler.readData(1000 * 100, skip);
|
|
137
|
+
totalRead += chunk.count;
|
|
138
|
+
header.totalRead = totalRead;
|
|
139
|
+
const unpacker = new Unpacker(chunk.buffer, chunk.count, header);
|
|
140
|
+
// surface unpacker and progress via call back
|
|
141
|
+
// use unpacker.pointsCount and unpacker.getPoint(i) to handle data in app
|
|
142
|
+
onParseData(unpacker, header);
|
|
143
|
+
if (!chunk.hasMoreData || totalRead >= totalToRead) {
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
catch (e) {
|
|
149
|
+
throw e;
|
|
150
|
+
}
|
|
151
|
+
finally {
|
|
152
|
+
dataHandler.close();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* @param decoder
|
|
157
|
+
* @param batchSize
|
|
158
|
+
* @param colorDepth
|
|
159
|
+
* @returns boolean
|
|
160
|
+
*/
|
|
161
|
+
function detectTwoByteColors(decoder = {}, batchSize, colorDepth) {
|
|
162
|
+
let twoByteColor = false;
|
|
163
|
+
switch (colorDepth) {
|
|
164
|
+
case 8:
|
|
165
|
+
twoByteColor = false;
|
|
166
|
+
break;
|
|
167
|
+
case 16:
|
|
168
|
+
twoByteColor = true;
|
|
169
|
+
break;
|
|
170
|
+
case 'auto':
|
|
171
|
+
if (decoder.getPoint(0).color) {
|
|
172
|
+
for (let i = 0; i < batchSize; i++) {
|
|
173
|
+
const { color } = decoder.getPoint(i);
|
|
174
|
+
// eslint-disable-next-line max-depth
|
|
175
|
+
if (color[0] > 255 || color[1] > 255 || color[2] > 255) {
|
|
176
|
+
twoByteColor = true;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
break;
|
|
181
|
+
default:
|
|
182
|
+
// eslint-disable-next-line
|
|
183
|
+
console.warn('las: illegal value for options.las.colorDepth');
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
return twoByteColor;
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=parse-las.js.map
|