@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.
- package/dist/3d-tiles-attributes-worker.js +1 -1
- package/dist/3d-tiles-attributes-worker.js.map +1 -1
- package/dist/3d-tiles-converter/3d-tiles-converter.d.ts +1 -1
- package/dist/3d-tiles-converter/3d-tiles-converter.d.ts.map +1 -1
- package/dist/3d-tiles-converter/3d-tiles-converter.js +5 -0
- package/dist/constants.d.ts +2 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +4 -0
- package/dist/converter-cli.d.ts +2 -0
- package/dist/converter-cli.d.ts.map +1 -0
- package/dist/converter-cli.js +232 -0
- package/dist/converter.min.js +68 -68
- package/dist/deps-installer/deps-installer.d.ts +11 -1
- package/dist/deps-installer/deps-installer.d.ts.map +1 -1
- package/dist/deps-installer/deps-installer.js +10 -0
- package/dist/dist.min.js +147 -171
- package/dist/es5/3d-tiles-attributes-worker.js +1 -1
- package/dist/es5/3d-tiles-attributes-worker.js.map +1 -1
- package/dist/es5/3d-tiles-converter/3d-tiles-converter.js +33 -22
- package/dist/es5/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
- package/dist/es5/constants.js +9 -0
- package/dist/es5/constants.js.map +1 -0
- package/dist/es5/converter-cli.js +306 -0
- package/dist/es5/converter-cli.js.map +1 -0
- package/dist/es5/deps-installer/deps-installer.js.map +1 -1
- package/dist/es5/i3s-attributes-worker.js +1 -1
- package/dist/es5/i3s-attributes-worker.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/geometry-converter.js +4 -4
- package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +1 -1
- package/dist/es5/i3s-converter/i3s-converter.js +84 -49
- package/dist/es5/i3s-converter/i3s-converter.js.map +1 -1
- package/dist/es5/i3s-converter/json-templates/layers.js +29 -0
- package/dist/es5/i3s-converter/json-templates/layers.js.map +1 -1
- package/dist/es5/index.js +0 -24
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/pgm-loader.js +1 -1
- package/dist/es5/pgm-loader.js.map +1 -1
- package/dist/esm/3d-tiles-attributes-worker.js +1 -1
- package/dist/esm/3d-tiles-attributes-worker.js.map +1 -1
- package/dist/esm/3d-tiles-converter/3d-tiles-converter.js +7 -1
- package/dist/esm/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
- package/dist/esm/constants.js +2 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/converter-cli.js +230 -0
- package/dist/esm/converter-cli.js.map +1 -0
- package/dist/esm/deps-installer/deps-installer.js.map +1 -1
- package/dist/esm/i3s-attributes-worker.js +1 -1
- package/dist/esm/i3s-attributes-worker.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/geometry-converter.js +4 -4
- package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +1 -1
- package/dist/esm/i3s-converter/i3s-converter.js +57 -29
- package/dist/esm/i3s-converter/i3s-converter.js.map +1 -1
- package/dist/esm/i3s-converter/json-templates/layers.js +25 -0
- package/dist/esm/i3s-converter/json-templates/layers.js.map +1 -1
- package/dist/esm/index.js +0 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/pgm-loader.js +1 -1
- package/dist/esm/pgm-loader.js.map +1 -1
- package/dist/i3s-attributes-worker.js +1 -1
- package/dist/i3s-attributes-worker.js.map +2 -2
- package/dist/i3s-converter/helpers/geometry-converter.js +3 -3
- package/dist/i3s-converter/i3s-converter.d.ts +0 -2
- package/dist/i3s-converter/i3s-converter.d.ts.map +1 -1
- package/dist/i3s-converter/i3s-converter.js +42 -18
- package/dist/i3s-converter/json-templates/layers.d.ts +4 -0
- package/dist/i3s-converter/json-templates/layers.d.ts.map +1 -1
- package/dist/i3s-converter/json-templates/layers.js +24 -0
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -7
- package/package.json +20 -18
- package/src/3d-tiles-converter/3d-tiles-converter.ts +7 -2
- package/src/constants.ts +2 -0
- package/src/converter-cli.ts +310 -0
- package/src/deps-installer/{deps-installer.js → deps-installer.ts} +11 -1
- package/src/i3s-converter/helpers/geometry-converter.ts +4 -4
- package/src/i3s-converter/i3s-converter.ts +46 -29
- package/src/i3s-converter/json-templates/layers.ts +25 -0
- package/src/index.ts +0 -5
- package/dist/es5/deps-installer/deps-installer.d.ts +0 -10
- package/dist/esm/deps-installer/deps-installer.d.ts +0 -10
- 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
|
-
|
|
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 {
|
|
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
|
|
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
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
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 =
|
|
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 =
|
|
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
|
-
}
|