@loaders.gl/tile-converter 4.0.0-alpha.20 → 4.0.0-alpha.22

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 (62) hide show
  1. package/dist/converter.min.js +113 -113
  2. package/dist/dist.min.js +33160 -32581
  3. package/dist/es5/deps-installer/deps-installer.js +1 -1
  4. package/dist/es5/i3s-converter/helpers/load-3d-tiles.js +70 -4
  5. package/dist/es5/i3s-converter/helpers/load-3d-tiles.js.map +1 -1
  6. package/dist/es5/i3s-converter/i3s-converter.js +34 -32
  7. package/dist/es5/i3s-converter/i3s-converter.js.map +1 -1
  8. package/dist/es5/i3s-server/controllers/slpk-controller.js +2 -2
  9. package/dist/es5/i3s-server/controllers/slpk-controller.js.map +1 -1
  10. package/dist/es5/index.js +0 -7
  11. package/dist/es5/index.js.map +1 -1
  12. package/dist/es5/pgm-loader.js +1 -1
  13. package/dist/es5/slpk-extractor/slpk-extractor.js +7 -8
  14. package/dist/es5/slpk-extractor/slpk-extractor.js.map +1 -1
  15. package/dist/esm/deps-installer/deps-installer.js +1 -1
  16. package/dist/esm/i3s-converter/helpers/load-3d-tiles.js +33 -4
  17. package/dist/esm/i3s-converter/helpers/load-3d-tiles.js.map +1 -1
  18. package/dist/esm/i3s-converter/i3s-converter.js +7 -5
  19. package/dist/esm/i3s-converter/i3s-converter.js.map +1 -1
  20. package/dist/esm/i3s-server/bin/i3s-server.min.js +70 -70
  21. package/dist/esm/i3s-server/controllers/slpk-controller.js +1 -1
  22. package/dist/esm/i3s-server/controllers/slpk-controller.js.map +1 -1
  23. package/dist/esm/index.js +0 -1
  24. package/dist/esm/index.js.map +1 -1
  25. package/dist/esm/pgm-loader.js +1 -1
  26. package/dist/esm/slpk-extractor/slpk-extractor.js +2 -3
  27. package/dist/esm/slpk-extractor/slpk-extractor.js.map +1 -1
  28. package/dist/i3s-converter/helpers/load-3d-tiles.d.ts +15 -0
  29. package/dist/i3s-converter/helpers/load-3d-tiles.d.ts.map +1 -1
  30. package/dist/i3s-converter/helpers/load-3d-tiles.js +51 -5
  31. package/dist/i3s-converter/i3s-converter.d.ts.map +1 -1
  32. package/dist/i3s-converter/i3s-converter.js +6 -4
  33. package/dist/i3s-server/controllers/slpk-controller.js +2 -2
  34. package/dist/index.d.ts +0 -1
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +1 -3
  37. package/dist/slpk-extractor/slpk-extractor.d.ts +1 -1
  38. package/dist/slpk-extractor/slpk-extractor.d.ts.map +1 -1
  39. package/dist/slpk-extractor/slpk-extractor.js +3 -4
  40. package/dist/slpk-extractor.min.js +35 -35
  41. package/package.json +14 -14
  42. package/src/i3s-converter/helpers/load-3d-tiles.ts +61 -5
  43. package/src/i3s-converter/i3s-converter.ts +12 -5
  44. package/src/i3s-server/controllers/slpk-controller.ts +1 -1
  45. package/src/index.ts +0 -1
  46. package/src/slpk-extractor/slpk-extractor.ts +2 -3
  47. package/dist/es5/slpk-extractor/helpers/file-handle-file.js +0 -214
  48. package/dist/es5/slpk-extractor/helpers/file-handle-file.js.map +0 -1
  49. package/dist/es5/slpk-extractor/helpers/fs-promises.js +0 -77
  50. package/dist/es5/slpk-extractor/helpers/fs-promises.js.map +0 -1
  51. package/dist/esm/slpk-extractor/helpers/file-handle-file.js +0 -54
  52. package/dist/esm/slpk-extractor/helpers/file-handle-file.js.map +0 -1
  53. package/dist/esm/slpk-extractor/helpers/fs-promises.js +0 -32
  54. package/dist/esm/slpk-extractor/helpers/fs-promises.js.map +0 -1
  55. package/dist/slpk-extractor/helpers/file-handle-file.d.ts +0 -51
  56. package/dist/slpk-extractor/helpers/file-handle-file.d.ts.map +0 -1
  57. package/dist/slpk-extractor/helpers/file-handle-file.js +0 -86
  58. package/dist/slpk-extractor/helpers/fs-promises.d.ts +0 -38
  59. package/dist/slpk-extractor/helpers/fs-promises.d.ts.map +0 -1
  60. package/dist/slpk-extractor/helpers/fs-promises.js +0 -51
  61. package/src/slpk-extractor/helpers/file-handle-file.ts +0 -109
  62. package/src/slpk-extractor/helpers/fs-promises.ts +0 -66
@@ -8,7 +8,7 @@ exports.PGMLoader = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
10
  var _geoid = require("@math.gl/geoid");
11
- var VERSION = typeof "4.0.0-alpha.20" !== 'undefined' ? "4.0.0-alpha.20" : 'latest';
11
+ var VERSION = typeof "4.0.0-alpha.22" !== 'undefined' ? "4.0.0-alpha.22" : 'latest';
12
12
  var PGMLoader = {
13
13
  name: 'PGM - Netpbm grayscale image format',
14
14
  id: 'pgm',
@@ -11,17 +11,16 @@ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/cl
11
11
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
12
  var _core = require("@loaders.gl/core");
13
13
  var _constants = require("../constants");
14
- var _fileHandleFile = require("./helpers/file-handle-file");
15
14
  var _loaderUtils = require("@loaders.gl/loader-utils");
16
15
  var _zip = require("@loaders.gl/zip");
17
16
  var _compression = require("@loaders.gl/compression");
18
17
  var _fileUtils = require("../lib/utils/file-utils");
19
18
  var indexNames = ['3dSceneLayer.json.gz', '3dNodeIndexDocument.json.gz', 'sharedResource.json.gz'];
20
- var SLPKConverter = function () {
21
- function SLPKConverter() {
22
- (0, _classCallCheck2.default)(this, SLPKConverter);
19
+ var SLPKExtractor = function () {
20
+ function SLPKExtractor() {
21
+ (0, _classCallCheck2.default)(this, SLPKExtractor);
23
22
  }
24
- (0, _createClass2.default)(SLPKConverter, [{
23
+ (0, _createClass2.default)(SLPKExtractor, [{
25
24
  key: "extract",
26
25
  value: function () {
27
26
  var _extract = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(options) {
@@ -38,7 +37,7 @@ var SLPKConverter = function () {
38
37
  case 3:
39
38
  inputUrl = options.inputUrl;
40
39
  _context.next = 6;
41
- return _fileHandleFile.FileHandleFile.from(inputUrl);
40
+ return _zip.FileHandleFile.from(inputUrl);
42
41
  case 6:
43
42
  provider = _context.sent;
44
43
  _context.next = 9;
@@ -166,7 +165,7 @@ var SLPKConverter = function () {
166
165
  return writeFile;
167
166
  }()
168
167
  }]);
169
- return SLPKConverter;
168
+ return SLPKExtractor;
170
169
  }();
171
- exports.default = SLPKConverter;
170
+ exports.default = SLPKExtractor;
172
171
  //# sourceMappingURL=slpk-extractor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"slpk-extractor.js","names":["_core","require","_constants","_fileHandleFile","_loaderUtils","_zip","_compression","_fileUtils","indexNames","SLPKConverter","_classCallCheck2","default","_createClass2","key","value","_extract","_asyncToGenerator2","_regenerator","mark","_callee","options","inputUrl","provider","localHeader","_localHeader","wrap","_callee$","_context","prev","next","isBrowser","console","log","BROWSER_ERROR_MESSAGE","abrupt","FileHandleFile","from","sent","parseZipLocalFileHeader","t0","t1","t2","correctIndexNames","fileName","slice","fileDataOffset","compressedSize","t3","t4","name","data","unGzip","call","t5","t6","outputPath","writeFile","stop","extract","_x","apply","arguments","includes","path","filename","join","dirname","parts","exec","concat","at","_unGzip","_callee2","file","_file$name","_file$name2","compression","decompressedData","_callee2$","_context2","test","GZipCompression","decompress","Promise","resolve","_x2","_writeFile2","_callee3","finalPath","dirName","_callee3$","_context3","_x3","_x4","exports"],"sources":["../../../src/slpk-extractor/slpk-extractor.ts"],"sourcesContent":["import {isBrowser} from '@loaders.gl/core';\n\nimport {BROWSER_ERROR_MESSAGE} from '../constants';\nimport {FileHandleFile} from './helpers/file-handle-file';\nimport {path} from '@loaders.gl/loader-utils';\nimport {parseZipLocalFileHeader} from '@loaders.gl/zip';\nimport {GZipCompression} from '@loaders.gl/compression';\nimport {writeFile} from '../lib/utils/file-utils';\n\nconst indexNames = [\n '3dSceneLayer.json.gz',\n '3dNodeIndexDocument.json.gz',\n 'sharedResource.json.gz'\n];\n\n/**\n * Description of the file in the SLPK\n */\ntype File = {\n name: string | null;\n data: ArrayBuffer;\n};\n\n/**\n * Converter from slpk to i3s\n */\nexport default class SLPKConverter {\n /**\n * Extract slpk to i3s\n * @param options\n * @param options.inputUrl the url to read SLPK file\n * @param options.outputPath the output filename\n */\n public async extract(options: {inputUrl: string; outputPath: string}): Promise<string> {\n if (isBrowser) {\n console.log(BROWSER_ERROR_MESSAGE);\n return BROWSER_ERROR_MESSAGE;\n }\n const {inputUrl} = options;\n\n const provider = await FileHandleFile.from(inputUrl);\n\n let localHeader = await parseZipLocalFileHeader(0n, provider);\n while (localHeader) {\n await this.writeFile(\n await this.unGzip({\n name: this.correctIndexNames(localHeader.fileName),\n data: await provider.slice(\n localHeader.fileDataOffset,\n localHeader.fileDataOffset + localHeader.compressedSize\n )\n }),\n options.outputPath\n );\n localHeader = await parseZipLocalFileHeader(\n localHeader.fileDataOffset + localHeader?.compressedSize,\n provider\n );\n }\n\n return 'success';\n }\n\n /**\n * Defines file name and path for i3s format\n * @param fileName initial file name and path\n */\n\n private correctIndexNames(fileName: string): string | null {\n if (indexNames.includes(path.filename(path.join('/', fileName)))) {\n return path.join(path.dirname(fileName), 'index.json.gz');\n }\n // finds path with name part and extention part\n let parts = /^(.*\\/[^\\/\\.]*)(\\..+)$/.exec(fileName);\n if (!parts) {\n return null;\n }\n return `${parts?.at(1)}/index${parts?.at(2)}`;\n }\n\n private async unGzip(file: File): Promise<File> {\n if (/\\.gz$/.test(file.name ?? '')) {\n const compression = new GZipCompression();\n\n const decompressedData = await compression.decompress(file.data);\n\n return {data: decompressedData, name: (file.name ?? '').slice(0, -3)};\n }\n return Promise.resolve(file);\n }\n\n private async writeFile(options: File, outputPath: string): Promise<void> {\n if (!options.name) {\n return;\n }\n const finalPath = path.join(outputPath, options.name);\n const dirName = path.dirname(finalPath);\n const fileName = path.filename(finalPath);\n await writeFile(dirName, options.data, fileName);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"slpk-extractor.js","names":["_core","require","_constants","_loaderUtils","_zip","_compression","_fileUtils","indexNames","SLPKExtractor","_classCallCheck2","default","_createClass2","key","value","_extract","_asyncToGenerator2","_regenerator","mark","_callee","options","inputUrl","provider","localHeader","_localHeader","wrap","_callee$","_context","prev","next","isBrowser","console","log","BROWSER_ERROR_MESSAGE","abrupt","FileHandleFile","from","sent","parseZipLocalFileHeader","t0","t1","t2","correctIndexNames","fileName","slice","fileDataOffset","compressedSize","t3","t4","name","data","unGzip","call","t5","t6","outputPath","writeFile","stop","extract","_x","apply","arguments","includes","path","filename","join","dirname","parts","exec","concat","at","_unGzip","_callee2","file","_file$name","_file$name2","compression","decompressedData","_callee2$","_context2","test","GZipCompression","decompress","Promise","resolve","_x2","_writeFile2","_callee3","finalPath","dirName","_callee3$","_context3","_x3","_x4","exports"],"sources":["../../../src/slpk-extractor/slpk-extractor.ts"],"sourcesContent":["import {isBrowser} from '@loaders.gl/core';\n\nimport {BROWSER_ERROR_MESSAGE} from '../constants';\nimport {path} from '@loaders.gl/loader-utils';\nimport {FileHandleFile, parseZipLocalFileHeader} from '@loaders.gl/zip';\nimport {GZipCompression} from '@loaders.gl/compression';\nimport {writeFile} from '../lib/utils/file-utils';\n\nconst indexNames = [\n '3dSceneLayer.json.gz',\n '3dNodeIndexDocument.json.gz',\n 'sharedResource.json.gz'\n];\n\n/**\n * Description of the file in the SLPK\n */\ntype File = {\n name: string | null;\n data: ArrayBuffer;\n};\n\n/**\n * Converter from slpk to i3s\n */\nexport default class SLPKExtractor {\n /**\n * Extract slpk to i3s\n * @param options\n * @param options.inputUrl the url to read SLPK file\n * @param options.outputPath the output filename\n */\n public async extract(options: {inputUrl: string; outputPath: string}): Promise<string> {\n if (isBrowser) {\n console.log(BROWSER_ERROR_MESSAGE);\n return BROWSER_ERROR_MESSAGE;\n }\n const {inputUrl} = options;\n\n const provider = await FileHandleFile.from(inputUrl);\n\n let localHeader = await parseZipLocalFileHeader(0n, provider);\n while (localHeader) {\n await this.writeFile(\n await this.unGzip({\n name: this.correctIndexNames(localHeader.fileName),\n data: await provider.slice(\n localHeader.fileDataOffset,\n localHeader.fileDataOffset + localHeader.compressedSize\n )\n }),\n options.outputPath\n );\n localHeader = await parseZipLocalFileHeader(\n localHeader.fileDataOffset + localHeader?.compressedSize,\n provider\n );\n }\n\n return 'success';\n }\n\n /**\n * Defines file name and path for i3s format\n * @param fileName initial file name and path\n */\n\n private correctIndexNames(fileName: string): string | null {\n if (indexNames.includes(path.filename(path.join('/', fileName)))) {\n return path.join(path.dirname(fileName), 'index.json.gz');\n }\n // finds path with name part and extention part\n let parts = /^(.*\\/[^\\/\\.]*)(\\..+)$/.exec(fileName);\n if (!parts) {\n return null;\n }\n return `${parts?.at(1)}/index${parts?.at(2)}`;\n }\n\n private async unGzip(file: File): Promise<File> {\n if (/\\.gz$/.test(file.name ?? '')) {\n const compression = new GZipCompression();\n\n const decompressedData = await compression.decompress(file.data);\n\n return {data: decompressedData, name: (file.name ?? '').slice(0, -3)};\n }\n return Promise.resolve(file);\n }\n\n private async writeFile(options: File, outputPath: string): Promise<void> {\n if (!options.name) {\n return;\n }\n const finalPath = path.join(outputPath, options.name);\n const dirName = path.dirname(finalPath);\n const fileName = path.filename(finalPath);\n await writeFile(dirName, options.data, fileName);\n }\n}\n"],"mappings":"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"}
@@ -5,7 +5,7 @@ import { join } from 'path';
5
5
  import { ChildProcessProxy } from '@loaders.gl/worker-utils';
6
6
  import { DRACO_EXTERNAL_LIBRARIES, DRACO_EXTERNAL_LIBRARY_URLS } from '@loaders.gl/draco';
7
7
  import { BASIS_EXTERNAL_LIBRARIES } from '@loaders.gl/textures';
8
- const VERSION = typeof "4.0.0-alpha.20" !== 'undefined' ? "4.0.0-alpha.20" : 'beta';
8
+ const VERSION = typeof "4.0.0-alpha.22" !== 'undefined' ? "4.0.0-alpha.22" : 'beta';
9
9
  const PGM_LINK = 'https://raw.githubusercontent.com/visgl/deck.gl-data/master/egm/egm2008-5.zip';
10
10
  export class DepsInstaller {
11
11
  async install() {
@@ -1,6 +1,7 @@
1
+ import { Tiles3DArchiveFileSystem } from '@loaders.gl/3d-tiles';
1
2
  import { load } from '@loaders.gl/core';
2
3
  export const loadNestedTileset = async (sourceTileset, sourceTile, tilesetLoadOptions) => {
3
- const isTileset = sourceTile.type === 'json';
4
+ const isTileset = isNestedTileset(sourceTile);
4
5
  if (!sourceTileset || !sourceTile.contentUrl || !isTileset) {
5
6
  return;
6
7
  }
@@ -11,13 +12,13 @@ export const loadNestedTileset = async (sourceTileset, sourceTile, tilesetLoadOp
11
12
  assetGltfUpAxis: sourceTileset.asset && sourceTileset.asset.gltfUpAxis || 'Y'
12
13
  }
13
14
  };
14
- const tileContent = await load(sourceTile.contentUrl, sourceTileset.loader, loadOptions);
15
+ const tileContent = await loadFromArchive(sourceTile.contentUrl, sourceTileset.loader, loadOptions);
15
16
  if (tileContent.root) {
16
17
  sourceTile.children = [tileContent.root];
17
18
  }
18
19
  };
19
20
  export const loadTile3DContent = async (sourceTileset, sourceTile, tilesetLoadOptions) => {
20
- const isTileset = sourceTile.type === 'json';
21
+ const isTileset = isNestedTileset(sourceTile);
21
22
  if (!sourceTileset || !sourceTile.contentUrl || isTileset) {
22
23
  return null;
23
24
  }
@@ -29,7 +30,35 @@ export const loadTile3DContent = async (sourceTileset, sourceTile, tilesetLoadOp
29
30
  assetGltfUpAxis: sourceTileset.asset && sourceTileset.asset.gltfUpAxis || 'Y'
30
31
  }
31
32
  };
32
- const tileContent = await load(sourceTile.contentUrl, sourceTileset.loader, loadOptions);
33
+ const tileContent = await loadFromArchive(sourceTile.contentUrl, sourceTileset.loader, loadOptions);
33
34
  return tileContent;
34
35
  };
36
+ export async function loadFromArchive(url, loader, loadOptions) {
37
+ const tz3UrlParts = url.split('.3tz');
38
+ let filename;
39
+ if (tz3UrlParts.length === 1) {
40
+ filename = null;
41
+ } else if (tz3UrlParts.length === 2) {
42
+ filename = tz3UrlParts[1].slice(1);
43
+ if (filename === '') {
44
+ filename = 'tileset.json';
45
+ }
46
+ } else {
47
+ throw new Error('Unexpected URL format');
48
+ }
49
+ if (filename) {
50
+ const tz3Path = "".concat(tz3UrlParts[0], ".3tz");
51
+ const fileSystem = new Tiles3DArchiveFileSystem(tz3Path);
52
+ const content = await load(filename, loader, {
53
+ ...loadOptions,
54
+ fetch: fileSystem.fetch.bind(fileSystem)
55
+ });
56
+ await fileSystem.destroy();
57
+ return content;
58
+ }
59
+ return await load(url, loader, loadOptions);
60
+ }
61
+ export function isNestedTileset(tile) {
62
+ return (tile === null || tile === void 0 ? void 0 : tile.type) === 'json' || (tile === null || tile === void 0 ? void 0 : tile.type) === '3tz';
63
+ }
35
64
  //# sourceMappingURL=load-3d-tiles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"load-3d-tiles.js","names":["load","loadNestedTileset","sourceTileset","sourceTile","tilesetLoadOptions","isTileset","type","contentUrl","loadOptions","loader","id","assetGltfUpAxis","asset","gltfUpAxis","tileContent","root","children","loadTile3DContent"],"sources":["../../../../src/i3s-converter/helpers/load-3d-tiles.ts"],"sourcesContent":["import type {\n Tiles3DLoaderOptions,\n Tiles3DTileContent,\n Tiles3DTileJSONPostprocessed,\n Tiles3DTilesetJSONPostprocessed\n} from '@loaders.gl/3d-tiles';\nimport {load} from '@loaders.gl/core';\n\n/**\n * Load nested 3DTiles tileset. If the sourceTile is not nested tileset - do nothing\n * @param sourceTileset - source root tileset JSON\n * @param sourceTile - source tile JSON that is supposed to has link to nested tileset\n * @param tilesetLoadOptions - load options for Tiles3DLoader\n * @returns nothing\n */\nexport const loadNestedTileset = async (\n sourceTileset: Tiles3DTilesetJSONPostprocessed | null,\n sourceTile: Tiles3DTileJSONPostprocessed,\n tilesetLoadOptions: Tiles3DLoaderOptions\n): Promise<void> => {\n const isTileset = sourceTile.type === 'json';\n if (!sourceTileset || !sourceTile.contentUrl || !isTileset) {\n return;\n }\n\n const loadOptions = {\n ...tilesetLoadOptions,\n [sourceTileset.loader.id]: {\n isTileset,\n assetGltfUpAxis: (sourceTileset.asset && sourceTileset.asset.gltfUpAxis) || 'Y'\n }\n };\n const tileContent = await load(sourceTile.contentUrl, sourceTileset.loader, loadOptions);\n\n if (tileContent.root) {\n sourceTile.children = [tileContent.root];\n }\n};\n\n/**\n * Load 3DTiles tile content, that includes glTF object\n * @param sourceTileset - source root tileset JSON\n * @param sourceTile - source tile JSON that has link to content data\n * @param tilesetLoadOptions - load options for Tiles3DLoader\n * @returns - 3DTiles tile content or null\n */\nexport const loadTile3DContent = async (\n sourceTileset: Tiles3DTilesetJSONPostprocessed | null,\n sourceTile: Tiles3DTileJSONPostprocessed,\n tilesetLoadOptions: Tiles3DLoaderOptions\n): Promise<Tiles3DTileContent | null> => {\n const isTileset = sourceTile.type === 'json';\n if (!sourceTileset || !sourceTile.contentUrl || isTileset) {\n return null;\n }\n\n const loadOptions = {\n ...tilesetLoadOptions,\n [sourceTileset.loader.id]: {\n ...(tilesetLoadOptions[sourceTileset.loader.id] || {}),\n isTileset,\n assetGltfUpAxis: (sourceTileset.asset && sourceTileset.asset.gltfUpAxis) || 'Y'\n }\n };\n const tileContent = await load(sourceTile.contentUrl, sourceTileset.loader, loadOptions);\n\n return tileContent;\n};\n"],"mappings":"AAMA,SAAQA,IAAI,QAAO,kBAAkB;AASrC,OAAO,MAAMC,iBAAiB,GAAG,MAAAA,CAC/BC,aAAqD,EACrDC,UAAwC,EACxCC,kBAAwC,KACtB;EAClB,MAAMC,SAAS,GAAGF,UAAU,CAACG,IAAI,KAAK,MAAM;EAC5C,IAAI,CAACJ,aAAa,IAAI,CAACC,UAAU,CAACI,UAAU,IAAI,CAACF,SAAS,EAAE;IAC1D;EACF;EAEA,MAAMG,WAAW,GAAG;IAClB,GAAGJ,kBAAkB;IACrB,CAACF,aAAa,CAACO,MAAM,CAACC,EAAE,GAAG;MACzBL,SAAS;MACTM,eAAe,EAAGT,aAAa,CAACU,KAAK,IAAIV,aAAa,CAACU,KAAK,CAACC,UAAU,IAAK;IAC9E;EACF,CAAC;EACD,MAAMC,WAAW,GAAG,MAAMd,IAAI,CAACG,UAAU,CAACI,UAAU,EAAEL,aAAa,CAACO,MAAM,EAAED,WAAW,CAAC;EAExF,IAAIM,WAAW,CAACC,IAAI,EAAE;IACpBZ,UAAU,CAACa,QAAQ,GAAG,CAACF,WAAW,CAACC,IAAI,CAAC;EAC1C;AACF,CAAC;AASD,OAAO,MAAME,iBAAiB,GAAG,MAAAA,CAC/Bf,aAAqD,EACrDC,UAAwC,EACxCC,kBAAwC,KACD;EACvC,MAAMC,SAAS,GAAGF,UAAU,CAACG,IAAI,KAAK,MAAM;EAC5C,IAAI,CAACJ,aAAa,IAAI,CAACC,UAAU,CAACI,UAAU,IAAIF,SAAS,EAAE;IACzD,OAAO,IAAI;EACb;EAEA,MAAMG,WAAW,GAAG;IAClB,GAAGJ,kBAAkB;IACrB,CAACF,aAAa,CAACO,MAAM,CAACC,EAAE,GAAG;MACzB,IAAIN,kBAAkB,CAACF,aAAa,CAACO,MAAM,CAACC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;MACtDL,SAAS;MACTM,eAAe,EAAGT,aAAa,CAACU,KAAK,IAAIV,aAAa,CAACU,KAAK,CAACC,UAAU,IAAK;IAC9E;EACF,CAAC;EACD,MAAMC,WAAW,GAAG,MAAMd,IAAI,CAACG,UAAU,CAACI,UAAU,EAAEL,aAAa,CAACO,MAAM,EAAED,WAAW,CAAC;EAExF,OAAOM,WAAW;AACpB,CAAC"}
1
+ {"version":3,"file":"load-3d-tiles.js","names":["Tiles3DArchiveFileSystem","load","loadNestedTileset","sourceTileset","sourceTile","tilesetLoadOptions","isTileset","isNestedTileset","contentUrl","loadOptions","loader","id","assetGltfUpAxis","asset","gltfUpAxis","tileContent","loadFromArchive","root","children","loadTile3DContent","url","tz3UrlParts","split","filename","length","slice","Error","tz3Path","concat","fileSystem","content","fetch","bind","destroy","tile","type"],"sources":["../../../../src/i3s-converter/helpers/load-3d-tiles.ts"],"sourcesContent":["import type {\n Tiles3DLoaderOptions,\n Tiles3DTileContent,\n Tiles3DTileJSONPostprocessed,\n Tiles3DTilesetJSONPostprocessed\n} from '@loaders.gl/3d-tiles';\nimport {Tiles3DArchiveFileSystem} from '@loaders.gl/3d-tiles';\nimport {LoaderWithParser, load} from '@loaders.gl/core';\n\n/**\n * Load nested 3DTiles tileset. If the sourceTile is not nested tileset - do nothing\n * @param sourceTileset - source root tileset JSON\n * @param sourceTile - source tile JSON that is supposed to has link to nested tileset\n * @param tilesetLoadOptions - load options for Tiles3DLoader\n * @returns nothing\n */\nexport const loadNestedTileset = async (\n sourceTileset: Tiles3DTilesetJSONPostprocessed | null,\n sourceTile: Tiles3DTileJSONPostprocessed,\n tilesetLoadOptions: Tiles3DLoaderOptions\n): Promise<void> => {\n const isTileset = isNestedTileset(sourceTile);\n if (!sourceTileset || !sourceTile.contentUrl || !isTileset) {\n return;\n }\n\n const loadOptions = {\n ...tilesetLoadOptions,\n [sourceTileset.loader.id]: {\n isTileset,\n assetGltfUpAxis: (sourceTileset.asset && sourceTileset.asset.gltfUpAxis) || 'Y'\n }\n };\n const tileContent = await loadFromArchive(\n sourceTile.contentUrl,\n sourceTileset.loader,\n loadOptions\n );\n\n if (tileContent.root) {\n sourceTile.children = [tileContent.root];\n }\n};\n\n/**\n * Load 3DTiles tile content, that includes glTF object\n * @param sourceTileset - source root tileset JSON\n * @param sourceTile - source tile JSON that has link to content data\n * @param tilesetLoadOptions - load options for Tiles3DLoader\n * @returns - 3DTiles tile content or null\n */\nexport const loadTile3DContent = async (\n sourceTileset: Tiles3DTilesetJSONPostprocessed | null,\n sourceTile: Tiles3DTileJSONPostprocessed,\n tilesetLoadOptions: Tiles3DLoaderOptions\n): Promise<Tiles3DTileContent | null> => {\n const isTileset = isNestedTileset(sourceTile);\n if (!sourceTileset || !sourceTile.contentUrl || isTileset) {\n return null;\n }\n\n const loadOptions = {\n ...tilesetLoadOptions,\n [sourceTileset.loader.id]: {\n ...(tilesetLoadOptions[sourceTileset.loader.id] || {}),\n isTileset,\n assetGltfUpAxis: (sourceTileset.asset && sourceTileset.asset.gltfUpAxis) || 'Y'\n }\n };\n const tileContent = await loadFromArchive(\n sourceTile.contentUrl,\n sourceTileset.loader,\n loadOptions\n );\n\n return tileContent;\n};\n\n/**\n * Load a resource with load options and .3tz format support\n * @param url - resource URL\n * @param loader - loader to parse data (Tiles3DLoader / CesiumIonLoader)\n * @param loadOptions - 3d-tiles loader options\n * @returns 3d-tiles resource\n */\nexport async function loadFromArchive(\n url: string,\n loader: LoaderWithParser,\n loadOptions: Tiles3DLoaderOptions\n) {\n const tz3UrlParts = url.split('.3tz');\n let filename: string | null;\n // No '.3tz'. The file will be loaded with global fetch function\n if (tz3UrlParts.length === 1) {\n filename = null;\n } else if (tz3UrlParts.length === 2) {\n filename = tz3UrlParts[1].slice(1);\n if (filename === '') {\n filename = 'tileset.json';\n }\n } else {\n throw new Error('Unexpected URL format');\n }\n if (filename) {\n const tz3Path = `${tz3UrlParts[0]}.3tz`;\n const fileSystem = new Tiles3DArchiveFileSystem(tz3Path);\n const content = await load(filename, loader, {\n ...loadOptions,\n fetch: fileSystem.fetch.bind(fileSystem)\n });\n await fileSystem.destroy();\n return content;\n }\n return await load(url, loader, loadOptions);\n}\n\n/**\n * Check if tile is nested tileset\n * @param tile - 3DTiles header data\n * @returns true if tile is nested tileset\n */\nexport function isNestedTileset(tile: Tiles3DTileJSONPostprocessed) {\n return tile?.type === 'json' || tile?.type === '3tz';\n}\n"],"mappings":"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"}
@@ -28,7 +28,7 @@ import WriteQueue from '../lib/utils/write-queue';
28
28
  import { BROWSER_ERROR_MESSAGE } from '../constants';
29
29
  import { createdStorageAttribute, createFieldAttribute, createPopupInfo, getAttributeType, getFieldAttributeType } from './helpers/feature-attributes';
30
30
  import { NodeIndexDocument } from './helpers/node-index-document';
31
- import { loadNestedTileset, loadTile3DContent } from './helpers/load-3d-tiles';
31
+ import { isNestedTileset, loadNestedTileset, loadTile3DContent, loadFromArchive } from './helpers/load-3d-tiles';
32
32
  import { Matrix4 } from '@math.gl/core';
33
33
  import { createBoundingVolume } from '@loaders.gl/tiles';
34
34
  import { traverseDatasetWith } from './helpers/tileset-traversal';
@@ -164,7 +164,7 @@ export default class I3SConverter {
164
164
  headers: preloadOptions.headers
165
165
  };
166
166
  }
167
- this.sourceTileset = await load(tilesetUrl, this.Loader, this.loadOptions);
167
+ this.sourceTileset = await loadFromArchive(tilesetUrl, this.Loader, this.loadOptions);
168
168
  const preprocessResult = await this.preprocessConversion();
169
169
  if (preprocessResult) {
170
170
  await this._createAndSaveTileset(outputPath, tilesetName);
@@ -227,7 +227,8 @@ export default class I3SConverter {
227
227
  return true;
228
228
  }
229
229
  async analyzeTile(sourceTile, traversalProps) {
230
- if (sourceTile.type === 'json') {
230
+ const isTileset = isNestedTileset(sourceTile);
231
+ if (isTileset) {
231
232
  await loadNestedTileset(this.sourceTileset, sourceTile, this.loadOptions);
232
233
  return null;
233
234
  }
@@ -345,8 +346,9 @@ export default class I3SConverter {
345
346
  }
346
347
  }
347
348
  async convertTile(sourceTile, traversalProps) {
348
- if (sourceTile.type === 'json' || sourceTile.type === 'empty') {
349
- if (sourceTile.type === 'json') {
349
+ const isTileset = isNestedTileset(sourceTile);
350
+ if (isTileset || sourceTile.type === 'empty') {
351
+ if (isTileset) {
350
352
  if (sourceTile.id) {
351
353
  console.log("[load]: ".concat(sourceTile.id));
352
354
  }