@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.
Files changed (82) hide show
  1. package/dist/bundle.d.ts +2 -0
  2. package/dist/bundle.d.ts.map +1 -0
  3. package/dist/bundle.js +2 -2
  4. package/dist/dist.min.js +19087 -0
  5. package/dist/es5/bundle.js +6 -0
  6. package/dist/es5/bundle.js.map +1 -0
  7. package/dist/es5/index.js +44 -0
  8. package/dist/es5/index.js.map +1 -0
  9. package/dist/es5/las-loader.js +30 -0
  10. package/dist/es5/las-loader.js.map +1 -0
  11. package/dist/es5/lib/get-las-schema.js +38 -0
  12. package/dist/es5/lib/get-las-schema.js.map +1 -0
  13. package/dist/es5/lib/las-types.js +2 -0
  14. package/dist/es5/lib/las-types.js.map +1 -0
  15. package/dist/es5/lib/laslaz-decoder.js +364 -0
  16. package/dist/es5/lib/laslaz-decoder.js.map +1 -0
  17. package/dist/es5/lib/libs/laz-perf.js +2 -0
  18. package/dist/es5/lib/libs/laz-perf.js.map +1 -0
  19. package/dist/es5/lib/parse-las.js +187 -0
  20. package/dist/es5/lib/parse-las.js.map +1 -0
  21. package/dist/es5/workers/las-worker.js +6 -0
  22. package/dist/es5/workers/las-worker.js.map +1 -0
  23. package/dist/esm/bundle.js +4 -0
  24. package/dist/esm/bundle.js.map +1 -0
  25. package/dist/esm/index.js +9 -0
  26. package/dist/esm/index.js.map +1 -0
  27. package/dist/esm/las-loader.js +23 -0
  28. package/dist/esm/las-loader.js.map +1 -0
  29. package/dist/esm/lib/get-las-schema.js +31 -0
  30. package/dist/esm/lib/get-las-schema.js.map +1 -0
  31. package/dist/esm/lib/las-types.js +2 -0
  32. package/dist/esm/lib/las-types.js.map +1 -0
  33. package/dist/esm/lib/laslaz-decoder.js +317 -0
  34. package/dist/esm/lib/laslaz-decoder.js.map +1 -0
  35. package/dist/esm/lib/libs/laz-perf.js +2 -0
  36. package/dist/esm/lib/libs/laz-perf.js.map +1 -0
  37. package/dist/esm/lib/parse-las.js +174 -0
  38. package/dist/esm/lib/parse-las.js.map +1 -0
  39. package/dist/esm/workers/las-worker.js +4 -0
  40. package/dist/esm/workers/las-worker.js.map +1 -0
  41. package/dist/index.d.ts +11 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +13 -8
  44. package/dist/las-loader.d.ts +16 -0
  45. package/dist/las-loader.d.ts.map +1 -0
  46. package/dist/las-loader.js +27 -21
  47. package/dist/las-worker.js +18210 -33163
  48. package/dist/lib/get-las-schema.d.ts +16 -0
  49. package/dist/lib/get-las-schema.d.ts.map +1 -0
  50. package/dist/lib/get-las-schema.js +45 -35
  51. package/dist/lib/las-types.d.ts +28 -0
  52. package/dist/lib/las-types.d.ts.map +1 -0
  53. package/dist/lib/las-types.js +2 -2
  54. package/dist/lib/laslaz-decoder.d.ts +134 -0
  55. package/dist/lib/laslaz-decoder.d.ts.map +1 -0
  56. package/dist/lib/laslaz-decoder.js +366 -363
  57. package/dist/lib/libs/laz-perf.d.ts +2 -0
  58. package/dist/lib/libs/laz-perf.d.ts.map +1 -0
  59. package/dist/lib/libs/laz-perf.js +19006 -0
  60. package/dist/lib/parse-las.d.ts +18 -0
  61. package/dist/lib/parse-las.d.ts.map +1 -0
  62. package/dist/lib/parse-las.js +178 -178
  63. package/dist/workers/las-worker.d.ts +2 -0
  64. package/dist/workers/las-worker.d.ts.map +1 -0
  65. package/dist/workers/las-worker.js +5 -4
  66. package/package.json +10 -10
  67. package/src/index.ts +3 -4
  68. package/src/las-loader.ts +3 -3
  69. package/src/lib/get-las-schema.ts +16 -15
  70. package/src/lib/laslaz-decoder.ts +1 -1
  71. package/src/lib/libs/laz-perf.ts +20615 -0
  72. package/src/lib/parse-las.ts +8 -9
  73. package/dist/bundle.js.map +0 -1
  74. package/dist/index.js.map +0 -1
  75. package/dist/las-loader.js.map +0 -1
  76. package/dist/lib/get-las-schema.js.map +0 -1
  77. package/dist/lib/las-types.js.map +0 -1
  78. package/dist/lib/laslaz-decoder.js.map +0 -1
  79. package/dist/lib/parse-las.js.map +0 -1
  80. package/dist/libs/laz-perf.js +0 -19492
  81. package/src/libs/laz-perf.js +0 -19492
  82. /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"}
@@ -1,191 +1,191 @@
1
- import { Schema, getMeshBoundingBox, convertMesh } from '@loaders.gl/schema';
2
- import { LASFile } from './laslaz-decoder';
3
- import { getLASSchema } from './get-las-schema';
4
- export default function parseLAS(arrayBuffer, options) {
5
- var _options$las;
6
-
7
- const mesh = parseLASMesh(arrayBuffer, options);
8
- return convertMesh(mesh, (options === null || options === void 0 ? void 0 : (_options$las = options.las) === null || _options$las === void 0 ? void 0 : _options$las.shape) || 'mesh');
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
- var _options$las2;
13
-
14
- let pointIndex = 0;
15
- let positions;
16
- let colors;
17
- let intensities;
18
- let classifications;
19
- let originalHeader;
20
- const lasMesh = {
21
- loader: 'las',
22
- loaderData: {},
23
- schema: new Schema([]),
24
- header: {
25
- vertexCount: 0,
26
- boundingBox: [[0, 0, 0], [0, 0, 0]]
27
- },
28
- attributes: {},
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
- intensity: {
52
- value: intensities,
53
- size: 1
54
- },
55
- classification: {
56
- value: classifications,
57
- size: 1
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
- if (colors) {
62
- lasMesh.attributes.COLOR_0 = {
63
- value: colors,
64
- size: 4
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
- const batchSize = decoder.pointsCount;
70
- const {
71
- scale: [scaleX, scaleY, scaleZ],
72
- offset: [offsetX, offsetY, offsetZ]
73
- } = lasHeader;
74
- const twoByteColor = detectTwoByteColors(decoder, batchSize, (_options$las4 = options.las) === null || _options$las4 === void 0 ? void 0 : _options$las4.colorDepth);
75
-
76
- for (let i = 0; i < batchSize; i++) {
77
- const {
78
- position,
79
- color,
80
- intensity,
81
- classification
82
- } = decoder.getPoint(i);
83
- positions[pointIndex * 3] = position[0] * scaleX + offsetX;
84
- positions[pointIndex * 3 + 1] = position[1] * scaleY + offsetY;
85
- positions[pointIndex * 3 + 2] = position[2] * scaleZ + offsetZ;
86
-
87
- if (color && colors) {
88
- if (twoByteColor) {
89
- colors[pointIndex * 4] = color[0] / 256;
90
- colors[pointIndex * 4 + 1] = color[1] / 256;
91
- colors[pointIndex * 4 + 2] = color[2] / 256;
92
- } else {
93
- colors[pointIndex * 4] = color[0];
94
- colors[pointIndex * 4 + 1] = color[1];
95
- colors[pointIndex * 4 + 2] = color[2];
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
- const meshBatch = { ...lasMesh,
107
- header: {
108
- vertexCount: lasHeader.totalRead
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
- let twoByteColor = false;
159
-
160
- switch (colorDepth) {
161
- case 8:
162
- twoByteColor = false;
163
- break;
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
- break;
183
-
184
- default:
185
- console.warn('las: illegal value for options.las.colorDepth');
186
- break;
187
- }
188
-
189
- return twoByteColor;
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=las-worker.d.ts.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
- import {createLoaderWorker} from '@loaders.gl/loader-utils';
2
- import {LASLoader} from '../index';
3
-
4
- createLoaderWorker(LASLoader);
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.4",
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": "src/index.ts",
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/bundle.js",
40
- "build-worker": "esbuild src/workers/las-worker.js --bundle --outfile=dist/las-worker.js"
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.4",
45
- "@loaders.gl/schema": "4.0.0-alpha.4",
46
- "apache-arrow": "^4.0.0"
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": "53026061b3c8871f7e96d3a5826125cc6613bddc"
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): Map<string, string> {
22
- const metadataMap = new Map();
23
- metadataMap.set('las_pointsOffset', lasHeader.pointsOffset.toString(10));
24
- metadataMap.set('las_pointsFormatId', lasHeader.pointsFormatId.toString(10));
25
- metadataMap.set('las_pointsStructSize', lasHeader.pointsStructSize.toString(10));
26
- metadataMap.set('las_pointsCount', lasHeader.pointsCount.toString(10));
27
- metadataMap.set('las_scale', JSON.stringify(lasHeader.scale));
28
- metadataMap.set('las_offset', JSON.stringify(lasHeader.offset));
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
- metadataMap.set('las_maxs', JSON.stringify(lasHeader.maxs));
31
+ metadata.las_maxs = JSON.stringify(lasHeader.maxs);
31
32
  }
32
33
  if (lasHeader.mins !== undefined) {
33
- metadataMap.set('las_mins', JSON.stringify(lasHeader.mins));
34
+ metadata.las_mins = JSON.stringify(lasHeader.mins);
34
35
  }
35
- metadataMap.set('las_totalToRead', lasHeader.totalToRead.toString(10));
36
- metadataMap.set('las_pointsFortotalReadmatId', lasHeader.totalRead.toString(10));
36
+ metadata.las_totalToRead = lasHeader.totalToRead.toString(10);
37
+ metadata.las_pointsFortotalReadmatId = lasHeader.totalRead.toString(10);
37
38
  if (lasHeader.versionAsString !== undefined) {
38
- metadataMap.set('las_versionAsString', lasHeader.versionAsString);
39
+ metadata.las_versionAsString = lasHeader.versionAsString;
39
40
  }
40
41
  if (lasHeader.isCompressed !== undefined) {
41
- metadataMap.set('las_isCompressed', lasHeader.isCompressed.toString());
42
+ metadata.las_isCompressed = lasHeader.isCompressed.toString();
42
43
  }
43
- return metadataMap;
44
+ return metadata;
44
45
  }
@@ -5,7 +5,7 @@
5
5
  */
6
6
  // laslaz.js - treat as compiled code
7
7
  import type {LASHeader} from './las-types';
8
- import getModule from '../libs/laz-perf';
8
+ import getModule from './libs/laz-perf';
9
9
 
10
10
  let Module: any = null;
11
11