@loaders.gl/las 3.3.0-alpha.4 → 3.3.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/es5/bundle.js +0 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/index.js +4 -16
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/las-loader.js +3 -1
- package/dist/es5/las-loader.js.map +1 -1
- package/dist/es5/lib/get-las-schema.js +0 -8
- package/dist/es5/lib/get-las-schema.js.map +1 -1
- package/dist/es5/lib/las-types.js.map +1 -1
- package/dist/es5/lib/laslaz-decoder.js +40 -57
- package/dist/es5/lib/laslaz-decoder.js.map +1 -1
- package/dist/es5/lib/libs/laz-perf.js.map +1 -1
- package/dist/es5/lib/parse-las.js +17 -49
- package/dist/es5/lib/parse-las.js.map +1 -1
- package/dist/es5/workers/las-worker.js +0 -2
- package/dist/es5/workers/las-worker.js.map +1 -1
- package/dist/esm/bundle.js +1 -1
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/index.js +4 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/las-loader.js +4 -1
- package/dist/esm/las-loader.js.map +1 -1
- package/dist/esm/lib/get-las-schema.js +1 -6
- package/dist/esm/lib/get-las-schema.js.map +1 -1
- package/dist/esm/lib/las-types.js.map +1 -1
- package/dist/esm/lib/laslaz-decoder.js +6 -63
- package/dist/esm/lib/laslaz-decoder.js.map +1 -1
- package/dist/esm/lib/libs/laz-perf.js.map +1 -1
- package/dist/esm/lib/parse-las.js +18 -26
- package/dist/esm/lib/parse-las.js.map +1 -1
- package/dist/esm/workers/las-worker.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/las-worker.js +1 -1
- package/package.json +4 -4
package/dist/es5/bundle.js
CHANGED
package/dist/es5/bundle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"bundle.js","names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"sources":["../../src/bundle.ts"],"sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"mappings":";;AACA,IAAMA,aAAa,GAAGC,OAAO,CAAC,SAAS,CAAC;AACxCC,UAAU,CAACC,OAAO,GAAGD,UAAU,CAACC,OAAO,IAAI,CAAC,CAAC;AAC7CC,MAAM,CAACC,OAAO,GAAGC,MAAM,CAACC,MAAM,CAACL,UAAU,CAACC,OAAO,EAAEH,aAAa,CAAC"}
|
package/dist/es5/index.js
CHANGED
|
@@ -1,32 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
7
|
+
exports.LASLoader = void 0;
|
|
8
8
|
Object.defineProperty(exports, "LASWorkerLoader", {
|
|
9
9
|
enumerable: true,
|
|
10
10
|
get: function get() {
|
|
11
11
|
return _lasLoader.LASLoader;
|
|
12
12
|
}
|
|
13
13
|
});
|
|
14
|
-
exports._typecheckLoader =
|
|
15
|
-
|
|
14
|
+
exports._typecheckLoader = void 0;
|
|
16
15
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
17
|
-
|
|
18
16
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
19
|
-
|
|
20
17
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
21
|
-
|
|
22
18
|
var _lasLoader = require("./las-loader");
|
|
23
|
-
|
|
24
19
|
var _parseLas = _interopRequireDefault(require("./lib/parse-las"));
|
|
25
|
-
|
|
26
|
-
function
|
|
27
|
-
|
|
28
|
-
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; }
|
|
29
|
-
|
|
20
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
21
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
30
22
|
var LASLoader = _objectSpread(_objectSpread({}, _lasLoader.LASLoader), {}, {
|
|
31
23
|
parse: function () {
|
|
32
24
|
var _parse = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(arrayBuffer, options) {
|
|
@@ -35,7 +27,6 @@ var LASLoader = _objectSpread(_objectSpread({}, _lasLoader.LASLoader), {}, {
|
|
|
35
27
|
switch (_context.prev = _context.next) {
|
|
36
28
|
case 0:
|
|
37
29
|
return _context.abrupt("return", (0, _parseLas.default)(arrayBuffer, options));
|
|
38
|
-
|
|
39
30
|
case 1:
|
|
40
31
|
case "end":
|
|
41
32
|
return _context.stop();
|
|
@@ -43,18 +34,15 @@ var LASLoader = _objectSpread(_objectSpread({}, _lasLoader.LASLoader), {}, {
|
|
|
43
34
|
}
|
|
44
35
|
}, _callee);
|
|
45
36
|
}));
|
|
46
|
-
|
|
47
37
|
function parse(_x, _x2) {
|
|
48
38
|
return _parse.apply(this, arguments);
|
|
49
39
|
}
|
|
50
|
-
|
|
51
40
|
return parse;
|
|
52
41
|
}(),
|
|
53
42
|
parseSync: function parseSync(arrayBuffer, options) {
|
|
54
43
|
return (0, _parseLas.default)(arrayBuffer, options);
|
|
55
44
|
}
|
|
56
45
|
});
|
|
57
|
-
|
|
58
46
|
exports.LASLoader = LASLoader;
|
|
59
47
|
var _typecheckLoader = LASLoader;
|
|
60
48
|
exports._typecheckLoader = _typecheckLoader;
|
package/dist/es5/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"index.js","names":["LASLoader","LASWorkerLoader","parse","arrayBuffer","options","parseLAS","parseSync","_typecheckLoader"],"sources":["../../src/index.ts"],"sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport type {LASLoaderOptions} from './las-loader';\nimport {LASLoader as LASWorkerLoader} from './las-loader';\nimport parseLAS from './lib/parse-las';\n\n// LASLoader\n\nexport type {LASLoaderOptions};\nexport {LASWorkerLoader};\n\n/**\n * Loader for the LAS (LASer) point cloud format\n */\nexport const LASLoader = {\n ...LASWorkerLoader,\n parse: async (arrayBuffer: ArrayBuffer, options?: LASLoaderOptions) =>\n parseLAS(arrayBuffer, options),\n parseSync: (arrayBuffer: ArrayBuffer, options?: LASLoaderOptions) =>\n parseLAS(arrayBuffer, options)\n};\n\nexport const _typecheckLoader: LoaderWithParser = LASLoader;\n"],"mappings":";;;;;;;;;;;;;;;;;AAEA;AACA;AAAuC;AAAA;AAUhC,IAAMA,SAAS,mCACjBC,oBAAe;EAClBC,KAAK;IAAA,uEAAE,iBAAOC,WAAwB,EAAEC,OAA0B;MAAA;QAAA;UAAA;YAAA;cAAA,iCAChE,IAAAC,iBAAQ,EAACF,WAAW,EAAEC,OAAO,CAAC;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA;IAAA;MAAA;IAAA;IAAA;EAAA;EAChCE,SAAS,EAAE,mBAACH,WAAwB,EAAEC,OAA0B;IAAA,OAC9D,IAAAC,iBAAQ,EAACF,WAAW,EAAEC,OAAO,CAAC;EAAA;AAAA,EACjC;AAAC;AAEK,IAAMG,gBAAkC,GAAGP,SAAS;AAAC"}
|
package/dist/es5/las-loader.js
CHANGED
|
@@ -4,7 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports._typecheckLoader = exports.LASLoader = void 0;
|
|
7
|
-
|
|
7
|
+
|
|
8
|
+
var VERSION = typeof "3.3.0-alpha.6" !== 'undefined' ? "3.3.0-alpha.6" : 'latest';
|
|
8
9
|
var DEFAULT_LAS_OPTIONS = {
|
|
9
10
|
las: {
|
|
10
11
|
shape: 'mesh',
|
|
@@ -13,6 +14,7 @@ var DEFAULT_LAS_OPTIONS = {
|
|
|
13
14
|
colorDepth: 8
|
|
14
15
|
}
|
|
15
16
|
};
|
|
17
|
+
|
|
16
18
|
var LASLoader = {
|
|
17
19
|
name: 'LAS',
|
|
18
20
|
id: 'las',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"las-loader.js","names":["VERSION","DEFAULT_LAS_OPTIONS","las","shape","fp64","skip","colorDepth","LASLoader","name","id","module","version","worker","extensions","mimeTypes","text","binary","tests","options","_typecheckLoader"],"sources":["../../src/las-loader.ts"],"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"],"mappings":";;;;;;;AAKA,IAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;AAW3E,IAAMC,mBAAqC,GAAG;EAC5CC,GAAG,EAAE;IACHC,KAAK,EAAE,MAAM;IACbC,IAAI,EAAE,KAAK;IACXC,IAAI,EAAE,CAAC;IACPC,UAAU,EAAE;EACd;AACF,CAAC;;AAKM,IAAMC,SAAS,GAAG;EACvBC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEX,OAAO;EAChBY,MAAM,EAAE,IAAI;EACZC,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;EAC1BC,SAAS,EAAE,CAAC,0BAA0B,CAAC;EACvCC,IAAI,EAAE,IAAI;EACVC,MAAM,EAAE,IAAI;EACZC,KAAK,EAAE,CAAC,KAAK,CAAC;EACdC,OAAO,EAAEjB;AACX,CAAC;AAAC;AAEK,IAAMkB,gBAAwB,GAAGZ,SAAS;AAAC"}
|
|
@@ -5,9 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.getLASSchema = getLASSchema;
|
|
7
7
|
exports.makeMetadataFromLasHeader = makeMetadataFromLasHeader;
|
|
8
|
-
|
|
9
8
|
var _schema = require("@loaders.gl/schema");
|
|
10
|
-
|
|
11
9
|
function getLASSchema(lasHeader, attributes) {
|
|
12
10
|
var metadataMap = makeMetadataFromLasHeader(lasHeader);
|
|
13
11
|
var schema = (0, _schema.deduceMeshSchema)(attributes, metadataMap);
|
|
@@ -22,26 +20,20 @@ function makeMetadataFromLasHeader(lasHeader) {
|
|
|
22
20
|
metadataMap.set('las_pointsCount', lasHeader.pointsCount.toString(10));
|
|
23
21
|
metadataMap.set('las_scale', JSON.stringify(lasHeader.scale));
|
|
24
22
|
metadataMap.set('las_offset', JSON.stringify(lasHeader.offset));
|
|
25
|
-
|
|
26
23
|
if (lasHeader.maxs !== undefined) {
|
|
27
24
|
metadataMap.set('las_maxs', JSON.stringify(lasHeader.maxs));
|
|
28
25
|
}
|
|
29
|
-
|
|
30
26
|
if (lasHeader.mins !== undefined) {
|
|
31
27
|
metadataMap.set('las_mins', JSON.stringify(lasHeader.mins));
|
|
32
28
|
}
|
|
33
|
-
|
|
34
29
|
metadataMap.set('las_totalToRead', lasHeader.totalToRead.toString(10));
|
|
35
30
|
metadataMap.set('las_pointsFortotalReadmatId', lasHeader.totalRead.toString(10));
|
|
36
|
-
|
|
37
31
|
if (lasHeader.versionAsString !== undefined) {
|
|
38
32
|
metadataMap.set('las_versionAsString', lasHeader.versionAsString);
|
|
39
33
|
}
|
|
40
|
-
|
|
41
34
|
if (lasHeader.isCompressed !== undefined) {
|
|
42
35
|
metadataMap.set('las_isCompressed', lasHeader.isCompressed.toString());
|
|
43
36
|
}
|
|
44
|
-
|
|
45
37
|
return metadataMap;
|
|
46
38
|
}
|
|
47
39
|
//# sourceMappingURL=get-las-schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"get-las-schema.js","names":["getLASSchema","lasHeader","attributes","metadataMap","makeMetadataFromLasHeader","schema","deduceMeshSchema","Map","set","pointsOffset","toString","pointsFormatId","pointsStructSize","pointsCount","JSON","stringify","scale","offset","maxs","undefined","mins","totalToRead","totalRead","versionAsString","isCompressed"],"sources":["../../../src/lib/get-las-schema.ts"],"sourcesContent":["import {Schema, MeshAttributes, deduceMeshSchema} from '@loaders.gl/schema';\nimport type {LASHeader} from './las-types';\n\n/**\n * Gets schema from PLY header\n * @param lasHeader\n * @param metadata\n * @returns Schema\n */\nexport function getLASSchema(lasHeader: LASHeader, attributes: MeshAttributes): Schema {\n const metadataMap = makeMetadataFromLasHeader(lasHeader);\n const schema = deduceMeshSchema(attributes, metadataMap);\n return schema;\n}\n\n/**\n * Make arrow like schema metadata by LASHeader properties\n * @param lasHeader\n * @returns\n */\nexport function makeMetadataFromLasHeader(lasHeader: LASHeader): Map<string, string> {\n const metadataMap = new Map();\n metadataMap.set('las_pointsOffset', lasHeader.pointsOffset.toString(10));\n metadataMap.set('las_pointsFormatId', lasHeader.pointsFormatId.toString(10));\n metadataMap.set('las_pointsStructSize', lasHeader.pointsStructSize.toString(10));\n metadataMap.set('las_pointsCount', lasHeader.pointsCount.toString(10));\n metadataMap.set('las_scale', JSON.stringify(lasHeader.scale));\n metadataMap.set('las_offset', JSON.stringify(lasHeader.offset));\n if (lasHeader.maxs !== undefined) {\n metadataMap.set('las_maxs', JSON.stringify(lasHeader.maxs));\n }\n if (lasHeader.mins !== undefined) {\n metadataMap.set('las_mins', JSON.stringify(lasHeader.mins));\n }\n metadataMap.set('las_totalToRead', lasHeader.totalToRead.toString(10));\n metadataMap.set('las_pointsFortotalReadmatId', lasHeader.totalRead.toString(10));\n if (lasHeader.versionAsString !== undefined) {\n metadataMap.set('las_versionAsString', lasHeader.versionAsString);\n }\n if (lasHeader.isCompressed !== undefined) {\n metadataMap.set('las_isCompressed', lasHeader.isCompressed.toString());\n }\n return metadataMap;\n}\n"],"mappings":";;;;;;;AAAA;AASO,SAASA,YAAY,CAACC,SAAoB,EAAEC,UAA0B,EAAU;EACrF,IAAMC,WAAW,GAAGC,yBAAyB,CAACH,SAAS,CAAC;EACxD,IAAMI,MAAM,GAAG,IAAAC,wBAAgB,EAACJ,UAAU,EAAEC,WAAW,CAAC;EACxD,OAAOE,MAAM;AACf;;AAOO,SAASD,yBAAyB,CAACH,SAAoB,EAAuB;EACnF,IAAME,WAAW,GAAG,IAAII,GAAG,EAAE;EAC7BJ,WAAW,CAACK,GAAG,CAAC,kBAAkB,EAAEP,SAAS,CAACQ,YAAY,CAACC,QAAQ,CAAC,EAAE,CAAC,CAAC;EACxEP,WAAW,CAACK,GAAG,CAAC,oBAAoB,EAAEP,SAAS,CAACU,cAAc,CAACD,QAAQ,CAAC,EAAE,CAAC,CAAC;EAC5EP,WAAW,CAACK,GAAG,CAAC,sBAAsB,EAAEP,SAAS,CAACW,gBAAgB,CAACF,QAAQ,CAAC,EAAE,CAAC,CAAC;EAChFP,WAAW,CAACK,GAAG,CAAC,iBAAiB,EAAEP,SAAS,CAACY,WAAW,CAACH,QAAQ,CAAC,EAAE,CAAC,CAAC;EACtEP,WAAW,CAACK,GAAG,CAAC,WAAW,EAAEM,IAAI,CAACC,SAAS,CAACd,SAAS,CAACe,KAAK,CAAC,CAAC;EAC7Db,WAAW,CAACK,GAAG,CAAC,YAAY,EAAEM,IAAI,CAACC,SAAS,CAACd,SAAS,CAACgB,MAAM,CAAC,CAAC;EAC/D,IAAIhB,SAAS,CAACiB,IAAI,KAAKC,SAAS,EAAE;IAChChB,WAAW,CAACK,GAAG,CAAC,UAAU,EAAEM,IAAI,CAACC,SAAS,CAACd,SAAS,CAACiB,IAAI,CAAC,CAAC;EAC7D;EACA,IAAIjB,SAAS,CAACmB,IAAI,KAAKD,SAAS,EAAE;IAChChB,WAAW,CAACK,GAAG,CAAC,UAAU,EAAEM,IAAI,CAACC,SAAS,CAACd,SAAS,CAACmB,IAAI,CAAC,CAAC;EAC7D;EACAjB,WAAW,CAACK,GAAG,CAAC,iBAAiB,EAAEP,SAAS,CAACoB,WAAW,CAACX,QAAQ,CAAC,EAAE,CAAC,CAAC;EACtEP,WAAW,CAACK,GAAG,CAAC,6BAA6B,EAAEP,SAAS,CAACqB,SAAS,CAACZ,QAAQ,CAAC,EAAE,CAAC,CAAC;EAChF,IAAIT,SAAS,CAACsB,eAAe,KAAKJ,SAAS,EAAE;IAC3ChB,WAAW,CAACK,GAAG,CAAC,qBAAqB,EAAEP,SAAS,CAACsB,eAAe,CAAC;EACnE;EACA,IAAItB,SAAS,CAACuB,YAAY,KAAKL,SAAS,EAAE;IACxChB,WAAW,CAACK,GAAG,CAAC,kBAAkB,EAAEP,SAAS,CAACuB,YAAY,CAACd,QAAQ,EAAE,CAAC;EACxE;EACA,OAAOP,WAAW;AACpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"las-types.js","names":[],"sources":["../../../src/lib/las-types.ts"],"sourcesContent":["import {Mesh} from '@loaders.gl/schema';\n\n/**\n * Type for header of the .las file\n */\nexport type LASHeader = {\n pointsOffset: number;\n pointsFormatId: number;\n pointsStructSize: number;\n pointsCount: number;\n scale: [number, number, number];\n offset: [number, number, number];\n maxs?: number[];\n mins?: number[];\n totalToRead: number;\n totalRead: number;\n versionAsString?: string;\n isCompressed?: boolean;\n};\n\n/**\n * loaders.gl Mesh with Draco specific data\n */\nexport type LASMesh = Mesh & {\n loader: 'las';\n loaderData: LASHeader; // Draco specific data\n topology: 'point-list';\n mode: 0;\n};\n"],"mappings":""}
|
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.LASModuleWasLoaded = exports.LASFile = void 0;
|
|
9
|
-
|
|
10
8
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
-
|
|
12
9
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
-
|
|
14
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
-
|
|
16
11
|
var _lazPerf = _interopRequireDefault(require("./libs/laz-perf"));
|
|
17
12
|
|
|
18
13
|
var Module = null;
|
|
@@ -56,17 +51,13 @@ function readAs(buf) {
|
|
|
56
51
|
count = count === undefined || count === 0 ? 1 : count;
|
|
57
52
|
var sub = buf.slice(offset, offset + Type.BYTES_PER_ELEMENT * count);
|
|
58
53
|
var r = new Type(sub);
|
|
59
|
-
|
|
60
54
|
if (count === 1) {
|
|
61
55
|
return r[0];
|
|
62
56
|
}
|
|
63
|
-
|
|
64
57
|
var ret = [];
|
|
65
|
-
|
|
66
58
|
for (var i = 0; i < count; i++) {
|
|
67
59
|
ret.push(r[i]);
|
|
68
60
|
}
|
|
69
|
-
|
|
70
61
|
return ret;
|
|
71
62
|
}
|
|
72
63
|
|
|
@@ -113,28 +104,29 @@ var LASLoader = function () {
|
|
|
113
104
|
|
|
114
105
|
(0, _createClass2.default)(LASLoader, [{
|
|
115
106
|
key: "open",
|
|
116
|
-
value:
|
|
107
|
+
value:
|
|
108
|
+
function open() {
|
|
117
109
|
return true;
|
|
118
110
|
}
|
|
119
111
|
}, {
|
|
120
112
|
key: "getHeader",
|
|
121
|
-
value:
|
|
113
|
+
value:
|
|
114
|
+
function getHeader() {
|
|
122
115
|
this.header = parseLASHeader(this.arraybuffer);
|
|
123
116
|
return this.header;
|
|
124
117
|
}
|
|
118
|
+
|
|
125
119
|
}, {
|
|
126
120
|
key: "readData",
|
|
127
|
-
value:
|
|
121
|
+
value:
|
|
122
|
+
function readData(count, skip) {
|
|
128
123
|
var header = this.header,
|
|
129
|
-
|
|
130
|
-
|
|
124
|
+
arraybuffer = this.arraybuffer;
|
|
131
125
|
if (!header) {
|
|
132
126
|
throw new Error('Cannot start reading data till a header request is issued');
|
|
133
127
|
}
|
|
134
|
-
|
|
135
128
|
var readOffset = this.readOffset;
|
|
136
129
|
var start;
|
|
137
|
-
|
|
138
130
|
if (skip <= 1) {
|
|
139
131
|
count = Math.min(count, header.pointsCount - readOffset);
|
|
140
132
|
start = header.pointsOffset + readOffset * header.pointsStructSize;
|
|
@@ -147,12 +139,10 @@ var LASLoader = function () {
|
|
|
147
139
|
hasMoreData: readOffset < header.pointsCount
|
|
148
140
|
};
|
|
149
141
|
}
|
|
150
|
-
|
|
151
142
|
var pointsToRead = Math.min(count * skip, header.pointsCount - readOffset);
|
|
152
143
|
var bufferSize = Math.ceil(pointsToRead / skip);
|
|
153
144
|
var pointsRead = 0;
|
|
154
145
|
var buf = new Uint8Array(bufferSize * header.pointsStructSize);
|
|
155
|
-
|
|
156
146
|
for (var i = 0; i < pointsToRead; i++) {
|
|
157
147
|
if (i % skip === 0) {
|
|
158
148
|
start = header.pointsOffset + readOffset * header.pointsStructSize;
|
|
@@ -160,10 +150,8 @@ var LASLoader = function () {
|
|
|
160
150
|
buf.set(src, pointsRead * header.pointsStructSize);
|
|
161
151
|
pointsRead++;
|
|
162
152
|
}
|
|
163
|
-
|
|
164
153
|
readOffset++;
|
|
165
154
|
}
|
|
166
|
-
|
|
167
155
|
this.readOffset = readOffset;
|
|
168
156
|
return {
|
|
169
157
|
buffer: buf.buffer,
|
|
@@ -173,22 +161,22 @@ var LASLoader = function () {
|
|
|
173
161
|
}
|
|
174
162
|
}, {
|
|
175
163
|
key: "close",
|
|
176
|
-
value:
|
|
164
|
+
value:
|
|
165
|
+
function close() {
|
|
177
166
|
this.arraybuffer = null;
|
|
178
167
|
return true;
|
|
179
168
|
}
|
|
180
169
|
}]);
|
|
181
170
|
return LASLoader;
|
|
182
171
|
}();
|
|
183
|
-
|
|
184
172
|
var LAZLoader = function () {
|
|
173
|
+
|
|
185
174
|
function LAZLoader(arraybuffer) {
|
|
186
175
|
(0, _classCallCheck2.default)(this, LAZLoader);
|
|
187
176
|
(0, _defineProperty2.default)(this, "arraybuffer", void 0);
|
|
188
177
|
(0, _defineProperty2.default)(this, "instance", null);
|
|
189
178
|
(0, _defineProperty2.default)(this, "header", null);
|
|
190
179
|
this.arraybuffer = arraybuffer;
|
|
191
|
-
|
|
192
180
|
if (!Module) {
|
|
193
181
|
Module = (0, _lazPerf.default)();
|
|
194
182
|
}
|
|
@@ -196,14 +184,13 @@ var LAZLoader = function () {
|
|
|
196
184
|
|
|
197
185
|
(0, _createClass2.default)(LAZLoader, [{
|
|
198
186
|
key: "open",
|
|
199
|
-
value:
|
|
187
|
+
value:
|
|
188
|
+
function open() {
|
|
200
189
|
try {
|
|
201
190
|
var arraybuffer = this.arraybuffer;
|
|
202
191
|
this.instance = new Module.LASZip();
|
|
203
192
|
var abInt = new Uint8Array(arraybuffer);
|
|
204
|
-
|
|
205
193
|
var buf = Module._malloc(arraybuffer.byteLength);
|
|
206
|
-
|
|
207
194
|
this.instance.arraybuffer = arraybuffer;
|
|
208
195
|
this.instance.buf = buf;
|
|
209
196
|
Module.HEAPU8.set(abInt, buf);
|
|
@@ -220,7 +207,6 @@ var LAZLoader = function () {
|
|
|
220
207
|
if (!this.instance) {
|
|
221
208
|
throw new Error('You need to open the file before trying to read header');
|
|
222
209
|
}
|
|
223
|
-
|
|
224
210
|
try {
|
|
225
211
|
var header = parseLASHeader(this.instance.arraybuffer);
|
|
226
212
|
header.pointsFormatId &= 0x3f;
|
|
@@ -232,38 +218,31 @@ var LAZLoader = function () {
|
|
|
232
218
|
}
|
|
233
219
|
}, {
|
|
234
220
|
key: "readData",
|
|
235
|
-
value:
|
|
221
|
+
value:
|
|
222
|
+
function readData(count, offset, skip) {
|
|
236
223
|
if (!this.instance) {
|
|
237
224
|
throw new Error('You need to open the file before trying to read stuff');
|
|
238
225
|
}
|
|
239
|
-
|
|
240
226
|
var header = this.header,
|
|
241
|
-
|
|
242
|
-
|
|
227
|
+
instance = this.instance;
|
|
243
228
|
if (!header) {
|
|
244
229
|
throw new Error('You need to query header before reading, I maintain state that way, sorry :(');
|
|
245
230
|
}
|
|
246
|
-
|
|
247
231
|
try {
|
|
248
232
|
var pointsToRead = Math.min(count * skip, header.pointsCount - instance.readOffset);
|
|
249
233
|
var bufferSize = Math.ceil(pointsToRead / skip);
|
|
250
234
|
var pointsRead = 0;
|
|
251
235
|
var thisBuf = new Uint8Array(bufferSize * header.pointsStructSize);
|
|
252
|
-
|
|
253
236
|
var bufRead = Module._malloc(header.pointsStructSize);
|
|
254
|
-
|
|
255
237
|
for (var i = 0; i < pointsToRead; i++) {
|
|
256
238
|
instance.getPoint(bufRead);
|
|
257
|
-
|
|
258
239
|
if (i % skip === 0) {
|
|
259
240
|
var a = new Uint8Array(Module.HEAPU8.buffer, bufRead, header.pointsStructSize);
|
|
260
241
|
thisBuf.set(a, pointsRead * header.pointsStructSize);
|
|
261
242
|
pointsRead++;
|
|
262
243
|
}
|
|
263
|
-
|
|
264
244
|
instance.readOffset++;
|
|
265
245
|
}
|
|
266
|
-
|
|
267
246
|
return {
|
|
268
247
|
buffer: thisBuf.buffer,
|
|
269
248
|
count: pointsRead,
|
|
@@ -273,15 +252,16 @@ var LAZLoader = function () {
|
|
|
273
252
|
throw new Error("Failed to read data: ".concat(error.message));
|
|
274
253
|
}
|
|
275
254
|
}
|
|
255
|
+
|
|
276
256
|
}, {
|
|
277
257
|
key: "close",
|
|
278
|
-
value:
|
|
258
|
+
value:
|
|
259
|
+
function close() {
|
|
279
260
|
try {
|
|
280
261
|
if (this.instance !== null) {
|
|
281
262
|
this.instance.delete();
|
|
282
263
|
this.instance = null;
|
|
283
264
|
}
|
|
284
|
-
|
|
285
265
|
return true;
|
|
286
266
|
} catch (error) {
|
|
287
267
|
throw new Error("Failed to close file: ".concat(error.message));
|
|
@@ -290,7 +270,6 @@ var LAZLoader = function () {
|
|
|
290
270
|
}]);
|
|
291
271
|
return LAZLoader;
|
|
292
272
|
}();
|
|
293
|
-
|
|
294
273
|
var LASDecoder = function () {
|
|
295
274
|
function LASDecoder(buffer, len, header) {
|
|
296
275
|
(0, _classCallCheck2.default)(this, LASDecoder);
|
|
@@ -314,18 +293,17 @@ var LASDecoder = function () {
|
|
|
314
293
|
|
|
315
294
|
(0, _createClass2.default)(LASDecoder, [{
|
|
316
295
|
key: "getPoint",
|
|
317
|
-
value:
|
|
296
|
+
value:
|
|
297
|
+
function getPoint(index) {
|
|
318
298
|
if (index < 0 || index >= this.pointsCount) {
|
|
319
299
|
throw new Error('Point index out of range');
|
|
320
300
|
}
|
|
321
|
-
|
|
322
301
|
var dv = new DataView(this.arrayb, index * this.pointSize, this.pointSize);
|
|
323
302
|
return this.decoder(dv);
|
|
324
303
|
}
|
|
325
304
|
}]);
|
|
326
305
|
return LASDecoder;
|
|
327
306
|
}();
|
|
328
|
-
|
|
329
307
|
var LASFile = function () {
|
|
330
308
|
function LASFile(arraybuffer) {
|
|
331
309
|
(0, _classCallCheck2.default)(this, LASFile);
|
|
@@ -337,76 +315,81 @@ var LASFile = function () {
|
|
|
337
315
|
(0, _defineProperty2.default)(this, "version", 0);
|
|
338
316
|
(0, _defineProperty2.default)(this, "versionAsString", '');
|
|
339
317
|
this.arraybuffer = arraybuffer;
|
|
340
|
-
|
|
341
318
|
if (this.determineVersion() > 13) {
|
|
342
319
|
throw new Error('Only file versions <= 1.3 are supported at this time');
|
|
343
320
|
}
|
|
344
|
-
|
|
345
321
|
this.determineFormat();
|
|
346
|
-
|
|
347
322
|
if (POINT_FORMAT_READERS[this.formatId] === undefined) {
|
|
348
323
|
throw new Error('The point format ID is not supported');
|
|
349
324
|
}
|
|
350
|
-
|
|
351
325
|
this.loader = this.isCompressed ? new LAZLoader(this.arraybuffer) : new LASLoader(this.arraybuffer);
|
|
352
326
|
}
|
|
353
327
|
|
|
354
328
|
(0, _createClass2.default)(LASFile, [{
|
|
355
329
|
key: "determineFormat",
|
|
356
|
-
value:
|
|
330
|
+
value:
|
|
331
|
+
function determineFormat() {
|
|
357
332
|
var formatId = readAs(this.arraybuffer, Uint8Array, 32 * 3 + 8);
|
|
358
333
|
var bit7 = (formatId & 0x80) >> 7;
|
|
359
334
|
var bit6 = (formatId & 0x40) >> 6;
|
|
360
|
-
|
|
361
335
|
if (bit7 === 1 && bit6 === 1) {
|
|
362
336
|
throw new Error('Old style compression not supported');
|
|
363
337
|
}
|
|
364
|
-
|
|
365
338
|
this.formatId = formatId & 0x3f;
|
|
366
339
|
this.isCompressed = bit7 === 1 || bit6 === 1;
|
|
367
340
|
}
|
|
341
|
+
|
|
368
342
|
}, {
|
|
369
343
|
key: "determineVersion",
|
|
370
|
-
value:
|
|
344
|
+
value:
|
|
345
|
+
function determineVersion() {
|
|
371
346
|
var ver = new Int8Array(this.arraybuffer, 24, 2);
|
|
372
347
|
this.version = ver[0] * 10 + ver[1];
|
|
373
348
|
this.versionAsString = "".concat(ver[0], ".").concat(ver[1]);
|
|
374
349
|
return this.version;
|
|
375
350
|
}
|
|
351
|
+
|
|
376
352
|
}, {
|
|
377
353
|
key: "open",
|
|
378
|
-
value:
|
|
354
|
+
value:
|
|
355
|
+
function open() {
|
|
379
356
|
if (this.loader.open()) {
|
|
380
357
|
this.isOpen = true;
|
|
381
358
|
}
|
|
382
359
|
}
|
|
383
360
|
}, {
|
|
384
361
|
key: "getHeader",
|
|
385
|
-
value:
|
|
362
|
+
value:
|
|
363
|
+
function getHeader() {
|
|
386
364
|
return this.loader.getHeader();
|
|
387
365
|
}
|
|
366
|
+
|
|
388
367
|
}, {
|
|
389
368
|
key: "readData",
|
|
390
|
-
value:
|
|
369
|
+
value:
|
|
370
|
+
function readData(count, start, skip) {
|
|
391
371
|
return this.loader.readData(count, start, skip);
|
|
392
372
|
}
|
|
373
|
+
|
|
393
374
|
}, {
|
|
394
375
|
key: "close",
|
|
395
|
-
value:
|
|
376
|
+
value:
|
|
377
|
+
function close() {
|
|
396
378
|
if (this.loader.close()) {
|
|
397
379
|
this.isOpen = false;
|
|
398
380
|
}
|
|
399
381
|
}
|
|
400
382
|
}, {
|
|
401
383
|
key: "getUnpacker",
|
|
402
|
-
value:
|
|
384
|
+
value:
|
|
385
|
+
function getUnpacker() {
|
|
403
386
|
return LASDecoder;
|
|
404
387
|
}
|
|
405
388
|
}]);
|
|
406
389
|
return LASFile;
|
|
407
390
|
}();
|
|
408
|
-
|
|
409
391
|
exports.LASFile = LASFile;
|
|
410
392
|
var LASModuleWasLoaded = false;
|
|
393
|
+
|
|
411
394
|
exports.LASModuleWasLoaded = LASModuleWasLoaded;
|
|
412
395
|
//# sourceMappingURL=laslaz-decoder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/laslaz-decoder.ts"],"names":["Module","POINT_FORMAT_READERS","dv","position","getInt32","intensity","getUint16","classification","getUint8","color","readAs","buf","Type","offset","count","undefined","sub","slice","BYTES_PER_ELEMENT","r","ret","i","push","parseLASHeader","arraybuffer","start","o","pointsOffset","Uint32Array","pointsFormatId","Uint8Array","pointsStructSize","Uint16Array","pointsCount","scale","Float64Array","bounds","maxs","mins","LASLoader","totalToRead","totalRead","versionAsString","isCompressed","header","skip","Error","readOffset","Math","min","end","buffer","hasMoreData","pointsToRead","bufferSize","ceil","pointsRead","src","set","LAZLoader","instance","LASZip","abInt","_malloc","byteLength","HEAPU8","open","error","message","thisBuf","bufRead","getPoint","a","delete","LASDecoder","len","arrayb","decoder","pointSize","index","DataView","LASFile","determineVersion","determineFormat","formatId","loader","bit7","bit6","ver","Int8Array","version","isOpen","getHeader","readData","close","LASModuleWasLoaded"],"mappings":"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","sourcesContent":["/*\n Modified from Uday Verma and Howard Butler's plasio\n https://github.com/verma/plasio/\n MIT License\n*/\n// laslaz.js - treat as compiled code\nimport type {LASHeader} from './las-types';\nimport getModule from './libs/laz-perf';\n\nlet Module: any = null;\n\ntype LASReader = (dv: DataView) => {\n [LASAttribute: string]: number | number[];\n};\n\ntype LASReaders = {\n [key: number]: LASReader;\n};\n\ntype LASData = {\n buffer: ArrayBuffer;\n count: number;\n hasMoreData: boolean;\n};\n\nconst POINT_FORMAT_READERS: LASReaders = {\n 0: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15)\n };\n },\n 1: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15)\n };\n },\n 2: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15),\n color: [dv.getUint16(20, true), dv.getUint16(22, true), dv.getUint16(24, true)]\n };\n },\n 3: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15),\n color: [dv.getUint16(28, true), dv.getUint16(30, true), dv.getUint16(32, true)]\n };\n }\n};\n\n/**\n * Reads incoming binary data depends on the Type parameter\n * @param buf\n * @param Type\n * @param offset\n * @param count\n * @returns number | number[] from incoming binary data\n */\nfunction readAs(buf: ArrayBuffer, Type: any = {}, offset: number, count?: number) {\n count = count === undefined || count === 0 ? 1 : count;\n const sub = buf.slice(offset, offset + Type.BYTES_PER_ELEMENT * count);\n\n const r = new Type(sub);\n if (count === 1) {\n return r[0];\n }\n\n const ret: number[] = [];\n for (let i = 0; i < count; i++) {\n ret.push(r[i]);\n }\n\n return ret;\n}\n\n/**\n * Parsing of header's attributes\n * @param arraybuffer\n * @returns header as LASHeader\n */\nfunction parseLASHeader(arraybuffer: ArrayBuffer): LASHeader {\n let start = 32 * 3 + 35;\n\n const o: Partial<LASHeader> = {\n pointsOffset: readAs(arraybuffer, Uint32Array, 32 * 3),\n pointsFormatId: readAs(arraybuffer, Uint8Array, 32 * 3 + 8),\n pointsStructSize: readAs(arraybuffer, Uint16Array, 32 * 3 + 8 + 1),\n pointsCount: readAs(arraybuffer, Uint32Array, 32 * 3 + 11),\n scale: readAs(arraybuffer, Float64Array, start, 3)\n };\n start += 24; // 8*3\n o.offset = readAs(arraybuffer, Float64Array, start, 3);\n start += 24;\n\n const bounds = readAs(arraybuffer, Float64Array, start, 6);\n start += 48; // 8*6;\n o.maxs = [bounds[0], bounds[2], bounds[4]];\n o.mins = [bounds[1], bounds[3], bounds[5]];\n\n return o as LASHeader;\n}\n\n// LAS Loader\n// Loads uncompressed files\n//\nclass LASLoader {\n arraybuffer: ArrayBuffer;\n readOffset: number = 0;\n header: LASHeader = {\n pointsOffset: 0,\n pointsFormatId: 0,\n pointsStructSize: 0,\n pointsCount: 0,\n scale: [0, 0, 0],\n offset: [0, 0, 0],\n maxs: [0],\n mins: [0],\n totalToRead: 0,\n totalRead: 0,\n versionAsString: '',\n isCompressed: true\n };\n\n constructor(arraybuffer: ArrayBuffer) {\n this.arraybuffer = arraybuffer;\n }\n\n /**\n * @returns boolean\n */\n open() {\n // Nothing needs to be done to open this\n return true;\n }\n /**\n * Parsing of incoming binary\n * @returns LASHeader\n */\n getHeader() {\n this.header = parseLASHeader(this.arraybuffer);\n return this.header;\n }\n\n /**\n * Reading data\n * @param count\n * @param skip\n * @returns new ArrayBuffer, count, hasMoreData\n */\n readData(count: number, skip: number) {\n const {header, arraybuffer} = this;\n if (!header) {\n throw new Error('Cannot start reading data till a header request is issued');\n }\n\n let {readOffset} = this;\n let start: number;\n\n if (skip <= 1) {\n count = Math.min(count, header.pointsCount - readOffset);\n start = header.pointsOffset + readOffset * header.pointsStructSize;\n const end = start + count * header.pointsStructSize;\n readOffset += count;\n this.readOffset = readOffset;\n return {\n buffer: arraybuffer.slice(start, end),\n count,\n hasMoreData: readOffset < header.pointsCount\n };\n }\n\n const pointsToRead = Math.min(count * skip, header.pointsCount - readOffset);\n const bufferSize = Math.ceil(pointsToRead / skip);\n let pointsRead = 0;\n\n const buf = new Uint8Array(bufferSize * header.pointsStructSize);\n for (let i = 0; i < pointsToRead; i++) {\n if (i % skip === 0) {\n start = header.pointsOffset + readOffset * header.pointsStructSize;\n const src = new Uint8Array(arraybuffer, start, header.pointsStructSize);\n\n buf.set(src, pointsRead * header.pointsStructSize);\n pointsRead++;\n }\n\n readOffset++;\n }\n this.readOffset = readOffset;\n\n return {\n buffer: buf.buffer,\n count: pointsRead,\n hasMoreData: readOffset < header.pointsCount\n };\n }\n /**\n * Method which brings data to null to close the file\n * @returns\n */\n close() {\n // @ts-ignore Possibly null\n this.arraybuffer = null;\n return true;\n }\n}\n\n/**\n * LAZ Loader\n * Uses NaCL module to load LAZ files\n */\nclass LAZLoader {\n arraybuffer: ArrayBuffer;\n instance: any = null; // LASZip instance\n header: LASHeader | null = null;\n\n constructor(arraybuffer: ArrayBuffer) {\n this.arraybuffer = arraybuffer;\n\n if (!Module) {\n // Avoid executing laz-perf on import\n Module = getModule();\n }\n }\n\n /**\n * Opens the file\n * @returns boolean\n */\n open(): boolean {\n try {\n const {arraybuffer} = this;\n this.instance = new Module.LASZip();\n const abInt = new Uint8Array(arraybuffer);\n const buf = Module._malloc(arraybuffer.byteLength);\n\n this.instance.arraybuffer = arraybuffer;\n this.instance.buf = buf;\n Module.HEAPU8.set(abInt, buf);\n this.instance.open(buf, arraybuffer.byteLength);\n\n this.instance.readOffset = 0;\n\n return true;\n } catch (error) {\n throw new Error(`Failed to open file: ${(error as Error).message}`);\n }\n }\n\n getHeader(): LASHeader {\n if (!this.instance) {\n throw new Error('You need to open the file before trying to read header');\n }\n\n try {\n const header = parseLASHeader(this.instance.arraybuffer);\n header.pointsFormatId &= 0x3f;\n this.header = header;\n return header;\n } catch (error) {\n throw new Error(`Failed to get header: ${(error as Error).message}`);\n }\n }\n /**\n * @param count\n * @param offset\n * @param skip\n * @returns Data\n */\n readData(count: number, offset: number, skip: number): LASData {\n if (!this.instance) {\n throw new Error('You need to open the file before trying to read stuff');\n }\n\n const {header, instance} = this;\n\n if (!header) {\n throw new Error(\n 'You need to query header before reading, I maintain state that way, sorry :('\n );\n }\n\n try {\n const pointsToRead = Math.min(count * skip, header.pointsCount - instance.readOffset);\n const bufferSize = Math.ceil(pointsToRead / skip);\n let pointsRead = 0;\n\n const thisBuf = new Uint8Array(bufferSize * header.pointsStructSize);\n const bufRead = Module._malloc(header.pointsStructSize);\n for (let i = 0; i < pointsToRead; i++) {\n instance.getPoint(bufRead);\n\n if (i % skip === 0) {\n const a = new Uint8Array(Module.HEAPU8.buffer, bufRead, header.pointsStructSize);\n thisBuf.set(a, pointsRead * header.pointsStructSize);\n pointsRead++;\n }\n\n instance.readOffset++;\n }\n\n return {\n buffer: thisBuf.buffer,\n count: pointsRead,\n hasMoreData: instance.readOffset < header.pointsCount\n };\n } catch (error) {\n throw new Error(`Failed to read data: ${(error as Error).message}`);\n }\n }\n\n /**\n * Deletes the instance\n * @returns boolean\n */\n close(): boolean {\n try {\n if (this.instance !== null) {\n this.instance.delete();\n this.instance = null;\n }\n return true;\n } catch (error) {\n throw new Error(`Failed to close file: ${(error as Error).message}`);\n }\n }\n}\n\n/**\n * Helper class: Decodes LAS records into points\n */\nclass LASDecoder {\n arrayb: ArrayBuffer;\n decoder: (dv: DataView) => {};\n pointsCount: number;\n pointSize: number;\n scale: [number, number, number];\n offset?: [number, number, number];\n mins?: number[];\n maxs?: number[];\n\n constructor(buffer: ArrayBuffer, len: number, header: LASHeader) {\n this.arrayb = buffer;\n this.decoder = POINT_FORMAT_READERS[header.pointsFormatId];\n this.pointsCount = len;\n this.pointSize = header.pointsStructSize;\n this.scale = header.scale;\n this.offset = header.offset;\n this.mins = header.mins;\n this.maxs = header.maxs;\n }\n\n /**\n * Decodes data depends on this point size\n * @param index\n * @returns New object\n */\n getPoint(index: number): {} {\n if (index < 0 || index >= this.pointsCount) {\n throw new Error('Point index out of range');\n }\n\n const dv = new DataView(this.arrayb, index * this.pointSize, this.pointSize);\n return this.decoder(dv);\n }\n}\n\n/**\n * A single consistent interface for loading LAS/LAZ files\n */\nexport class LASFile {\n arraybuffer: ArrayBuffer;\n formatId: number = 0;\n loader: LASLoader | LAZLoader;\n isCompressed: boolean = true;\n isOpen: boolean = false;\n version: number = 0;\n versionAsString: string = '';\n\n constructor(arraybuffer: ArrayBuffer) {\n this.arraybuffer = arraybuffer;\n\n if (this.determineVersion() > 13) {\n throw new Error('Only file versions <= 1.3 are supported at this time');\n }\n\n this.determineFormat();\n if (POINT_FORMAT_READERS[this.formatId] === undefined) {\n throw new Error('The point format ID is not supported');\n }\n\n this.loader = this.isCompressed\n ? new LAZLoader(this.arraybuffer)\n : new LASLoader(this.arraybuffer);\n }\n\n /**\n * Determines format in parameters of LASHeaer\n */\n determineFormat(): void {\n const formatId = readAs(this.arraybuffer, Uint8Array, 32 * 3 + 8);\n const bit7 = (formatId & 0x80) >> 7;\n const bit6 = (formatId & 0x40) >> 6;\n\n if (bit7 === 1 && bit6 === 1) {\n throw new Error('Old style compression not supported');\n }\n\n this.formatId = formatId & 0x3f;\n this.isCompressed = bit7 === 1 || bit6 === 1;\n }\n\n /**\n * Determines version\n * @returns version\n */\n determineVersion(): number {\n const ver = new Int8Array(this.arraybuffer, 24, 2);\n this.version = ver[0] * 10 + ver[1];\n this.versionAsString = `${ver[0]}.${ver[1]}`;\n return this.version;\n }\n\n /**\n * Reads if the file is open\n * @returns boolean\n */\n open(): void {\n if (this.loader.open()) {\n this.isOpen = true;\n }\n }\n /**\n * Gets the header\n * @returns Header\n */\n getHeader(): LASHeader {\n return this.loader.getHeader();\n }\n\n /**\n * @param count\n * @param start\n * @param skip\n * @returns Data\n */\n readData(count: number, start: number, skip: number): LASData {\n return this.loader.readData(count, start, skip);\n }\n\n /**\n * Closes the file\n */\n close(): void {\n if (this.loader.close()) {\n this.isOpen = false;\n }\n }\n /**\n */\n getUnpacker(): typeof LASDecoder {\n return LASDecoder;\n }\n}\n\nexport const LASModuleWasLoaded = false;\n\n/* eslint no-use-before-define: 2 */\n"],"file":"laslaz-decoder.js"}
|
|
1
|
+
{"version":3,"file":"laslaz-decoder.js","names":["Module","POINT_FORMAT_READERS","dv","position","getInt32","intensity","getUint16","classification","getUint8","color","readAs","buf","Type","offset","count","undefined","sub","slice","BYTES_PER_ELEMENT","r","ret","i","push","parseLASHeader","arraybuffer","start","o","pointsOffset","Uint32Array","pointsFormatId","Uint8Array","pointsStructSize","Uint16Array","pointsCount","scale","Float64Array","bounds","maxs","mins","LASLoader","totalToRead","totalRead","versionAsString","isCompressed","header","skip","Error","readOffset","Math","min","end","buffer","hasMoreData","pointsToRead","bufferSize","ceil","pointsRead","src","set","LAZLoader","getModule","instance","LASZip","abInt","_malloc","byteLength","HEAPU8","open","error","message","thisBuf","bufRead","getPoint","a","delete","LASDecoder","len","arrayb","decoder","pointSize","index","DataView","LASFile","determineVersion","determineFormat","formatId","loader","bit7","bit6","ver","Int8Array","version","isOpen","getHeader","readData","close","LASModuleWasLoaded"],"sources":["../../../src/lib/laslaz-decoder.ts"],"sourcesContent":["/*\n Modified from Uday Verma and Howard Butler's plasio\n https://github.com/verma/plasio/\n MIT License\n*/\n// laslaz.js - treat as compiled code\nimport type {LASHeader} from './las-types';\nimport getModule from './libs/laz-perf';\n\nlet Module: any = null;\n\ntype LASReader = (dv: DataView) => {\n [LASAttribute: string]: number | number[];\n};\n\ntype LASReaders = {\n [key: number]: LASReader;\n};\n\ntype LASData = {\n buffer: ArrayBuffer;\n count: number;\n hasMoreData: boolean;\n};\n\nconst POINT_FORMAT_READERS: LASReaders = {\n 0: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15)\n };\n },\n 1: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15)\n };\n },\n 2: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15),\n color: [dv.getUint16(20, true), dv.getUint16(22, true), dv.getUint16(24, true)]\n };\n },\n 3: (dv) => {\n return {\n position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n intensity: dv.getUint16(12, true),\n classification: dv.getUint8(15),\n color: [dv.getUint16(28, true), dv.getUint16(30, true), dv.getUint16(32, true)]\n };\n }\n};\n\n/**\n * Reads incoming binary data depends on the Type parameter\n * @param buf\n * @param Type\n * @param offset\n * @param count\n * @returns number | number[] from incoming binary data\n */\nfunction readAs(buf: ArrayBuffer, Type: any = {}, offset: number, count?: number) {\n count = count === undefined || count === 0 ? 1 : count;\n const sub = buf.slice(offset, offset + Type.BYTES_PER_ELEMENT * count);\n\n const r = new Type(sub);\n if (count === 1) {\n return r[0];\n }\n\n const ret: number[] = [];\n for (let i = 0; i < count; i++) {\n ret.push(r[i]);\n }\n\n return ret;\n}\n\n/**\n * Parsing of header's attributes\n * @param arraybuffer\n * @returns header as LASHeader\n */\nfunction parseLASHeader(arraybuffer: ArrayBuffer): LASHeader {\n let start = 32 * 3 + 35;\n\n const o: Partial<LASHeader> = {\n pointsOffset: readAs(arraybuffer, Uint32Array, 32 * 3),\n pointsFormatId: readAs(arraybuffer, Uint8Array, 32 * 3 + 8),\n pointsStructSize: readAs(arraybuffer, Uint16Array, 32 * 3 + 8 + 1),\n pointsCount: readAs(arraybuffer, Uint32Array, 32 * 3 + 11),\n scale: readAs(arraybuffer, Float64Array, start, 3)\n };\n start += 24; // 8*3\n o.offset = readAs(arraybuffer, Float64Array, start, 3);\n start += 24;\n\n const bounds = readAs(arraybuffer, Float64Array, start, 6);\n start += 48; // 8*6;\n o.maxs = [bounds[0], bounds[2], bounds[4]];\n o.mins = [bounds[1], bounds[3], bounds[5]];\n\n return o as LASHeader;\n}\n\n// LAS Loader\n// Loads uncompressed files\n//\nclass LASLoader {\n arraybuffer: ArrayBuffer;\n readOffset: number = 0;\n header: LASHeader = {\n pointsOffset: 0,\n pointsFormatId: 0,\n pointsStructSize: 0,\n pointsCount: 0,\n scale: [0, 0, 0],\n offset: [0, 0, 0],\n maxs: [0],\n mins: [0],\n totalToRead: 0,\n totalRead: 0,\n versionAsString: '',\n isCompressed: true\n };\n\n constructor(arraybuffer: ArrayBuffer) {\n this.arraybuffer = arraybuffer;\n }\n\n /**\n * @returns boolean\n */\n open() {\n // Nothing needs to be done to open this\n return true;\n }\n /**\n * Parsing of incoming binary\n * @returns LASHeader\n */\n getHeader() {\n this.header = parseLASHeader(this.arraybuffer);\n return this.header;\n }\n\n /**\n * Reading data\n * @param count\n * @param skip\n * @returns new ArrayBuffer, count, hasMoreData\n */\n readData(count: number, skip: number) {\n const {header, arraybuffer} = this;\n if (!header) {\n throw new Error('Cannot start reading data till a header request is issued');\n }\n\n let {readOffset} = this;\n let start: number;\n\n if (skip <= 1) {\n count = Math.min(count, header.pointsCount - readOffset);\n start = header.pointsOffset + readOffset * header.pointsStructSize;\n const end = start + count * header.pointsStructSize;\n readOffset += count;\n this.readOffset = readOffset;\n return {\n buffer: arraybuffer.slice(start, end),\n count,\n hasMoreData: readOffset < header.pointsCount\n };\n }\n\n const pointsToRead = Math.min(count * skip, header.pointsCount - readOffset);\n const bufferSize = Math.ceil(pointsToRead / skip);\n let pointsRead = 0;\n\n const buf = new Uint8Array(bufferSize * header.pointsStructSize);\n for (let i = 0; i < pointsToRead; i++) {\n if (i % skip === 0) {\n start = header.pointsOffset + readOffset * header.pointsStructSize;\n const src = new Uint8Array(arraybuffer, start, header.pointsStructSize);\n\n buf.set(src, pointsRead * header.pointsStructSize);\n pointsRead++;\n }\n\n readOffset++;\n }\n this.readOffset = readOffset;\n\n return {\n buffer: buf.buffer,\n count: pointsRead,\n hasMoreData: readOffset < header.pointsCount\n };\n }\n /**\n * Method which brings data to null to close the file\n * @returns\n */\n close() {\n // @ts-ignore Possibly null\n this.arraybuffer = null;\n return true;\n }\n}\n\n/**\n * LAZ Loader\n * Uses NaCL module to load LAZ files\n */\nclass LAZLoader {\n arraybuffer: ArrayBuffer;\n instance: any = null; // LASZip instance\n header: LASHeader | null = null;\n\n constructor(arraybuffer: ArrayBuffer) {\n this.arraybuffer = arraybuffer;\n\n if (!Module) {\n // Avoid executing laz-perf on import\n Module = getModule();\n }\n }\n\n /**\n * Opens the file\n * @returns boolean\n */\n open(): boolean {\n try {\n const {arraybuffer} = this;\n this.instance = new Module.LASZip();\n const abInt = new Uint8Array(arraybuffer);\n const buf = Module._malloc(arraybuffer.byteLength);\n\n this.instance.arraybuffer = arraybuffer;\n this.instance.buf = buf;\n Module.HEAPU8.set(abInt, buf);\n this.instance.open(buf, arraybuffer.byteLength);\n\n this.instance.readOffset = 0;\n\n return true;\n } catch (error) {\n throw new Error(`Failed to open file: ${(error as Error).message}`);\n }\n }\n\n getHeader(): LASHeader {\n if (!this.instance) {\n throw new Error('You need to open the file before trying to read header');\n }\n\n try {\n const header = parseLASHeader(this.instance.arraybuffer);\n header.pointsFormatId &= 0x3f;\n this.header = header;\n return header;\n } catch (error) {\n throw new Error(`Failed to get header: ${(error as Error).message}`);\n }\n }\n /**\n * @param count\n * @param offset\n * @param skip\n * @returns Data\n */\n readData(count: number, offset: number, skip: number): LASData {\n if (!this.instance) {\n throw new Error('You need to open the file before trying to read stuff');\n }\n\n const {header, instance} = this;\n\n if (!header) {\n throw new Error(\n 'You need to query header before reading, I maintain state that way, sorry :('\n );\n }\n\n try {\n const pointsToRead = Math.min(count * skip, header.pointsCount - instance.readOffset);\n const bufferSize = Math.ceil(pointsToRead / skip);\n let pointsRead = 0;\n\n const thisBuf = new Uint8Array(bufferSize * header.pointsStructSize);\n const bufRead = Module._malloc(header.pointsStructSize);\n for (let i = 0; i < pointsToRead; i++) {\n instance.getPoint(bufRead);\n\n if (i % skip === 0) {\n const a = new Uint8Array(Module.HEAPU8.buffer, bufRead, header.pointsStructSize);\n thisBuf.set(a, pointsRead * header.pointsStructSize);\n pointsRead++;\n }\n\n instance.readOffset++;\n }\n\n return {\n buffer: thisBuf.buffer,\n count: pointsRead,\n hasMoreData: instance.readOffset < header.pointsCount\n };\n } catch (error) {\n throw new Error(`Failed to read data: ${(error as Error).message}`);\n }\n }\n\n /**\n * Deletes the instance\n * @returns boolean\n */\n close(): boolean {\n try {\n if (this.instance !== null) {\n this.instance.delete();\n this.instance = null;\n }\n return true;\n } catch (error) {\n throw new Error(`Failed to close file: ${(error as Error).message}`);\n }\n }\n}\n\n/**\n * Helper class: Decodes LAS records into points\n */\nclass LASDecoder {\n arrayb: ArrayBuffer;\n decoder: (dv: DataView) => {};\n pointsCount: number;\n pointSize: number;\n scale: [number, number, number];\n offset?: [number, number, number];\n mins?: number[];\n maxs?: number[];\n\n constructor(buffer: ArrayBuffer, len: number, header: LASHeader) {\n this.arrayb = buffer;\n this.decoder = POINT_FORMAT_READERS[header.pointsFormatId];\n this.pointsCount = len;\n this.pointSize = header.pointsStructSize;\n this.scale = header.scale;\n this.offset = header.offset;\n this.mins = header.mins;\n this.maxs = header.maxs;\n }\n\n /**\n * Decodes data depends on this point size\n * @param index\n * @returns New object\n */\n getPoint(index: number): {} {\n if (index < 0 || index >= this.pointsCount) {\n throw new Error('Point index out of range');\n }\n\n const dv = new DataView(this.arrayb, index * this.pointSize, this.pointSize);\n return this.decoder(dv);\n }\n}\n\n/**\n * A single consistent interface for loading LAS/LAZ files\n */\nexport class LASFile {\n arraybuffer: ArrayBuffer;\n formatId: number = 0;\n loader: LASLoader | LAZLoader;\n isCompressed: boolean = true;\n isOpen: boolean = false;\n version: number = 0;\n versionAsString: string = '';\n\n constructor(arraybuffer: ArrayBuffer) {\n this.arraybuffer = arraybuffer;\n\n if (this.determineVersion() > 13) {\n throw new Error('Only file versions <= 1.3 are supported at this time');\n }\n\n this.determineFormat();\n if (POINT_FORMAT_READERS[this.formatId] === undefined) {\n throw new Error('The point format ID is not supported');\n }\n\n this.loader = this.isCompressed\n ? new LAZLoader(this.arraybuffer)\n : new LASLoader(this.arraybuffer);\n }\n\n /**\n * Determines format in parameters of LASHeaer\n */\n determineFormat(): void {\n const formatId = readAs(this.arraybuffer, Uint8Array, 32 * 3 + 8);\n const bit7 = (formatId & 0x80) >> 7;\n const bit6 = (formatId & 0x40) >> 6;\n\n if (bit7 === 1 && bit6 === 1) {\n throw new Error('Old style compression not supported');\n }\n\n this.formatId = formatId & 0x3f;\n this.isCompressed = bit7 === 1 || bit6 === 1;\n }\n\n /**\n * Determines version\n * @returns version\n */\n determineVersion(): number {\n const ver = new Int8Array(this.arraybuffer, 24, 2);\n this.version = ver[0] * 10 + ver[1];\n this.versionAsString = `${ver[0]}.${ver[1]}`;\n return this.version;\n }\n\n /**\n * Reads if the file is open\n * @returns boolean\n */\n open(): void {\n if (this.loader.open()) {\n this.isOpen = true;\n }\n }\n /**\n * Gets the header\n * @returns Header\n */\n getHeader(): LASHeader {\n return this.loader.getHeader();\n }\n\n /**\n * @param count\n * @param start\n * @param skip\n * @returns Data\n */\n readData(count: number, start: number, skip: number): LASData {\n return this.loader.readData(count, start, skip);\n }\n\n /**\n * Closes the file\n */\n close(): void {\n if (this.loader.close()) {\n this.isOpen = false;\n }\n }\n /**\n */\n getUnpacker(): typeof LASDecoder {\n return LASDecoder;\n }\n}\n\nexport const LASModuleWasLoaded = false;\n\n/* eslint no-use-before-define: 2 */\n"],"mappings":"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"}
|