@loaders.gl/las 4.3.4 → 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 +15429 -2519
- package/dist/dist.min.js +25 -16
- package/dist/index.cjs +1037 -63
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +7 -33
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -12
- package/dist/index.js.map +1 -0
- package/dist/las-arrow-loader.d.ts +30 -0
- package/dist/las-arrow-loader.d.ts.map +1 -0
- package/dist/las-arrow-loader.js +21 -0
- package/dist/las-arrow-loader.js.map +1 -0
- package/dist/las-format.d.ts +14 -0
- package/dist/las-format.d.ts.map +1 -0
- package/dist/las-format.js +17 -0
- package/dist/las-format.js.map +1 -0
- package/dist/las-loader.d.ts +9 -10
- package/dist/las-loader.d.ts.map +1 -1
- package/dist/las-loader.js +8 -11
- package/dist/las-loader.js.map +1 -0
- package/dist/las-worker.js +65 -58
- 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.d.ts.map +1 -1
- package/dist/lib/get-las-schema.js +6 -2
- package/dist/lib/get-las-schema.js.map +1 -0
- package/dist/lib/las-types.d.ts +2 -1
- package/dist/lib/las-types.d.ts.map +1 -1
- package/dist/lib/las-types.js +4 -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} +7 -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/laz-perf/parse-las.js +189 -0
- 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/{parse-las.js → laz-rs-wasm/parse-las.js} +10 -8
- 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 +4 -0
- package/dist/workers/las-worker.js.map +1 -0
- package/package.json +9 -5
- package/src/index.ts +14 -18
- package/src/las-arrow-loader.ts +26 -0
- package/src/las-format.ts +19 -0
- package/src/las-loader.ts +8 -10
- package/src/laz-rs-loader.ts +22 -0
- package/src/lazperf-loader.ts +22 -0
- package/src/lib/get-las-schema.ts +7 -2
- package/src/lib/las-types.ts +6 -1
- package/src/lib/{laslaz-decoder.ts → laz-perf/laslaz-decoder.ts} +8 -3
- package/src/lib/laz-perf/parse-las.ts +233 -0
- package/src/lib/laz-rs-wasm/laslaz-decoder.ts +528 -0
- package/src/lib/{parse-las.ts → laz-rs-wasm/parse-las.ts} +12 -12
- 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/src/workers/las-worker.ts +4 -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
package/src/las-loader.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
1
5
|
// LASER (LAS) FILE FORMAT
|
|
2
6
|
import type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';
|
|
3
7
|
import type {LASMesh} from './lib/las-types';
|
|
8
|
+
import {LASFormat} from './las-format';
|
|
4
9
|
|
|
5
10
|
// __VERSION__ is injected by babel-plugin-version-inline
|
|
6
11
|
// @ts-ignore TS2304: Cannot find name '__VERSION__'.
|
|
@@ -20,22 +25,15 @@ export type LASLoaderOptions = LoaderOptions & {
|
|
|
20
25
|
|
|
21
26
|
/**
|
|
22
27
|
* Loader for the LAS (LASer) point cloud format
|
|
23
|
-
* @note Does not support LAS v1.4
|
|
24
28
|
*/
|
|
25
|
-
export const
|
|
29
|
+
export const LASWorkerLoader = {
|
|
30
|
+
...LASFormat,
|
|
31
|
+
|
|
26
32
|
dataType: null as unknown as LASMesh,
|
|
27
33
|
batchType: null as never,
|
|
28
34
|
|
|
29
|
-
name: 'LAS',
|
|
30
|
-
id: 'las',
|
|
31
|
-
module: 'las',
|
|
32
35
|
version: VERSION,
|
|
33
36
|
worker: true,
|
|
34
|
-
extensions: ['las', 'laz'], // LAZ is the "compressed" flavor of LAS,
|
|
35
|
-
mimeTypes: ['application/octet-stream'], // TODO - text version?
|
|
36
|
-
text: true,
|
|
37
|
-
binary: true,
|
|
38
|
-
tests: ['LAS'],
|
|
39
37
|
options: {
|
|
40
38
|
las: {
|
|
41
39
|
shape: 'mesh',
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
// LASER (LAS) FILE FORMAT
|
|
6
|
+
import type {LoaderWithParser} from '@loaders.gl/loader-utils';
|
|
7
|
+
import type {LASLoaderOptions} from './las-loader';
|
|
8
|
+
import {LASWorkerLoader} from './las-loader';
|
|
9
|
+
import type {LASMesh} from './lib/las-types';
|
|
10
|
+
import {parseLAS} from './lib/laz-rs-wasm/parse-las';
|
|
11
|
+
import initLazRsWasm from './libs/laz-rs-wasm/laz_rs_wasm';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Loader for the LAS (LASer) point cloud format
|
|
15
|
+
*/
|
|
16
|
+
export const LAZRsLoader = {
|
|
17
|
+
...LASWorkerLoader,
|
|
18
|
+
parse: async (arrayBuffer: ArrayBuffer, options?: LASLoaderOptions) => {
|
|
19
|
+
await initLazRsWasm();
|
|
20
|
+
return parseLAS(arrayBuffer, {...options});
|
|
21
|
+
}
|
|
22
|
+
} as const satisfies LoaderWithParser<LASMesh, never, LASLoaderOptions>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
// LASER (LAS) FILE FORMAT
|
|
6
|
+
import type {LoaderWithParser} from '@loaders.gl/loader-utils';
|
|
7
|
+
import type {LASLoaderOptions} from './las-loader';
|
|
8
|
+
import {LASWorkerLoader} from './las-loader';
|
|
9
|
+
import type {LASMesh} from './lib/las-types';
|
|
10
|
+
import {parseLAS} from './lib/laz-perf/parse-las';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Loader for the LAS (LASer) point cloud format
|
|
14
|
+
* @note Does not support LAS v1.4
|
|
15
|
+
*/
|
|
16
|
+
export const LAZPerfLoader = {
|
|
17
|
+
...LASWorkerLoader,
|
|
18
|
+
parse: async (arrayBuffer: ArrayBuffer, options?: LASLoaderOptions) =>
|
|
19
|
+
parseLAS(arrayBuffer, options),
|
|
20
|
+
parseSync: (arrayBuffer: ArrayBuffer, options?: LASLoaderOptions) =>
|
|
21
|
+
parseLAS(arrayBuffer, options)
|
|
22
|
+
} as const satisfies LoaderWithParser<LASMesh, never, LASLoaderOptions>;
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import {Schema, MeshAttributes} from '@loaders.gl/schema';
|
|
6
|
+
import {deduceMeshSchema} from '@loaders.gl/schema-utils';
|
|
2
7
|
import type {LASHeader} from './las-types';
|
|
3
8
|
|
|
4
9
|
/**
|
|
5
|
-
* Gets schema from
|
|
10
|
+
* Gets schema from LAS header
|
|
6
11
|
* @param lasHeader
|
|
7
12
|
* @param metadata
|
|
8
13
|
* @returns Schema
|
package/src/lib/las-types.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {Mesh} from '@loaders.gl/schema';
|
|
2
6
|
|
|
3
7
|
/**
|
|
4
8
|
* Type for header of the .las file
|
|
@@ -14,6 +18,7 @@ export type LASHeader = {
|
|
|
14
18
|
mins?: number[];
|
|
15
19
|
totalToRead: number;
|
|
16
20
|
totalRead: number;
|
|
21
|
+
hasColor: boolean;
|
|
17
22
|
versionAsString?: string;
|
|
18
23
|
isCompressed?: boolean;
|
|
19
24
|
};
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
1
5
|
/*
|
|
2
6
|
Modified from Uday Verma and Howard Butler's plasio
|
|
3
7
|
https://github.com/verma/plasio/
|
|
4
8
|
MIT License
|
|
5
9
|
*/
|
|
6
10
|
// laslaz.js - treat as compiled code
|
|
7
|
-
import type {LASHeader} from '
|
|
8
|
-
import getModule from '
|
|
11
|
+
import type {LASHeader} from '../las-types';
|
|
12
|
+
import getModule from '../../libs/laz-perf/laz-perf';
|
|
9
13
|
|
|
10
14
|
let Module: any = null;
|
|
11
15
|
|
|
@@ -126,7 +130,8 @@ class LASLoader {
|
|
|
126
130
|
totalToRead: 0,
|
|
127
131
|
totalRead: 0,
|
|
128
132
|
versionAsString: '',
|
|
129
|
-
isCompressed: true
|
|
133
|
+
isCompressed: true,
|
|
134
|
+
hasColor: false
|
|
130
135
|
};
|
|
131
136
|
|
|
132
137
|
constructor(arraybuffer: ArrayBuffer) {
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
// ported and es6-ified from https://github.com/verma/plasio/
|
|
6
|
+
// import type {ArrowTable, ColumnarTable} from '@loaders.gl/schema';
|
|
7
|
+
import type {LASLoaderOptions} from '../../las-loader';
|
|
8
|
+
import type {LASMesh, LASHeader} from '../las-types';
|
|
9
|
+
import {getMeshBoundingBox /* , convertMeshToTable */} from '@loaders.gl/schema-utils';
|
|
10
|
+
import {getLASSchema} from '../get-las-schema';
|
|
11
|
+
import {LASFile} from './laslaz-decoder';
|
|
12
|
+
|
|
13
|
+
type LASChunk = {
|
|
14
|
+
count: number;
|
|
15
|
+
buffer: ArrayBuffer;
|
|
16
|
+
hasMoreData: boolean;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Parsing of .las file
|
|
21
|
+
* @param arrayBuffer
|
|
22
|
+
* @param options
|
|
23
|
+
* @returns LASMesh
|
|
24
|
+
*/
|
|
25
|
+
export function parseLAS(arrayBuffer: ArrayBuffer, options?: LASLoaderOptions): LASMesh {
|
|
26
|
+
return parseLASMesh(arrayBuffer, options);
|
|
27
|
+
// This code breaks pointcloud example on the website
|
|
28
|
+
// const mesh = parseLASMesh(arrayBuffer, options);
|
|
29
|
+
// return convertMeshToTable(mesh, options?.las?.shape || 'mesh') as LASMesh | ArrowTable | ColumnarTable;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Parsing of .las file
|
|
34
|
+
* @param arrayBuffer
|
|
35
|
+
* @param options
|
|
36
|
+
* @returns LASHeader
|
|
37
|
+
*/
|
|
38
|
+
function parseLASMesh(arrayBuffer: ArrayBuffer, options: LASLoaderOptions = {}): LASMesh {
|
|
39
|
+
let pointIndex: number = 0;
|
|
40
|
+
|
|
41
|
+
let positions: Float32Array | Float64Array;
|
|
42
|
+
let colors: Uint8Array | null;
|
|
43
|
+
let intensities: Uint16Array;
|
|
44
|
+
let classifications: Uint8Array;
|
|
45
|
+
let originalHeader: any;
|
|
46
|
+
|
|
47
|
+
const lasMesh: LASMesh = {
|
|
48
|
+
loader: 'las',
|
|
49
|
+
loaderData: {} as LASHeader,
|
|
50
|
+
// shape: 'mesh',
|
|
51
|
+
schema: {fields: [], metadata: {}},
|
|
52
|
+
header: {
|
|
53
|
+
vertexCount: 0,
|
|
54
|
+
boundingBox: [
|
|
55
|
+
[0, 0, 0],
|
|
56
|
+
[0, 0, 0]
|
|
57
|
+
]
|
|
58
|
+
},
|
|
59
|
+
attributes: {},
|
|
60
|
+
topology: 'point-list',
|
|
61
|
+
mode: 0 // GL.POINTS
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
/* eslint-disable max-statements */
|
|
65
|
+
// @ts-ignore Possibly undefined
|
|
66
|
+
parseLASChunked(arrayBuffer, options.las?.skip, (decoder: any = {}, lasHeader: LASHeader) => {
|
|
67
|
+
if (!originalHeader) {
|
|
68
|
+
originalHeader = lasHeader;
|
|
69
|
+
const total = lasHeader.totalToRead;
|
|
70
|
+
|
|
71
|
+
const PositionsType = options.las?.fp64 ? Float64Array : Float32Array;
|
|
72
|
+
positions = new PositionsType(total * 3);
|
|
73
|
+
// laslaz-decoder.js `pointFormatReaders`
|
|
74
|
+
colors = lasHeader.hasColor ? new Uint8Array(total * 4) : null;
|
|
75
|
+
intensities = new Uint16Array(total);
|
|
76
|
+
classifications = new Uint8Array(total);
|
|
77
|
+
|
|
78
|
+
lasMesh.loaderData = lasHeader;
|
|
79
|
+
lasMesh.attributes = {
|
|
80
|
+
POSITION: {value: positions, size: 3},
|
|
81
|
+
// non-gltf attributes, use non-capitalized names for now
|
|
82
|
+
intensity: {value: intensities, size: 1},
|
|
83
|
+
classification: {value: classifications, size: 1}
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
if (colors) {
|
|
87
|
+
lasMesh.attributes.COLOR_0 = {value: colors, size: 4};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const batchSize = decoder.pointsCount;
|
|
92
|
+
const {
|
|
93
|
+
scale: [scaleX, scaleY, scaleZ],
|
|
94
|
+
offset: [offsetX, offsetY, offsetZ]
|
|
95
|
+
} = lasHeader;
|
|
96
|
+
|
|
97
|
+
const twoByteColor = detectTwoByteColors(decoder, batchSize, options.las?.colorDepth);
|
|
98
|
+
|
|
99
|
+
for (let i = 0; i < batchSize; i++) {
|
|
100
|
+
const {position, color, intensity, classification} = decoder.getPoint(i);
|
|
101
|
+
|
|
102
|
+
positions[pointIndex * 3] = position[0] * scaleX + offsetX;
|
|
103
|
+
positions[pointIndex * 3 + 1] = position[1] * scaleY + offsetY;
|
|
104
|
+
positions[pointIndex * 3 + 2] = position[2] * scaleZ + offsetZ;
|
|
105
|
+
|
|
106
|
+
if (color && colors) {
|
|
107
|
+
if (twoByteColor) {
|
|
108
|
+
colors[pointIndex * 4] = color[0] / 256;
|
|
109
|
+
colors[pointIndex * 4 + 1] = color[1] / 256;
|
|
110
|
+
colors[pointIndex * 4 + 2] = color[2] / 256;
|
|
111
|
+
} else {
|
|
112
|
+
colors[pointIndex * 4] = color[0];
|
|
113
|
+
colors[pointIndex * 4 + 1] = color[1];
|
|
114
|
+
colors[pointIndex * 4 + 2] = color[2];
|
|
115
|
+
}
|
|
116
|
+
colors[pointIndex * 4 + 3] = 255;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
intensities[pointIndex] = intensity;
|
|
120
|
+
classifications[pointIndex] = classification;
|
|
121
|
+
|
|
122
|
+
pointIndex++;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const meshBatch = {
|
|
126
|
+
...lasMesh,
|
|
127
|
+
header: {
|
|
128
|
+
vertexCount: lasHeader.totalRead
|
|
129
|
+
},
|
|
130
|
+
progress: lasHeader.totalRead / lasHeader.totalToRead
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
options?.onProgress?.(meshBatch);
|
|
134
|
+
});
|
|
135
|
+
/* eslint-enable max-statements */
|
|
136
|
+
|
|
137
|
+
lasMesh.header = {
|
|
138
|
+
vertexCount: originalHeader.totalToRead,
|
|
139
|
+
boundingBox: getMeshBoundingBox(lasMesh?.attributes || {})
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
if (lasMesh) {
|
|
143
|
+
lasMesh.schema = getLASSchema(lasMesh.loaderData, lasMesh.attributes);
|
|
144
|
+
}
|
|
145
|
+
return lasMesh;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* parse laz data
|
|
150
|
+
* @param rawData
|
|
151
|
+
* @param skip
|
|
152
|
+
* @param onParseData
|
|
153
|
+
* @return parsed point cloud
|
|
154
|
+
*/
|
|
155
|
+
/* eslint-enable max-statements */
|
|
156
|
+
export function parseLASChunked(rawData: ArrayBuffer, skip: number, onParseData: any = {}): void {
|
|
157
|
+
const dataHandler = new LASFile(rawData);
|
|
158
|
+
|
|
159
|
+
try {
|
|
160
|
+
// open data
|
|
161
|
+
dataHandler.open();
|
|
162
|
+
|
|
163
|
+
const header = dataHandler.getHeader();
|
|
164
|
+
// start loading
|
|
165
|
+
const Unpacker = dataHandler.getUnpacker();
|
|
166
|
+
|
|
167
|
+
const totalToRead = Math.ceil(header.pointsCount / Math.max(1, skip));
|
|
168
|
+
header.totalToRead = totalToRead;
|
|
169
|
+
let totalRead = 0;
|
|
170
|
+
|
|
171
|
+
/* eslint-disable no-constant-condition */
|
|
172
|
+
while (true) {
|
|
173
|
+
// @ts-ignore TODO - fix this, looks like we are not passing the right params?
|
|
174
|
+
const chunk: LASChunk = dataHandler.readData(1000 * 100, skip);
|
|
175
|
+
|
|
176
|
+
totalRead += chunk.count;
|
|
177
|
+
|
|
178
|
+
header.totalRead = totalRead;
|
|
179
|
+
|
|
180
|
+
const unpacker = new Unpacker(chunk.buffer, chunk.count, header);
|
|
181
|
+
|
|
182
|
+
// surface unpacker and progress via call back
|
|
183
|
+
// use unpacker.pointsCount and unpacker.getPoint(i) to handle data in app
|
|
184
|
+
onParseData(unpacker, header);
|
|
185
|
+
|
|
186
|
+
if (!chunk.hasMoreData || totalRead >= totalToRead) {
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
} catch (e) {
|
|
191
|
+
throw e;
|
|
192
|
+
} finally {
|
|
193
|
+
dataHandler.close();
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* @param decoder
|
|
199
|
+
* @param batchSize
|
|
200
|
+
* @param colorDepth
|
|
201
|
+
* @returns boolean
|
|
202
|
+
*/
|
|
203
|
+
function detectTwoByteColors(
|
|
204
|
+
decoder: any = {},
|
|
205
|
+
batchSize: number,
|
|
206
|
+
colorDepth?: number | string
|
|
207
|
+
): boolean {
|
|
208
|
+
let twoByteColor = false;
|
|
209
|
+
switch (colorDepth) {
|
|
210
|
+
case 8:
|
|
211
|
+
twoByteColor = false;
|
|
212
|
+
break;
|
|
213
|
+
case 16:
|
|
214
|
+
twoByteColor = true;
|
|
215
|
+
break;
|
|
216
|
+
case 'auto':
|
|
217
|
+
if (decoder.getPoint(0).color) {
|
|
218
|
+
for (let i = 0; i < batchSize; i++) {
|
|
219
|
+
const {color} = decoder.getPoint(i);
|
|
220
|
+
// eslint-disable-next-line max-depth
|
|
221
|
+
if (color[0] > 255 || color[1] > 255 || color[2] > 255) {
|
|
222
|
+
twoByteColor = true;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
break;
|
|
227
|
+
default:
|
|
228
|
+
// eslint-disable-next-line
|
|
229
|
+
console.warn('las: illegal value for options.las.colorDepth');
|
|
230
|
+
break;
|
|
231
|
+
}
|
|
232
|
+
return twoByteColor;
|
|
233
|
+
}
|