@loaders.gl/las 4.0.0-alpha.4 → 4.0.0-alpha.6
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/bundle.d.ts +2 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/bundle.js +2 -2
- package/dist/dist.min.js +19087 -0
- package/dist/es5/bundle.js +6 -0
- package/dist/es5/bundle.js.map +1 -0
- package/dist/es5/index.js +44 -0
- package/dist/es5/index.js.map +1 -0
- package/dist/es5/las-loader.js +30 -0
- package/dist/es5/las-loader.js.map +1 -0
- package/dist/es5/lib/get-las-schema.js +38 -0
- package/dist/es5/lib/get-las-schema.js.map +1 -0
- package/dist/es5/lib/las-types.js +2 -0
- package/dist/es5/lib/las-types.js.map +1 -0
- package/dist/es5/lib/laslaz-decoder.js +364 -0
- package/dist/es5/lib/laslaz-decoder.js.map +1 -0
- package/dist/es5/lib/libs/laz-perf.js +2 -0
- package/dist/es5/lib/libs/laz-perf.js.map +1 -0
- package/dist/es5/lib/parse-las.js +187 -0
- package/dist/es5/lib/parse-las.js.map +1 -0
- package/dist/es5/workers/las-worker.js +6 -0
- package/dist/es5/workers/las-worker.js.map +1 -0
- package/dist/esm/bundle.js +4 -0
- package/dist/esm/bundle.js.map +1 -0
- package/dist/esm/index.js +9 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/las-loader.js +23 -0
- package/dist/esm/las-loader.js.map +1 -0
- package/dist/esm/lib/get-las-schema.js +31 -0
- package/dist/esm/lib/get-las-schema.js.map +1 -0
- package/dist/esm/lib/las-types.js +2 -0
- package/dist/esm/lib/las-types.js.map +1 -0
- package/dist/esm/lib/laslaz-decoder.js +317 -0
- package/dist/esm/lib/laslaz-decoder.js.map +1 -0
- package/dist/esm/lib/libs/laz-perf.js +2 -0
- package/dist/esm/lib/libs/laz-perf.js.map +1 -0
- package/dist/esm/lib/parse-las.js +174 -0
- package/dist/esm/lib/parse-las.js.map +1 -0
- package/dist/esm/workers/las-worker.js +4 -0
- package/dist/esm/workers/las-worker.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -8
- package/dist/las-loader.d.ts +16 -0
- package/dist/las-loader.d.ts.map +1 -0
- package/dist/las-loader.js +27 -21
- package/dist/las-worker.js +18210 -33163
- package/dist/lib/get-las-schema.d.ts +16 -0
- package/dist/lib/get-las-schema.d.ts.map +1 -0
- package/dist/lib/get-las-schema.js +45 -35
- package/dist/lib/las-types.d.ts +28 -0
- package/dist/lib/las-types.d.ts.map +1 -0
- package/dist/lib/las-types.js +2 -2
- package/dist/lib/laslaz-decoder.d.ts +134 -0
- package/dist/lib/laslaz-decoder.d.ts.map +1 -0
- package/dist/lib/laslaz-decoder.js +366 -363
- package/dist/lib/libs/laz-perf.d.ts +2 -0
- package/dist/lib/libs/laz-perf.d.ts.map +1 -0
- package/dist/lib/libs/laz-perf.js +19006 -0
- package/dist/lib/parse-las.d.ts +18 -0
- package/dist/lib/parse-las.d.ts.map +1 -0
- package/dist/lib/parse-las.js +178 -178
- package/dist/workers/las-worker.d.ts +2 -0
- package/dist/workers/las-worker.d.ts.map +1 -0
- package/dist/workers/las-worker.js +5 -4
- package/package.json +10 -10
- package/src/index.ts +3 -4
- package/src/las-loader.ts +3 -3
- package/src/lib/get-las-schema.ts +16 -15
- package/src/lib/laslaz-decoder.ts +1 -1
- package/src/lib/libs/laz-perf.ts +20615 -0
- package/src/lib/parse-las.ts +8 -9
- package/dist/bundle.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/las-loader.js.map +0 -1
- package/dist/lib/get-las-schema.js.map +0 -1
- package/dist/lib/las-types.js.map +0 -1
- package/dist/lib/laslaz-decoder.js.map +0 -1
- package/dist/lib/parse-las.js.map +0 -1
- package/dist/libs/laz-perf.js +0 -19492
- package/src/libs/laz-perf.js +0 -19492
- /package/src/workers/{las-worker.js → las-worker.ts} +0 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { LASLoaderOptions } from '../las-loader';
|
|
2
|
+
import type { LASMesh } from './las-types';
|
|
3
|
+
/**
|
|
4
|
+
* Parsing of .las file
|
|
5
|
+
* @param arrayBuffer
|
|
6
|
+
* @param options
|
|
7
|
+
* @returns LASHeader
|
|
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/parse-las.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAC,OAAO,EAAY,MAAM,aAAa,CAAC;AAapD;;;;;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,CAwC/F"}
|
package/dist/lib/parse-las.js
CHANGED
|
@@ -1,191 +1,191 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseLASChunked = exports.parseLAS = void 0;
|
|
4
|
+
const schema_1 = require("@loaders.gl/schema");
|
|
5
|
+
const laslaz_decoder_1 = require("./laslaz-decoder");
|
|
6
|
+
const get_las_schema_1 = require("./get-las-schema");
|
|
7
|
+
/**
|
|
8
|
+
* Parsing of .las file
|
|
9
|
+
* @param arrayBuffer
|
|
10
|
+
* @param options
|
|
11
|
+
* @returns LASHeader
|
|
12
|
+
*/
|
|
13
|
+
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 convertMesh(mesh, options?.las?.shape || 'mesh') as LASMesh | ArrowTable | ColumnarTable;
|
|
9
18
|
}
|
|
10
|
-
|
|
19
|
+
exports.parseLAS = parseLAS;
|
|
20
|
+
/**
|
|
21
|
+
* Parsing of .las file
|
|
22
|
+
* @param arrayBuffer
|
|
23
|
+
* @param options
|
|
24
|
+
* @returns LASHeader
|
|
25
|
+
*/
|
|
11
26
|
function parseLASMesh(arrayBuffer, options = {}) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
topology: 'point-list',
|
|
30
|
-
mode: 0
|
|
31
|
-
};
|
|
32
|
-
parseLASChunked(arrayBuffer, (_options$las2 = options.las) === null || _options$las2 === void 0 ? void 0 : _options$las2.skip, (decoder = {}, lasHeader) => {
|
|
33
|
-
var _options$las4, _options$onProgress;
|
|
34
|
-
|
|
35
|
-
if (!originalHeader) {
|
|
36
|
-
var _options$las3;
|
|
37
|
-
|
|
38
|
-
originalHeader = lasHeader;
|
|
39
|
-
const total = lasHeader.totalToRead;
|
|
40
|
-
const PositionsType = (_options$las3 = options.las) !== null && _options$las3 !== void 0 && _options$las3.fp64 ? Float64Array : Float32Array;
|
|
41
|
-
positions = new PositionsType(total * 3);
|
|
42
|
-
colors = lasHeader.pointsFormatId >= 2 ? new Uint8Array(total * 4) : null;
|
|
43
|
-
intensities = new Uint16Array(total);
|
|
44
|
-
classifications = new Uint8Array(total);
|
|
45
|
-
lasMesh.loaderData = lasHeader;
|
|
46
|
-
lasMesh.attributes = {
|
|
47
|
-
POSITION: {
|
|
48
|
-
value: positions,
|
|
49
|
-
size: 3
|
|
27
|
+
let pointIndex = 0;
|
|
28
|
+
let positions;
|
|
29
|
+
let colors;
|
|
30
|
+
let intensities;
|
|
31
|
+
let classifications;
|
|
32
|
+
let originalHeader;
|
|
33
|
+
const lasMesh = {
|
|
34
|
+
loader: 'las',
|
|
35
|
+
loaderData: {},
|
|
36
|
+
// shape: 'mesh',
|
|
37
|
+
schema: { fields: [], metadata: {} },
|
|
38
|
+
header: {
|
|
39
|
+
vertexCount: 0,
|
|
40
|
+
boundingBox: [
|
|
41
|
+
[0, 0, 0],
|
|
42
|
+
[0, 0, 0]
|
|
43
|
+
]
|
|
50
44
|
},
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
45
|
+
attributes: {},
|
|
46
|
+
topology: 'point-list',
|
|
47
|
+
mode: 0 // GL.POINTS
|
|
48
|
+
};
|
|
49
|
+
/* eslint-disable max-statements */
|
|
50
|
+
// @ts-ignore Possibly undefined
|
|
51
|
+
parseLASChunked(arrayBuffer, options.las?.skip, (decoder = {}, lasHeader) => {
|
|
52
|
+
if (!originalHeader) {
|
|
53
|
+
originalHeader = lasHeader;
|
|
54
|
+
const total = lasHeader.totalToRead;
|
|
55
|
+
const PositionsType = options.las?.fp64 ? Float64Array : Float32Array;
|
|
56
|
+
positions = new PositionsType(total * 3);
|
|
57
|
+
// laslaz-decoder.js `pointFormatReaders`
|
|
58
|
+
colors = lasHeader.pointsFormatId >= 2 ? new Uint8Array(total * 4) : null;
|
|
59
|
+
intensities = new Uint16Array(total);
|
|
60
|
+
classifications = new Uint8Array(total);
|
|
61
|
+
lasMesh.loaderData = lasHeader;
|
|
62
|
+
lasMesh.attributes = {
|
|
63
|
+
POSITION: { value: positions, size: 3 },
|
|
64
|
+
// non-gltf attributes, use non-capitalized names for now
|
|
65
|
+
intensity: { value: intensities, size: 1 },
|
|
66
|
+
classification: { value: classifications, size: 1 }
|
|
67
|
+
};
|
|
68
|
+
if (colors) {
|
|
69
|
+
lasMesh.attributes.COLOR_0 = { value: colors, size: 4 };
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const batchSize = decoder.pointsCount;
|
|
73
|
+
const { scale: [scaleX, scaleY, scaleZ], offset: [offsetX, offsetY, offsetZ] } = lasHeader;
|
|
74
|
+
const twoByteColor = detectTwoByteColors(decoder, batchSize, options.las?.colorDepth);
|
|
75
|
+
for (let i = 0; i < batchSize; i++) {
|
|
76
|
+
const { position, color, intensity, classification } = decoder.getPoint(i);
|
|
77
|
+
positions[pointIndex * 3] = position[0] * scaleX + offsetX;
|
|
78
|
+
positions[pointIndex * 3 + 1] = position[1] * scaleY + offsetY;
|
|
79
|
+
positions[pointIndex * 3 + 2] = position[2] * scaleZ + offsetZ;
|
|
80
|
+
if (color && colors) {
|
|
81
|
+
if (twoByteColor) {
|
|
82
|
+
colors[pointIndex * 4] = color[0] / 256;
|
|
83
|
+
colors[pointIndex * 4 + 1] = color[1] / 256;
|
|
84
|
+
colors[pointIndex * 4 + 2] = color[2] / 256;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
colors[pointIndex * 4] = color[0];
|
|
88
|
+
colors[pointIndex * 4 + 1] = color[1];
|
|
89
|
+
colors[pointIndex * 4 + 2] = color[2];
|
|
90
|
+
}
|
|
91
|
+
colors[pointIndex * 4 + 3] = 255;
|
|
92
|
+
}
|
|
93
|
+
intensities[pointIndex] = intensity;
|
|
94
|
+
classifications[pointIndex] = classification;
|
|
95
|
+
pointIndex++;
|
|
58
96
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
97
|
+
const meshBatch = {
|
|
98
|
+
...lasMesh,
|
|
99
|
+
header: {
|
|
100
|
+
vertexCount: lasHeader.totalRead
|
|
101
|
+
},
|
|
102
|
+
progress: lasHeader.totalRead / lasHeader.totalToRead
|
|
65
103
|
};
|
|
66
|
-
|
|
104
|
+
options?.onProgress?.(meshBatch);
|
|
105
|
+
});
|
|
106
|
+
/* eslint-enable max-statements */
|
|
107
|
+
lasMesh.header = {
|
|
108
|
+
vertexCount: originalHeader.totalToRead,
|
|
109
|
+
boundingBox: (0, schema_1.getMeshBoundingBox)(lasMesh?.attributes || {})
|
|
110
|
+
};
|
|
111
|
+
if (lasMesh) {
|
|
112
|
+
lasMesh.schema = (0, get_las_schema_1.getLASSchema)(lasMesh.loaderData, lasMesh.attributes);
|
|
67
113
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
114
|
+
return lasMesh;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* parse laz data
|
|
118
|
+
* @param rawData
|
|
119
|
+
* @param skip
|
|
120
|
+
* @param onParseData
|
|
121
|
+
* @return parsed point cloud
|
|
122
|
+
*/
|
|
123
|
+
/* eslint-enable max-statements */
|
|
124
|
+
function parseLASChunked(rawData, skip, onParseData = {}) {
|
|
125
|
+
const dataHandler = new laslaz_decoder_1.LASFile(rawData);
|
|
126
|
+
try {
|
|
127
|
+
// open data
|
|
128
|
+
dataHandler.open();
|
|
129
|
+
const header = dataHandler.getHeader();
|
|
130
|
+
// start loading
|
|
131
|
+
const Unpacker = dataHandler.getUnpacker();
|
|
132
|
+
const totalToRead = Math.ceil(header.pointsCount / Math.max(1, skip));
|
|
133
|
+
header.totalToRead = totalToRead;
|
|
134
|
+
let totalRead = 0;
|
|
135
|
+
/* eslint-disable no-constant-condition */
|
|
136
|
+
while (true) {
|
|
137
|
+
const chunk = dataHandler.readData(1000 * 100, 0, skip);
|
|
138
|
+
totalRead += chunk.count;
|
|
139
|
+
header.totalRead = totalRead;
|
|
140
|
+
header.versionAsString = chunk.versionAsString;
|
|
141
|
+
header.isCompressed = chunk.isCompressed;
|
|
142
|
+
const unpacker = new Unpacker(chunk.buffer, chunk.count, header);
|
|
143
|
+
// surface unpacker and progress via call back
|
|
144
|
+
// use unpacker.pointsCount and unpacker.getPoint(i) to handle data in app
|
|
145
|
+
onParseData(unpacker, header);
|
|
146
|
+
if (!chunk.hasMoreData || totalRead >= totalToRead) {
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
96
149
|
}
|
|
97
|
-
|
|
98
|
-
colors[pointIndex * 4 + 3] = 255;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
intensities[pointIndex] = intensity;
|
|
102
|
-
classifications[pointIndex] = classification;
|
|
103
|
-
pointIndex++;
|
|
104
150
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
progress: lasHeader.totalRead / lasHeader.totalToRead
|
|
111
|
-
};
|
|
112
|
-
options === null || options === void 0 ? void 0 : (_options$onProgress = options.onProgress) === null || _options$onProgress === void 0 ? void 0 : _options$onProgress.call(options, meshBatch);
|
|
113
|
-
});
|
|
114
|
-
lasMesh.header = {
|
|
115
|
-
vertexCount: originalHeader.totalToRead,
|
|
116
|
-
boundingBox: getMeshBoundingBox((lasMesh === null || lasMesh === void 0 ? void 0 : lasMesh.attributes) || {})
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
if (lasMesh) {
|
|
120
|
-
lasMesh.schema = getLASSchema(lasMesh.loaderData, lasMesh.attributes);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
return lasMesh;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
export function parseLASChunked(rawData, skip, onParseData = {}) {
|
|
127
|
-
const dataHandler = new LASFile(rawData);
|
|
128
|
-
|
|
129
|
-
try {
|
|
130
|
-
dataHandler.open();
|
|
131
|
-
const header = dataHandler.getHeader();
|
|
132
|
-
const Unpacker = dataHandler.getUnpacker();
|
|
133
|
-
const totalToRead = Math.ceil(header.pointsCount / Math.max(1, skip));
|
|
134
|
-
header.totalToRead = totalToRead;
|
|
135
|
-
let totalRead = 0;
|
|
136
|
-
|
|
137
|
-
while (true) {
|
|
138
|
-
const chunk = dataHandler.readData(1000 * 100, 0, skip);
|
|
139
|
-
totalRead += chunk.count;
|
|
140
|
-
header.totalRead = totalRead;
|
|
141
|
-
header.versionAsString = chunk.versionAsString;
|
|
142
|
-
header.isCompressed = chunk.isCompressed;
|
|
143
|
-
const unpacker = new Unpacker(chunk.buffer, chunk.count, header);
|
|
144
|
-
onParseData(unpacker, header);
|
|
145
|
-
|
|
146
|
-
if (!chunk.hasMoreData || totalRead >= totalToRead) {
|
|
147
|
-
break;
|
|
148
|
-
}
|
|
151
|
+
catch (e) {
|
|
152
|
+
throw e;
|
|
153
|
+
}
|
|
154
|
+
finally {
|
|
155
|
+
dataHandler.close();
|
|
149
156
|
}
|
|
150
|
-
} catch (e) {
|
|
151
|
-
throw e;
|
|
152
|
-
} finally {
|
|
153
|
-
dataHandler.close();
|
|
154
|
-
}
|
|
155
157
|
}
|
|
156
|
-
|
|
158
|
+
exports.parseLASChunked = parseLASChunked;
|
|
159
|
+
/**
|
|
160
|
+
* @param decoder
|
|
161
|
+
* @param batchSize
|
|
162
|
+
* @param colorDepth
|
|
163
|
+
* @returns boolean
|
|
164
|
+
*/
|
|
157
165
|
function detectTwoByteColors(decoder = {}, batchSize, colorDepth) {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
case 16:
|
|
166
|
-
twoByteColor = true;
|
|
167
|
-
break;
|
|
168
|
-
|
|
169
|
-
case 'auto':
|
|
170
|
-
if (decoder.getPoint(0).color) {
|
|
171
|
-
for (let i = 0; i < batchSize; i++) {
|
|
172
|
-
const {
|
|
173
|
-
color
|
|
174
|
-
} = decoder.getPoint(i);
|
|
175
|
-
|
|
176
|
-
if (color[0] > 255 || color[1] > 255 || color[2] > 255) {
|
|
166
|
+
let twoByteColor = false;
|
|
167
|
+
switch (colorDepth) {
|
|
168
|
+
case 8:
|
|
169
|
+
twoByteColor = false;
|
|
170
|
+
break;
|
|
171
|
+
case 16:
|
|
177
172
|
twoByteColor = true;
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
173
|
+
break;
|
|
174
|
+
case 'auto':
|
|
175
|
+
if (decoder.getPoint(0).color) {
|
|
176
|
+
for (let i = 0; i < batchSize; i++) {
|
|
177
|
+
const { color } = decoder.getPoint(i);
|
|
178
|
+
// eslint-disable-next-line max-depth
|
|
179
|
+
if (color[0] > 255 || color[1] > 255 || color[2] > 255) {
|
|
180
|
+
twoByteColor = true;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
break;
|
|
185
|
+
default:
|
|
186
|
+
// eslint-disable-next-line
|
|
187
|
+
console.warn('las: illegal value for options.las.colorDepth');
|
|
188
|
+
break;
|
|
189
|
+
}
|
|
190
|
+
return twoByteColor;
|
|
190
191
|
}
|
|
191
|
-
//# sourceMappingURL=parse-las.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"las-worker.d.ts","sourceRoot":"","sources":["../../src/workers/las-worker.ts"],"names":[],"mappings":""}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const loader_utils_1 = require("@loaders.gl/loader-utils");
|
|
4
|
+
const index_1 = require("../index");
|
|
5
|
+
(0, loader_utils_1.createLoaderWorker)(index_1.LASLoader);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loaders.gl/las",
|
|
3
|
-
"version": "4.0.0-alpha.
|
|
3
|
+
"version": "4.0.0-alpha.6",
|
|
4
4
|
"description": "Framework-independent loader for the LAS and LAZ formats",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
"LAS",
|
|
20
20
|
"LAZ"
|
|
21
21
|
],
|
|
22
|
-
"types": "
|
|
23
|
-
"main": "dist/index.js",
|
|
24
|
-
"module": "dist/index.js",
|
|
22
|
+
"types": "dist/index.d.ts",
|
|
23
|
+
"main": "dist/es5/index.js",
|
|
24
|
+
"module": "dist/esm/index.js",
|
|
25
25
|
"sideEffects": false,
|
|
26
26
|
"browser": {
|
|
27
27
|
"fs": false,
|
|
@@ -36,14 +36,14 @@
|
|
|
36
36
|
],
|
|
37
37
|
"scripts": {
|
|
38
38
|
"pre-build": "npm run build-bundle && npm run build-worker",
|
|
39
|
-
"build-bundle": "esbuild src/bundle.ts --bundle --outfile=dist/
|
|
40
|
-
"build-worker": "esbuild src/workers/las-worker.
|
|
39
|
+
"build-bundle": "esbuild src/bundle.ts --bundle --outfile=dist/dist.min.js",
|
|
40
|
+
"build-worker": "esbuild src/workers/las-worker.ts --bundle --outfile=dist/las-worker.js --define:__VERSION__=\\\"$npm_package_version\\\""
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
43
|
"@babel/runtime": "^7.3.1",
|
|
44
|
-
"@loaders.gl/loader-utils": "4.0.0-alpha.
|
|
45
|
-
"@loaders.gl/schema": "4.0.0-alpha.
|
|
46
|
-
"apache-arrow": "^
|
|
44
|
+
"@loaders.gl/loader-utils": "4.0.0-alpha.6",
|
|
45
|
+
"@loaders.gl/schema": "4.0.0-alpha.6",
|
|
46
|
+
"apache-arrow": "^9.0.0"
|
|
47
47
|
},
|
|
48
|
-
"gitHead": "
|
|
48
|
+
"gitHead": "acc1985050dfaa0f1f0c066f8da5bce7454a046c"
|
|
49
49
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type {LoaderWithParser} from '@loaders.gl/loader-utils';
|
|
2
2
|
import type {LASLoaderOptions} from './las-loader';
|
|
3
|
+
import type {LASMesh} from './lib/las-types';
|
|
3
4
|
import {LASLoader as LASWorkerLoader} from './las-loader';
|
|
4
|
-
import parseLAS from './lib/parse-las';
|
|
5
|
+
import {parseLAS} from './lib/parse-las';
|
|
5
6
|
|
|
6
7
|
// LASLoader
|
|
7
8
|
|
|
@@ -11,12 +12,10 @@ export {LASWorkerLoader};
|
|
|
11
12
|
/**
|
|
12
13
|
* Loader for the LAS (LASer) point cloud format
|
|
13
14
|
*/
|
|
14
|
-
export const LASLoader = {
|
|
15
|
+
export const LASLoader: LoaderWithParser<LASMesh, never, LASLoaderOptions> = {
|
|
15
16
|
...LASWorkerLoader,
|
|
16
17
|
parse: async (arrayBuffer: ArrayBuffer, options?: LASLoaderOptions) =>
|
|
17
18
|
parseLAS(arrayBuffer, options),
|
|
18
19
|
parseSync: (arrayBuffer: ArrayBuffer, options?: LASLoaderOptions) =>
|
|
19
20
|
parseLAS(arrayBuffer, options)
|
|
20
21
|
};
|
|
21
|
-
|
|
22
|
-
export const _typecheckLoader: LoaderWithParser = LASLoader;
|
package/src/las-loader.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// LASER (LAS) FILE FORMAT
|
|
2
2
|
import type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';
|
|
3
|
+
import type {LASMesh} from './lib/las-types';
|
|
3
4
|
|
|
4
5
|
// __VERSION__ is injected by babel-plugin-version-inline
|
|
5
6
|
// @ts-ignore TS2304: Cannot find name '__VERSION__'.
|
|
@@ -12,6 +13,7 @@ export type LASLoaderOptions = LoaderOptions & {
|
|
|
12
13
|
skip?: number;
|
|
13
14
|
colorDepth?: number | string;
|
|
14
15
|
};
|
|
16
|
+
onProgress?: Function;
|
|
15
17
|
};
|
|
16
18
|
|
|
17
19
|
const DEFAULT_LAS_OPTIONS: LASLoaderOptions = {
|
|
@@ -26,7 +28,7 @@ const DEFAULT_LAS_OPTIONS: LASLoaderOptions = {
|
|
|
26
28
|
/**
|
|
27
29
|
* Loader for the LAS (LASer) point cloud format
|
|
28
30
|
*/
|
|
29
|
-
export const LASLoader = {
|
|
31
|
+
export const LASLoader: Loader<LASMesh, never, LASLoaderOptions> = {
|
|
30
32
|
name: 'LAS',
|
|
31
33
|
id: 'las',
|
|
32
34
|
module: 'las',
|
|
@@ -39,5 +41,3 @@ export const LASLoader = {
|
|
|
39
41
|
tests: ['LAS'],
|
|
40
42
|
options: DEFAULT_LAS_OPTIONS
|
|
41
43
|
};
|
|
42
|
-
|
|
43
|
-
export const _typecheckLoader: Loader = LASLoader;
|
|
@@ -18,27 +18,28 @@ export function getLASSchema(lasHeader: LASHeader, attributes: MeshAttributes):
|
|
|
18
18
|
* @param lasHeader
|
|
19
19
|
* @returns
|
|
20
20
|
*/
|
|
21
|
-
export function makeMetadataFromLasHeader(lasHeader: LASHeader):
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
21
|
+
export function makeMetadataFromLasHeader(lasHeader: LASHeader): Record<string, string> {
|
|
22
|
+
const metadata: Record<string, string> = {};
|
|
23
|
+
/* eslint-disable camelcase */
|
|
24
|
+
metadata.las_pointsOffset = lasHeader.pointsOffset.toString(10);
|
|
25
|
+
metadata.las_pointsFormatId = lasHeader.pointsFormatId.toString(10);
|
|
26
|
+
metadata.las_pointsStructSize = lasHeader.pointsStructSize.toString(10);
|
|
27
|
+
metadata.las_pointsCount = lasHeader.pointsCount.toString(10);
|
|
28
|
+
metadata.las_scale = JSON.stringify(lasHeader.scale);
|
|
29
|
+
metadata.las_offset = JSON.stringify(lasHeader.offset);
|
|
29
30
|
if (lasHeader.maxs !== undefined) {
|
|
30
|
-
|
|
31
|
+
metadata.las_maxs = JSON.stringify(lasHeader.maxs);
|
|
31
32
|
}
|
|
32
33
|
if (lasHeader.mins !== undefined) {
|
|
33
|
-
|
|
34
|
+
metadata.las_mins = JSON.stringify(lasHeader.mins);
|
|
34
35
|
}
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
metadata.las_totalToRead = lasHeader.totalToRead.toString(10);
|
|
37
|
+
metadata.las_pointsFortotalReadmatId = lasHeader.totalRead.toString(10);
|
|
37
38
|
if (lasHeader.versionAsString !== undefined) {
|
|
38
|
-
|
|
39
|
+
metadata.las_versionAsString = lasHeader.versionAsString;
|
|
39
40
|
}
|
|
40
41
|
if (lasHeader.isCompressed !== undefined) {
|
|
41
|
-
|
|
42
|
+
metadata.las_isCompressed = lasHeader.isCompressed.toString();
|
|
42
43
|
}
|
|
43
|
-
return
|
|
44
|
+
return metadata;
|
|
44
45
|
}
|