@loaders.gl/las 3.3.0-alpha.1 → 3.3.0-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/es5/bundle.js +0 -1
  2. package/dist/es5/bundle.js.map +1 -1
  3. package/dist/es5/index.js +4 -16
  4. package/dist/es5/index.js.map +1 -1
  5. package/dist/es5/las-loader.js +3 -1
  6. package/dist/es5/las-loader.js.map +1 -1
  7. package/dist/es5/lib/get-las-schema.js +0 -8
  8. package/dist/es5/lib/get-las-schema.js.map +1 -1
  9. package/dist/es5/lib/las-types.js.map +1 -1
  10. package/dist/es5/lib/laslaz-decoder.js +40 -57
  11. package/dist/es5/lib/laslaz-decoder.js.map +1 -1
  12. package/dist/es5/lib/libs/laz-perf.js.map +1 -1
  13. package/dist/es5/lib/parse-las.js +17 -49
  14. package/dist/es5/lib/parse-las.js.map +1 -1
  15. package/dist/es5/workers/las-worker.js +0 -2
  16. package/dist/es5/workers/las-worker.js.map +1 -1
  17. package/dist/esm/bundle.js +1 -1
  18. package/dist/esm/bundle.js.map +1 -1
  19. package/dist/esm/index.js +4 -1
  20. package/dist/esm/index.js.map +1 -1
  21. package/dist/esm/las-loader.js +4 -1
  22. package/dist/esm/las-loader.js.map +1 -1
  23. package/dist/esm/lib/get-las-schema.js +1 -6
  24. package/dist/esm/lib/get-las-schema.js.map +1 -1
  25. package/dist/esm/lib/las-types.js.map +1 -1
  26. package/dist/esm/lib/laslaz-decoder.js +6 -63
  27. package/dist/esm/lib/laslaz-decoder.js.map +1 -1
  28. package/dist/esm/lib/libs/laz-perf.js.map +1 -1
  29. package/dist/esm/lib/parse-las.js +18 -26
  30. package/dist/esm/lib/parse-las.js.map +1 -1
  31. package/dist/esm/workers/las-worker.js.map +1 -1
  32. package/dist/index.d.ts +2 -2
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/las-loader.d.ts +1 -1
  35. package/dist/las-loader.d.ts.map +1 -1
  36. package/dist/las-worker.js +1 -1
  37. package/dist/lib/las-types.d.ts +2 -2
  38. package/dist/lib/las-types.d.ts.map +1 -1
  39. package/dist/lib/laslaz-decoder.d.ts +1 -1
  40. package/dist/lib/laslaz-decoder.d.ts.map +1 -1
  41. package/package.json +4 -4
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  var moduleExports = require('./index');
4
-
5
4
  globalThis.loaders = globalThis.loaders || {};
6
5
  module.exports = Object.assign(globalThis.loaders, moduleExports);
7
6
  //# sourceMappingURL=bundle.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/bundle.ts"],"names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"mappings":";;AACA,IAAMA,aAAa,GAAGC,OAAO,CAAC,SAAD,CAA7B;;AACAC,UAAU,CAACC,OAAX,GAAqBD,UAAU,CAACC,OAAX,IAAsB,EAA3C;AACAC,MAAM,CAACC,OAAP,GAAiBC,MAAM,CAACC,MAAP,CAAcL,UAAU,CAACC,OAAzB,EAAkCH,aAAlC,CAAjB","sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"file":"bundle.js"}
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 = exports.LASLoader = void 0;
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 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; }
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;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"names":["LASLoader","LASWorkerLoader","parse","arrayBuffer","options","parseSync","_typecheckLoader"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAEA;;AACA;;;;;;AAUO,IAAMA,SAAS,mCACjBC,oBADiB;AAEpBC,EAAAA,KAAK;AAAA,2EAAE,iBAAOC,WAAP,EAAiCC,OAAjC;AAAA;AAAA;AAAA;AAAA;AAAA,+CACL,uBAASD,WAAT,EAAsBC,OAAtB,CADK;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAF;;AAAA;AAAA;AAAA;;AAAA;AAAA,KAFe;AAIpBC,EAAAA,SAAS,EAAE,mBAACF,WAAD,EAA2BC,OAA3B;AAAA,WACT,uBAASD,WAAT,EAAsBC,OAAtB,CADS;AAAA;AAJS,EAAf;;;AAQA,IAAME,gBAAkC,GAAGN,SAA3C","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"],"file":"index.js"}
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"}
@@ -4,7 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports._typecheckLoader = exports.LASLoader = void 0;
7
- var VERSION = typeof "3.3.0-alpha.1" !== 'undefined' ? "3.3.0-alpha.1" : 'latest';
7
+
8
+ var VERSION = typeof "3.3.0-alpha.10" !== 'undefined' ? "3.3.0-alpha.10" : '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,"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,IAAMA,OAAO,GAAG,2BAAuB,WAAvB,qBAAmD,QAAnE;AAWA,IAAMC,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;AAYO,IAAMC,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;;AAcA,IAAMkB,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,"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,uBAAkB,KAAK,WAAW,sBAAiB,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,"sources":["../../../src/lib/get-las-schema.ts"],"names":["getLASSchema","lasHeader","attributes","metadataMap","makeMetadataFromLasHeader","schema","Map","set","pointsOffset","toString","pointsFormatId","pointsStructSize","pointsCount","JSON","stringify","scale","offset","maxs","undefined","mins","totalToRead","totalRead","versionAsString","isCompressed"],"mappings":";;;;;;;;AAAA;;AASO,SAASA,YAAT,CAAsBC,SAAtB,EAA4CC,UAA5C,EAAgF;AACrF,MAAMC,WAAW,GAAGC,yBAAyB,CAACH,SAAD,CAA7C;AACA,MAAMI,MAAM,GAAG,8BAAiBH,UAAjB,EAA6BC,WAA7B,CAAf;AACA,SAAOE,MAAP;AACD;;AAOM,SAASD,yBAAT,CAAmCH,SAAnC,EAA8E;AACnF,MAAME,WAAW,GAAG,IAAIG,GAAJ,EAApB;AACAH,EAAAA,WAAW,CAACI,GAAZ,CAAgB,kBAAhB,EAAoCN,SAAS,CAACO,YAAV,CAAuBC,QAAvB,CAAgC,EAAhC,CAApC;AACAN,EAAAA,WAAW,CAACI,GAAZ,CAAgB,oBAAhB,EAAsCN,SAAS,CAACS,cAAV,CAAyBD,QAAzB,CAAkC,EAAlC,CAAtC;AACAN,EAAAA,WAAW,CAACI,GAAZ,CAAgB,sBAAhB,EAAwCN,SAAS,CAACU,gBAAV,CAA2BF,QAA3B,CAAoC,EAApC,CAAxC;AACAN,EAAAA,WAAW,CAACI,GAAZ,CAAgB,iBAAhB,EAAmCN,SAAS,CAACW,WAAV,CAAsBH,QAAtB,CAA+B,EAA/B,CAAnC;AACAN,EAAAA,WAAW,CAACI,GAAZ,CAAgB,WAAhB,EAA6BM,IAAI,CAACC,SAAL,CAAeb,SAAS,CAACc,KAAzB,CAA7B;AACAZ,EAAAA,WAAW,CAACI,GAAZ,CAAgB,YAAhB,EAA8BM,IAAI,CAACC,SAAL,CAAeb,SAAS,CAACe,MAAzB,CAA9B;;AACA,MAAIf,SAAS,CAACgB,IAAV,KAAmBC,SAAvB,EAAkC;AAChCf,IAAAA,WAAW,CAACI,GAAZ,CAAgB,UAAhB,EAA4BM,IAAI,CAACC,SAAL,CAAeb,SAAS,CAACgB,IAAzB,CAA5B;AACD;;AACD,MAAIhB,SAAS,CAACkB,IAAV,KAAmBD,SAAvB,EAAkC;AAChCf,IAAAA,WAAW,CAACI,GAAZ,CAAgB,UAAhB,EAA4BM,IAAI,CAACC,SAAL,CAAeb,SAAS,CAACkB,IAAzB,CAA5B;AACD;;AACDhB,EAAAA,WAAW,CAACI,GAAZ,CAAgB,iBAAhB,EAAmCN,SAAS,CAACmB,WAAV,CAAsBX,QAAtB,CAA+B,EAA/B,CAAnC;AACAN,EAAAA,WAAW,CAACI,GAAZ,CAAgB,6BAAhB,EAA+CN,SAAS,CAACoB,SAAV,CAAoBZ,QAApB,CAA6B,EAA7B,CAA/C;;AACA,MAAIR,SAAS,CAACqB,eAAV,KAA8BJ,SAAlC,EAA6C;AAC3Cf,IAAAA,WAAW,CAACI,GAAZ,CAAgB,qBAAhB,EAAuCN,SAAS,CAACqB,eAAjD;AACD;;AACD,MAAIrB,SAAS,CAACsB,YAAV,KAA2BL,SAA/B,EAA0C;AACxCf,IAAAA,WAAW,CAACI,GAAZ,CAAgB,kBAAhB,EAAoCN,SAAS,CAACsB,YAAV,CAAuBd,QAAvB,EAApC;AACD;;AACD,SAAON,WAAP;AACD","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"],"file":"get-las-schema.js"}
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,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"las-types.js"}
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: function open() {
107
+ value:
108
+ function open() {
117
109
  return true;
118
110
  }
119
111
  }, {
120
112
  key: "getHeader",
121
- value: function getHeader() {
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: function readData(count, skip) {
121
+ value:
122
+ function readData(count, skip) {
128
123
  var header = this.header,
129
- arraybuffer = this.arraybuffer;
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: function close() {
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: function open() {
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: function readData(count, offset, skip) {
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
- instance = this.instance;
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: function close() {
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: function getPoint(index) {
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: function determineFormat() {
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: function determineVersion() {
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: function open() {
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: function getHeader() {
362
+ value:
363
+ function getHeader() {
386
364
  return this.loader.getHeader();
387
365
  }
366
+
388
367
  }, {
389
368
  key: "readData",
390
- value: function readData(count, start, skip) {
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: function close() {
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: function getUnpacker() {
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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"}