@loaders.gl/tile-converter 4.1.1 → 4.2.0-alpha.2

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 (55) hide show
  1. package/dist/3d-tiles-converter/3d-tiles-converter.d.ts +11 -0
  2. package/dist/3d-tiles-converter/3d-tiles-converter.d.ts.map +1 -1
  3. package/dist/3d-tiles-converter/3d-tiles-converter.js +77 -27
  4. package/dist/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
  5. package/dist/3d-tiles-converter/helpers/load-i3s.d.ts +22 -1
  6. package/dist/3d-tiles-converter/helpers/load-i3s.d.ts.map +1 -1
  7. package/dist/3d-tiles-converter/helpers/load-i3s.js +49 -4
  8. package/dist/3d-tiles-converter/helpers/load-i3s.js.map +1 -1
  9. package/dist/converter-cli.js +2 -1
  10. package/dist/converter-cli.js.map +1 -1
  11. package/dist/converter.min.cjs +137 -130
  12. package/dist/deps-installer/deps-installer.js +1 -1
  13. package/dist/deps-installer/deps-installer.js.map +1 -1
  14. package/dist/i3s-converter/helpers/attribute-metadata-info.d.ts +10 -0
  15. package/dist/i3s-converter/helpers/attribute-metadata-info.d.ts.map +1 -1
  16. package/dist/i3s-converter/helpers/attribute-metadata-info.js +5 -0
  17. package/dist/i3s-converter/helpers/attribute-metadata-info.js.map +1 -1
  18. package/dist/i3s-converter/helpers/load-3d-tiles.d.ts.map +1 -1
  19. package/dist/i3s-converter/helpers/load-3d-tiles.js +22 -2
  20. package/dist/i3s-converter/helpers/load-3d-tiles.js.map +1 -1
  21. package/dist/i3s-converter/helpers/node-index-document.d.ts +2 -1
  22. package/dist/i3s-converter/helpers/node-index-document.d.ts.map +1 -1
  23. package/dist/i3s-converter/helpers/node-index-document.js +6 -8
  24. package/dist/i3s-converter/helpers/node-index-document.js.map +1 -1
  25. package/dist/i3s-converter/i3s-converter.d.ts +18 -0
  26. package/dist/i3s-converter/i3s-converter.d.ts.map +1 -1
  27. package/dist/i3s-converter/i3s-converter.js +121 -24
  28. package/dist/i3s-converter/i3s-converter.js.map +1 -1
  29. package/dist/i3s-server/bin/i3s-server.min.cjs +86 -86
  30. package/dist/index.cjs +792 -101
  31. package/dist/lib/json-schemas/conversion-dump-json-schema.d.ts +463 -0
  32. package/dist/lib/json-schemas/conversion-dump-json-schema.d.ts.map +1 -0
  33. package/dist/lib/json-schemas/conversion-dump-json-schema.js +463 -0
  34. package/dist/lib/json-schemas/conversion-dump-json-schema.js.map +1 -0
  35. package/dist/lib/utils/conversion-dump.d.ts +65 -8
  36. package/dist/lib/utils/conversion-dump.d.ts.map +1 -1
  37. package/dist/lib/utils/conversion-dump.js +98 -18
  38. package/dist/lib/utils/conversion-dump.js.map +1 -1
  39. package/dist/lib/utils/file-utils.d.ts +6 -0
  40. package/dist/lib/utils/file-utils.d.ts.map +1 -1
  41. package/dist/lib/utils/file-utils.js +7 -0
  42. package/dist/lib/utils/file-utils.js.map +1 -1
  43. package/dist/pgm-loader.js +1 -1
  44. package/dist/pgm-loader.js.map +1 -1
  45. package/package.json +15 -14
  46. package/src/3d-tiles-converter/3d-tiles-converter.ts +104 -31
  47. package/src/3d-tiles-converter/helpers/load-i3s.ts +86 -7
  48. package/src/converter-cli.ts +2 -1
  49. package/src/i3s-converter/helpers/attribute-metadata-info.ts +16 -0
  50. package/src/i3s-converter/helpers/load-3d-tiles.ts +52 -2
  51. package/src/i3s-converter/helpers/node-index-document.ts +18 -8
  52. package/src/i3s-converter/i3s-converter.ts +198 -41
  53. package/src/lib/json-schemas/conversion-dump-json-schema.ts +285 -0
  54. package/src/lib/utils/conversion-dump.ts +200 -26
  55. package/src/lib/utils/file-utils.ts +13 -0
@@ -5,7 +5,7 @@ import { join, dirname } 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.1.1" !== 'undefined' ? "4.1.1" : 'latest';
8
+ const VERSION = typeof "4.2.0-alpha.2" !== 'undefined' ? "4.2.0-alpha.2" : 'latest';
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 +1 @@
1
- {"version":3,"file":"deps-installer.js","names":["load","fetchFile","ZipLoader","writeFile","join","dirname","ChildProcessProxy","DRACO_EXTERNAL_LIBRARIES","DRACO_EXTERNAL_LIBRARY_URLS","BASIS_EXTERNAL_LIBRARIES","VERSION","PGM_LINK","DepsInstaller","install","path","arguments","length","undefined","console","log","fileMap","depsPath","process","cwd","Uint8Array","installFromNpm","installFromUrl","DECODER","DECODER_WASM","ENCODER","TRANSCODER","TRANSCODER_WASM","ENCODER_WASM","childProcess","nodeDir","execPath","start","command","platform","wait","ignoreStderr","module","name","extraPath","fileResponse","fileData","arrayBuffer","url"],"sources":["../../src/deps-installer/deps-installer.ts"],"sourcesContent":["import {load, fetchFile} from '@loaders.gl/core';\nimport {ZipLoader} from '@loaders.gl/zip';\nimport {writeFile} from '../lib/utils/file-utils';\nimport {join, dirname} from 'path';\nimport {ChildProcessProxy} from '@loaders.gl/worker-utils';\nimport {DRACO_EXTERNAL_LIBRARIES, DRACO_EXTERNAL_LIBRARY_URLS} from '@loaders.gl/draco';\nimport {BASIS_EXTERNAL_LIBRARIES} from '@loaders.gl/textures';\n\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nconst PGM_LINK = 'https://raw.githubusercontent.com/visgl/deck.gl-data/master/egm/egm2008-5.zip';\n\n/**\n * Install external dependencies for converter:\n * * PGM file (implemented);\n * * Draco library (not implemented);\n * * 7z archiver (not implemented);\n */\nexport class DepsInstaller {\n /**\n * Run instalation\n * @param path destination folder\n * @param workersPath destination folder for workers.\n * This path is '' by default and is not used by tile-converter.\n * It is used in tests to prevent rewriting actual workers during tests running\n */\n async install(path: string = ''): Promise<void> {\n console.log('Installing \"EGM2008-5\" model...'); // eslint-disable-line no-console\n const fileMap = await load(PGM_LINK, ZipLoader, {});\n\n let depsPath = process.cwd();\n if (path) {\n depsPath = join(depsPath, path);\n }\n\n await writeFile(depsPath, new Uint8Array(fileMap['geoids/egm2008-5.pgm']), 'egm2008-5.pgm');\n\n console.log('Installing \"I3S Content Loader\" worker'); // eslint-disable-line no-console\n await this.installFromNpm('i3s', 'i3s-content-worker-node.js');\n\n console.log('Installing \"Draco Loader\" worker'); // eslint-disable-line no-console\n await this.installFromNpm('draco', 'draco-worker-node.js');\n\n console.log('Installing \"Draco Writer\" worker'); // eslint-disable-line no-console\n await this.installFromNpm('draco', 'draco-writer-worker-node.js');\n\n console.log('Installing \"Basis Loader\" worker'); // eslint-disable-line no-console\n await this.installFromNpm('textures', 'basis-worker-node.js');\n\n console.log('Installing \"KTX2 Basis Writer\" worker'); // eslint-disable-line no-console\n await this.installFromNpm('textures', 'ktx2-basis-writer-worker-node.js');\n\n console.log('Installing \"Draco decoder\" library'); // eslint-disable-line no-console\n await this.installFromUrl(\n DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER],\n 'draco',\n DRACO_EXTERNAL_LIBRARIES.DECODER\n );\n await this.installFromUrl(\n DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER_WASM],\n 'draco',\n DRACO_EXTERNAL_LIBRARIES.DECODER_WASM\n );\n\n console.log('Installing \"Draco encoder\" library'); // eslint-disable-line no-console\n await this.installFromUrl(\n DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.ENCODER],\n 'draco',\n DRACO_EXTERNAL_LIBRARIES.ENCODER\n );\n\n console.log('Installing \"Basis transcoder\" library'); // eslint-disable-line no-console\n await this.installFromNpm('textures', BASIS_EXTERNAL_LIBRARIES.TRANSCODER, 'libs');\n await this.installFromNpm('textures', BASIS_EXTERNAL_LIBRARIES.TRANSCODER_WASM, 'libs');\n\n console.log('Installing \"Basis encoder\" library'); // eslint-disable-line no-console\n await this.installFromNpm('textures', BASIS_EXTERNAL_LIBRARIES.ENCODER, 'libs');\n await this.installFromNpm('textures', BASIS_EXTERNAL_LIBRARIES.ENCODER_WASM, 'libs');\n\n console.log('Installing \"join-images\" npm package');\n const childProcess = new ChildProcessProxy();\n const nodeDir = dirname(process.execPath);\n await childProcess.start({\n command: `${nodeDir}/${process.platform === 'win32' ? 'npm.cmd' : 'npm'}`,\n // `npm install sharp join-images` works unstable. It fails because installed `sharp` version\n // may be different from the version required by `join-images`. Pointing to specific versions\n // resolve this issue\n arguments: ['install', 'sharp@0.30.4', 'join-images@1.1.3'],\n wait: 0,\n ignoreStderr: true\n });\n\n console.log('All dependencies were installed succesfully.'); // eslint-disable-line no-console\n }\n\n private async installFromNpm(module: string, name: string, extraPath: string = '') {\n const fileResponse = await fetchFile(\n `https://unpkg.com/@loaders.gl/${module}@${VERSION}/dist/${extraPath}/${name}`\n );\n const fileData = await fileResponse.arrayBuffer();\n if (!fileData) {\n return;\n }\n const path = join(process.cwd(), 'modules', module, 'dist', extraPath);\n await writeFile(path, fileData, name);\n }\n\n private async installFromUrl(url: string, module: string, name: string) {\n const fileResponse = await fetchFile(url);\n const fileData = await fileResponse.arrayBuffer();\n if (!fileData) {\n return;\n }\n const path = join(process.cwd(), 'modules', module, 'dist', 'libs');\n await writeFile(path, fileData, name);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"deps-installer.js","names":["load","fetchFile","ZipLoader","writeFile","join","dirname","ChildProcessProxy","DRACO_EXTERNAL_LIBRARIES","DRACO_EXTERNAL_LIBRARY_URLS","BASIS_EXTERNAL_LIBRARIES","VERSION","PGM_LINK","DepsInstaller","install","path","arguments","length","undefined","console","log","fileMap","depsPath","process","cwd","Uint8Array","installFromNpm","installFromUrl","DECODER","DECODER_WASM","ENCODER","TRANSCODER","TRANSCODER_WASM","ENCODER_WASM","childProcess","nodeDir","execPath","start","command","platform","wait","ignoreStderr","module","name","extraPath","fileResponse","fileData","arrayBuffer","url"],"sources":["../../src/deps-installer/deps-installer.ts"],"sourcesContent":["import {load, fetchFile} from '@loaders.gl/core';\nimport {ZipLoader} from '@loaders.gl/zip';\nimport {writeFile} from '../lib/utils/file-utils';\nimport {join, dirname} from 'path';\nimport {ChildProcessProxy} from '@loaders.gl/worker-utils';\nimport {DRACO_EXTERNAL_LIBRARIES, DRACO_EXTERNAL_LIBRARY_URLS} from '@loaders.gl/draco';\nimport {BASIS_EXTERNAL_LIBRARIES} from '@loaders.gl/textures';\n\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nconst PGM_LINK = 'https://raw.githubusercontent.com/visgl/deck.gl-data/master/egm/egm2008-5.zip';\n\n/**\n * Install external dependencies for converter:\n * * PGM file (implemented);\n * * Draco library (not implemented);\n * * 7z archiver (not implemented);\n */\nexport class DepsInstaller {\n /**\n * Run instalation\n * @param path destination folder\n * @param workersPath destination folder for workers.\n * This path is '' by default and is not used by tile-converter.\n * It is used in tests to prevent rewriting actual workers during tests running\n */\n async install(path: string = ''): Promise<void> {\n console.log('Installing \"EGM2008-5\" model...'); // eslint-disable-line no-console\n const fileMap = await load(PGM_LINK, ZipLoader, {});\n\n let depsPath = process.cwd();\n if (path) {\n depsPath = join(depsPath, path);\n }\n\n await writeFile(depsPath, new Uint8Array(fileMap['geoids/egm2008-5.pgm']), 'egm2008-5.pgm');\n\n console.log('Installing \"I3S Content Loader\" worker'); // eslint-disable-line no-console\n await this.installFromNpm('i3s', 'i3s-content-worker-node.js');\n\n console.log('Installing \"Draco Loader\" worker'); // eslint-disable-line no-console\n await this.installFromNpm('draco', 'draco-worker-node.js');\n\n console.log('Installing \"Draco Writer\" worker'); // eslint-disable-line no-console\n await this.installFromNpm('draco', 'draco-writer-worker-node.js');\n\n console.log('Installing \"Basis Loader\" worker'); // eslint-disable-line no-console\n await this.installFromNpm('textures', 'basis-worker-node.js');\n\n console.log('Installing \"KTX2 Basis Writer\" worker'); // eslint-disable-line no-console\n await this.installFromNpm('textures', 'ktx2-basis-writer-worker-node.js');\n\n console.log('Installing \"Draco decoder\" library'); // eslint-disable-line no-console\n await this.installFromUrl(\n DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER],\n 'draco',\n DRACO_EXTERNAL_LIBRARIES.DECODER\n );\n await this.installFromUrl(\n DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER_WASM],\n 'draco',\n DRACO_EXTERNAL_LIBRARIES.DECODER_WASM\n );\n\n console.log('Installing \"Draco encoder\" library'); // eslint-disable-line no-console\n await this.installFromUrl(\n DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.ENCODER],\n 'draco',\n DRACO_EXTERNAL_LIBRARIES.ENCODER\n );\n\n console.log('Installing \"Basis transcoder\" library'); // eslint-disable-line no-console\n await this.installFromNpm('textures', BASIS_EXTERNAL_LIBRARIES.TRANSCODER, 'libs');\n await this.installFromNpm('textures', BASIS_EXTERNAL_LIBRARIES.TRANSCODER_WASM, 'libs');\n\n console.log('Installing \"Basis encoder\" library'); // eslint-disable-line no-console\n await this.installFromNpm('textures', BASIS_EXTERNAL_LIBRARIES.ENCODER, 'libs');\n await this.installFromNpm('textures', BASIS_EXTERNAL_LIBRARIES.ENCODER_WASM, 'libs');\n\n console.log('Installing \"join-images\" npm package');\n const childProcess = new ChildProcessProxy();\n const nodeDir = dirname(process.execPath);\n await childProcess.start({\n command: `${nodeDir}/${process.platform === 'win32' ? 'npm.cmd' : 'npm'}`,\n // `npm install sharp join-images` works unstable. It fails because installed `sharp` version\n // may be different from the version required by `join-images`. Pointing to specific versions\n // resolve this issue\n arguments: ['install', 'sharp@0.30.4', 'join-images@1.1.3'],\n wait: 0,\n ignoreStderr: true\n });\n\n console.log('All dependencies were installed succesfully.'); // eslint-disable-line no-console\n }\n\n private async installFromNpm(module: string, name: string, extraPath: string = '') {\n const fileResponse = await fetchFile(\n `https://unpkg.com/@loaders.gl/${module}@${VERSION}/dist/${extraPath}/${name}`\n );\n const fileData = await fileResponse.arrayBuffer();\n if (!fileData) {\n return;\n }\n const path = join(process.cwd(), 'modules', module, 'dist', extraPath);\n await writeFile(path, fileData, name);\n }\n\n private async installFromUrl(url: string, module: string, name: string) {\n const fileResponse = await fetchFile(url);\n const fileData = await fileResponse.arrayBuffer();\n if (!fileData) {\n return;\n }\n const path = join(process.cwd(), 'modules', module, 'dist', 'libs');\n await writeFile(path, fileData, name);\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,9 @@
1
1
  import type { Attribute, AttributeStorageInfo, Field, PopupInfo } from '@loaders.gl/i3s';
2
+ export type AttributeMetadataInfoObject = {
3
+ attributeStorageInfo: AttributeStorageInfo[];
4
+ fields: Field[];
5
+ popupInfo: PopupInfo | undefined;
6
+ };
2
7
  export declare class AttributeMetadataInfo {
3
8
  private _attributeStorageInfo;
4
9
  private _fields;
@@ -30,6 +35,11 @@ export declare class AttributeMetadataInfo {
30
35
  * The method creates and stores objects for opt_uint64, opt_float32 attributes.
31
36
  */
32
37
  addMetadataInfo(attributeTypesMap: Record<string, Attribute>): void;
38
+ /**
39
+ * Set AttributeMetadataInfo from object
40
+ * @param object - object with AttributeMetadataInfo props
41
+ */
42
+ fromObject(object: AttributeMetadataInfoObject): void;
33
43
  /**
34
44
  * Generates storage attribute for map segmentation.
35
45
  * @param attributeIndex - order index of attribute (f_0, f_1 ...).
@@ -1 +1 @@
1
- {"version":3,"file":"attribute-metadata-info.d.ts","sourceRoot":"","sources":["../../../src/i3s-converter/helpers/attribute-metadata-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,oBAAoB,EAEpB,KAAK,EAEL,SAAS,EACV,MAAM,iBAAiB,CAAC;AAIzB,qBAAa,qBAAqB;IAChC,OAAO,CAAC,qBAAqB,CAAyB;IACtD,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,UAAU,CAAwB;;IAO1C,IAAI,oBAAoB,IAAI,oBAAoB,EAAE,CAEjD;IAED,IAAI,MAAM,IAAI,KAAK,EAAE,CAEpB;IAED,IAAI,SAAS,IAAI,SAAS,GAAG,SAAS,CAErC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,eAAe,CAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAI;IA0CnE;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAgC9B;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAe7B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAe5B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAQ5B;;;;OAIG;IACH,OAAO,CAAC,eAAe;CA+BxB"}
1
+ {"version":3,"file":"attribute-metadata-info.d.ts","sourceRoot":"","sources":["../../../src/i3s-converter/helpers/attribute-metadata-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,oBAAoB,EAEpB,KAAK,EAEL,SAAS,EACV,MAAM,iBAAiB,CAAC;AAIzB,MAAM,MAAM,2BAA2B,GAAG;IACxC,oBAAoB,EAAE,oBAAoB,EAAE,CAAC;IAC7C,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;CAClC,CAAC;AAEF,qBAAa,qBAAqB;IAChC,OAAO,CAAC,qBAAqB,CAAyB;IACtD,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,UAAU,CAAwB;;IAO1C,IAAI,oBAAoB,IAAI,oBAAoB,EAAE,CAEjD;IAED,IAAI,MAAM,IAAI,KAAK,EAAE,CAEpB;IAED,IAAI,SAAS,IAAI,SAAS,GAAG,SAAS,CAErC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,eAAe,CAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAI;IA0CnE;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,2BAA2B;IAM9C;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAgC9B;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAe7B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAe5B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAQ5B;;;;OAIG;IACH,OAAO,CAAC,eAAe;CA+BxB"}
@@ -47,6 +47,11 @@ export class AttributeMetadataInfo {
47
47
  this._popupInfo = this.createPopupInfo(attributeNames);
48
48
  }
49
49
  }
50
+ fromObject(object) {
51
+ this._attributeStorageInfo = object.attributeStorageInfo;
52
+ this._fields = object.fields;
53
+ this._popupInfo = object.popupInfo;
54
+ }
50
55
  createStorageAttribute(attributeIndex, key, attributeType) {
51
56
  const storageAttribute = {
52
57
  key: `f_${attributeIndex}`,
@@ -1 +1 @@
1
- {"version":3,"file":"attribute-metadata-info.js","names":["AttributeType","AttributeMetadataInfo","constructor","_attributeStorageInfo","_fields","_popupInfo","attributeStorageInfo","fields","popupInfo","addMetadataInfo","attributeTypesMap","Object","keys","length","attributeTypes","OBJECTID","OBJECT_ID_TYPE","isUpdated","attributeIndex","key","elementFound","find","element","name","attributeType","storageAttribute","createStorageAttribute","fieldAttributeType","getFieldAttributeType","fieldAttribute","createFieldAttribute","push","attributeNames","info","createPopupInfo","ordering","header","property","valueType","attributeValues","valuesPerElement","setupIdAttribute","STRING_TYPE","setupStringAttribute","DOUBLE_TYPE","setupDoubleAttribute","SHORT_INT_TYPE","unshift","encoding","attributeByteCounts","type","alias","propertyNames","title","mediaInfos","fieldInfos","popupElements","expressionInfos","propertyName","fieldName","visible","isEditable","label"],"sources":["../../../src/i3s-converter/helpers/attribute-metadata-info.ts"],"sourcesContent":["import type {\n Attribute,\n AttributeStorageInfo,\n ESRIField,\n Field,\n FieldInfo,\n PopupInfo\n} from '@loaders.gl/i3s';\n\nimport {AttributeType} from '../types';\n\nexport class AttributeMetadataInfo {\n private _attributeStorageInfo: AttributeStorageInfo[];\n private _fields: Field[];\n private _popupInfo: PopupInfo | undefined;\n\n constructor() {\n this._attributeStorageInfo = [];\n this._fields = [];\n }\n\n get attributeStorageInfo(): AttributeStorageInfo[] {\n return this._attributeStorageInfo;\n }\n\n get fields(): Field[] {\n return this._fields;\n }\n\n get popupInfo(): PopupInfo | undefined {\n return this._popupInfo;\n }\n\n /**\n * Creates and stores Attribute Storage Info, Fields and PopupInfo objects based on attribute's types.\n * Appends objects that have not been stored yet.\n * @param attributeTypesMap - set of attribute's types\n * @example AttributeStorageInfo, Fields and PopupInfo already contain objects for the following attributes:\n * {\n * color: 'string',\n * name: 'string',\n * opt_uint8: 'Int32'\n * }\n * Then, we call the addMetadataInfo method with the following attributeTypesMap:\n * {\n * // The same attributes\n * color: 'string',\n * name: 'string',\n * opt_uint8: 'Int32',\n * // New attributes\n * opt_uint64: 'string',\n * opt_float32: 'double',\n * }\n * The method creates and stores objects for opt_uint64, opt_float32 attributes.\n */\n addMetadataInfo(attributeTypesMap: Record<string, Attribute>): void {\n if (!Object.keys(attributeTypesMap).length) {\n return;\n }\n const attributeTypes: Record<string, Attribute> = {\n OBJECTID: AttributeType.OBJECT_ID_TYPE,\n ...attributeTypesMap\n };\n\n let isUpdated = false;\n let attributeIndex = this._attributeStorageInfo.length;\n for (const key in attributeTypes) {\n /*\n We will append a new attribute only in case it has not been added to the attribute storage info yet.\n */\n const elementFound = this._attributeStorageInfo.find((element) => element.name === key);\n if (!elementFound) {\n const attributeType = attributeTypes[key];\n\n const storageAttribute = this.createStorageAttribute(attributeIndex, key, attributeType);\n const fieldAttributeType = this.getFieldAttributeType(attributeType);\n const fieldAttribute = this.createFieldAttribute(key, fieldAttributeType);\n\n this._attributeStorageInfo.push(storageAttribute);\n this._fields.push(fieldAttribute);\n attributeIndex += 1;\n isUpdated = true;\n }\n }\n if (isUpdated) {\n /*\n The attributeStorageInfo is updated. So, popupInfo should be recreated.\n Use attributeStorageInfo as a source of attribute names to create the popupInfo.\n */\n const attributeNames: string[] = [];\n for (let info of this._attributeStorageInfo) {\n attributeNames.push(info.name);\n }\n this._popupInfo = this.createPopupInfo(attributeNames);\n }\n }\n\n /**\n * Generates storage attribute for map segmentation.\n * @param attributeIndex - order index of attribute (f_0, f_1 ...).\n * @param key - attribute key from propertyTable.\n * @param attributeType - attribute type.\n * @return Updated storageAttribute.\n */\n private createStorageAttribute(\n attributeIndex: number,\n key: string,\n attributeType: Attribute\n ): AttributeStorageInfo {\n const storageAttribute = {\n key: `f_${attributeIndex}`,\n name: key,\n ordering: ['attributeValues'],\n header: [{property: 'count', valueType: 'UInt32'}],\n attributeValues: {valueType: 'Int32', valuesPerElement: 1}\n };\n\n switch (attributeType) {\n case AttributeType.OBJECT_ID_TYPE:\n this.setupIdAttribute(storageAttribute);\n break;\n case AttributeType.STRING_TYPE:\n this.setupStringAttribute(storageAttribute);\n break;\n case AttributeType.DOUBLE_TYPE:\n this.setupDoubleAttribute(storageAttribute);\n break;\n case AttributeType.SHORT_INT_TYPE:\n break;\n default:\n this.setupStringAttribute(storageAttribute);\n }\n\n return storageAttribute;\n }\n\n /**\n * Finds and returns attribute type based on key form propertyTable.\n * @param attributeType\n */\n private getFieldAttributeType(attributeType: Attribute): ESRIField {\n switch (attributeType) {\n case AttributeType.OBJECT_ID_TYPE:\n return 'esriFieldTypeOID';\n case AttributeType.STRING_TYPE:\n return 'esriFieldTypeString';\n case AttributeType.SHORT_INT_TYPE:\n return 'esriFieldTypeInteger';\n case AttributeType.DOUBLE_TYPE:\n return 'esriFieldTypeDouble';\n default:\n return 'esriFieldTypeString';\n }\n }\n\n /**\n * Sets up Id attribute for map segmentation.\n * @param storageAttribute - attribute for map segmentation .\n */\n private setupIdAttribute(storageAttribute: AttributeStorageInfo): void {\n storageAttribute.attributeValues = {\n valueType: 'Oid32',\n valuesPerElement: 1\n };\n }\n\n /**\n * Sets up storage attribute as string.\n * @param storageAttribute - attribute for map segmentation.\n */\n private setupStringAttribute(storageAttribute: AttributeStorageInfo): void {\n // @ts-expect-error\n storageAttribute.ordering.unshift('attributeByteCounts');\n storageAttribute.header.push({property: 'attributeValuesByteCount', valueType: 'UInt32'});\n storageAttribute.attributeValues = {\n valueType: 'String',\n encoding: 'UTF-8',\n valuesPerElement: 1\n };\n storageAttribute.attributeByteCounts = {\n valueType: 'UInt32',\n valuesPerElement: 1\n };\n }\n\n /**\n * Sets up double attribute for map segmentation.\n * @param storageAttribute - attribute for map segmentation .\n */\n private setupDoubleAttribute(storageAttribute: AttributeStorageInfo): void {\n storageAttribute.attributeValues = {\n valueType: 'Float64',\n valuesPerElement: 1\n };\n }\n\n /**\n * Sets up field attribute for map segmentation.\n * @param key - attribute for map segmentation.\n * @param fieldAttributeType - esri attribute type ('esriFieldTypeString' or 'esriFieldTypeOID').\n */\n private createFieldAttribute(key: string, fieldAttributeType: ESRIField): Field {\n return {\n name: key,\n type: fieldAttributeType,\n alias: key\n };\n }\n\n /**\n * Generates popup info to show metadata on the map.\n * @param propertyNames - array of property names including OBJECTID.\n * @return data for correct rendering of popup.\n */\n private createPopupInfo(propertyNames: string[]): PopupInfo {\n const title = '{OBJECTID}';\n const mediaInfos = [];\n const fieldInfos: FieldInfo[] = [];\n const popupElements: {\n fieldInfos: FieldInfo[];\n type: string;\n }[] = [];\n const expressionInfos = [];\n\n for (const propertyName of propertyNames) {\n fieldInfos.push({\n fieldName: propertyName,\n visible: true,\n isEditable: false,\n label: propertyName\n });\n }\n popupElements.push({\n fieldInfos,\n type: 'fields'\n });\n\n return {\n title,\n mediaInfos,\n popupElements,\n fieldInfos,\n expressionInfos\n };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"attribute-metadata-info.js","names":["AttributeType","AttributeMetadataInfo","constructor","_attributeStorageInfo","_fields","_popupInfo","attributeStorageInfo","fields","popupInfo","addMetadataInfo","attributeTypesMap","Object","keys","length","attributeTypes","OBJECTID","OBJECT_ID_TYPE","isUpdated","attributeIndex","key","elementFound","find","element","name","attributeType","storageAttribute","createStorageAttribute","fieldAttributeType","getFieldAttributeType","fieldAttribute","createFieldAttribute","push","attributeNames","info","createPopupInfo","fromObject","object","ordering","header","property","valueType","attributeValues","valuesPerElement","setupIdAttribute","STRING_TYPE","setupStringAttribute","DOUBLE_TYPE","setupDoubleAttribute","SHORT_INT_TYPE","unshift","encoding","attributeByteCounts","type","alias","propertyNames","title","mediaInfos","fieldInfos","popupElements","expressionInfos","propertyName","fieldName","visible","isEditable","label"],"sources":["../../../src/i3s-converter/helpers/attribute-metadata-info.ts"],"sourcesContent":["import type {\n Attribute,\n AttributeStorageInfo,\n ESRIField,\n Field,\n FieldInfo,\n PopupInfo\n} from '@loaders.gl/i3s';\n\nimport {AttributeType} from '../types';\n\nexport type AttributeMetadataInfoObject = {\n attributeStorageInfo: AttributeStorageInfo[];\n fields: Field[];\n popupInfo: PopupInfo | undefined;\n};\n\nexport class AttributeMetadataInfo {\n private _attributeStorageInfo: AttributeStorageInfo[];\n private _fields: Field[];\n private _popupInfo: PopupInfo | undefined;\n\n constructor() {\n this._attributeStorageInfo = [];\n this._fields = [];\n }\n\n get attributeStorageInfo(): AttributeStorageInfo[] {\n return this._attributeStorageInfo;\n }\n\n get fields(): Field[] {\n return this._fields;\n }\n\n get popupInfo(): PopupInfo | undefined {\n return this._popupInfo;\n }\n\n /**\n * Creates and stores Attribute Storage Info, Fields and PopupInfo objects based on attribute's types.\n * Appends objects that have not been stored yet.\n * @param attributeTypesMap - set of attribute's types\n * @example AttributeStorageInfo, Fields and PopupInfo already contain objects for the following attributes:\n * {\n * color: 'string',\n * name: 'string',\n * opt_uint8: 'Int32'\n * }\n * Then, we call the addMetadataInfo method with the following attributeTypesMap:\n * {\n * // The same attributes\n * color: 'string',\n * name: 'string',\n * opt_uint8: 'Int32',\n * // New attributes\n * opt_uint64: 'string',\n * opt_float32: 'double',\n * }\n * The method creates and stores objects for opt_uint64, opt_float32 attributes.\n */\n addMetadataInfo(attributeTypesMap: Record<string, Attribute>): void {\n if (!Object.keys(attributeTypesMap).length) {\n return;\n }\n const attributeTypes: Record<string, Attribute> = {\n OBJECTID: AttributeType.OBJECT_ID_TYPE,\n ...attributeTypesMap\n };\n\n let isUpdated = false;\n let attributeIndex = this._attributeStorageInfo.length;\n for (const key in attributeTypes) {\n /*\n We will append a new attribute only in case it has not been added to the attribute storage info yet.\n */\n const elementFound = this._attributeStorageInfo.find((element) => element.name === key);\n if (!elementFound) {\n const attributeType = attributeTypes[key];\n\n const storageAttribute = this.createStorageAttribute(attributeIndex, key, attributeType);\n const fieldAttributeType = this.getFieldAttributeType(attributeType);\n const fieldAttribute = this.createFieldAttribute(key, fieldAttributeType);\n\n this._attributeStorageInfo.push(storageAttribute);\n this._fields.push(fieldAttribute);\n attributeIndex += 1;\n isUpdated = true;\n }\n }\n if (isUpdated) {\n /*\n The attributeStorageInfo is updated. So, popupInfo should be recreated.\n Use attributeStorageInfo as a source of attribute names to create the popupInfo.\n */\n const attributeNames: string[] = [];\n for (let info of this._attributeStorageInfo) {\n attributeNames.push(info.name);\n }\n this._popupInfo = this.createPopupInfo(attributeNames);\n }\n }\n\n /**\n * Set AttributeMetadataInfo from object\n * @param object - object with AttributeMetadataInfo props\n */\n fromObject(object: AttributeMetadataInfoObject) {\n this._attributeStorageInfo = object.attributeStorageInfo;\n this._fields = object.fields;\n this._popupInfo = object.popupInfo;\n }\n\n /**\n * Generates storage attribute for map segmentation.\n * @param attributeIndex - order index of attribute (f_0, f_1 ...).\n * @param key - attribute key from propertyTable.\n * @param attributeType - attribute type.\n * @return Updated storageAttribute.\n */\n private createStorageAttribute(\n attributeIndex: number,\n key: string,\n attributeType: Attribute\n ): AttributeStorageInfo {\n const storageAttribute = {\n key: `f_${attributeIndex}`,\n name: key,\n ordering: ['attributeValues'],\n header: [{property: 'count', valueType: 'UInt32'}],\n attributeValues: {valueType: 'Int32', valuesPerElement: 1}\n };\n\n switch (attributeType) {\n case AttributeType.OBJECT_ID_TYPE:\n this.setupIdAttribute(storageAttribute);\n break;\n case AttributeType.STRING_TYPE:\n this.setupStringAttribute(storageAttribute);\n break;\n case AttributeType.DOUBLE_TYPE:\n this.setupDoubleAttribute(storageAttribute);\n break;\n case AttributeType.SHORT_INT_TYPE:\n break;\n default:\n this.setupStringAttribute(storageAttribute);\n }\n\n return storageAttribute;\n }\n\n /**\n * Finds and returns attribute type based on key form propertyTable.\n * @param attributeType\n */\n private getFieldAttributeType(attributeType: Attribute): ESRIField {\n switch (attributeType) {\n case AttributeType.OBJECT_ID_TYPE:\n return 'esriFieldTypeOID';\n case AttributeType.STRING_TYPE:\n return 'esriFieldTypeString';\n case AttributeType.SHORT_INT_TYPE:\n return 'esriFieldTypeInteger';\n case AttributeType.DOUBLE_TYPE:\n return 'esriFieldTypeDouble';\n default:\n return 'esriFieldTypeString';\n }\n }\n\n /**\n * Sets up Id attribute for map segmentation.\n * @param storageAttribute - attribute for map segmentation .\n */\n private setupIdAttribute(storageAttribute: AttributeStorageInfo): void {\n storageAttribute.attributeValues = {\n valueType: 'Oid32',\n valuesPerElement: 1\n };\n }\n\n /**\n * Sets up storage attribute as string.\n * @param storageAttribute - attribute for map segmentation.\n */\n private setupStringAttribute(storageAttribute: AttributeStorageInfo): void {\n // @ts-expect-error\n storageAttribute.ordering.unshift('attributeByteCounts');\n storageAttribute.header.push({property: 'attributeValuesByteCount', valueType: 'UInt32'});\n storageAttribute.attributeValues = {\n valueType: 'String',\n encoding: 'UTF-8',\n valuesPerElement: 1\n };\n storageAttribute.attributeByteCounts = {\n valueType: 'UInt32',\n valuesPerElement: 1\n };\n }\n\n /**\n * Sets up double attribute for map segmentation.\n * @param storageAttribute - attribute for map segmentation .\n */\n private setupDoubleAttribute(storageAttribute: AttributeStorageInfo): void {\n storageAttribute.attributeValues = {\n valueType: 'Float64',\n valuesPerElement: 1\n };\n }\n\n /**\n * Sets up field attribute for map segmentation.\n * @param key - attribute for map segmentation.\n * @param fieldAttributeType - esri attribute type ('esriFieldTypeString' or 'esriFieldTypeOID').\n */\n private createFieldAttribute(key: string, fieldAttributeType: ESRIField): Field {\n return {\n name: key,\n type: fieldAttributeType,\n alias: key\n };\n }\n\n /**\n * Generates popup info to show metadata on the map.\n * @param propertyNames - array of property names including OBJECTID.\n * @return data for correct rendering of popup.\n */\n private createPopupInfo(propertyNames: string[]): PopupInfo {\n const title = '{OBJECTID}';\n const mediaInfos = [];\n const fieldInfos: FieldInfo[] = [];\n const popupElements: {\n fieldInfos: FieldInfo[];\n type: string;\n }[] = [];\n const expressionInfos = [];\n\n for (const propertyName of propertyNames) {\n fieldInfos.push({\n fieldName: propertyName,\n visible: true,\n isEditable: false,\n label: propertyName\n });\n }\n popupElements.push({\n fieldInfos,\n type: 'fields'\n });\n\n return {\n title,\n mediaInfos,\n popupElements,\n fieldInfos,\n expressionInfos\n };\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"load-3d-tiles.d.ts","sourceRoot":"","sources":["../../../src/i3s-converter/helpers/load-3d-tiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EAClB,4BAA4B,EAC5B,+BAA+B,EAChC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAC,gBAAgB,EAAO,MAAM,kBAAkB,CAAC;AAExD;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,kBACb,+BAA+B,GAAG,IAAI,cACzC,4BAA4B,sBACpB,oBAAoB,KACvC,QAAQ,IAAI,CAsBd,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,kBACb,+BAA+B,GAAG,IAAI,cACzC,4BAA4B,sBACpB,oBAAoB,KACvC,QAAQ,kBAAkB,GAAG,IAAI,CAsBnC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAE,oBAAoB,gBA0BlC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,4BAA4B,WAEjE"}
1
+ {"version":3,"file":"load-3d-tiles.d.ts","sourceRoot":"","sources":["../../../src/i3s-converter/helpers/load-3d-tiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EAClB,4BAA4B,EAC5B,+BAA+B,EAChC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAC,gBAAgB,EAAO,MAAM,kBAAkB,CAAC;AAWxD;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,kBACb,+BAA+B,GAAG,IAAI,cACzC,4BAA4B,sBACpB,oBAAoB,KACvC,QAAQ,IAAI,CAsBd,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,kBACb,+BAA+B,GAAG,IAAI,cACzC,4BAA4B,sBACpB,oBAAoB,KACvC,QAAQ,kBAAkB,GAAG,IAAI,CAsBnC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAE,oBAAoB,gBA6BlC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,4BAA4B,WAEjE"}
@@ -1,5 +1,7 @@
1
- import { Tiles3DArchiveFileSystem } from '@loaders.gl/3d-tiles';
1
+ import { Tiles3DArchive } from '@loaders.gl/3d-tiles';
2
2
  import { load } from '@loaders.gl/core';
3
+ import { FileHandleFile } from '@loaders.gl/loader-utils';
4
+ import { CD_HEADER_SIGNATURE, ZipFileSystem, parseHashTable, parseZipCDFileHeader, parseZipLocalFileHeader, searchFromTheEnd } from '@loaders.gl/zip';
3
5
  export const loadNestedTileset = async (sourceTileset, sourceTile, tilesetLoadOptions) => {
4
6
  const isTileset = isNestedTileset(sourceTile);
5
7
  if (!sourceTileset || !sourceTile.contentUrl || !isTileset) {
@@ -48,7 +50,10 @@ export async function loadFromArchive(url, loader, loadOptions) {
48
50
  }
49
51
  if (filename) {
50
52
  const tz3Path = `${tz3UrlParts[0]}.3tz`;
51
- const fileSystem = new Tiles3DArchiveFileSystem(tz3Path);
53
+ const fileProvider = new FileHandleFile(tz3Path);
54
+ const hashTable = await loadHashTable(fileProvider);
55
+ const archive = new Tiles3DArchive(fileProvider, hashTable, tz3Path);
56
+ const fileSystem = new ZipFileSystem(archive);
52
57
  const content = await load(filename, loader, {
53
58
  ...loadOptions,
54
59
  fetch: fileSystem.fetch.bind(fileSystem)
@@ -61,4 +66,19 @@ export async function loadFromArchive(url, loader, loadOptions) {
61
66
  export function isNestedTileset(tile) {
62
67
  return (tile === null || tile === void 0 ? void 0 : tile.type) === 'json' || (tile === null || tile === void 0 ? void 0 : tile.type) === '3tz';
63
68
  }
69
+ async function loadHashTable(fileProvider) {
70
+ let hashTable;
71
+ const hashCDOffset = await searchFromTheEnd(fileProvider, CD_HEADER_SIGNATURE);
72
+ const cdFileHeader = await parseZipCDFileHeader(hashCDOffset, fileProvider);
73
+ if ((cdFileHeader === null || cdFileHeader === void 0 ? void 0 : cdFileHeader.fileName) === '@3dtilesIndex1@') {
74
+ const localFileHeader = await parseZipLocalFileHeader(cdFileHeader.localHeaderOffset, fileProvider);
75
+ if (!localFileHeader) {
76
+ throw new Error('corrupted 3tz');
77
+ }
78
+ const fileDataOffset = localFileHeader.fileDataOffset;
79
+ const hashFile = await fileProvider.slice(fileDataOffset, fileDataOffset + localFileHeader.compressedSize);
80
+ hashTable = parseHashTable(hashFile);
81
+ }
82
+ return hashTable;
83
+ }
64
84
  //# sourceMappingURL=load-3d-tiles.js.map
@@ -1 +1 @@
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","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 // @ts-ignore\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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"}
1
+ {"version":3,"file":"load-3d-tiles.js","names":["Tiles3DArchive","load","FileHandleFile","CD_HEADER_SIGNATURE","ZipFileSystem","parseHashTable","parseZipCDFileHeader","parseZipLocalFileHeader","searchFromTheEnd","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","fileProvider","hashTable","loadHashTable","archive","fileSystem","content","fetch","bind","destroy","tile","type","hashCDOffset","cdFileHeader","fileName","localFileHeader","localHeaderOffset","fileDataOffset","hashFile","compressedSize"],"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 {Tiles3DArchive} from '@loaders.gl/3d-tiles';\nimport {LoaderWithParser, load} from '@loaders.gl/core';\nimport {FileHandleFile, FileProvider} from '@loaders.gl/loader-utils';\nimport {\n CD_HEADER_SIGNATURE,\n ZipFileSystem,\n parseHashTable,\n parseZipCDFileHeader,\n parseZipLocalFileHeader,\n searchFromTheEnd\n} from '@loaders.gl/zip';\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 // @ts-ignore\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 fileProvider = new FileHandleFile(tz3Path);\n const hashTable = await loadHashTable(fileProvider);\n const archive = new Tiles3DArchive(fileProvider, hashTable, tz3Path);\n const fileSystem = new ZipFileSystem(archive);\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\n/**\n * Load hash file from 3TZ\n * @param fileProvider - binary reader of 3TZ\n * @returns hash table of the 3TZ file content or undefined if the hash file is not presented inside\n */\nasync function loadHashTable(\n fileProvider: FileProvider\n): Promise<undefined | Record<string, bigint>> {\n let hashTable: undefined | Record<string, bigint>;\n\n const hashCDOffset = await searchFromTheEnd(fileProvider, CD_HEADER_SIGNATURE);\n\n const cdFileHeader = await parseZipCDFileHeader(hashCDOffset, fileProvider);\n\n // '@3dtilesIndex1@' is index file that must be the last in the archive. It allows\n // to improve load and read performance when the archive contains a very large number\n // of files.\n if (cdFileHeader?.fileName === '@3dtilesIndex1@') {\n const localFileHeader = await parseZipLocalFileHeader(\n cdFileHeader.localHeaderOffset,\n fileProvider\n );\n if (!localFileHeader) {\n throw new Error('corrupted 3tz');\n }\n\n const fileDataOffset = localFileHeader.fileDataOffset;\n const hashFile = await fileProvider.slice(\n fileDataOffset,\n fileDataOffset + localFileHeader.compressedSize\n );\n\n hashTable = parseHashTable(hashFile);\n }\n\n return hashTable;\n}\n"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { BoundingVolumes, LodSelection, Node3DIndexDocument, NodeInPage } from '@loaders.gl/i3s';
2
2
  import I3SConverter from '../i3s-converter';
3
3
  import { I3SConvertedResources } from '../types';
4
+ import { DumpMetadata } from '../../lib/utils/conversion-dump';
4
5
  /**
5
6
  * Wrapper for https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md data
6
7
  * The class allows working with 3DNodeIndexDocument in 2 modes:
@@ -98,6 +99,6 @@ export declare class NodeIndexDocument {
98
99
  * @param resources.attributes - feature attributes
99
100
  * @return 3DNodeIndexDocument https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md object
100
101
  */
101
- static createNodeIndexDocument(parentNode: NodeIndexDocument, boundingVolumes: BoundingVolumes, lodSelection: LodSelection[], nodeInPage: NodeInPage, resources: I3SConvertedResources): Promise<Node3DIndexDocument>;
102
+ static createNodeIndexDocument(parentNode: NodeIndexDocument, boundingVolumes: BoundingVolumes, lodSelection: LodSelection[], nodeInPage: NodeInPage, resources: I3SConvertedResources | DumpMetadata): Promise<Node3DIndexDocument>;
102
103
  }
103
104
  //# sourceMappingURL=node-index-document.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"node-index-document.d.ts","sourceRoot":"","sources":["../../../src/i3s-converter/helpers/node-index-document.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,UAAU,EAEX,MAAM,iBAAiB,CAAC;AAIzB,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAC,qBAAqB,EAAC,MAAM,UAAU,CAAC;AAE/C;;;;;GAKG;AACH,qBAAa,iBAAiB;IAC5B,cAAc;IACP,EAAE,EAAE,MAAM,CAAC;IAClB,uBAAuB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACxB,+BAA+B;IACxB,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAAQ;IAC/C,eAAe;IACR,QAAQ,EAAE,iBAAiB,EAAE,CAAM;IAC1C,yBAAyB;IACzB,OAAO,CAAC,SAAS,CAAe;IAEhC;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAkB;IACpC,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;;;OAIG;gBACS,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY;IAM/C;;;;OAIG;IACU,OAAO,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAS3E;;;OAGG;IACU,WAAW,CAAC,UAAU,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BxE;;OAEG;IACU,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAmC1C,+CAA+C;IAClC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAMlC,wBAAwB;IACxB,OAAO,CAAC,QAAQ;IAOhB;;;OAGG;YACW,KAAK;IAyBnB;;;OAGG;YACW,IAAI;IAalB;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;;;;OAKG;WACU,cAAc,CACzB,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,YAAY,GACtB,OAAO,CAAC,iBAAiB,CAAC;IAM7B;;;;;;;;;OASG;WACU,UAAU,CACrB,UAAU,EAAE,iBAAiB,EAC7B,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,EAAE,EAC5B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,qBAAqB,EAChC,SAAS,EAAE,YAAY,GACtB,OAAO,CAAC,iBAAiB,CAAC;IAY7B;;;;OAIG;IACH,MAAM,CAAC,2BAA2B,CAAC,eAAe,EAAE,eAAe,GAAG,mBAAmB;IAqBzF;;;;;;;;;;OAUG;WACU,uBAAuB,CAClC,UAAU,EAAE,iBAAiB,EAC7B,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,EAAE,EAC5B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,qBAAqB,GAC/B,OAAO,CAAC,mBAAmB,CAAC;CAgDhC"}
1
+ {"version":3,"file":"node-index-document.d.ts","sourceRoot":"","sources":["../../../src/i3s-converter/helpers/node-index-document.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,UAAU,EAEX,MAAM,iBAAiB,CAAC;AAIzB,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAC,qBAAqB,EAAC,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAC,YAAY,EAAC,MAAM,iCAAiC,CAAC;AAE7D;;;;;GAKG;AACH,qBAAa,iBAAiB;IAC5B,cAAc;IACP,EAAE,EAAE,MAAM,CAAC;IAClB,uBAAuB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACxB,+BAA+B;IACxB,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAAQ;IAC/C,eAAe;IACR,QAAQ,EAAE,iBAAiB,EAAE,CAAM;IAC1C,yBAAyB;IACzB,OAAO,CAAC,SAAS,CAAe;IAEhC;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAkB;IACpC,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;;;OAIG;gBACS,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY;IAM/C;;;;OAIG;IACU,OAAO,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAS3E;;;OAGG;IACU,WAAW,CAAC,UAAU,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BxE;;OAEG;IACU,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAmC1C,+CAA+C;IAClC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAMlC,wBAAwB;IACxB,OAAO,CAAC,QAAQ;IAOhB;;;OAGG;YACW,KAAK;IAyBnB;;;OAGG;YACW,IAAI;IAalB;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;;;;OAKG;WACU,cAAc,CACzB,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,YAAY,GACtB,OAAO,CAAC,iBAAiB,CAAC;IAM7B;;;;;;;;;OASG;WACU,UAAU,CACrB,UAAU,EAAE,iBAAiB,EAC7B,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,EAAE,EAC5B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,qBAAqB,EAChC,SAAS,EAAE,YAAY,GACtB,OAAO,CAAC,iBAAiB,CAAC;IAY7B;;;;OAIG;IACH,MAAM,CAAC,2BAA2B,CAAC,eAAe,EAAE,eAAe,GAAG,mBAAmB;IAqBzF;;;;;;;;;;OAUG;WACU,uBAAuB,CAClC,UAAU,EAAE,iBAAiB,EAC7B,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,EAAE,EAC5B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,qBAAqB,GAAG,YAAY,GAC9C,OAAO,CAAC,mBAAmB,CAAC;CAyDhC"}
@@ -147,10 +147,6 @@ export class NodeIndexDocument {
147
147
  return transform(root0data, nodeTemplate());
148
148
  }
149
149
  static async createNodeIndexDocument(parentNode, boundingVolumes, lodSelection, nodeInPage, resources) {
150
- const {
151
- texture,
152
- attributes
153
- } = resources;
154
150
  const nodeId = nodeInPage.index;
155
151
  const parentNodeData = await parentNode.load();
156
152
  const nodeData = {
@@ -170,23 +166,25 @@ export class NodeIndexDocument {
170
166
  };
171
167
  const node = transform(nodeData, nodeTemplate());
172
168
  if (nodeInPage.mesh) {
173
- var _parentNode$converter, _parentNode$converter2;
169
+ var _parentNode$converter, _parentNode$converter2, _parentNode$converter3, _parentNode$converter4;
174
170
  node.geometryData = [{
175
171
  href: './geometries/0'
176
172
  }];
177
173
  node.sharedResource = {
178
174
  href: './shared'
179
175
  };
180
- if (texture) {
176
+ if ('texture' in resources && resources.texture || 'texelCountHint' in resources && resources.texelCountHint) {
181
177
  node.textureData = [{
182
178
  href: './textures/0'
183
179
  }, {
184
180
  href: './textures/1'
185
181
  }];
186
182
  }
187
- if (attributes && attributes.length && (_parentNode$converter = parentNode.converter.layers0) !== null && _parentNode$converter !== void 0 && (_parentNode$converter2 = _parentNode$converter.attributeStorageInfo) !== null && _parentNode$converter2 !== void 0 && _parentNode$converter2.length) {
183
+ if ('attributes' in resources && resources.attributes && resources.attributes.length && (_parentNode$converter = parentNode.converter.layers0) !== null && _parentNode$converter !== void 0 && (_parentNode$converter2 = _parentNode$converter.attributeStorageInfo) !== null && _parentNode$converter2 !== void 0 && _parentNode$converter2.length || 'attributesCount' in resources && resources.attributesCount && (_parentNode$converter3 = parentNode.converter.layers0) !== null && _parentNode$converter3 !== void 0 && (_parentNode$converter4 = _parentNode$converter3.attributeStorageInfo) !== null && _parentNode$converter4 !== void 0 && _parentNode$converter4.length) {
184
+ var _resources$attributes;
185
+ const attributesLength = ('attributes' in resources ? (_resources$attributes = resources.attributes) === null || _resources$attributes === void 0 ? void 0 : _resources$attributes.length : resources.attributesCount) || 0;
188
186
  node.attributeData = [];
189
- const minimumLength = attributes.length < parentNode.converter.layers0.attributeStorageInfo.length ? attributes.length : parentNode.converter.layers0.attributeStorageInfo.length;
187
+ const minimumLength = attributesLength < parentNode.converter.layers0.attributeStorageInfo.length ? attributesLength : parentNode.converter.layers0.attributeStorageInfo.length;
190
188
  for (let index = 0; index < minimumLength; index++) {
191
189
  const folderName = parentNode.converter.layers0.attributeStorageInfo[index].key;
192
190
  node.attributeData.push({
@@ -1 +1 @@
1
- {"version":3,"file":"node-index-document.js","names":["join","transform","v4","uuidv4","openJson","writeFile","writeFileForSlpk","NODE","nodeTemplate","NodeIndexDocument","finalized","_finalized","constructor","id","converter","inPageId","data","children","toString","addData","options","instantNodeWriting","write","addChildren","childNodes","newChildren","node","nodeData","load","push","href","obb","mbs","concat","_data$children","addNeighbors","childNode","_childNodeData$neighb","_nodeData$children","childNodeData","neighbors","Number","length","neighbor","console","warn","save","finalize","child","flush","path","layers0Path","slpk","writeQueue","enqueue","archiveKey","writePromise","JSON","stringify","compressList","parentNodePath","parentNodeFileName","createRootNode","boundingVolumes","rootData","createRootNodeIndexDocument","rootNode","createNode","parentNode","lodSelection","nodeInPage","resources","createNodeIndexDocument","index","root0data","version","toUpperCase","level","metricType","maxError","texture","attributes","nodeId","parentNodeData","mesh","_parentNode$converter","_parentNode$converter2","geometryData","sharedResource","textureData","layers0","attributeStorageInfo","attributeData","minimumLength","folderName","key"],"sources":["../../../src/i3s-converter/helpers/node-index-document.ts"],"sourcesContent":["import {join} from 'path';\nimport {\n BoundingVolumes,\n LodSelection,\n Node3DIndexDocument,\n NodeInPage,\n NodeReference\n} from '@loaders.gl/i3s';\nimport transform from 'json-map-transform';\nimport {v4 as uuidv4} from 'uuid';\nimport {openJson, writeFile, writeFileForSlpk} from '../../lib/utils/file-utils';\nimport I3SConverter from '../i3s-converter';\nimport {NODE as nodeTemplate} from '../json-templates/node';\nimport {I3SConvertedResources} from '../types';\n\n/**\n * Wrapper for https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md data\n * The class allows working with 3DNodeIndexDocument in 2 modes:\n * in memory: the data is stored in `data` field\n * on disk: the data is written on disk in a file. The file can be rewritten when new childrend or neighbors have to be added\n */\nexport class NodeIndexDocument {\n /** Node id */\n public id: string;\n /** Id in node pages */\n public inPageId: number;\n /** 3DNodeIndexDocument data */\n public data: Node3DIndexDocument | null = null;\n /** children */\n public children: NodeIndexDocument[] = [];\n /** converter instance */\n private converter: I3SConverter;\n\n /**\n * Finalized property. It means that all child nodes are saved and their data\n * is unloaded\n */\n private _finalized: boolean = false;\n get finalized(): boolean {\n return this._finalized;\n }\n\n /**\n * Constructor\n * @param id - id of the node in node pages\n * @param converter - converter instance\n */\n constructor(id: number, converter: I3SConverter) {\n this.inPageId = id;\n this.id = id === 0 ? 'root' : id.toString();\n this.converter = converter;\n }\n\n /**\n * Add Node3DIndexDocument data to the node\n * @param data Node3DIndexDocument data\n * @returns this NodeIndexDocument instance (to recurring with constructor)\n */\n public async addData(data: Node3DIndexDocument): Promise<NodeIndexDocument> {\n if (this.converter.options.instantNodeWriting) {\n await this.write(data);\n } else {\n this.data = data;\n }\n return this;\n }\n\n /**\n * Add child node references\n * @param childNodes - child NodeIndexDocument instances\n */\n public async addChildren(childNodes: NodeIndexDocument[]): Promise<void> {\n const newChildren: NodeReference[] = [];\n for (const node of childNodes) {\n const nodeData = await node.load();\n newChildren.push({\n id: node.id,\n href: `../${node.id}`,\n obb: nodeData.obb,\n mbs: nodeData.mbs\n });\n }\n this.children = this.children.concat(childNodes);\n\n let data: Node3DIndexDocument | null = this.data;\n if (this.converter.options.instantNodeWriting) {\n data = (await this.load()) as Node3DIndexDocument;\n }\n if (data) {\n data.children = data.children ?? [];\n data.children = data.children.concat(newChildren);\n }\n if (this.converter.options.instantNodeWriting && data) {\n await this.write(data);\n }\n }\n\n /**\n * Add neighbors to child nodes of this node\n */\n public async addNeighbors(): Promise<void> {\n if (this.finalized) {\n return;\n }\n const nodeData = await this.load();\n for (const childNode of this.children) {\n const childNodeData = await childNode.load();\n childNodeData.neighbors = childNodeData.neighbors ?? [];\n\n // Don't do large amount of \"neightbors\" to avoid big memory consumption\n if (Number(nodeData?.children?.length) < 1000) {\n for (const neighbor of nodeData.children || []) {\n if (childNode.id === neighbor.id) {\n continue; // eslint-disable-line\n }\n\n childNodeData.neighbors.push({...neighbor});\n }\n } else {\n // eslint-disable-next-line no-console, no-undef\n console.warn(\n `Node ${childNode.id}: neighbors attribute is omited because of large number of neigbors`\n );\n delete childNodeData.neighbors;\n }\n\n if (this.converter.options.instantNodeWriting && childNodeData) {\n await childNode.write(childNodeData);\n }\n await childNode.save();\n }\n // The save after adding neighbors is the last one. Finalize the the node\n this.finalize();\n }\n\n /** Save 3DNodeIndexDocument in file on disk */\n public async save(): Promise<void> {\n if (this.data) {\n await this.write(this.data);\n }\n }\n\n /** Finalize the node */\n private finalize(): void {\n this._finalized = true;\n for (const child of this.children) {\n child.flush();\n }\n }\n\n /**\n * Write 3DNodeIndexDocument https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md\n * @param node - Node3DIndexDocument object\n */\n private async write(node: Node3DIndexDocument): Promise<void> {\n const path = join(this.converter.layers0Path, 'nodes', this.id);\n if (this.converter.options.slpk) {\n await this.converter.writeQueue.enqueue(\n {\n archiveKey: `nodes/${this.id}/3dNodeIndexDocument.json.gz`,\n writePromise: () =>\n writeFileForSlpk(\n path,\n JSON.stringify(node),\n '3dNodeIndexDocument.json',\n true,\n this.converter.compressList\n )\n },\n true\n );\n } else {\n await this.converter.writeQueue.enqueue(\n {writePromise: () => writeFile(path, JSON.stringify(node))},\n true\n );\n }\n }\n\n /**\n * Load 3DNodeIndexDocument data from file on disk\n * @returns 3DNodeIndexDocument object\n */\n private async load(): Promise<Node3DIndexDocument> {\n if (this.data) {\n return this.data;\n }\n const path = this.id;\n const parentNodePath = join(this.converter.layers0Path, 'nodes', path);\n let parentNodeFileName = 'index.json';\n if (this.converter.options.slpk) {\n parentNodeFileName = '3dNodeIndexDocument.json';\n }\n return (await openJson(parentNodePath, parentNodeFileName)) as Node3DIndexDocument;\n }\n\n /**\n * Unload the Node data\n */\n private flush(): void {\n this.data = null;\n }\n\n /**\n * Create root node of the tree\n * @param boundingVolumes - MBS and OOB bounding volumes data\n * @param converter - I3SConverter instance\n * @returns instance of NodeIndexDocument\n */\n static async createRootNode(\n boundingVolumes: BoundingVolumes,\n converter: I3SConverter\n ): Promise<NodeIndexDocument> {\n const rootData = NodeIndexDocument.createRootNodeIndexDocument(boundingVolumes);\n const rootNode = await new NodeIndexDocument(0, converter).addData(rootData);\n return rootNode;\n }\n\n /**\n * Create NodeIndexDocument instance\n * @param parentNode - parent NodeIndexDocument\n * @param boundingVolumes - MBS and OOB bounding volumes data\n * @param lodSelection - LOD metrics data\n * @param nodeInPage - node data in node pages\n * @param resources - resources extracted from gltf/b3dm file\n * @param converter - I3SConverter instance\n * @returns NodeIndexDocument instance\n */\n static async createNode(\n parentNode: NodeIndexDocument,\n boundingVolumes: BoundingVolumes,\n lodSelection: LodSelection[],\n nodeInPage: NodeInPage,\n resources: I3SConvertedResources,\n converter: I3SConverter\n ): Promise<NodeIndexDocument> {\n const data = await NodeIndexDocument.createNodeIndexDocument(\n parentNode,\n boundingVolumes,\n lodSelection,\n nodeInPage,\n resources\n );\n const node = await new NodeIndexDocument(nodeInPage.index, converter).addData(data);\n return node;\n }\n\n /**\n * Form 3DNodeIndexDocument data for the root node\n * @param boundingVolumes - mbs and obb data about node's bounding volume\n * @return 3DNodeIndexDocument data https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md\n */\n static createRootNodeIndexDocument(boundingVolumes: BoundingVolumes): Node3DIndexDocument {\n const root0data = {\n version: `{${uuidv4().toUpperCase()}}`,\n id: 'root',\n level: 0,\n lodSelection: [\n {\n metricType: 'maxScreenThresholdSQ',\n maxError: 0\n },\n {\n metricType: 'maxScreenThreshold',\n maxError: 0\n }\n ],\n ...boundingVolumes,\n children: []\n };\n return transform(root0data, nodeTemplate());\n }\n\n /**\n * Create a new Node3DIndexDocument\n * @param parentNode - 3DNodeIndexDocument https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md object of the parent node\n * @param boundingVolumes - Bounding volumes\n * @param lodSelection - Level of Details (LOD) metrics\n * @param nodeInPage - corresponding node object in a node page\n * @param resources - the node resources data\n * @param resources.texture - texture image\n * @param resources.attributes - feature attributes\n * @return 3DNodeIndexDocument https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md object\n */\n static async createNodeIndexDocument(\n parentNode: NodeIndexDocument,\n boundingVolumes: BoundingVolumes,\n lodSelection: LodSelection[],\n nodeInPage: NodeInPage,\n resources: I3SConvertedResources\n ): Promise<Node3DIndexDocument> {\n const {texture, attributes} = resources;\n const nodeId = nodeInPage.index!;\n const parentNodeData = await parentNode.load();\n const nodeData = {\n version: parentNodeData.version,\n id: nodeId.toString(),\n level: parentNodeData.level! + 1,\n ...boundingVolumes,\n lodSelection,\n parentNode: {\n id: parentNode.id,\n href: `../${parentNode.id}`,\n mbs: parentNodeData.mbs,\n obb: parentNodeData.obb\n },\n children: [],\n neighbors: []\n };\n const node = transform(nodeData, nodeTemplate());\n\n if (nodeInPage.mesh) {\n node.geometryData = [{href: './geometries/0'}];\n node.sharedResource = {href: './shared'};\n\n if (texture) {\n node.textureData = [{href: './textures/0'}, {href: './textures/1'}];\n }\n\n if (\n attributes &&\n attributes.length &&\n parentNode.converter.layers0?.attributeStorageInfo?.length\n ) {\n node.attributeData = [];\n const minimumLength =\n attributes.length < parentNode.converter.layers0.attributeStorageInfo.length\n ? attributes.length\n : parentNode.converter.layers0.attributeStorageInfo.length;\n for (let index = 0; index < minimumLength; index++) {\n const folderName = parentNode.converter.layers0.attributeStorageInfo[index].key;\n node.attributeData.push({href: `./attributes/${folderName}/0`});\n }\n }\n }\n\n return node;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"node-index-document.js","names":["join","transform","v4","uuidv4","openJson","writeFile","writeFileForSlpk","NODE","nodeTemplate","NodeIndexDocument","finalized","_finalized","constructor","id","converter","inPageId","data","children","toString","addData","options","instantNodeWriting","write","addChildren","childNodes","newChildren","node","nodeData","load","push","href","obb","mbs","concat","_data$children","addNeighbors","childNode","_childNodeData$neighb","_nodeData$children","childNodeData","neighbors","Number","length","neighbor","console","warn","save","finalize","child","flush","path","layers0Path","slpk","writeQueue","enqueue","archiveKey","writePromise","JSON","stringify","compressList","parentNodePath","parentNodeFileName","createRootNode","boundingVolumes","rootData","createRootNodeIndexDocument","rootNode","createNode","parentNode","lodSelection","nodeInPage","resources","createNodeIndexDocument","index","root0data","version","toUpperCase","level","metricType","maxError","nodeId","parentNodeData","mesh","_parentNode$converter","_parentNode$converter2","_parentNode$converter3","_parentNode$converter4","geometryData","sharedResource","texture","texelCountHint","textureData","attributes","layers0","attributeStorageInfo","attributesCount","_resources$attributes","attributesLength","attributeData","minimumLength","folderName","key"],"sources":["../../../src/i3s-converter/helpers/node-index-document.ts"],"sourcesContent":["import {join} from 'path';\nimport {\n BoundingVolumes,\n LodSelection,\n Node3DIndexDocument,\n NodeInPage,\n NodeReference\n} from '@loaders.gl/i3s';\nimport transform from 'json-map-transform';\nimport {v4 as uuidv4} from 'uuid';\nimport {openJson, writeFile, writeFileForSlpk} from '../../lib/utils/file-utils';\nimport I3SConverter from '../i3s-converter';\nimport {NODE as nodeTemplate} from '../json-templates/node';\nimport {I3SConvertedResources} from '../types';\nimport {DumpMetadata} from '../../lib/utils/conversion-dump';\n\n/**\n * Wrapper for https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md data\n * The class allows working with 3DNodeIndexDocument in 2 modes:\n * in memory: the data is stored in `data` field\n * on disk: the data is written on disk in a file. The file can be rewritten when new childrend or neighbors have to be added\n */\nexport class NodeIndexDocument {\n /** Node id */\n public id: string;\n /** Id in node pages */\n public inPageId: number;\n /** 3DNodeIndexDocument data */\n public data: Node3DIndexDocument | null = null;\n /** children */\n public children: NodeIndexDocument[] = [];\n /** converter instance */\n private converter: I3SConverter;\n\n /**\n * Finalized property. It means that all child nodes are saved and their data\n * is unloaded\n */\n private _finalized: boolean = false;\n get finalized(): boolean {\n return this._finalized;\n }\n\n /**\n * Constructor\n * @param id - id of the node in node pages\n * @param converter - converter instance\n */\n constructor(id: number, converter: I3SConverter) {\n this.inPageId = id;\n this.id = id === 0 ? 'root' : id.toString();\n this.converter = converter;\n }\n\n /**\n * Add Node3DIndexDocument data to the node\n * @param data Node3DIndexDocument data\n * @returns this NodeIndexDocument instance (to recurring with constructor)\n */\n public async addData(data: Node3DIndexDocument): Promise<NodeIndexDocument> {\n if (this.converter.options.instantNodeWriting) {\n await this.write(data);\n } else {\n this.data = data;\n }\n return this;\n }\n\n /**\n * Add child node references\n * @param childNodes - child NodeIndexDocument instances\n */\n public async addChildren(childNodes: NodeIndexDocument[]): Promise<void> {\n const newChildren: NodeReference[] = [];\n for (const node of childNodes) {\n const nodeData = await node.load();\n newChildren.push({\n id: node.id,\n href: `../${node.id}`,\n obb: nodeData.obb,\n mbs: nodeData.mbs\n });\n }\n this.children = this.children.concat(childNodes);\n\n let data: Node3DIndexDocument | null = this.data;\n if (this.converter.options.instantNodeWriting) {\n data = (await this.load()) as Node3DIndexDocument;\n }\n if (data) {\n data.children = data.children ?? [];\n data.children = data.children.concat(newChildren);\n }\n if (this.converter.options.instantNodeWriting && data) {\n await this.write(data);\n }\n }\n\n /**\n * Add neighbors to child nodes of this node\n */\n public async addNeighbors(): Promise<void> {\n if (this.finalized) {\n return;\n }\n const nodeData = await this.load();\n for (const childNode of this.children) {\n const childNodeData = await childNode.load();\n childNodeData.neighbors = childNodeData.neighbors ?? [];\n\n // Don't do large amount of \"neightbors\" to avoid big memory consumption\n if (Number(nodeData?.children?.length) < 1000) {\n for (const neighbor of nodeData.children || []) {\n if (childNode.id === neighbor.id) {\n continue; // eslint-disable-line\n }\n\n childNodeData.neighbors.push({...neighbor});\n }\n } else {\n // eslint-disable-next-line no-console, no-undef\n console.warn(\n `Node ${childNode.id}: neighbors attribute is omited because of large number of neigbors`\n );\n delete childNodeData.neighbors;\n }\n\n if (this.converter.options.instantNodeWriting && childNodeData) {\n await childNode.write(childNodeData);\n }\n await childNode.save();\n }\n // The save after adding neighbors is the last one. Finalize the the node\n this.finalize();\n }\n\n /** Save 3DNodeIndexDocument in file on disk */\n public async save(): Promise<void> {\n if (this.data) {\n await this.write(this.data);\n }\n }\n\n /** Finalize the node */\n private finalize(): void {\n this._finalized = true;\n for (const child of this.children) {\n child.flush();\n }\n }\n\n /**\n * Write 3DNodeIndexDocument https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md\n * @param node - Node3DIndexDocument object\n */\n private async write(node: Node3DIndexDocument): Promise<void> {\n const path = join(this.converter.layers0Path, 'nodes', this.id);\n if (this.converter.options.slpk) {\n await this.converter.writeQueue.enqueue(\n {\n archiveKey: `nodes/${this.id}/3dNodeIndexDocument.json.gz`,\n writePromise: () =>\n writeFileForSlpk(\n path,\n JSON.stringify(node),\n '3dNodeIndexDocument.json',\n true,\n this.converter.compressList\n )\n },\n true\n );\n } else {\n await this.converter.writeQueue.enqueue(\n {writePromise: () => writeFile(path, JSON.stringify(node))},\n true\n );\n }\n }\n\n /**\n * Load 3DNodeIndexDocument data from file on disk\n * @returns 3DNodeIndexDocument object\n */\n private async load(): Promise<Node3DIndexDocument> {\n if (this.data) {\n return this.data;\n }\n const path = this.id;\n const parentNodePath = join(this.converter.layers0Path, 'nodes', path);\n let parentNodeFileName = 'index.json';\n if (this.converter.options.slpk) {\n parentNodeFileName = '3dNodeIndexDocument.json';\n }\n return (await openJson(parentNodePath, parentNodeFileName)) as Node3DIndexDocument;\n }\n\n /**\n * Unload the Node data\n */\n private flush(): void {\n this.data = null;\n }\n\n /**\n * Create root node of the tree\n * @param boundingVolumes - MBS and OOB bounding volumes data\n * @param converter - I3SConverter instance\n * @returns instance of NodeIndexDocument\n */\n static async createRootNode(\n boundingVolumes: BoundingVolumes,\n converter: I3SConverter\n ): Promise<NodeIndexDocument> {\n const rootData = NodeIndexDocument.createRootNodeIndexDocument(boundingVolumes);\n const rootNode = await new NodeIndexDocument(0, converter).addData(rootData);\n return rootNode;\n }\n\n /**\n * Create NodeIndexDocument instance\n * @param parentNode - parent NodeIndexDocument\n * @param boundingVolumes - MBS and OOB bounding volumes data\n * @param lodSelection - LOD metrics data\n * @param nodeInPage - node data in node pages\n * @param resources - resources extracted from gltf/b3dm file\n * @param converter - I3SConverter instance\n * @returns NodeIndexDocument instance\n */\n static async createNode(\n parentNode: NodeIndexDocument,\n boundingVolumes: BoundingVolumes,\n lodSelection: LodSelection[],\n nodeInPage: NodeInPage,\n resources: I3SConvertedResources,\n converter: I3SConverter\n ): Promise<NodeIndexDocument> {\n const data = await NodeIndexDocument.createNodeIndexDocument(\n parentNode,\n boundingVolumes,\n lodSelection,\n nodeInPage,\n resources\n );\n const node = await new NodeIndexDocument(nodeInPage.index, converter).addData(data);\n return node;\n }\n\n /**\n * Form 3DNodeIndexDocument data for the root node\n * @param boundingVolumes - mbs and obb data about node's bounding volume\n * @return 3DNodeIndexDocument data https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md\n */\n static createRootNodeIndexDocument(boundingVolumes: BoundingVolumes): Node3DIndexDocument {\n const root0data = {\n version: `{${uuidv4().toUpperCase()}}`,\n id: 'root',\n level: 0,\n lodSelection: [\n {\n metricType: 'maxScreenThresholdSQ',\n maxError: 0\n },\n {\n metricType: 'maxScreenThreshold',\n maxError: 0\n }\n ],\n ...boundingVolumes,\n children: []\n };\n return transform(root0data, nodeTemplate());\n }\n\n /**\n * Create a new Node3DIndexDocument\n * @param parentNode - 3DNodeIndexDocument https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md object of the parent node\n * @param boundingVolumes - Bounding volumes\n * @param lodSelection - Level of Details (LOD) metrics\n * @param nodeInPage - corresponding node object in a node page\n * @param resources - the node resources data\n * @param resources.texture - texture image\n * @param resources.attributes - feature attributes\n * @return 3DNodeIndexDocument https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md object\n */\n static async createNodeIndexDocument(\n parentNode: NodeIndexDocument,\n boundingVolumes: BoundingVolumes,\n lodSelection: LodSelection[],\n nodeInPage: NodeInPage,\n resources: I3SConvertedResources | DumpMetadata\n ): Promise<Node3DIndexDocument> {\n const nodeId = nodeInPage.index!;\n const parentNodeData = await parentNode.load();\n const nodeData = {\n version: parentNodeData.version,\n id: nodeId.toString(),\n level: parentNodeData.level! + 1,\n ...boundingVolumes,\n lodSelection,\n parentNode: {\n id: parentNode.id,\n href: `../${parentNode.id}`,\n mbs: parentNodeData.mbs,\n obb: parentNodeData.obb\n },\n children: [],\n neighbors: []\n };\n const node = transform(nodeData, nodeTemplate());\n\n if (nodeInPage.mesh) {\n node.geometryData = [{href: './geometries/0'}];\n node.sharedResource = {href: './shared'};\n\n if (\n ('texture' in resources && resources.texture) ||\n ('texelCountHint' in resources && resources.texelCountHint)\n ) {\n node.textureData = [{href: './textures/0'}, {href: './textures/1'}];\n }\n\n if (\n ('attributes' in resources &&\n resources.attributes &&\n resources.attributes.length &&\n parentNode.converter.layers0?.attributeStorageInfo?.length) ||\n ('attributesCount' in resources &&\n resources.attributesCount &&\n parentNode.converter.layers0?.attributeStorageInfo?.length)\n ) {\n const attributesLength =\n ('attributes' in resources ? resources.attributes?.length : resources.attributesCount) ||\n 0;\n node.attributeData = [];\n const minimumLength =\n attributesLength < parentNode.converter.layers0.attributeStorageInfo.length\n ? attributesLength\n : parentNode.converter.layers0.attributeStorageInfo.length;\n for (let index = 0; index < minimumLength; index++) {\n const folderName = parentNode.converter.layers0.attributeStorageInfo[index].key;\n node.attributeData.push({href: `./attributes/${folderName}/0`});\n }\n }\n }\n\n return node;\n }\n}\n"],"mappings":"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"}
@@ -142,6 +142,24 @@ export default class I3SConverter {
142
142
  * @param currentTraversalProps - traversal properties of the current node
143
143
  */
144
144
  private finalizeTile;
145
+ /**
146
+ * Generate NodeIndexDocument
147
+ * @param boundingVolumes - Bounding volumes
148
+ * @param resources - converted or dumped node resources data
149
+ * @param parentNode - 3DNodeIndexDocument of parent node
150
+ * @param sourceTile - source 3DTile data
151
+ * @param isDumped - indicator if the node is dumped
152
+ * @return NodeIndexDocument, nodeInPage and node data
153
+ */
154
+ private _generateNodeIndexDocument;
155
+ /**
156
+ * Restore 3DNodeIndexDocument from a comversion dump file
157
+ * @param parentNode - 3DNodeIndexDocument of parent node
158
+ * @param sourceTile - source 3DTile data
159
+ * @param transformationMatrix - transformation matrix of the current tile, calculated recursively multiplying
160
+ * transform of all parent tiles and transform of the current tile
161
+ */
162
+ private _restoreNode;
145
163
  /**
146
164
  * Convert tile to one or more I3S nodes
147
165
  * @param parentNode - 3DNodeIndexDocument of parent node
@@ -1 +1 @@
1
- {"version":3,"file":"i3s-converter.d.ts","sourceRoot":"","sources":["../../src/i3s-converter/i3s-converter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"i3s-converter.d.ts","sourceRoot":"","sources":["../../src/i3s-converter/i3s-converter.ts"],"names":[],"mappings":"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"}