@loaders.gl/tile-converter 3.2.0-alpha.2 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/dist/3d-tiles-attributes-worker.js +1 -1
  2. package/dist/3d-tiles-attributes-worker.js.map +1 -1
  3. package/dist/3d-tiles-converter/3d-tiles-converter.d.ts +1 -1
  4. package/dist/3d-tiles-converter/3d-tiles-converter.d.ts.map +1 -1
  5. package/dist/3d-tiles-converter/3d-tiles-converter.js +5 -0
  6. package/dist/constants.d.ts +2 -0
  7. package/dist/constants.d.ts.map +1 -0
  8. package/dist/constants.js +4 -0
  9. package/dist/converter-cli.d.ts +2 -0
  10. package/dist/converter-cli.d.ts.map +1 -0
  11. package/dist/converter-cli.js +232 -0
  12. package/dist/converter.min.js +68 -68
  13. package/dist/deps-installer/deps-installer.d.ts +11 -1
  14. package/dist/deps-installer/deps-installer.d.ts.map +1 -1
  15. package/dist/deps-installer/deps-installer.js +10 -0
  16. package/dist/dist.min.js +147 -171
  17. package/dist/es5/3d-tiles-attributes-worker.js +1 -1
  18. package/dist/es5/3d-tiles-attributes-worker.js.map +1 -1
  19. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js +33 -22
  20. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
  21. package/dist/es5/constants.js +9 -0
  22. package/dist/es5/constants.js.map +1 -0
  23. package/dist/es5/converter-cli.js +306 -0
  24. package/dist/es5/converter-cli.js.map +1 -0
  25. package/dist/es5/deps-installer/deps-installer.js.map +1 -1
  26. package/dist/es5/i3s-attributes-worker.js +1 -1
  27. package/dist/es5/i3s-attributes-worker.js.map +1 -1
  28. package/dist/es5/i3s-converter/helpers/geometry-converter.js +4 -4
  29. package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +1 -1
  30. package/dist/es5/i3s-converter/i3s-converter.js +84 -49
  31. package/dist/es5/i3s-converter/i3s-converter.js.map +1 -1
  32. package/dist/es5/i3s-converter/json-templates/layers.js +29 -0
  33. package/dist/es5/i3s-converter/json-templates/layers.js.map +1 -1
  34. package/dist/es5/index.js +0 -24
  35. package/dist/es5/index.js.map +1 -1
  36. package/dist/es5/pgm-loader.js +1 -1
  37. package/dist/es5/pgm-loader.js.map +1 -1
  38. package/dist/esm/3d-tiles-attributes-worker.js +1 -1
  39. package/dist/esm/3d-tiles-attributes-worker.js.map +1 -1
  40. package/dist/esm/3d-tiles-converter/3d-tiles-converter.js +7 -1
  41. package/dist/esm/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
  42. package/dist/esm/constants.js +2 -0
  43. package/dist/esm/constants.js.map +1 -0
  44. package/dist/esm/converter-cli.js +230 -0
  45. package/dist/esm/converter-cli.js.map +1 -0
  46. package/dist/esm/deps-installer/deps-installer.js.map +1 -1
  47. package/dist/esm/i3s-attributes-worker.js +1 -1
  48. package/dist/esm/i3s-attributes-worker.js.map +1 -1
  49. package/dist/esm/i3s-converter/helpers/geometry-converter.js +4 -4
  50. package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +1 -1
  51. package/dist/esm/i3s-converter/i3s-converter.js +57 -29
  52. package/dist/esm/i3s-converter/i3s-converter.js.map +1 -1
  53. package/dist/esm/i3s-converter/json-templates/layers.js +25 -0
  54. package/dist/esm/i3s-converter/json-templates/layers.js.map +1 -1
  55. package/dist/esm/index.js +0 -3
  56. package/dist/esm/index.js.map +1 -1
  57. package/dist/esm/pgm-loader.js +1 -1
  58. package/dist/esm/pgm-loader.js.map +1 -1
  59. package/dist/i3s-attributes-worker.js +1 -1
  60. package/dist/i3s-attributes-worker.js.map +2 -2
  61. package/dist/i3s-converter/helpers/geometry-converter.js +3 -3
  62. package/dist/i3s-converter/i3s-converter.d.ts +0 -2
  63. package/dist/i3s-converter/i3s-converter.d.ts.map +1 -1
  64. package/dist/i3s-converter/i3s-converter.js +42 -18
  65. package/dist/i3s-converter/json-templates/layers.d.ts +4 -0
  66. package/dist/i3s-converter/json-templates/layers.d.ts.map +1 -1
  67. package/dist/i3s-converter/json-templates/layers.js +24 -0
  68. package/dist/index.d.ts +0 -3
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +1 -7
  71. package/package.json +20 -18
  72. package/src/3d-tiles-converter/3d-tiles-converter.ts +7 -2
  73. package/src/constants.ts +2 -0
  74. package/src/converter-cli.ts +310 -0
  75. package/src/deps-installer/{deps-installer.js → deps-installer.ts} +11 -1
  76. package/src/i3s-converter/helpers/geometry-converter.ts +4 -4
  77. package/src/i3s-converter/i3s-converter.ts +46 -29
  78. package/src/i3s-converter/json-templates/layers.ts +25 -0
  79. package/src/index.ts +0 -5
  80. package/dist/es5/deps-installer/deps-installer.d.ts +0 -10
  81. package/dist/esm/deps-installer/deps-installer.d.ts +0 -10
  82. package/src/deps-installer/deps-installer.d.ts +0 -10
@@ -5,8 +5,18 @@ import {join} from 'path';
5
5
 
6
6
  const PGM_LINK = 'https://raw.githubusercontent.com/visgl/deck.gl-data/master/egm/egm2008-5.zip';
7
7
 
8
+ /**
9
+ * Install external dependencies for converter:
10
+ * * PGM file (implemented);
11
+ * * Draco library (not implemented);
12
+ * * 7z archiver (not implemented);
13
+ */
8
14
  export class DepsInstaller {
9
- async install(path = '') {
15
+ /**
16
+ * Run instalation
17
+ * @param path destination folder
18
+ */
19
+ async install(path: string = ''): Promise<void> {
10
20
  console.log('Installing "EGM2008-5" model...'); // eslint-disable-line no-console
11
21
  const fileMap = await load(PGM_LINK, ZipLoader, {});
12
22
 
@@ -371,6 +371,10 @@ function getCompositeTransformationMatrix(node, matrix) {
371
371
  transformationMatrix = matrix.multiplyRight(nodeMatrix);
372
372
  }
373
373
 
374
+ if (translation) {
375
+ transformationMatrix = transformationMatrix.translate(translation);
376
+ }
377
+
374
378
  if (rotation) {
375
379
  transformationMatrix = transformationMatrix.rotateXYZ(rotation);
376
380
  }
@@ -379,10 +383,6 @@ function getCompositeTransformationMatrix(node, matrix) {
379
383
  transformationMatrix = transformationMatrix.scale(scale);
380
384
  }
381
385
 
382
- if (translation) {
383
- transformationMatrix = transformationMatrix.translate(translation);
384
- }
385
-
386
386
  return transformationMatrix;
387
387
  }
388
388
 
@@ -16,7 +16,7 @@ import type {
16
16
  PopupInfo,
17
17
  FieldInfo
18
18
  } from '@loaders.gl/i3s';
19
- import {load, encode, fetchFile, getLoaderOptions} from '@loaders.gl/core';
19
+ import {load, encode, fetchFile, getLoaderOptions, isBrowser} from '@loaders.gl/core';
20
20
  import {Tileset3D} from '@loaders.gl/tiles';
21
21
  import {CesiumIonLoader, Tiles3DLoader} from '@loaders.gl/3d-tiles';
22
22
  import {Geoid} from '@math.gl/geoid';
@@ -48,7 +48,7 @@ import {NODE as nodeTemplate} from './json-templates/node';
48
48
  import {SHARED_RESOURCES as sharedResourcesTemplate} from './json-templates/shared-resources';
49
49
  import {validateNodeBoundingVolumes} from './helpers/node-debug';
50
50
  import TileHeader from '@loaders.gl/tiles/src/tileset/tile-3d';
51
- import {KTX2BasisWriter} from '@loaders.gl/textures';
51
+ import {KTX2BasisWriterWorker} from '@loaders.gl/textures';
52
52
  import {LoaderWithParser} from '@loaders.gl/loader-utils';
53
53
  import {I3SMaterialDefinition, TextureSetDefinitionFormats} from '@loaders.gl/i3s/src/types';
54
54
  import {ImageWriter} from '@loaders.gl/images';
@@ -58,9 +58,10 @@ import {getWorkerURL, WorkerFarm} from '@loaders.gl/worker-utils';
58
58
  import {DracoWriterWorker} from '@loaders.gl/draco';
59
59
  import WriteQueue from '../lib/utils/write-queue';
60
60
  import {I3SAttributesWorker} from '../i3s-attributes-worker';
61
+ import {BROWSER_ERROR_MESSAGE} from '../constants';
61
62
 
62
63
  const ION_DEFAULT_TOKEN =
63
- process.env.IonToken || // eslint-disable-line
64
+ process.env?.IonToken || // eslint-disable-line
64
65
  'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJlYWMxMzcyYy0zZjJkLTQwODctODNlNi01MDRkZmMzMjIxOWIiLCJpZCI6OTYyMCwic2NvcGVzIjpbImFzbCIsImFzciIsImdjIl0sImlhdCI6MTU2Mjg2NjI3M30.1FNiClUyk00YH_nWfSGpiQAjR5V2OvREDq1PJ5QMjWQ'; // eslint-disable-line
65
66
  const HARDCODED_NODES_PER_PAGE = 64;
66
67
  const _3D_TILES = '3DTILES';
@@ -148,9 +149,11 @@ export default class I3SConverter {
148
149
  validate?: boolean;
149
150
  generateTextures?: boolean;
150
151
  generateBoundingVolumes?: boolean;
151
- /** @deprecated */
152
- inputType?: string;
153
152
  }): Promise<any> {
153
+ if (isBrowser) {
154
+ console.log(BROWSER_ERROR_MESSAGE);
155
+ return BROWSER_ERROR_MESSAGE;
156
+ }
154
157
  this.conversionStartTime = process.hrtime();
155
158
  const {
156
159
  tilesetName,
@@ -185,24 +188,27 @@ export default class I3SConverter {
185
188
 
186
189
  await this.loadWorkers();
187
190
 
188
- const preloadOptions = await this._fetchPreloadOptions();
189
- const tilesetOptions: Tileset3DProps = {loadOptions: {basis: {format: 'rgba32'}}};
190
- if (preloadOptions.headers) {
191
- tilesetOptions.loadOptions!.fetch = {headers: preloadOptions.headers};
191
+ try {
192
+ const preloadOptions = await this._fetchPreloadOptions();
193
+ const tilesetOptions: Tileset3DProps = {loadOptions: {basis: {format: 'rgba32'}}};
194
+ if (preloadOptions.headers) {
195
+ tilesetOptions.loadOptions!.fetch = {headers: preloadOptions.headers};
196
+ }
197
+ Object.assign(tilesetOptions, preloadOptions);
198
+ const sourceTilesetJson = await load(inputUrl, this.Loader, tilesetOptions.loadOptions);
199
+ // console.log(tilesetJson); // eslint-disable-line
200
+ this.sourceTileset = new Tileset3D(sourceTilesetJson, tilesetOptions);
201
+
202
+ await this._createAndSaveTileset(outputPath, tilesetName);
203
+ await this._finishConversion({slpk: Boolean(slpk), outputPath, tilesetName});
204
+ return sourceTilesetJson;
205
+ } catch (error) {
206
+ throw error;
207
+ } finally {
208
+ // Clean up worker pools
209
+ const workerFarm = WorkerFarm.getWorkerFarm({});
210
+ workerFarm.destroy();
192
211
  }
193
- Object.assign(tilesetOptions, preloadOptions);
194
- const sourceTilesetJson = await load(inputUrl, this.Loader, tilesetOptions.loadOptions);
195
- // console.log(tilesetJson); // eslint-disable-line
196
- this.sourceTileset = new Tileset3D(sourceTilesetJson, tilesetOptions);
197
-
198
- await this._createAndSaveTileset(outputPath, tilesetName);
199
- await this._finishConversion({slpk: Boolean(slpk), outputPath, tilesetName});
200
-
201
- // Clean up worker pools
202
- const workerFarm = WorkerFarm.getWorkerFarm({});
203
- workerFarm.destroy();
204
-
205
- return sourceTilesetJson;
206
212
  }
207
213
 
208
214
  /**
@@ -278,9 +284,9 @@ export default class I3SConverter {
278
284
  nodePages: {
279
285
  nodesPerPage: HARDCODED_NODES_PER_PAGE
280
286
  },
281
- compressGeometry: this.options.draco
287
+ compressGeometry: this.options.draco,
288
+ fullExtent
282
289
  };
283
-
284
290
  this.layers0 = transform(layers0data, layersTemplate());
285
291
  }
286
292
 
@@ -932,7 +938,13 @@ export default class I3SConverter {
932
938
 
933
939
  if (this.generateTextures) {
934
940
  formats.push({name: '1', format: 'ktx2'});
935
- const ktx2TextureData = new Uint8Array(await encode(texture.image, KTX2BasisWriter));
941
+ const ktx2TextureData = encode(texture.image, KTX2BasisWriterWorker, {
942
+ ...KTX2BasisWriterWorker.options,
943
+ source: this.workerSource.ktx2,
944
+ reuseWorkers: true,
945
+ _nodeWorkers: true
946
+ });
947
+
936
948
  await this.writeTextureFile(ktx2TextureData, '1', 'ktx2', childPath, slpkChildPath);
937
949
  }
938
950
 
@@ -945,9 +957,7 @@ export default class I3SConverter {
945
957
 
946
958
  if (this.generateTextures) {
947
959
  formats.push({name: '0', format: 'jpg'});
948
- const decodedFromKTX2TextureData = new Uint8Array(
949
- await encode(texture.image!.data[0], ImageWriter)
950
- );
960
+ const decodedFromKTX2TextureData = encode(texture.image!.data[0], ImageWriter);
951
961
  await this.writeTextureFile(
952
962
  decodedFromKTX2TextureData,
953
963
  '0',
@@ -974,7 +984,7 @@ export default class I3SConverter {
974
984
  * @param slpkChildPath
975
985
  */
976
986
  private async writeTextureFile(
977
- textureData: ArrayBuffer,
987
+ textureData: Promise<ArrayBuffer>,
978
988
  name: string,
979
989
  format: 'jpg' | 'png' | 'ktx2',
980
990
  childPath: string,
@@ -1346,6 +1356,13 @@ export default class I3SConverter {
1346
1356
  this.workerSource.draco = source;
1347
1357
  }
1348
1358
 
1359
+ if (this.generateTextures) {
1360
+ const url = getWorkerURL(KTX2BasisWriterWorker, {...getLoaderOptions()});
1361
+ const sourceResponse = await fetchFile(url);
1362
+ const source = await sourceResponse.text();
1363
+ this.workerSource.ktx2 = source;
1364
+ }
1365
+
1349
1366
  const i3sAttributesWorkerUrl = getWorkerURL(I3SAttributesWorker, {...getLoaderOptions()});
1350
1367
  const sourceResponse = await fetchFile(i3sAttributesWorkerUrl);
1351
1368
  const source = await sourceResponse.text();
@@ -115,6 +115,27 @@ const NODE_PAGES = () => ({
115
115
  }
116
116
  });
117
117
 
118
+ const FULL_EXTENT = () => ({
119
+ xmin: {
120
+ path: 'xmin'
121
+ },
122
+ ymin: {
123
+ path: 'ymin'
124
+ },
125
+ xmax: {
126
+ path: 'xmax'
127
+ },
128
+ ymax: {
129
+ path: 'ymax'
130
+ },
131
+ zmin: {
132
+ path: 'zmin'
133
+ },
134
+ zmax: {
135
+ path: 'zmax'
136
+ }
137
+ });
138
+
118
139
  export const LAYERS = () => ({
119
140
  version: {
120
141
  path: 'version',
@@ -147,6 +168,10 @@ export const LAYERS = () => ({
147
168
  path: 'store',
148
169
  transform: (val) => transform(val, STORE)
149
170
  },
171
+ fullExtent: {
172
+ path: 'fullExtent',
173
+ transform: (val) => transform(val, FULL_EXTENT())
174
+ },
150
175
  heightModelInfo: {
151
176
  path: 'heightModelInfo',
152
177
  transform: (val) => transform(val, HEIGHT_MODEL_INFO())
package/src/index.ts CHANGED
@@ -1,7 +1,2 @@
1
1
  export {default as I3SConverter} from './i3s-converter/i3s-converter';
2
- export {default as NodePages} from './i3s-converter/helpers/node-pages';
3
-
4
2
  export {default as Tiles3DConverter} from './3d-tiles-converter/3d-tiles-converter';
5
-
6
- export {DepsInstaller} from './deps-installer/deps-installer';
7
- export {prepareDataForAttributesConversion} from './i3s-converter/helpers/gltf-attributes';
@@ -1,10 +0,0 @@
1
- /**
2
- * Install external dependencies for converter:
3
- * * PGM file (implemented);
4
- * * Draco library (not implemented);
5
- * * 7z archiver (not implemented);
6
- */
7
- export class DepsInstaller {
8
- // Run installation
9
- install(path?: string): Promise<void>;
10
- }
@@ -1,10 +0,0 @@
1
- /**
2
- * Install external dependencies for converter:
3
- * * PGM file (implemented);
4
- * * Draco library (not implemented);
5
- * * 7z archiver (not implemented);
6
- */
7
- export class DepsInstaller {
8
- // Run installation
9
- install(path?: string): Promise<void>;
10
- }
@@ -1,10 +0,0 @@
1
- /**
2
- * Install external dependencies for converter:
3
- * * PGM file (implemented);
4
- * * Draco library (not implemented);
5
- * * 7z archiver (not implemented);
6
- */
7
- export class DepsInstaller {
8
- // Run installation
9
- install(path?: string): Promise<void>;
10
- }