@loaders.gl/las 3.1.0-beta.7 → 3.1.0

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.
@@ -1,34 +1,45 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
6
8
  exports.default = parseLAS;
7
9
  exports.parseLASChunked = parseLASChunked;
8
10
 
11
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
+
13
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
14
+
9
15
  var _schema = require("@loaders.gl/schema");
10
16
 
11
17
  var _laslazDecoder = require("./laslaz-decoder");
12
18
 
13
19
  var _getLasSchema = require("./get-las-schema");
14
20
 
21
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
22
+
23
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
24
+
15
25
  function parseLAS(arrayBuffer, options) {
16
26
  var _options$las;
17
27
 
18
- const mesh = parseLASMesh(arrayBuffer, options);
28
+ var mesh = parseLASMesh(arrayBuffer, options);
19
29
  return (0, _schema.convertMesh)(mesh, (options === null || options === void 0 ? void 0 : (_options$las = options.las) === null || _options$las === void 0 ? void 0 : _options$las.shape) || 'mesh');
20
30
  }
21
31
 
22
- function parseLASMesh(arrayBuffer, options = {}) {
32
+ function parseLASMesh(arrayBuffer) {
23
33
  var _options$las2;
24
34
 
25
- let pointIndex = 0;
26
- let positions;
27
- let colors;
28
- let intensities;
29
- let classifications;
30
- let originalHeader;
31
- const lasMesh = {
35
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
36
+ var pointIndex = 0;
37
+ var positions;
38
+ var colors;
39
+ var intensities;
40
+ var classifications;
41
+ var originalHeader;
42
+ var lasMesh = {
32
43
  loader: 'las',
33
44
  loaderData: {},
34
45
  schema: new _schema.Schema([]),
@@ -40,15 +51,18 @@ function parseLASMesh(arrayBuffer, options = {}) {
40
51
  topology: 'point-list',
41
52
  mode: 0
42
53
  };
43
- parseLASChunked(arrayBuffer, (_options$las2 = options.las) === null || _options$las2 === void 0 ? void 0 : _options$las2.skip, (decoder = {}, lasHeader) => {
54
+ parseLASChunked(arrayBuffer, (_options$las2 = options.las) === null || _options$las2 === void 0 ? void 0 : _options$las2.skip, function () {
44
55
  var _options$las4, _options$onProgress;
45
56
 
57
+ var decoder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
58
+ var lasHeader = arguments.length > 1 ? arguments[1] : undefined;
59
+
46
60
  if (!originalHeader) {
47
61
  var _options$las3;
48
62
 
49
63
  originalHeader = lasHeader;
50
- const total = lasHeader.totalToRead;
51
- const PositionsType = (_options$las3 = options.las) !== null && _options$las3 !== void 0 && _options$las3.fp64 ? Float64Array : Float32Array;
64
+ var total = lasHeader.totalToRead;
65
+ var PositionsType = (_options$las3 = options.las) !== null && _options$las3 !== void 0 && _options$las3.fp64 ? Float64Array : Float32Array;
52
66
  positions = new PositionsType(total * 3);
53
67
  colors = lasHeader.pointsFormatId >= 2 ? new Uint8Array(total * 4) : null;
54
68
  intensities = new Uint16Array(total);
@@ -77,20 +91,26 @@ function parseLASMesh(arrayBuffer, options = {}) {
77
91
  }
78
92
  }
79
93
 
80
- const batchSize = decoder.pointsCount;
81
- const {
82
- scale: [scaleX, scaleY, scaleZ],
83
- offset: [offsetX, offsetY, offsetZ]
84
- } = lasHeader;
85
- const twoByteColor = detectTwoByteColors(decoder, batchSize, (_options$las4 = options.las) === null || _options$las4 === void 0 ? void 0 : _options$las4.colorDepth);
86
-
87
- for (let i = 0; i < batchSize; i++) {
88
- const {
89
- position,
90
- color,
91
- intensity,
92
- classification
93
- } = decoder.getPoint(i);
94
+ var batchSize = decoder.pointsCount;
95
+
96
+ var _lasHeader$scale = (0, _slicedToArray2.default)(lasHeader.scale, 3),
97
+ scaleX = _lasHeader$scale[0],
98
+ scaleY = _lasHeader$scale[1],
99
+ scaleZ = _lasHeader$scale[2],
100
+ _lasHeader$offset = (0, _slicedToArray2.default)(lasHeader.offset, 3),
101
+ offsetX = _lasHeader$offset[0],
102
+ offsetY = _lasHeader$offset[1],
103
+ offsetZ = _lasHeader$offset[2];
104
+
105
+ var twoByteColor = detectTwoByteColors(decoder, batchSize, (_options$las4 = options.las) === null || _options$las4 === void 0 ? void 0 : _options$las4.colorDepth);
106
+
107
+ for (var i = 0; i < batchSize; i++) {
108
+ var _decoder$getPoint = decoder.getPoint(i),
109
+ position = _decoder$getPoint.position,
110
+ color = _decoder$getPoint.color,
111
+ intensity = _decoder$getPoint.intensity,
112
+ classification = _decoder$getPoint.classification;
113
+
94
114
  positions[pointIndex * 3] = position[0] * scaleX + offsetX;
95
115
  positions[pointIndex * 3 + 1] = position[1] * scaleY + offsetY;
96
116
  positions[pointIndex * 3 + 2] = position[2] * scaleZ + offsetZ;
@@ -114,12 +134,13 @@ function parseLASMesh(arrayBuffer, options = {}) {
114
134
  pointIndex++;
115
135
  }
116
136
 
117
- const meshBatch = { ...lasMesh,
137
+ var meshBatch = _objectSpread(_objectSpread({}, lasMesh), {}, {
118
138
  header: {
119
139
  vertexCount: lasHeader.totalRead
120
140
  },
121
141
  progress: lasHeader.totalRead / lasHeader.totalToRead
122
- };
142
+ });
143
+
123
144
  options === null || options === void 0 ? void 0 : (_options$onProgress = options.onProgress) === null || _options$onProgress === void 0 ? void 0 : _options$onProgress.call(options, meshBatch);
124
145
  });
125
146
  lasMesh.header = {
@@ -134,24 +155,25 @@ function parseLASMesh(arrayBuffer, options = {}) {
134
155
  return lasMesh;
135
156
  }
136
157
 
137
- function parseLASChunked(rawData, skip, onParseData = {}) {
138
- const dataHandler = new _laslazDecoder.LASFile(rawData);
158
+ function parseLASChunked(rawData, skip) {
159
+ var onParseData = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
160
+ var dataHandler = new _laslazDecoder.LASFile(rawData);
139
161
 
140
162
  try {
141
163
  dataHandler.open();
142
- const header = dataHandler.getHeader();
143
- const Unpacker = dataHandler.getUnpacker();
144
- const totalToRead = Math.ceil(header.pointsCount / Math.max(1, skip));
164
+ var header = dataHandler.getHeader();
165
+ var Unpacker = dataHandler.getUnpacker();
166
+ var totalToRead = Math.ceil(header.pointsCount / Math.max(1, skip));
145
167
  header.totalToRead = totalToRead;
146
- let totalRead = 0;
168
+ var totalRead = 0;
147
169
 
148
170
  while (true) {
149
- const chunk = dataHandler.readData(1000 * 100, 0, skip);
171
+ var chunk = dataHandler.readData(1000 * 100, 0, skip);
150
172
  totalRead += chunk.count;
151
173
  header.totalRead = totalRead;
152
174
  header.versionAsString = chunk.versionAsString;
153
175
  header.isCompressed = chunk.isCompressed;
154
- const unpacker = new Unpacker(chunk.buffer, chunk.count, header);
176
+ var unpacker = new Unpacker(chunk.buffer, chunk.count, header);
155
177
  onParseData(unpacker, header);
156
178
 
157
179
  if (!chunk.hasMoreData || totalRead >= totalToRead) {
@@ -165,8 +187,11 @@ function parseLASChunked(rawData, skip, onParseData = {}) {
165
187
  }
166
188
  }
167
189
 
168
- function detectTwoByteColors(decoder = {}, batchSize, colorDepth) {
169
- let twoByteColor = false;
190
+ function detectTwoByteColors() {
191
+ var decoder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
192
+ var batchSize = arguments.length > 1 ? arguments[1] : undefined;
193
+ var colorDepth = arguments.length > 2 ? arguments[2] : undefined;
194
+ var twoByteColor = false;
170
195
 
171
196
  switch (colorDepth) {
172
197
  case 8:
@@ -179,10 +204,9 @@ function detectTwoByteColors(decoder = {}, batchSize, colorDepth) {
179
204
 
180
205
  case 'auto':
181
206
  if (decoder.getPoint(0).color) {
182
- for (let i = 0; i < batchSize; i++) {
183
- const {
184
- color
185
- } = decoder.getPoint(i);
207
+ for (var i = 0; i < batchSize; i++) {
208
+ var _decoder$getPoint2 = decoder.getPoint(i),
209
+ color = _decoder$getPoint2.color;
186
210
 
187
211
  if (color[0] > 255 || color[1] > 255 || color[2] > 255) {
188
212
  twoByteColor = true;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/parse-las.ts"],"names":["parseLAS","arrayBuffer","options","mesh","parseLASMesh","las","shape","pointIndex","positions","colors","intensities","classifications","originalHeader","lasMesh","loader","loaderData","schema","Schema","header","vertexCount","boundingBox","attributes","topology","mode","parseLASChunked","skip","decoder","lasHeader","total","totalToRead","PositionsType","fp64","Float64Array","Float32Array","pointsFormatId","Uint8Array","Uint16Array","POSITION","value","size","intensity","classification","COLOR_0","batchSize","pointsCount","scale","scaleX","scaleY","scaleZ","offset","offsetX","offsetY","offsetZ","twoByteColor","detectTwoByteColors","colorDepth","i","position","color","getPoint","meshBatch","totalRead","progress","onProgress","rawData","onParseData","dataHandler","LASFile","open","getHeader","Unpacker","getUnpacker","Math","ceil","max","chunk","readData","count","versionAsString","isCompressed","unpacker","buffer","hasMoreData","e","close","console","warn"],"mappings":"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","sourcesContent":["// ported and es6-ified from https://github.com/verma/plasio/\nimport type {ArrowTable, ColumnarTable} from '@loaders.gl/schema';\nimport type {LASLoaderOptions} from '../las-loader';\nimport type {LASMesh, LASHeader} from './las-types';\nimport {Schema, getMeshBoundingBox, convertMesh} from '@loaders.gl/schema';\nimport {LASFile} from './laslaz-decoder';\nimport {getLASSchema} from './get-las-schema';\n\ntype LASChunk = {\n count: number;\n buffer: ArrayBuffer;\n hasMoreData: boolean;\n versionAsString?: string;\n isCompressed?: boolean;\n};\n\n/**\n * Parsing of .las file\n * @param arrayBuffer\n * @param options\n * @returns LASHeader\n */\nexport default function parseLAS(\n arrayBuffer: ArrayBuffer,\n options?: LASLoaderOptions\n): LASMesh | ArrowTable | ColumnarTable {\n const mesh = parseLASMesh(arrayBuffer, options);\n return convertMesh(mesh, options?.las?.shape || 'mesh') as LASMesh | ArrowTable | ColumnarTable;\n}\n\n/**\n * Parsing of .las file\n * @param arrayBuffer\n * @param options\n * @returns LASHeader\n */\nfunction parseLASMesh(arrayBuffer: ArrayBuffer, options: LASLoaderOptions = {}): LASMesh {\n let pointIndex: number = 0;\n\n let positions: Float32Array | Float64Array;\n let colors: Uint8Array | null;\n let intensities: Uint16Array;\n let classifications: Uint8Array;\n let originalHeader: any;\n\n const lasMesh: LASMesh = {\n loader: 'las',\n loaderData: {} as LASHeader,\n // shape: 'mesh',\n schema: new Schema([]),\n header: {\n vertexCount: 0,\n boundingBox: [\n [0, 0, 0],\n [0, 0, 0]\n ]\n },\n attributes: {},\n topology: 'point-list',\n mode: 0 // GL.POINTS\n };\n\n /* eslint-disable max-statements */\n // @ts-ignore Possibly undefined\n parseLASChunked(arrayBuffer, options.las?.skip, (decoder: any = {}, lasHeader: LASHeader) => {\n if (!originalHeader) {\n originalHeader = lasHeader;\n const total = lasHeader.totalToRead;\n\n const PositionsType = options.las?.fp64 ? Float64Array : Float32Array;\n positions = new PositionsType(total * 3);\n // laslaz-decoder.js `pointFormatReaders`\n colors = lasHeader.pointsFormatId >= 2 ? new Uint8Array(total * 4) : null;\n intensities = new Uint16Array(total);\n classifications = new Uint8Array(total);\n\n lasMesh.loaderData = lasHeader;\n lasMesh.attributes = {\n POSITION: {value: positions, size: 3},\n // non-gltf attributes, use non-capitalized names for now\n intensity: {value: intensities, size: 1},\n classification: {value: classifications, size: 1}\n };\n\n if (colors) {\n lasMesh.attributes.COLOR_0 = {value: colors, size: 4};\n }\n }\n\n const batchSize = decoder.pointsCount;\n const {\n scale: [scaleX, scaleY, scaleZ],\n offset: [offsetX, offsetY, offsetZ]\n } = lasHeader;\n\n const twoByteColor = detectTwoByteColors(decoder, batchSize, options.las?.colorDepth);\n\n for (let i = 0; i < batchSize; i++) {\n const {position, color, intensity, classification} = decoder.getPoint(i);\n\n positions[pointIndex * 3] = position[0] * scaleX + offsetX;\n positions[pointIndex * 3 + 1] = position[1] * scaleY + offsetY;\n positions[pointIndex * 3 + 2] = position[2] * scaleZ + offsetZ;\n\n if (color && colors) {\n if (twoByteColor) {\n colors[pointIndex * 4] = color[0] / 256;\n colors[pointIndex * 4 + 1] = color[1] / 256;\n colors[pointIndex * 4 + 2] = color[2] / 256;\n } else {\n colors[pointIndex * 4] = color[0];\n colors[pointIndex * 4 + 1] = color[1];\n colors[pointIndex * 4 + 2] = color[2];\n }\n colors[pointIndex * 4 + 3] = 255;\n }\n\n intensities[pointIndex] = intensity;\n classifications[pointIndex] = classification;\n\n pointIndex++;\n }\n\n const meshBatch = {\n ...lasMesh,\n header: {\n vertexCount: lasHeader.totalRead\n },\n progress: lasHeader.totalRead / lasHeader.totalToRead\n };\n\n options?.onProgress?.(meshBatch);\n });\n /* eslint-enable max-statements */\n\n lasMesh.header = {\n vertexCount: originalHeader.totalToRead,\n boundingBox: getMeshBoundingBox(lasMesh?.attributes || {})\n };\n\n if (lasMesh) {\n lasMesh.schema = getLASSchema(lasMesh.loaderData, lasMesh.attributes);\n }\n return lasMesh;\n}\n\n/**\n * parse laz data\n * @param rawData\n * @param skip\n * @param onParseData\n * @return parsed point cloud\n */\n/* eslint-enable max-statements */\nexport function parseLASChunked(rawData: ArrayBuffer, skip: number, onParseData: any = {}): void {\n const dataHandler = new LASFile(rawData);\n\n try {\n // open data\n dataHandler.open();\n\n const header = dataHandler.getHeader();\n // start loading\n const Unpacker = dataHandler.getUnpacker();\n\n const totalToRead = Math.ceil(header.pointsCount / Math.max(1, skip));\n header.totalToRead = totalToRead;\n let totalRead = 0;\n\n /* eslint-disable no-constant-condition */\n while (true) {\n const chunk: LASChunk = dataHandler.readData(1000 * 100, 0, skip);\n\n totalRead += chunk.count;\n\n header.totalRead = totalRead;\n header.versionAsString = chunk.versionAsString;\n header.isCompressed = chunk.isCompressed;\n\n const unpacker = new Unpacker(chunk.buffer, chunk.count, header);\n\n // surface unpacker and progress via call back\n // use unpacker.pointsCount and unpacker.getPoint(i) to handle data in app\n onParseData(unpacker, header);\n\n if (!chunk.hasMoreData || totalRead >= totalToRead) {\n break;\n }\n }\n } catch (e) {\n throw e;\n } finally {\n dataHandler.close();\n }\n}\n\n/**\n * @param decoder\n * @param batchSize\n * @param colorDepth\n * @returns boolean\n */\nfunction detectTwoByteColors(\n decoder: any = {},\n batchSize: number,\n colorDepth?: number | string\n): boolean {\n let twoByteColor = false;\n switch (colorDepth) {\n case 8:\n twoByteColor = false;\n break;\n case 16:\n twoByteColor = true;\n break;\n case 'auto':\n if (decoder.getPoint(0).color) {\n for (let i = 0; i < batchSize; i++) {\n const {color} = decoder.getPoint(i);\n // eslint-disable-next-line max-depth\n if (color[0] > 255 || color[1] > 255 || color[2] > 255) {\n twoByteColor = true;\n }\n }\n }\n break;\n default:\n // eslint-disable-next-line\n console.warn('las: illegal value for options.las.colorDepth');\n break;\n }\n return twoByteColor;\n}\n"],"file":"parse-las.js"}
1
+ {"version":3,"sources":["../../../src/lib/parse-las.ts"],"names":["parseLAS","arrayBuffer","options","mesh","parseLASMesh","las","shape","pointIndex","positions","colors","intensities","classifications","originalHeader","lasMesh","loader","loaderData","schema","Schema","header","vertexCount","boundingBox","attributes","topology","mode","parseLASChunked","skip","decoder","lasHeader","total","totalToRead","PositionsType","fp64","Float64Array","Float32Array","pointsFormatId","Uint8Array","Uint16Array","POSITION","value","size","intensity","classification","COLOR_0","batchSize","pointsCount","scale","scaleX","scaleY","scaleZ","offset","offsetX","offsetY","offsetZ","twoByteColor","detectTwoByteColors","colorDepth","i","getPoint","position","color","meshBatch","totalRead","progress","onProgress","rawData","onParseData","dataHandler","LASFile","open","getHeader","Unpacker","getUnpacker","Math","ceil","max","chunk","readData","count","versionAsString","isCompressed","unpacker","buffer","hasMoreData","e","close","console","warn"],"mappings":"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","sourcesContent":["// ported and es6-ified from https://github.com/verma/plasio/\nimport type {ArrowTable, ColumnarTable} from '@loaders.gl/schema';\nimport type {LASLoaderOptions} from '../las-loader';\nimport type {LASMesh, LASHeader} from './las-types';\nimport {Schema, getMeshBoundingBox, convertMesh} from '@loaders.gl/schema';\nimport {LASFile} from './laslaz-decoder';\nimport {getLASSchema} from './get-las-schema';\n\ntype LASChunk = {\n count: number;\n buffer: ArrayBuffer;\n hasMoreData: boolean;\n versionAsString?: string;\n isCompressed?: boolean;\n};\n\n/**\n * Parsing of .las file\n * @param arrayBuffer\n * @param options\n * @returns LASHeader\n */\nexport default function parseLAS(\n arrayBuffer: ArrayBuffer,\n options?: LASLoaderOptions\n): LASMesh | ArrowTable | ColumnarTable {\n const mesh = parseLASMesh(arrayBuffer, options);\n return convertMesh(mesh, options?.las?.shape || 'mesh') as LASMesh | ArrowTable | ColumnarTable;\n}\n\n/**\n * Parsing of .las file\n * @param arrayBuffer\n * @param options\n * @returns LASHeader\n */\nfunction parseLASMesh(arrayBuffer: ArrayBuffer, options: LASLoaderOptions = {}): LASMesh {\n let pointIndex: number = 0;\n\n let positions: Float32Array | Float64Array;\n let colors: Uint8Array | null;\n let intensities: Uint16Array;\n let classifications: Uint8Array;\n let originalHeader: any;\n\n const lasMesh: LASMesh = {\n loader: 'las',\n loaderData: {} as LASHeader,\n // shape: 'mesh',\n schema: new Schema([]),\n header: {\n vertexCount: 0,\n boundingBox: [\n [0, 0, 0],\n [0, 0, 0]\n ]\n },\n attributes: {},\n topology: 'point-list',\n mode: 0 // GL.POINTS\n };\n\n /* eslint-disable max-statements */\n // @ts-ignore Possibly undefined\n parseLASChunked(arrayBuffer, options.las?.skip, (decoder: any = {}, lasHeader: LASHeader) => {\n if (!originalHeader) {\n originalHeader = lasHeader;\n const total = lasHeader.totalToRead;\n\n const PositionsType = options.las?.fp64 ? Float64Array : Float32Array;\n positions = new PositionsType(total * 3);\n // laslaz-decoder.js `pointFormatReaders`\n colors = lasHeader.pointsFormatId >= 2 ? new Uint8Array(total * 4) : null;\n intensities = new Uint16Array(total);\n classifications = new Uint8Array(total);\n\n lasMesh.loaderData = lasHeader;\n lasMesh.attributes = {\n POSITION: {value: positions, size: 3},\n // non-gltf attributes, use non-capitalized names for now\n intensity: {value: intensities, size: 1},\n classification: {value: classifications, size: 1}\n };\n\n if (colors) {\n lasMesh.attributes.COLOR_0 = {value: colors, size: 4};\n }\n }\n\n const batchSize = decoder.pointsCount;\n const {\n scale: [scaleX, scaleY, scaleZ],\n offset: [offsetX, offsetY, offsetZ]\n } = lasHeader;\n\n const twoByteColor = detectTwoByteColors(decoder, batchSize, options.las?.colorDepth);\n\n for (let i = 0; i < batchSize; i++) {\n const {position, color, intensity, classification} = decoder.getPoint(i);\n\n positions[pointIndex * 3] = position[0] * scaleX + offsetX;\n positions[pointIndex * 3 + 1] = position[1] * scaleY + offsetY;\n positions[pointIndex * 3 + 2] = position[2] * scaleZ + offsetZ;\n\n if (color && colors) {\n if (twoByteColor) {\n colors[pointIndex * 4] = color[0] / 256;\n colors[pointIndex * 4 + 1] = color[1] / 256;\n colors[pointIndex * 4 + 2] = color[2] / 256;\n } else {\n colors[pointIndex * 4] = color[0];\n colors[pointIndex * 4 + 1] = color[1];\n colors[pointIndex * 4 + 2] = color[2];\n }\n colors[pointIndex * 4 + 3] = 255;\n }\n\n intensities[pointIndex] = intensity;\n classifications[pointIndex] = classification;\n\n pointIndex++;\n }\n\n const meshBatch = {\n ...lasMesh,\n header: {\n vertexCount: lasHeader.totalRead\n },\n progress: lasHeader.totalRead / lasHeader.totalToRead\n };\n\n options?.onProgress?.(meshBatch);\n });\n /* eslint-enable max-statements */\n\n lasMesh.header = {\n vertexCount: originalHeader.totalToRead,\n boundingBox: getMeshBoundingBox(lasMesh?.attributes || {})\n };\n\n if (lasMesh) {\n lasMesh.schema = getLASSchema(lasMesh.loaderData, lasMesh.attributes);\n }\n return lasMesh;\n}\n\n/**\n * parse laz data\n * @param rawData\n * @param skip\n * @param onParseData\n * @return parsed point cloud\n */\n/* eslint-enable max-statements */\nexport function parseLASChunked(rawData: ArrayBuffer, skip: number, onParseData: any = {}): void {\n const dataHandler = new LASFile(rawData);\n\n try {\n // open data\n dataHandler.open();\n\n const header = dataHandler.getHeader();\n // start loading\n const Unpacker = dataHandler.getUnpacker();\n\n const totalToRead = Math.ceil(header.pointsCount / Math.max(1, skip));\n header.totalToRead = totalToRead;\n let totalRead = 0;\n\n /* eslint-disable no-constant-condition */\n while (true) {\n const chunk: LASChunk = dataHandler.readData(1000 * 100, 0, skip);\n\n totalRead += chunk.count;\n\n header.totalRead = totalRead;\n header.versionAsString = chunk.versionAsString;\n header.isCompressed = chunk.isCompressed;\n\n const unpacker = new Unpacker(chunk.buffer, chunk.count, header);\n\n // surface unpacker and progress via call back\n // use unpacker.pointsCount and unpacker.getPoint(i) to handle data in app\n onParseData(unpacker, header);\n\n if (!chunk.hasMoreData || totalRead >= totalToRead) {\n break;\n }\n }\n } catch (e) {\n throw e;\n } finally {\n dataHandler.close();\n }\n}\n\n/**\n * @param decoder\n * @param batchSize\n * @param colorDepth\n * @returns boolean\n */\nfunction detectTwoByteColors(\n decoder: any = {},\n batchSize: number,\n colorDepth?: number | string\n): boolean {\n let twoByteColor = false;\n switch (colorDepth) {\n case 8:\n twoByteColor = false;\n break;\n case 16:\n twoByteColor = true;\n break;\n case 'auto':\n if (decoder.getPoint(0).color) {\n for (let i = 0; i < batchSize; i++) {\n const {color} = decoder.getPoint(i);\n // eslint-disable-next-line max-depth\n if (color[0] > 255 || color[1] > 255 || color[2] > 255) {\n twoByteColor = true;\n }\n }\n }\n break;\n default:\n // eslint-disable-next-line\n console.warn('las: illegal value for options.las.colorDepth');\n break;\n }\n return twoByteColor;\n}\n"],"file":"parse-las.js"}
@@ -1,4 +1,4 @@
1
- const VERSION = typeof "3.1.0-beta.7" !== 'undefined' ? "3.1.0-beta.7" : 'latest';
1
+ const VERSION = typeof "3.1.0" !== 'undefined' ? "3.1.0" : 'latest';
2
2
  const DEFAULT_LAS_OPTIONS = {
3
3
  las: {
4
4
  shape: 'mesh',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/las-loader.ts"],"names":["VERSION","DEFAULT_LAS_OPTIONS","las","shape","fp64","skip","colorDepth","LASLoader","name","id","module","version","worker","extensions","mimeTypes","text","binary","tests","options","_typecheckLoader"],"mappings":"AAKA,MAAMA,OAAO,GAAG,0BAAuB,WAAvB,oBAAmD,QAAnE;AAWA,MAAMC,mBAAqC,GAAG;AAC5CC,EAAAA,GAAG,EAAE;AACHC,IAAAA,KAAK,EAAE,MADJ;AAEHC,IAAAA,IAAI,EAAE,KAFH;AAGHC,IAAAA,IAAI,EAAE,CAHH;AAIHC,IAAAA,UAAU,EAAE;AAJT;AADuC,CAA9C;AAYA,OAAO,MAAMC,SAAS,GAAG;AACvBC,EAAAA,IAAI,EAAE,KADiB;AAEvBC,EAAAA,EAAE,EAAE,KAFmB;AAGvBC,EAAAA,MAAM,EAAE,KAHe;AAIvBC,EAAAA,OAAO,EAAEX,OAJc;AAKvBY,EAAAA,MAAM,EAAE,IALe;AAMvBC,EAAAA,UAAU,EAAE,CAAC,KAAD,EAAQ,KAAR,CANW;AAOvBC,EAAAA,SAAS,EAAE,CAAC,0BAAD,CAPY;AAQvBC,EAAAA,IAAI,EAAE,IARiB;AASvBC,EAAAA,MAAM,EAAE,IATe;AAUvBC,EAAAA,KAAK,EAAE,CAAC,KAAD,CAVgB;AAWvBC,EAAAA,OAAO,EAAEjB;AAXc,CAAlB;AAcP,OAAO,MAAMkB,gBAAwB,GAAGZ,SAAjC","sourcesContent":["// LASER (LAS) FILE FORMAT\nimport type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type LASLoaderOptions = LoaderOptions & {\n las?: {\n shape?: 'mesh' | 'columnar-table' | 'arrow-table';\n fp64?: boolean;\n skip?: number;\n colorDepth?: number | string;\n };\n};\n\nconst DEFAULT_LAS_OPTIONS: LASLoaderOptions = {\n las: {\n shape: 'mesh',\n fp64: false,\n skip: 1,\n colorDepth: 8\n }\n};\n\n/**\n * Loader for the LAS (LASer) point cloud format\n */\nexport const LASLoader = {\n name: 'LAS',\n id: 'las',\n module: 'las',\n version: VERSION,\n worker: true,\n extensions: ['las', 'laz'], // LAZ is the \"compressed\" flavor of LAS,\n mimeTypes: ['application/octet-stream'], // TODO - text version?\n text: true,\n binary: true,\n tests: ['LAS'],\n options: DEFAULT_LAS_OPTIONS\n};\n\nexport const _typecheckLoader: Loader = LASLoader;\n"],"file":"las-loader.js"}
1
+ {"version":3,"sources":["../../src/las-loader.ts"],"names":["VERSION","DEFAULT_LAS_OPTIONS","las","shape","fp64","skip","colorDepth","LASLoader","name","id","module","version","worker","extensions","mimeTypes","text","binary","tests","options","_typecheckLoader"],"mappings":"AAKA,MAAMA,OAAO,GAAG,mBAAuB,WAAvB,aAAmD,QAAnE;AAWA,MAAMC,mBAAqC,GAAG;AAC5CC,EAAAA,GAAG,EAAE;AACHC,IAAAA,KAAK,EAAE,MADJ;AAEHC,IAAAA,IAAI,EAAE,KAFH;AAGHC,IAAAA,IAAI,EAAE,CAHH;AAIHC,IAAAA,UAAU,EAAE;AAJT;AADuC,CAA9C;AAYA,OAAO,MAAMC,SAAS,GAAG;AACvBC,EAAAA,IAAI,EAAE,KADiB;AAEvBC,EAAAA,EAAE,EAAE,KAFmB;AAGvBC,EAAAA,MAAM,EAAE,KAHe;AAIvBC,EAAAA,OAAO,EAAEX,OAJc;AAKvBY,EAAAA,MAAM,EAAE,IALe;AAMvBC,EAAAA,UAAU,EAAE,CAAC,KAAD,EAAQ,KAAR,CANW;AAOvBC,EAAAA,SAAS,EAAE,CAAC,0BAAD,CAPY;AAQvBC,EAAAA,IAAI,EAAE,IARiB;AASvBC,EAAAA,MAAM,EAAE,IATe;AAUvBC,EAAAA,KAAK,EAAE,CAAC,KAAD,CAVgB;AAWvBC,EAAAA,OAAO,EAAEjB;AAXc,CAAlB;AAcP,OAAO,MAAMkB,gBAAwB,GAAGZ,SAAjC","sourcesContent":["// LASER (LAS) FILE FORMAT\nimport type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type LASLoaderOptions = LoaderOptions & {\n las?: {\n shape?: 'mesh' | 'columnar-table' | 'arrow-table';\n fp64?: boolean;\n skip?: number;\n colorDepth?: number | string;\n };\n};\n\nconst DEFAULT_LAS_OPTIONS: LASLoaderOptions = {\n las: {\n shape: 'mesh',\n fp64: false,\n skip: 1,\n colorDepth: 8\n }\n};\n\n/**\n * Loader for the LAS (LASer) point cloud format\n */\nexport const LASLoader = {\n name: 'LAS',\n id: 'las',\n module: 'las',\n version: VERSION,\n worker: true,\n extensions: ['las', 'laz'], // LAZ is the \"compressed\" flavor of LAS,\n mimeTypes: ['application/octet-stream'], // TODO - text version?\n text: true,\n binary: true,\n tests: ['LAS'],\n options: DEFAULT_LAS_OPTIONS\n};\n\nexport const _typecheckLoader: Loader = LASLoader;\n"],"file":"las-loader.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loaders.gl/las",
3
- "version": "3.1.0-beta.7",
3
+ "version": "3.1.0",
4
4
  "description": "Framework-independent loader for the LAS and LAZ formats",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -41,8 +41,8 @@
41
41
  },
42
42
  "dependencies": {
43
43
  "@babel/runtime": "^7.3.1",
44
- "@loaders.gl/loader-utils": "3.1.0-beta.7",
45
- "@loaders.gl/schema": "3.1.0-beta.7"
44
+ "@loaders.gl/loader-utils": "3.1.0",
45
+ "@loaders.gl/schema": "3.1.0"
46
46
  },
47
- "gitHead": "f3b4d81ac02758398c4e4eef5e556b206ef2dfbe"
47
+ "gitHead": "b02a011b5a6d6aa6c5870819045c70db168cb930"
48
48
  }