@loaders.gl/tile-converter 3.3.0-alpha.5 → 3.3.0-alpha.6
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 +2 -3
- package/dist/3d-tiles-attributes-worker.js.map +3 -3
- package/dist/converter.min.js +23 -20
- package/dist/dist.min.js +38221 -46898
- package/dist/es5/3d-tiles-attributes-worker.js +3 -6
- package/dist/es5/3d-tiles-attributes-worker.js.map +1 -1
- package/dist/es5/3d-tiles-converter/3d-tiles-converter.js +12 -111
- package/dist/es5/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
- package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js +32 -72
- package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -1
- package/dist/es5/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +0 -8
- package/dist/es5/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +1 -1
- package/dist/es5/3d-tiles-converter/helpers/texture-atlas.js +0 -5
- package/dist/es5/3d-tiles-converter/helpers/texture-atlas.js.map +1 -1
- package/dist/es5/3d-tiles-converter/json-templates/tileset.js +0 -6
- package/dist/es5/3d-tiles-converter/json-templates/tileset.js.map +1 -1
- package/dist/es5/bundle.js +0 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/constants.js.map +1 -1
- package/dist/es5/converter-cli.js +2 -53
- package/dist/es5/converter-cli.js.map +1 -1
- package/dist/es5/deps-installer/deps-installer.js +5 -35
- package/dist/es5/deps-installer/deps-installer.js.map +1 -1
- package/dist/es5/i3s-attributes-worker.js +3 -6
- package/dist/es5/i3s-attributes-worker.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js +2 -28
- package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/coordinate-converter.js +2 -20
- package/dist/es5/i3s-converter/helpers/coordinate-converter.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/create-scene-server-path.js +0 -11
- package/dist/es5/i3s-converter/helpers/create-scene-server-path.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/feature-attributes.js +5 -34
- package/dist/es5/i3s-converter/helpers/feature-attributes.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/geometry-attributes.js +13 -45
- package/dist/es5/i3s-converter/helpers/geometry-attributes.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/geometry-converter.js +26 -221
- package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/gltf-attributes.js +2 -16
- package/dist/es5/i3s-converter/helpers/gltf-attributes.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/node-debug.js +4 -23
- package/dist/es5/i3s-converter/helpers/node-debug.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/node-pages.js +50 -86
- package/dist/es5/i3s-converter/helpers/node-pages.js.map +1 -1
- package/dist/es5/i3s-converter/i3s-converter.js +43 -360
- package/dist/es5/i3s-converter/i3s-converter.js.map +1 -1
- package/dist/es5/i3s-converter/json-templates/layers.js +1 -15
- package/dist/es5/i3s-converter/json-templates/layers.js.map +1 -1
- package/dist/es5/i3s-converter/json-templates/metadata.js +0 -2
- package/dist/es5/i3s-converter/json-templates/metadata.js.map +1 -1
- package/dist/es5/i3s-converter/json-templates/node.js +2 -12
- package/dist/es5/i3s-converter/json-templates/node.js.map +1 -1
- package/dist/es5/i3s-converter/json-templates/scene-server.js +0 -2
- package/dist/es5/i3s-converter/json-templates/scene-server.js.map +1 -1
- package/dist/es5/i3s-converter/json-templates/shared-resources.js +6 -29
- package/dist/es5/i3s-converter/json-templates/shared-resources.js.map +1 -1
- package/dist/es5/i3s-converter/json-templates/store.js.map +1 -1
- package/dist/es5/i3s-converter/types.js.map +1 -1
- package/dist/es5/i3s-server/app.js +0 -5
- package/dist/es5/i3s-server/app.js.map +1 -1
- package/dist/es5/i3s-server/controllers/index-controller.js +0 -16
- package/dist/es5/i3s-server/controllers/index-controller.js.map +1 -1
- package/dist/es5/i3s-server/routes/index.js +1 -10
- package/dist/es5/i3s-server/routes/index.js.map +1 -1
- package/dist/es5/index.js +0 -3
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/utils/compress-util.js +19 -74
- package/dist/es5/lib/utils/compress-util.js.map +1 -1
- package/dist/es5/lib/utils/file-utils.js +10 -38
- package/dist/es5/lib/utils/file-utils.js.map +1 -1
- package/dist/es5/lib/utils/lod-conversion-utils.js +0 -7
- package/dist/es5/lib/utils/lod-conversion-utils.js.map +1 -1
- package/dist/es5/lib/utils/queue.js +0 -14
- package/dist/es5/lib/utils/queue.js.map +1 -1
- package/dist/es5/lib/utils/statistic-utills.js +1 -46
- package/dist/es5/lib/utils/statistic-utills.js.map +1 -1
- package/dist/es5/lib/utils/write-queue.js +0 -52
- package/dist/es5/lib/utils/write-queue.js.map +1 -1
- package/dist/es5/pgm-loader.js +1 -8
- package/dist/es5/pgm-loader.js.map +1 -1
- package/dist/es5/workers/3d-tiles-attributes-worker.js +1 -8
- package/dist/es5/workers/3d-tiles-attributes-worker.js.map +1 -1
- package/dist/es5/workers/i3s-attributes-worker.js +1 -9
- package/dist/es5/workers/i3s-attributes-worker.js.map +1 -1
- package/dist/esm/3d-tiles-attributes-worker.js +3 -1
- package/dist/esm/3d-tiles-attributes-worker.js.map +1 -1
- package/dist/esm/3d-tiles-converter/3d-tiles-converter.js +8 -40
- package/dist/esm/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
- package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js +7 -38
- package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -1
- package/dist/esm/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +1 -0
- package/dist/esm/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +1 -1
- package/dist/esm/3d-tiles-converter/helpers/texture-atlas.js +1 -4
- package/dist/esm/3d-tiles-converter/helpers/texture-atlas.js.map +1 -1
- package/dist/esm/3d-tiles-converter/json-templates/tileset.js +0 -3
- package/dist/esm/3d-tiles-converter/json-templates/tileset.js.map +1 -1
- package/dist/esm/bundle.js +1 -1
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/converter-cli.js +3 -38
- package/dist/esm/converter-cli.js.map +1 -1
- package/dist/esm/deps-installer/deps-installer.js +6 -7
- package/dist/esm/deps-installer/deps-installer.js.map +1 -1
- package/dist/esm/i3s-attributes-worker.js +3 -1
- package/dist/esm/i3s-attributes-worker.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js +4 -23
- package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/coordinate-converter.js +4 -6
- package/dist/esm/i3s-converter/helpers/coordinate-converter.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/create-scene-server-path.js +1 -0
- package/dist/esm/i3s-converter/helpers/create-scene-server-path.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/feature-attributes.js +6 -20
- package/dist/esm/i3s-converter/helpers/feature-attributes.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/geometry-attributes.js +3 -22
- package/dist/esm/i3s-converter/helpers/geometry-attributes.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/geometry-converter.js +28 -139
- package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/gltf-attributes.js +7 -12
- package/dist/esm/i3s-converter/helpers/gltf-attributes.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/node-debug.js +3 -13
- package/dist/esm/i3s-converter/helpers/node-debug.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/node-pages.js +2 -21
- package/dist/esm/i3s-converter/helpers/node-pages.js.map +1 -1
- package/dist/esm/i3s-converter/i3s-converter.js +49 -137
- package/dist/esm/i3s-converter/i3s-converter.js.map +1 -1
- package/dist/esm/i3s-converter/json-templates/layers.js +1 -11
- package/dist/esm/i3s-converter/json-templates/layers.js.map +1 -1
- package/dist/esm/i3s-converter/json-templates/metadata.js.map +1 -1
- package/dist/esm/i3s-converter/json-templates/node.js +0 -4
- package/dist/esm/i3s-converter/json-templates/node.js.map +1 -1
- package/dist/esm/i3s-converter/json-templates/scene-server.js.map +1 -1
- package/dist/esm/i3s-converter/json-templates/shared-resources.js +0 -12
- package/dist/esm/i3s-converter/json-templates/shared-resources.js.map +1 -1
- package/dist/esm/i3s-converter/json-templates/store.js.map +1 -1
- package/dist/esm/i3s-converter/types.js.map +1 -1
- package/dist/esm/i3s-server/app.js +0 -5
- package/dist/esm/i3s-server/app.js.map +1 -1
- package/dist/esm/i3s-server/controllers/index-controller.js +0 -5
- package/dist/esm/i3s-server/controllers/index-controller.js.map +1 -1
- package/dist/esm/i3s-server/routes/index.js +0 -3
- package/dist/esm/i3s-server/routes/index.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/utils/compress-util.js +19 -12
- package/dist/esm/lib/utils/compress-util.js.map +1 -1
- package/dist/esm/lib/utils/file-utils.js +10 -8
- package/dist/esm/lib/utils/file-utils.js.map +1 -1
- package/dist/esm/lib/utils/lod-conversion-utils.js +2 -6
- package/dist/esm/lib/utils/lod-conversion-utils.js.map +1 -1
- package/dist/esm/lib/utils/queue.js +0 -4
- package/dist/esm/lib/utils/queue.js.map +1 -1
- package/dist/esm/lib/utils/statistic-utills.js +0 -11
- package/dist/esm/lib/utils/statistic-utills.js.map +1 -1
- package/dist/esm/lib/utils/write-queue.js +5 -23
- package/dist/esm/lib/utils/write-queue.js.map +1 -1
- package/dist/esm/pgm-loader.js +3 -1
- package/dist/esm/pgm-loader.js.map +1 -1
- package/dist/esm/workers/3d-tiles-attributes-worker.js +4 -1
- package/dist/esm/workers/3d-tiles-attributes-worker.js.map +1 -1
- package/dist/esm/workers/i3s-attributes-worker.js +4 -1
- package/dist/esm/workers/i3s-attributes-worker.js.map +1 -1
- package/dist/i3s-attributes-worker.js +2 -3
- package/dist/i3s-attributes-worker.js.map +3 -3
- package/dist/i3s-converter/helpers/geometry-converter.d.ts.map +1 -1
- package/dist/i3s-converter/helpers/geometry-converter.js +2 -0
- package/dist/i3s-converter/i3s-converter.js +5 -1
- package/dist/pgm-loader.d.ts.map +1 -1
- package/dist/pgm-loader.js +2 -1
- package/package.json +15 -15
- package/src/i3s-converter/helpers/geometry-converter.ts +2 -0
- package/src/pgm-loader.ts +2 -2
|
@@ -1,19 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
6
|
-
|
|
7
5
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
8
|
-
|
|
9
6
|
var _workerUtils = require("@loaders.gl/worker-utils");
|
|
10
|
-
|
|
11
7
|
var _geometryConverter = require("../i3s-converter/helpers/geometry-converter");
|
|
12
|
-
|
|
13
8
|
(0, _workerUtils.createWorker)(function () {
|
|
14
9
|
var _ref = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(data) {
|
|
15
10
|
var options,
|
|
16
|
-
|
|
11
|
+
_args = arguments;
|
|
17
12
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
18
13
|
while (1) {
|
|
19
14
|
switch (_context.prev = _context.next) {
|
|
@@ -21,10 +16,8 @@ var _geometryConverter = require("../i3s-converter/helpers/geometry-converter");
|
|
|
21
16
|
options = _args.length > 1 && _args[1] !== undefined ? _args[1] : {};
|
|
22
17
|
_context.next = 3;
|
|
23
18
|
return (0, _geometryConverter.convertAttributes)(data, options.useCartesianPositions);
|
|
24
|
-
|
|
25
19
|
case 3:
|
|
26
20
|
return _context.abrupt("return", _context.sent);
|
|
27
|
-
|
|
28
21
|
case 4:
|
|
29
22
|
case "end":
|
|
30
23
|
return _context.stop();
|
|
@@ -32,7 +25,6 @@ var _geometryConverter = require("../i3s-converter/helpers/geometry-converter");
|
|
|
32
25
|
}
|
|
33
26
|
}, _callee);
|
|
34
27
|
}));
|
|
35
|
-
|
|
36
28
|
return function (_x) {
|
|
37
29
|
return _ref.apply(this, arguments);
|
|
38
30
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"i3s-attributes-worker.js","names":["createWorker","data","options","convertAttributes","useCartesianPositions"],"sources":["../../../src/workers/i3s-attributes-worker.ts"],"sourcesContent":["import {createWorker} from '@loaders.gl/worker-utils';\nimport {convertAttributes} from '../i3s-converter/helpers/geometry-converter';\n\ncreateWorker(\n async (data, options = {}) => await convertAttributes(data, options.useCartesianPositions)\n);\n"],"mappings":";;;;;AAAA;AACA;AAEA,IAAAA,yBAAY;EAAA,qEACV,iBAAOC,IAAI;IAAA;MAAA;IAAA;MAAA;QAAA;UAAA;YAAEC,OAAO,2DAAG,CAAC,CAAC;YAAA;YAAA,OAAW,IAAAC,oCAAiB,EAACF,IAAI,EAAEC,OAAO,CAACE,qBAAqB,CAAC;UAAA;YAAA;UAAA;UAAA;YAAA;QAAA;MAAA;IAAA;EAAA;EAAA;IAAA;EAAA;AAAA,IAC3F"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { processOnWorker } from '@loaders.gl/worker-utils';
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
const VERSION = typeof "3.3.0-alpha.6" !== 'undefined' ? "3.3.0-alpha.6" : 'latest';
|
|
3
4
|
export const Tile3dAttributesWorker = {
|
|
4
5
|
id: '3d-tiles-attributes',
|
|
5
6
|
name: '3DTiles Attributes Worker',
|
|
@@ -9,6 +10,7 @@ export const Tile3dAttributesWorker = {
|
|
|
9
10
|
featureAttributes: null
|
|
10
11
|
}
|
|
11
12
|
};
|
|
13
|
+
|
|
12
14
|
export function transform3DTilesAttributesOnWorker(i3sAttributesData, options) {
|
|
13
15
|
return processOnWorker(Tile3dAttributesWorker, i3sAttributesData, options);
|
|
14
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"3d-tiles-attributes-worker.js","names":["processOnWorker","VERSION","Tile3dAttributesWorker","id","name","module","version","options","featureAttributes","transform3DTilesAttributesOnWorker","i3sAttributesData","_typecheckI3SAttributesWorker"],"sources":["../../src/3d-tiles-attributes-worker.ts"],"sourcesContent":["import type {WorkerObject} from '@loaders.gl/worker-utils';\nimport type {FeatureAttribute} from '@loaders.gl/i3s';\n\nimport {processOnWorker} from '@loaders.gl/worker-utils';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type Tile3DAttributesWorkerOptions = {\n featureAttributes: FeatureAttribute | null;\n source: string;\n};\n\nexport type I3SAttributesData = {\n tileContent: any;\n textureFormat: string;\n};\n\n/**\n * I3S Attributes Worker to handle B3DM object\n */\nexport const Tile3dAttributesWorker = {\n id: '3d-tiles-attributes',\n name: '3DTiles Attributes Worker',\n module: 'tile-converter',\n version: VERSION,\n options: {\n featureAttributes: null\n }\n};\n\n/**\n * Performs I3S attributes transformation\n */\nexport function transform3DTilesAttributesOnWorker(\n i3sAttributesData: I3SAttributesData,\n options: Tile3DAttributesWorkerOptions\n): Promise<ArrayBuffer> {\n return processOnWorker(Tile3dAttributesWorker, i3sAttributesData, options);\n}\n\nexport const _typecheckI3SAttributesWorker: WorkerObject = Tile3dAttributesWorker;\n"],"mappings":"AAGA,SAAQA,eAAe,QAAO,0BAA0B;;AAIxD,MAAMC,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;AAe3E,OAAO,MAAMC,sBAAsB,GAAG;EACpCC,EAAE,EAAE,qBAAqB;EACzBC,IAAI,EAAE,2BAA2B;EACjCC,MAAM,EAAE,gBAAgB;EACxBC,OAAO,EAAEL,OAAO;EAChBM,OAAO,EAAE;IACPC,iBAAiB,EAAE;EACrB;AACF,CAAC;;AAKD,OAAO,SAASC,kCAAkC,CAChDC,iBAAoC,EACpCH,OAAsC,EAChB;EACtB,OAAOP,eAAe,CAACE,sBAAsB,EAAEQ,iBAAiB,EAAEH,OAAO,CAAC;AAC5E;AAEA,OAAO,MAAMI,6BAA2C,GAAGT,sBAAsB"}
|
|
@@ -16,24 +16,17 @@ import { Tile3dAttributesWorker, transform3DTilesAttributesOnWorker } from '../3
|
|
|
16
16
|
import { getWorkerURL, WorkerFarm } from '@loaders.gl/worker-utils';
|
|
17
17
|
import { BROWSER_ERROR_MESSAGE } from '../constants';
|
|
18
18
|
const I3S = 'I3S';
|
|
19
|
+
|
|
19
20
|
export default class Tiles3DConverter {
|
|
20
21
|
constructor() {
|
|
21
22
|
_defineProperty(this, "options", void 0);
|
|
22
|
-
|
|
23
23
|
_defineProperty(this, "tilesetPath", void 0);
|
|
24
|
-
|
|
25
24
|
_defineProperty(this, "vertexCounter", void 0);
|
|
26
|
-
|
|
27
25
|
_defineProperty(this, "conversionStartTime", void 0);
|
|
28
|
-
|
|
29
26
|
_defineProperty(this, "geoidHeightModel", void 0);
|
|
30
|
-
|
|
31
27
|
_defineProperty(this, "sourceTileset", void 0);
|
|
32
|
-
|
|
33
28
|
_defineProperty(this, "attributeStorageInfo", void 0);
|
|
34
|
-
|
|
35
29
|
_defineProperty(this, "workerSource", {});
|
|
36
|
-
|
|
37
30
|
this.options = {};
|
|
38
31
|
this.tilesetPath = '';
|
|
39
32
|
this.vertexCounter = 0;
|
|
@@ -49,7 +42,6 @@ export default class Tiles3DConverter {
|
|
|
49
42
|
console.log(BROWSER_ERROR_MESSAGE);
|
|
50
43
|
return BROWSER_ERROR_MESSAGE;
|
|
51
44
|
}
|
|
52
|
-
|
|
53
45
|
const {
|
|
54
46
|
inputUrl,
|
|
55
47
|
outputPath,
|
|
@@ -64,6 +56,7 @@ export default class Tiles3DConverter {
|
|
|
64
56
|
console.log('Loading egm file...');
|
|
65
57
|
this.geoidHeightModel = await load(egmFilePath, PGMLoader);
|
|
66
58
|
console.log('Loading egm file completed!');
|
|
59
|
+
|
|
67
60
|
await this.loadWorkers();
|
|
68
61
|
const sourceTilesetJson = await load(inputUrl, I3SLoader, {});
|
|
69
62
|
this.sourceTileset = new Tileset3D(sourceTilesetJson, {
|
|
@@ -81,18 +74,15 @@ export default class Tiles3DConverter {
|
|
|
81
74
|
});
|
|
82
75
|
await this.sourceTileset.tilesetInitializationPromise;
|
|
83
76
|
const rootNode = this.sourceTileset.root;
|
|
84
|
-
|
|
85
77
|
if (!rootNode.header.obb) {
|
|
86
78
|
rootNode.header.obb = createObbFromMbs(rootNode.header.mbs);
|
|
87
79
|
}
|
|
88
|
-
|
|
89
80
|
this.tilesetPath = join("".concat(outputPath), "".concat(tilesetName));
|
|
90
81
|
this.attributeStorageInfo = sourceTilesetJson.attributeStorageInfo;
|
|
91
|
-
|
|
92
82
|
try {
|
|
93
83
|
await removeDir(this.tilesetPath);
|
|
94
|
-
} catch (e) {
|
|
95
|
-
|
|
84
|
+
} catch (e) {
|
|
85
|
+
}
|
|
96
86
|
const rootTile = {
|
|
97
87
|
boundingVolume: {
|
|
98
88
|
box: i3sObbTo3dTilesObb(rootNode.header.obb, this.geoidHeightModel)
|
|
@@ -105,7 +95,6 @@ export default class Tiles3DConverter {
|
|
|
105
95
|
root: rootTile
|
|
106
96
|
}, tilesetTemplate());
|
|
107
97
|
await writeFile(this.tilesetPath, JSON.stringify(tileset), 'tileset.json');
|
|
108
|
-
|
|
109
98
|
this._finishConversion({
|
|
110
99
|
slpk: false,
|
|
111
100
|
outputPath,
|
|
@@ -119,22 +108,17 @@ export default class Tiles3DConverter {
|
|
|
119
108
|
async convertChildNode(parentSourceNode, parentNode, level, childNodeInfo) {
|
|
120
109
|
const sourceChild = await this._loadChildNode(parentSourceNode, childNodeInfo);
|
|
121
110
|
parentSourceNode.children.push(sourceChild);
|
|
122
|
-
|
|
123
111
|
if (sourceChild.contentUrl) {
|
|
124
112
|
var _sourceChild$header;
|
|
125
|
-
|
|
126
113
|
await this.sourceTileset._loadTile(sourceChild);
|
|
127
114
|
this.vertexCounter += sourceChild.content.vertexCount;
|
|
128
115
|
let featureAttributes = null;
|
|
129
|
-
|
|
130
116
|
if (this.attributeStorageInfo) {
|
|
131
117
|
featureAttributes = await this._loadChildAttributes(sourceChild, this.attributeStorageInfo);
|
|
132
118
|
}
|
|
133
|
-
|
|
134
119
|
if (!sourceChild.header.obb) {
|
|
135
120
|
sourceChild.header.obb = createObbFromMbs(sourceChild.header.mbs);
|
|
136
121
|
}
|
|
137
|
-
|
|
138
122
|
const boundingVolume = {
|
|
139
123
|
box: i3sObbTo3dTilesObb(sourceChild.header.obb, this.geoidHeightModel)
|
|
140
124
|
};
|
|
@@ -168,19 +152,15 @@ export default class Tiles3DConverter {
|
|
|
168
152
|
if (this.options.maxDepth && level > this.options.maxDepth) {
|
|
169
153
|
return;
|
|
170
154
|
}
|
|
171
|
-
|
|
172
155
|
const promises = [];
|
|
173
|
-
|
|
174
156
|
for (const childNodeInfo of parentSourceNode.header.children || []) {
|
|
175
157
|
promises.push(this.convertChildNode(parentSourceNode, parentNode, level, childNodeInfo));
|
|
176
158
|
}
|
|
177
|
-
|
|
178
159
|
await Promise.all(promises);
|
|
179
160
|
}
|
|
180
161
|
|
|
181
162
|
async _loadChildNode(parentNode, childNodeInfo) {
|
|
182
163
|
let header;
|
|
183
|
-
|
|
184
164
|
if (this.sourceTileset.tileset.nodePages) {
|
|
185
165
|
console.log("Node conversion: ".concat(childNodeInfo.id));
|
|
186
166
|
header = await this.sourceTileset.tileset.nodePagesTile.formTileFromNodePages(childNodeInfo.id);
|
|
@@ -188,11 +168,10 @@ export default class Tiles3DConverter {
|
|
|
188
168
|
const {
|
|
189
169
|
loader
|
|
190
170
|
} = this.sourceTileset;
|
|
191
|
-
|
|
192
171
|
const nodeUrl = this._relativeUrlToFullUrl(parentNode.url, childNodeInfo.href);
|
|
193
|
-
|
|
194
172
|
const options = {
|
|
195
|
-
i3s: {
|
|
173
|
+
i3s: {
|
|
174
|
+
...this.sourceTileset.loadOptions,
|
|
196
175
|
isTileHeader: true,
|
|
197
176
|
loadContent: false
|
|
198
177
|
}
|
|
@@ -200,28 +179,23 @@ export default class Tiles3DConverter {
|
|
|
200
179
|
console.log("Node conversion: ".concat(nodeUrl));
|
|
201
180
|
header = await load(nodeUrl, loader, options);
|
|
202
181
|
}
|
|
203
|
-
|
|
204
182
|
return new Tile3D(this.sourceTileset, header, parentNode);
|
|
205
183
|
}
|
|
206
184
|
|
|
207
185
|
_relativeUrlToFullUrl(baseUrl, relativeUrl) {
|
|
208
186
|
let resultArray = baseUrl.split('/');
|
|
209
187
|
const relativeUrlArray = relativeUrl.split('/');
|
|
210
|
-
|
|
211
188
|
for (const folder of relativeUrlArray) {
|
|
212
189
|
switch (folder) {
|
|
213
190
|
case '.':
|
|
214
191
|
continue;
|
|
215
|
-
|
|
216
192
|
case '..':
|
|
217
193
|
resultArray = resultArray.slice(0, -1);
|
|
218
194
|
break;
|
|
219
|
-
|
|
220
195
|
default:
|
|
221
196
|
resultArray.push(folder);
|
|
222
197
|
}
|
|
223
198
|
}
|
|
224
|
-
|
|
225
199
|
return resultArray.join('/');
|
|
226
200
|
}
|
|
227
201
|
|
|
@@ -230,7 +204,6 @@ export default class Tiles3DConverter {
|
|
|
230
204
|
const {
|
|
231
205
|
attributeUrls
|
|
232
206
|
} = sourceChild.header;
|
|
233
|
-
|
|
234
207
|
for (let index = 0; index < attributeUrls.length; index++) {
|
|
235
208
|
const inputUrl = attributeUrls[index];
|
|
236
209
|
const attribute = attributeStorageInfo[index];
|
|
@@ -240,11 +213,8 @@ export default class Tiles3DConverter {
|
|
|
240
213
|
};
|
|
241
214
|
promises.push(load(inputUrl, I3SAttributeLoader, options));
|
|
242
215
|
}
|
|
243
|
-
|
|
244
216
|
const attributesList = await Promise.all(promises);
|
|
245
|
-
|
|
246
217
|
this._replaceNestedArrays(attributesList);
|
|
247
|
-
|
|
248
218
|
return Object.assign({}, ...attributesList);
|
|
249
219
|
}
|
|
250
220
|
|
|
@@ -254,14 +224,12 @@ export default class Tiles3DConverter {
|
|
|
254
224
|
} else if (attribute.objectIds) {
|
|
255
225
|
return 'Oid32';
|
|
256
226
|
}
|
|
257
|
-
|
|
258
227
|
return '';
|
|
259
228
|
}
|
|
260
229
|
|
|
261
230
|
_replaceNestedArrays(attributesList) {
|
|
262
231
|
for (let index = 0; index < attributesList.length; index++) {
|
|
263
232
|
const attributeObject = attributesList[index];
|
|
264
|
-
|
|
265
233
|
for (const key in attributeObject) {
|
|
266
234
|
attributeObject[key] = Array.from(attributeObject[key]);
|
|
267
235
|
}
|
|
@@ -282,13 +250,13 @@ export default class Tiles3DConverter {
|
|
|
282
250
|
|
|
283
251
|
async loadWorkers() {
|
|
284
252
|
console.log("Loading workers source...");
|
|
285
|
-
const tile3dAttributesWorkerUrl = getWorkerURL(Tile3dAttributesWorker, {
|
|
253
|
+
const tile3dAttributesWorkerUrl = getWorkerURL(Tile3dAttributesWorker, {
|
|
254
|
+
...getLoaderOptions()
|
|
286
255
|
});
|
|
287
256
|
const sourceResponse = await fetchFile(tile3dAttributesWorkerUrl);
|
|
288
257
|
const source = await sourceResponse.text();
|
|
289
258
|
this.workerSource.tile3dWorkerSource = source;
|
|
290
259
|
console.log("Loading workers source completed!");
|
|
291
260
|
}
|
|
292
|
-
|
|
293
261
|
}
|
|
294
262
|
//# sourceMappingURL=3d-tiles-converter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/3d-tiles-converter/3d-tiles-converter.ts"],"names":["join","process","transform","fetchFile","getLoaderOptions","load","isBrowser","I3SLoader","I3SAttributeLoader","COORDINATE_SYSTEM","Tileset3D","Tile3D","PGMLoader","i3sObbTo3dTilesObb","convertScreenThresholdToGeometricError","writeFile","removeDir","calculateFilesSize","timeConverter","TILESET","tilesetTemplate","createObbFromMbs","Tile3dAttributesWorker","transform3DTilesAttributesOnWorker","getWorkerURL","WorkerFarm","BROWSER_ERROR_MESSAGE","I3S","Tiles3DConverter","constructor","options","tilesetPath","vertexCounter","conversionStartTime","geoidHeightModel","sourceTileset","attributeStorageInfo","workerSource","convert","console","log","inputUrl","outputPath","tilesetName","maxDepth","egmFilePath","hrtime","loadWorkers","sourceTilesetJson","loadOptions","_nodeWorkers","reuseWorkers","workerUrl","i3s","coordinateSystem","LNGLAT_OFFSETS","decodeTextures","tilesetInitializationPromise","rootNode","root","header","obb","mbs","e","rootTile","boundingVolume","box","geometricError","children","_addChildren","tileset","JSON","stringify","_finishConversion","slpk","workerFarm","getWorkerFarm","destroy","convertChildNode","parentSourceNode","parentNode","level","childNodeInfo","sourceChild","_loadChildNode","push","contentUrl","_loadTile","content","vertexCount","featureAttributes","_loadChildAttributes","child","i3sAttributesData","tileContent","textureFormat","b3dm","source","tile3dWorkerSource","uri","id","Uint8Array","unloadContent","promises","Promise","all","nodePages","nodePagesTile","formTileFromNodePages","loader","nodeUrl","_relativeUrlToFullUrl","url","href","isTileHeader","loadContent","baseUrl","relativeUrl","resultArray","split","relativeUrlArray","folder","slice","attributeUrls","index","length","attribute","attributeName","name","attributeType","_getAttributeType","attributesList","_replaceNestedArrays","Object","assign","attributeValues","valueType","objectIds","attributeObject","key","Array","from","params","filesSize","diff","conversionTime","tile3dAttributesWorkerUrl","sourceResponse","text"],"mappings":"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","sourcesContent":["import type {AttributeStorageInfo, FeatureAttribute, NodeReference} from '@loaders.gl/i3s';\nimport type {Node3D} from '@loaders.gl/3d-tiles';\n\nimport {join} from 'path';\nimport process from 'process';\nimport transform from 'json-map-transform';\nimport {fetchFile, getLoaderOptions, load, isBrowser} from '@loaders.gl/core';\nimport {I3SLoader, I3SAttributeLoader, COORDINATE_SYSTEM} from '@loaders.gl/i3s';\nimport {Tileset3D, Tile3D} from '@loaders.gl/tiles';\nimport {Geoid} from '@math.gl/geoid';\n\nimport {PGMLoader} from '../pgm-loader';\nimport {i3sObbTo3dTilesObb} from './helpers/i3s-obb-to-3d-tiles-obb';\nimport {convertScreenThresholdToGeometricError} from '../lib/utils/lod-conversion-utils';\nimport {writeFile, removeDir} from '../lib/utils/file-utils';\nimport {calculateFilesSize, timeConverter} from '../lib/utils/statistic-utills';\nimport {TILESET as tilesetTemplate} from './json-templates/tileset';\nimport {createObbFromMbs} from '../i3s-converter/helpers/coordinate-converter';\nimport {\n I3SAttributesData,\n Tile3dAttributesWorker,\n transform3DTilesAttributesOnWorker\n} from '../3d-tiles-attributes-worker';\nimport {getWorkerURL, WorkerFarm} from '@loaders.gl/worker-utils';\nimport {BROWSER_ERROR_MESSAGE} from '../constants';\n\nconst I3S = 'I3S';\n\n/**\n * Converter from i3s to 3d-tiles\n */\nexport default class Tiles3DConverter {\n options: any;\n tilesetPath: string;\n vertexCounter: number;\n conversionStartTime: [number, number];\n geoidHeightModel: Geoid | null;\n sourceTileset: Tileset3D | null;\n attributeStorageInfo: AttributeStorageInfo | null;\n workerSource: {[key: string]: string} = {};\n\n constructor() {\n this.options = {};\n this.tilesetPath = '';\n this.vertexCounter = 0;\n this.conversionStartTime = [0, 0];\n this.geoidHeightModel = null;\n this.sourceTileset = null;\n this.attributeStorageInfo = null;\n this.workerSource = {};\n }\n\n /**\n * Convert i3s format data to 3dTiles\n * @param options\n * @param options.inputUrl the url to read the tileset from\n * @param options.outputPath the output filename\n * @param options.tilesetName the output name of the tileset\n * @param options.egmFilePath location of *.pgm file to convert heights from ellipsoidal to gravity-related format\n * @param options.maxDepth The max tree depth of conversion\n */\n public async convert(options: {\n inputUrl: string;\n outputPath: string;\n tilesetName: string;\n maxDepth?: number;\n egmFilePath: string;\n }): Promise<any> {\n if (isBrowser) {\n console.log(BROWSER_ERROR_MESSAGE);\n return BROWSER_ERROR_MESSAGE;\n }\n const {inputUrl, outputPath, tilesetName, maxDepth, egmFilePath} = options;\n this.conversionStartTime = process.hrtime();\n this.options = {maxDepth};\n\n console.log('Loading egm file...'); // eslint-disable-line\n this.geoidHeightModel = await load(egmFilePath, PGMLoader);\n console.log('Loading egm file completed!'); // eslint-disable-line\n\n await this.loadWorkers();\n\n const sourceTilesetJson = await load(inputUrl, I3SLoader, {});\n\n this.sourceTileset = new Tileset3D(sourceTilesetJson, {\n loadOptions: {\n _nodeWorkers: true,\n reuseWorkers: true,\n 'i3s-content-nodejs': {\n workerUrl: './modules/i3s/dist/i3s-content-nodejs-worker.js'\n },\n i3s: {coordinateSystem: COORDINATE_SYSTEM.LNGLAT_OFFSETS, decodeTextures: false}\n }\n });\n\n await this.sourceTileset.tilesetInitializationPromise;\n const rootNode = this.sourceTileset.root!;\n if (!rootNode.header.obb) {\n rootNode.header.obb = createObbFromMbs(rootNode.header.mbs);\n }\n\n this.tilesetPath = join(`${outputPath}`, `${tilesetName}`);\n this.attributeStorageInfo = sourceTilesetJson.attributeStorageInfo;\n // Removing the tilesetPath needed to exclude erroneous files after conversion\n try {\n await removeDir(this.tilesetPath);\n } catch (e) {\n // do nothing\n }\n\n const rootTile: Node3D = {\n boundingVolume: {\n box: i3sObbTo3dTilesObb(rootNode.header.obb, this.geoidHeightModel)\n },\n geometricError: convertScreenThresholdToGeometricError(rootNode),\n children: []\n };\n\n await this._addChildren(rootNode, rootTile, 1);\n\n const tileset = transform({root: rootTile}, tilesetTemplate());\n await writeFile(this.tilesetPath, JSON.stringify(tileset), 'tileset.json');\n\n this._finishConversion({slpk: false, outputPath, tilesetName});\n\n // Clean up worker pools\n const workerFarm = WorkerFarm.getWorkerFarm({});\n workerFarm.destroy();\n }\n\n /**\n * Convert particular I3S Node\n * @param parentSourceNode the parent node tile object (@loaders.gl/tiles/Tile3D)\n * @param parentNode object in resulting tileset\n * @param level a current level of a tree depth\n * @param childNodeInfo child node to convert\n */\n private async convertChildNode(\n parentSourceNode: Tile3D,\n parentNode: Node3D,\n level: number,\n childNodeInfo: NodeReference\n ): Promise<void> {\n const sourceChild = await this._loadChildNode(parentSourceNode, childNodeInfo);\n parentSourceNode.children.push(sourceChild);\n if (sourceChild.contentUrl) {\n await this.sourceTileset!._loadTile(sourceChild);\n this.vertexCounter += sourceChild.content.vertexCount;\n\n let featureAttributes: FeatureAttribute | null = null;\n if (this.attributeStorageInfo) {\n featureAttributes = await this._loadChildAttributes(sourceChild, this.attributeStorageInfo);\n }\n\n if (!sourceChild.header.obb) {\n sourceChild.header.obb = createObbFromMbs(sourceChild.header.mbs);\n }\n\n const boundingVolume = {\n box: i3sObbTo3dTilesObb(sourceChild.header.obb, this.geoidHeightModel)\n };\n const child: Node3D = {\n boundingVolume,\n geometricError: convertScreenThresholdToGeometricError(sourceChild),\n children: []\n };\n\n const i3sAttributesData: I3SAttributesData = {\n tileContent: sourceChild.content,\n textureFormat: sourceChild?.header?.textureFormat\n };\n\n const b3dm = await transform3DTilesAttributesOnWorker(i3sAttributesData, {\n source: this.workerSource.tile3dWorkerSource,\n featureAttributes\n });\n\n child.content = {\n uri: `${sourceChild.id}.b3dm`,\n boundingVolume\n };\n await writeFile(this.tilesetPath, new Uint8Array(b3dm), `${sourceChild.id}.b3dm`);\n parentNode.children.push(child);\n\n sourceChild.unloadContent();\n await this._addChildren(sourceChild, child, level + 1);\n } else {\n await this._addChildren(sourceChild, parentNode, level + 1);\n }\n }\n\n /**\n * The recursive function of traversal of a nodes tree\n * @param parentSourceNode the parent node tile object (@loaders.gl/tiles/Tile3D)\n * @param parentNode object in resulting tileset\n * @param level a current level of a tree depth\n */\n private async _addChildren(\n parentSourceNode: Tile3D,\n parentNode: Node3D,\n level: number\n ): Promise<void> {\n if (this.options.maxDepth && level > this.options.maxDepth) {\n return;\n }\n const promises: Promise<void>[] = [];\n for (const childNodeInfo of parentSourceNode.header.children || []) {\n promises.push(this.convertChildNode(parentSourceNode, parentNode, level, childNodeInfo));\n }\n await Promise.all(promises);\n }\n\n /**\n * Load a child node having information from the node header\n * @param parentNode a parent node tile object (@loaders.gl/tiles/Tile3D)\n * @param childNodeInfo child information from 3DNodeIndexDocument\n * (https://github.com/Esri/i3s-spec/blob/master/docs/1.7/nodeReference.cmn.md)\n */\n private async _loadChildNode(parentNode: Tile3D, childNodeInfo: NodeReference): Promise<Tile3D> {\n let header;\n if (this.sourceTileset!.tileset.nodePages) {\n console.log(`Node conversion: ${childNodeInfo.id}`); // eslint-disable-line no-console,no-undef\n header = await this.sourceTileset!.tileset.nodePagesTile.formTileFromNodePages(\n childNodeInfo.id\n );\n } else {\n const {loader} = this.sourceTileset!;\n const nodeUrl = this._relativeUrlToFullUrl(parentNode.url, childNodeInfo.href!);\n // load metadata\n const options = {\n i3s: {\n ...this.sourceTileset!.loadOptions,\n isTileHeader: true,\n loadContent: false\n }\n };\n\n console.log(`Node conversion: ${nodeUrl}`); // eslint-disable-line no-console,no-undef\n header = await load(nodeUrl, loader, options);\n }\n return new Tile3D(this.sourceTileset!, header, parentNode);\n }\n\n /**\n * Make an url of a resource from its relative url having the base url\n * @param baseUrl the base url. A resulting url will be related from this url\n * @param relativeUrl a realtive url of a resource\n */\n private _relativeUrlToFullUrl(baseUrl: string, relativeUrl: string): string {\n let resultArray = baseUrl.split('/');\n const relativeUrlArray = relativeUrl.split('/');\n for (const folder of relativeUrlArray) {\n switch (folder) {\n case '.':\n continue; // eslint-disable-line no-continue\n case '..':\n resultArray = resultArray.slice(0, -1);\n break;\n default:\n resultArray.push(folder);\n }\n }\n return resultArray.join('/');\n }\n\n /**\n * Do loading all attributes related to particular node.\n * @param sourceChild\n * @param attributeStorageInfo\n * @returns Promise of attributes object.\n */\n private async _loadChildAttributes(\n sourceChild: Tile3D,\n attributeStorageInfo: AttributeStorageInfo\n ): Promise<FeatureAttribute> {\n const promises: any[] = [];\n const {attributeUrls} = sourceChild.header;\n\n for (let index = 0; index < attributeUrls.length; index++) {\n const inputUrl = attributeUrls[index];\n const attribute = attributeStorageInfo[index];\n const options = {\n attributeName: attribute.name,\n attributeType: this._getAttributeType(attribute)\n };\n\n promises.push(load(inputUrl, I3SAttributeLoader, options));\n }\n const attributesList = await Promise.all(promises);\n this._replaceNestedArrays(attributesList);\n return Object.assign({}, ...attributesList);\n }\n\n /**\n * Returns attribute type for loading attributes\n * @param attribute\n * Workaround for I3S v1.6. There is no attribute.attributeValues.valueType field in attribute.\n * There is an 'Oid32' type if attribute has objectIds property.\n * Doc: https://github.com/Esri/i3s-spec/blob/master/docs/1.6/attributeStorageInfo.cmn.md\n */\n private _getAttributeType(attribute: AttributeStorageInfo): string {\n if (attribute.attributeValues) {\n return attribute.attributeValues.valueType;\n } else if (attribute.objectIds) {\n return 'Oid32';\n }\n return '';\n }\n\n /**\n * Make simple arrays from attribute typed arrays.\n * @param attributesList\n */\n private _replaceNestedArrays(attributesList: FeatureAttribute[]): void {\n for (let index = 0; index < attributesList.length; index++) {\n const attributeObject = attributesList[index];\n\n for (const key in attributeObject) {\n attributeObject[key] = Array.from(attributeObject[key]);\n }\n }\n }\n\n /**\n * Print statistics in the end of conversion\n * @param params - output files data\n */\n private async _finishConversion(params: {\n slpk: boolean;\n outputPath: string;\n tilesetName: string;\n }): Promise<void> {\n const filesSize = await calculateFilesSize(params);\n const diff = process.hrtime(this.conversionStartTime);\n const conversionTime = timeConverter(diff);\n\n console.log(`------------------------------------------------`); // eslint-disable-line\n console.log(`Finish conversion of ${I3S}`); // eslint-disable-line\n console.log(`Total conversion time: ${conversionTime}`); // eslint-disable-line\n console.log(`Vertex count: `, this.vertexCounter); // eslint-disable-line\n console.log(`File(s) size: `, filesSize, ' bytes'); // eslint-disable-line\n console.log(`------------------------------------------------`); // eslint-disable-line\n }\n\n private async loadWorkers(): Promise<void> {\n console.log(`Loading workers source...`); // eslint-disable-line no-undef, no-console\n const tile3dAttributesWorkerUrl = getWorkerURL(Tile3dAttributesWorker, {...getLoaderOptions()});\n const sourceResponse = await fetchFile(tile3dAttributesWorkerUrl);\n const source = await sourceResponse.text();\n\n this.workerSource.tile3dWorkerSource = source;\n console.log(`Loading workers source completed!`); // eslint-disable-line no-undef, no-console\n }\n}\n"],"file":"3d-tiles-converter.js"}
|
|
1
|
+
{"version":3,"file":"3d-tiles-converter.js","names":["join","process","transform","fetchFile","getLoaderOptions","load","isBrowser","I3SLoader","I3SAttributeLoader","COORDINATE_SYSTEM","Tileset3D","Tile3D","PGMLoader","i3sObbTo3dTilesObb","convertScreenThresholdToGeometricError","writeFile","removeDir","calculateFilesSize","timeConverter","TILESET","tilesetTemplate","createObbFromMbs","Tile3dAttributesWorker","transform3DTilesAttributesOnWorker","getWorkerURL","WorkerFarm","BROWSER_ERROR_MESSAGE","I3S","Tiles3DConverter","constructor","options","tilesetPath","vertexCounter","conversionStartTime","geoidHeightModel","sourceTileset","attributeStorageInfo","workerSource","convert","console","log","inputUrl","outputPath","tilesetName","maxDepth","egmFilePath","hrtime","loadWorkers","sourceTilesetJson","loadOptions","_nodeWorkers","reuseWorkers","workerUrl","i3s","coordinateSystem","LNGLAT_OFFSETS","decodeTextures","tilesetInitializationPromise","rootNode","root","header","obb","mbs","e","rootTile","boundingVolume","box","geometricError","children","_addChildren","tileset","JSON","stringify","_finishConversion","slpk","workerFarm","getWorkerFarm","destroy","convertChildNode","parentSourceNode","parentNode","level","childNodeInfo","sourceChild","_loadChildNode","push","contentUrl","_loadTile","content","vertexCount","featureAttributes","_loadChildAttributes","child","i3sAttributesData","tileContent","textureFormat","b3dm","source","tile3dWorkerSource","uri","id","Uint8Array","unloadContent","promises","Promise","all","nodePages","nodePagesTile","formTileFromNodePages","loader","nodeUrl","_relativeUrlToFullUrl","url","href","isTileHeader","loadContent","baseUrl","relativeUrl","resultArray","split","relativeUrlArray","folder","slice","attributeUrls","index","length","attribute","attributeName","name","attributeType","_getAttributeType","attributesList","_replaceNestedArrays","Object","assign","attributeValues","valueType","objectIds","attributeObject","key","Array","from","params","filesSize","diff","conversionTime","tile3dAttributesWorkerUrl","sourceResponse","text"],"sources":["../../../src/3d-tiles-converter/3d-tiles-converter.ts"],"sourcesContent":["import type {AttributeStorageInfo, FeatureAttribute, NodeReference} from '@loaders.gl/i3s';\nimport type {Node3D} from '@loaders.gl/3d-tiles';\n\nimport {join} from 'path';\nimport process from 'process';\nimport transform from 'json-map-transform';\nimport {fetchFile, getLoaderOptions, load, isBrowser} from '@loaders.gl/core';\nimport {I3SLoader, I3SAttributeLoader, COORDINATE_SYSTEM} from '@loaders.gl/i3s';\nimport {Tileset3D, Tile3D} from '@loaders.gl/tiles';\nimport {Geoid} from '@math.gl/geoid';\n\nimport {PGMLoader} from '../pgm-loader';\nimport {i3sObbTo3dTilesObb} from './helpers/i3s-obb-to-3d-tiles-obb';\nimport {convertScreenThresholdToGeometricError} from '../lib/utils/lod-conversion-utils';\nimport {writeFile, removeDir} from '../lib/utils/file-utils';\nimport {calculateFilesSize, timeConverter} from '../lib/utils/statistic-utills';\nimport {TILESET as tilesetTemplate} from './json-templates/tileset';\nimport {createObbFromMbs} from '../i3s-converter/helpers/coordinate-converter';\nimport {\n I3SAttributesData,\n Tile3dAttributesWorker,\n transform3DTilesAttributesOnWorker\n} from '../3d-tiles-attributes-worker';\nimport {getWorkerURL, WorkerFarm} from '@loaders.gl/worker-utils';\nimport {BROWSER_ERROR_MESSAGE} from '../constants';\n\nconst I3S = 'I3S';\n\n/**\n * Converter from i3s to 3d-tiles\n */\nexport default class Tiles3DConverter {\n options: any;\n tilesetPath: string;\n vertexCounter: number;\n conversionStartTime: [number, number];\n geoidHeightModel: Geoid | null;\n sourceTileset: Tileset3D | null;\n attributeStorageInfo: AttributeStorageInfo | null;\n workerSource: {[key: string]: string} = {};\n\n constructor() {\n this.options = {};\n this.tilesetPath = '';\n this.vertexCounter = 0;\n this.conversionStartTime = [0, 0];\n this.geoidHeightModel = null;\n this.sourceTileset = null;\n this.attributeStorageInfo = null;\n this.workerSource = {};\n }\n\n /**\n * Convert i3s format data to 3dTiles\n * @param options\n * @param options.inputUrl the url to read the tileset from\n * @param options.outputPath the output filename\n * @param options.tilesetName the output name of the tileset\n * @param options.egmFilePath location of *.pgm file to convert heights from ellipsoidal to gravity-related format\n * @param options.maxDepth The max tree depth of conversion\n */\n public async convert(options: {\n inputUrl: string;\n outputPath: string;\n tilesetName: string;\n maxDepth?: number;\n egmFilePath: string;\n }): Promise<any> {\n if (isBrowser) {\n console.log(BROWSER_ERROR_MESSAGE);\n return BROWSER_ERROR_MESSAGE;\n }\n const {inputUrl, outputPath, tilesetName, maxDepth, egmFilePath} = options;\n this.conversionStartTime = process.hrtime();\n this.options = {maxDepth};\n\n console.log('Loading egm file...'); // eslint-disable-line\n this.geoidHeightModel = await load(egmFilePath, PGMLoader);\n console.log('Loading egm file completed!'); // eslint-disable-line\n\n await this.loadWorkers();\n\n const sourceTilesetJson = await load(inputUrl, I3SLoader, {});\n\n this.sourceTileset = new Tileset3D(sourceTilesetJson, {\n loadOptions: {\n _nodeWorkers: true,\n reuseWorkers: true,\n 'i3s-content-nodejs': {\n workerUrl: './modules/i3s/dist/i3s-content-nodejs-worker.js'\n },\n i3s: {coordinateSystem: COORDINATE_SYSTEM.LNGLAT_OFFSETS, decodeTextures: false}\n }\n });\n\n await this.sourceTileset.tilesetInitializationPromise;\n const rootNode = this.sourceTileset.root!;\n if (!rootNode.header.obb) {\n rootNode.header.obb = createObbFromMbs(rootNode.header.mbs);\n }\n\n this.tilesetPath = join(`${outputPath}`, `${tilesetName}`);\n this.attributeStorageInfo = sourceTilesetJson.attributeStorageInfo;\n // Removing the tilesetPath needed to exclude erroneous files after conversion\n try {\n await removeDir(this.tilesetPath);\n } catch (e) {\n // do nothing\n }\n\n const rootTile: Node3D = {\n boundingVolume: {\n box: i3sObbTo3dTilesObb(rootNode.header.obb, this.geoidHeightModel)\n },\n geometricError: convertScreenThresholdToGeometricError(rootNode),\n children: []\n };\n\n await this._addChildren(rootNode, rootTile, 1);\n\n const tileset = transform({root: rootTile}, tilesetTemplate());\n await writeFile(this.tilesetPath, JSON.stringify(tileset), 'tileset.json');\n\n this._finishConversion({slpk: false, outputPath, tilesetName});\n\n // Clean up worker pools\n const workerFarm = WorkerFarm.getWorkerFarm({});\n workerFarm.destroy();\n }\n\n /**\n * Convert particular I3S Node\n * @param parentSourceNode the parent node tile object (@loaders.gl/tiles/Tile3D)\n * @param parentNode object in resulting tileset\n * @param level a current level of a tree depth\n * @param childNodeInfo child node to convert\n */\n private async convertChildNode(\n parentSourceNode: Tile3D,\n parentNode: Node3D,\n level: number,\n childNodeInfo: NodeReference\n ): Promise<void> {\n const sourceChild = await this._loadChildNode(parentSourceNode, childNodeInfo);\n parentSourceNode.children.push(sourceChild);\n if (sourceChild.contentUrl) {\n await this.sourceTileset!._loadTile(sourceChild);\n this.vertexCounter += sourceChild.content.vertexCount;\n\n let featureAttributes: FeatureAttribute | null = null;\n if (this.attributeStorageInfo) {\n featureAttributes = await this._loadChildAttributes(sourceChild, this.attributeStorageInfo);\n }\n\n if (!sourceChild.header.obb) {\n sourceChild.header.obb = createObbFromMbs(sourceChild.header.mbs);\n }\n\n const boundingVolume = {\n box: i3sObbTo3dTilesObb(sourceChild.header.obb, this.geoidHeightModel)\n };\n const child: Node3D = {\n boundingVolume,\n geometricError: convertScreenThresholdToGeometricError(sourceChild),\n children: []\n };\n\n const i3sAttributesData: I3SAttributesData = {\n tileContent: sourceChild.content,\n textureFormat: sourceChild?.header?.textureFormat\n };\n\n const b3dm = await transform3DTilesAttributesOnWorker(i3sAttributesData, {\n source: this.workerSource.tile3dWorkerSource,\n featureAttributes\n });\n\n child.content = {\n uri: `${sourceChild.id}.b3dm`,\n boundingVolume\n };\n await writeFile(this.tilesetPath, new Uint8Array(b3dm), `${sourceChild.id}.b3dm`);\n parentNode.children.push(child);\n\n sourceChild.unloadContent();\n await this._addChildren(sourceChild, child, level + 1);\n } else {\n await this._addChildren(sourceChild, parentNode, level + 1);\n }\n }\n\n /**\n * The recursive function of traversal of a nodes tree\n * @param parentSourceNode the parent node tile object (@loaders.gl/tiles/Tile3D)\n * @param parentNode object in resulting tileset\n * @param level a current level of a tree depth\n */\n private async _addChildren(\n parentSourceNode: Tile3D,\n parentNode: Node3D,\n level: number\n ): Promise<void> {\n if (this.options.maxDepth && level > this.options.maxDepth) {\n return;\n }\n const promises: Promise<void>[] = [];\n for (const childNodeInfo of parentSourceNode.header.children || []) {\n promises.push(this.convertChildNode(parentSourceNode, parentNode, level, childNodeInfo));\n }\n await Promise.all(promises);\n }\n\n /**\n * Load a child node having information from the node header\n * @param parentNode a parent node tile object (@loaders.gl/tiles/Tile3D)\n * @param childNodeInfo child information from 3DNodeIndexDocument\n * (https://github.com/Esri/i3s-spec/blob/master/docs/1.7/nodeReference.cmn.md)\n */\n private async _loadChildNode(parentNode: Tile3D, childNodeInfo: NodeReference): Promise<Tile3D> {\n let header;\n if (this.sourceTileset!.tileset.nodePages) {\n console.log(`Node conversion: ${childNodeInfo.id}`); // eslint-disable-line no-console,no-undef\n header = await this.sourceTileset!.tileset.nodePagesTile.formTileFromNodePages(\n childNodeInfo.id\n );\n } else {\n const {loader} = this.sourceTileset!;\n const nodeUrl = this._relativeUrlToFullUrl(parentNode.url, childNodeInfo.href!);\n // load metadata\n const options = {\n i3s: {\n ...this.sourceTileset!.loadOptions,\n isTileHeader: true,\n loadContent: false\n }\n };\n\n console.log(`Node conversion: ${nodeUrl}`); // eslint-disable-line no-console,no-undef\n header = await load(nodeUrl, loader, options);\n }\n return new Tile3D(this.sourceTileset!, header, parentNode);\n }\n\n /**\n * Make an url of a resource from its relative url having the base url\n * @param baseUrl the base url. A resulting url will be related from this url\n * @param relativeUrl a realtive url of a resource\n */\n private _relativeUrlToFullUrl(baseUrl: string, relativeUrl: string): string {\n let resultArray = baseUrl.split('/');\n const relativeUrlArray = relativeUrl.split('/');\n for (const folder of relativeUrlArray) {\n switch (folder) {\n case '.':\n continue; // eslint-disable-line no-continue\n case '..':\n resultArray = resultArray.slice(0, -1);\n break;\n default:\n resultArray.push(folder);\n }\n }\n return resultArray.join('/');\n }\n\n /**\n * Do loading all attributes related to particular node.\n * @param sourceChild\n * @param attributeStorageInfo\n * @returns Promise of attributes object.\n */\n private async _loadChildAttributes(\n sourceChild: Tile3D,\n attributeStorageInfo: AttributeStorageInfo\n ): Promise<FeatureAttribute> {\n const promises: any[] = [];\n const {attributeUrls} = sourceChild.header;\n\n for (let index = 0; index < attributeUrls.length; index++) {\n const inputUrl = attributeUrls[index];\n const attribute = attributeStorageInfo[index];\n const options = {\n attributeName: attribute.name,\n attributeType: this._getAttributeType(attribute)\n };\n\n promises.push(load(inputUrl, I3SAttributeLoader, options));\n }\n const attributesList = await Promise.all(promises);\n this._replaceNestedArrays(attributesList);\n return Object.assign({}, ...attributesList);\n }\n\n /**\n * Returns attribute type for loading attributes\n * @param attribute\n * Workaround for I3S v1.6. There is no attribute.attributeValues.valueType field in attribute.\n * There is an 'Oid32' type if attribute has objectIds property.\n * Doc: https://github.com/Esri/i3s-spec/blob/master/docs/1.6/attributeStorageInfo.cmn.md\n */\n private _getAttributeType(attribute: AttributeStorageInfo): string {\n if (attribute.attributeValues) {\n return attribute.attributeValues.valueType;\n } else if (attribute.objectIds) {\n return 'Oid32';\n }\n return '';\n }\n\n /**\n * Make simple arrays from attribute typed arrays.\n * @param attributesList\n */\n private _replaceNestedArrays(attributesList: FeatureAttribute[]): void {\n for (let index = 0; index < attributesList.length; index++) {\n const attributeObject = attributesList[index];\n\n for (const key in attributeObject) {\n attributeObject[key] = Array.from(attributeObject[key]);\n }\n }\n }\n\n /**\n * Print statistics in the end of conversion\n * @param params - output files data\n */\n private async _finishConversion(params: {\n slpk: boolean;\n outputPath: string;\n tilesetName: string;\n }): Promise<void> {\n const filesSize = await calculateFilesSize(params);\n const diff = process.hrtime(this.conversionStartTime);\n const conversionTime = timeConverter(diff);\n\n console.log(`------------------------------------------------`); // eslint-disable-line\n console.log(`Finish conversion of ${I3S}`); // eslint-disable-line\n console.log(`Total conversion time: ${conversionTime}`); // eslint-disable-line\n console.log(`Vertex count: `, this.vertexCounter); // eslint-disable-line\n console.log(`File(s) size: `, filesSize, ' bytes'); // eslint-disable-line\n console.log(`------------------------------------------------`); // eslint-disable-line\n }\n\n private async loadWorkers(): Promise<void> {\n console.log(`Loading workers source...`); // eslint-disable-line no-undef, no-console\n const tile3dAttributesWorkerUrl = getWorkerURL(Tile3dAttributesWorker, {...getLoaderOptions()});\n const sourceResponse = await fetchFile(tile3dAttributesWorkerUrl);\n const source = await sourceResponse.text();\n\n this.workerSource.tile3dWorkerSource = source;\n console.log(`Loading workers source completed!`); // eslint-disable-line no-undef, no-console\n }\n}\n"],"mappings":";AAGA,SAAQA,IAAI,QAAO,MAAM;AACzB,OAAOC,OAAO,MAAM,SAAS;AAC7B,OAAOC,SAAS,MAAM,oBAAoB;AAC1C,SAAQC,SAAS,EAAEC,gBAAgB,EAAEC,IAAI,EAAEC,SAAS,QAAO,kBAAkB;AAC7E,SAAQC,SAAS,EAAEC,kBAAkB,EAAEC,iBAAiB,QAAO,iBAAiB;AAChF,SAAQC,SAAS,EAAEC,MAAM,QAAO,mBAAmB;AAGnD,SAAQC,SAAS,QAAO,eAAe;AACvC,SAAQC,kBAAkB,QAAO,mCAAmC;AACpE,SAAQC,sCAAsC,QAAO,mCAAmC;AACxF,SAAQC,SAAS,EAAEC,SAAS,QAAO,yBAAyB;AAC5D,SAAQC,kBAAkB,EAAEC,aAAa,QAAO,+BAA+B;AAC/E,SAAQC,OAAO,IAAIC,eAAe,QAAO,0BAA0B;AACnE,SAAQC,gBAAgB,QAAO,+CAA+C;AAC9E,SAEEC,sBAAsB,EACtBC,kCAAkC,QAC7B,+BAA+B;AACtC,SAAQC,YAAY,EAAEC,UAAU,QAAO,0BAA0B;AACjE,SAAQC,qBAAqB,QAAO,cAAc;AAElD,MAAMC,GAAG,GAAG,KAAK;;AAKjB,eAAe,MAAMC,gBAAgB,CAAC;EAUpCC,WAAW,GAAG;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA,sCAF0B,CAAC,CAAC;IAGxC,IAAI,CAACC,OAAO,GAAG,CAAC,CAAC;IACjB,IAAI,CAACC,WAAW,GAAG,EAAE;IACrB,IAAI,CAACC,aAAa,GAAG,CAAC;IACtB,IAAI,CAACC,mBAAmB,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACjC,IAAI,CAACC,gBAAgB,GAAG,IAAI;IAC5B,IAAI,CAACC,aAAa,GAAG,IAAI;IACzB,IAAI,CAACC,oBAAoB,GAAG,IAAI;IAChC,IAAI,CAACC,YAAY,GAAG,CAAC,CAAC;EACxB;;EAWA,MAAaC,OAAO,CAACR,OAMpB,EAAgB;IACf,IAAIxB,SAAS,EAAE;MACbiC,OAAO,CAACC,GAAG,CAACd,qBAAqB,CAAC;MAClC,OAAOA,qBAAqB;IAC9B;IACA,MAAM;MAACe,QAAQ;MAAEC,UAAU;MAAEC,WAAW;MAAEC,QAAQ;MAAEC;IAAW,CAAC,GAAGf,OAAO;IAC1E,IAAI,CAACG,mBAAmB,GAAGhC,OAAO,CAAC6C,MAAM,EAAE;IAC3C,IAAI,CAAChB,OAAO,GAAG;MAACc;IAAQ,CAAC;IAEzBL,OAAO,CAACC,GAAG,CAAC,qBAAqB,CAAC;IAClC,IAAI,CAACN,gBAAgB,GAAG,MAAM7B,IAAI,CAACwC,WAAW,EAAEjC,SAAS,CAAC;IAC1D2B,OAAO,CAACC,GAAG,CAAC,6BAA6B,CAAC;;IAE1C,MAAM,IAAI,CAACO,WAAW,EAAE;IAExB,MAAMC,iBAAiB,GAAG,MAAM3C,IAAI,CAACoC,QAAQ,EAAElC,SAAS,EAAE,CAAC,CAAC,CAAC;IAE7D,IAAI,CAAC4B,aAAa,GAAG,IAAIzB,SAAS,CAACsC,iBAAiB,EAAE;MACpDC,WAAW,EAAE;QACXC,YAAY,EAAE,IAAI;QAClBC,YAAY,EAAE,IAAI;QAClB,oBAAoB,EAAE;UACpBC,SAAS,EAAE;QACb,CAAC;QACDC,GAAG,EAAE;UAACC,gBAAgB,EAAE7C,iBAAiB,CAAC8C,cAAc;UAAEC,cAAc,EAAE;QAAK;MACjF;IACF,CAAC,CAAC;IAEF,MAAM,IAAI,CAACrB,aAAa,CAACsB,4BAA4B;IACrD,MAAMC,QAAQ,GAAG,IAAI,CAACvB,aAAa,CAACwB,IAAK;IACzC,IAAI,CAACD,QAAQ,CAACE,MAAM,CAACC,GAAG,EAAE;MACxBH,QAAQ,CAACE,MAAM,CAACC,GAAG,GAAGxC,gBAAgB,CAACqC,QAAQ,CAACE,MAAM,CAACE,GAAG,CAAC;IAC7D;IAEA,IAAI,CAAC/B,WAAW,GAAG/B,IAAI,WAAI0C,UAAU,aAAOC,WAAW,EAAG;IAC1D,IAAI,CAACP,oBAAoB,GAAGY,iBAAiB,CAACZ,oBAAoB;IAElE,IAAI;MACF,MAAMpB,SAAS,CAAC,IAAI,CAACe,WAAW,CAAC;IACnC,CAAC,CAAC,OAAOgC,CAAC,EAAE;IAEZ;IAEA,MAAMC,QAAgB,GAAG;MACvBC,cAAc,EAAE;QACdC,GAAG,EAAErD,kBAAkB,CAAC6C,QAAQ,CAACE,MAAM,CAACC,GAAG,EAAE,IAAI,CAAC3B,gBAAgB;MACpE,CAAC;MACDiC,cAAc,EAAErD,sCAAsC,CAAC4C,QAAQ,CAAC;MAChEU,QAAQ,EAAE;IACZ,CAAC;IAED,MAAM,IAAI,CAACC,YAAY,CAACX,QAAQ,EAAEM,QAAQ,EAAE,CAAC,CAAC;IAE9C,MAAMM,OAAO,GAAGpE,SAAS,CAAC;MAACyD,IAAI,EAAEK;IAAQ,CAAC,EAAE5C,eAAe,EAAE,CAAC;IAC9D,MAAML,SAAS,CAAC,IAAI,CAACgB,WAAW,EAAEwC,IAAI,CAACC,SAAS,CAACF,OAAO,CAAC,EAAE,cAAc,CAAC;IAE1E,IAAI,CAACG,iBAAiB,CAAC;MAACC,IAAI,EAAE,KAAK;MAAEhC,UAAU;MAAEC;IAAW,CAAC,CAAC;;IAG9D,MAAMgC,UAAU,GAAGlD,UAAU,CAACmD,aAAa,CAAC,CAAC,CAAC,CAAC;IAC/CD,UAAU,CAACE,OAAO,EAAE;EACtB;;EASA,MAAcC,gBAAgB,CAC5BC,gBAAwB,EACxBC,UAAkB,EAClBC,KAAa,EACbC,aAA4B,EACb;IACf,MAAMC,WAAW,GAAG,MAAM,IAAI,CAACC,cAAc,CAACL,gBAAgB,EAAEG,aAAa,CAAC;IAC9EH,gBAAgB,CAACX,QAAQ,CAACiB,IAAI,CAACF,WAAW,CAAC;IAC3C,IAAIA,WAAW,CAACG,UAAU,EAAE;MAAA;MAC1B,MAAM,IAAI,CAACnD,aAAa,CAAEoD,SAAS,CAACJ,WAAW,CAAC;MAChD,IAAI,CAACnD,aAAa,IAAImD,WAAW,CAACK,OAAO,CAACC,WAAW;MAErD,IAAIC,iBAA0C,GAAG,IAAI;MACrD,IAAI,IAAI,CAACtD,oBAAoB,EAAE;QAC7BsD,iBAAiB,GAAG,MAAM,IAAI,CAACC,oBAAoB,CAACR,WAAW,EAAE,IAAI,CAAC/C,oBAAoB,CAAC;MAC7F;MAEA,IAAI,CAAC+C,WAAW,CAACvB,MAAM,CAACC,GAAG,EAAE;QAC3BsB,WAAW,CAACvB,MAAM,CAACC,GAAG,GAAGxC,gBAAgB,CAAC8D,WAAW,CAACvB,MAAM,CAACE,GAAG,CAAC;MACnE;MAEA,MAAMG,cAAc,GAAG;QACrBC,GAAG,EAAErD,kBAAkB,CAACsE,WAAW,CAACvB,MAAM,CAACC,GAAG,EAAE,IAAI,CAAC3B,gBAAgB;MACvE,CAAC;MACD,MAAM0D,KAAa,GAAG;QACpB3B,cAAc;QACdE,cAAc,EAAErD,sCAAsC,CAACqE,WAAW,CAAC;QACnEf,QAAQ,EAAE;MACZ,CAAC;MAED,MAAMyB,iBAAoC,GAAG;QAC3CC,WAAW,EAAEX,WAAW,CAACK,OAAO;QAChCO,aAAa,EAAEZ,WAAW,aAAXA,WAAW,8CAAXA,WAAW,CAAEvB,MAAM,wDAAnB,oBAAqBmC;MACtC,CAAC;MAED,MAAMC,IAAI,GAAG,MAAMzE,kCAAkC,CAACsE,iBAAiB,EAAE;QACvEI,MAAM,EAAE,IAAI,CAAC5D,YAAY,CAAC6D,kBAAkB;QAC5CR;MACF,CAAC,CAAC;MAEFE,KAAK,CAACJ,OAAO,GAAG;QACdW,GAAG,YAAKhB,WAAW,CAACiB,EAAE,UAAO;QAC7BnC;MACF,CAAC;MACD,MAAMlD,SAAS,CAAC,IAAI,CAACgB,WAAW,EAAE,IAAIsE,UAAU,CAACL,IAAI,CAAC,YAAKb,WAAW,CAACiB,EAAE,WAAQ;MACjFpB,UAAU,CAACZ,QAAQ,CAACiB,IAAI,CAACO,KAAK,CAAC;MAE/BT,WAAW,CAACmB,aAAa,EAAE;MAC3B,MAAM,IAAI,CAACjC,YAAY,CAACc,WAAW,EAAES,KAAK,EAAEX,KAAK,GAAG,CAAC,CAAC;IACxD,CAAC,MAAM;MACL,MAAM,IAAI,CAACZ,YAAY,CAACc,WAAW,EAAEH,UAAU,EAAEC,KAAK,GAAG,CAAC,CAAC;IAC7D;EACF;;EAQA,MAAcZ,YAAY,CACxBU,gBAAwB,EACxBC,UAAkB,EAClBC,KAAa,EACE;IACf,IAAI,IAAI,CAACnD,OAAO,CAACc,QAAQ,IAAIqC,KAAK,GAAG,IAAI,CAACnD,OAAO,CAACc,QAAQ,EAAE;MAC1D;IACF;IACA,MAAM2D,QAAyB,GAAG,EAAE;IACpC,KAAK,MAAMrB,aAAa,IAAIH,gBAAgB,CAACnB,MAAM,CAACQ,QAAQ,IAAI,EAAE,EAAE;MAClEmC,QAAQ,CAAClB,IAAI,CAAC,IAAI,CAACP,gBAAgB,CAACC,gBAAgB,EAAEC,UAAU,EAAEC,KAAK,EAAEC,aAAa,CAAC,CAAC;IAC1F;IACA,MAAMsB,OAAO,CAACC,GAAG,CAACF,QAAQ,CAAC;EAC7B;;EAQA,MAAcnB,cAAc,CAACJ,UAAkB,EAAEE,aAA4B,EAAmB;IAC9F,IAAItB,MAAM;IACV,IAAI,IAAI,CAACzB,aAAa,CAAEmC,OAAO,CAACoC,SAAS,EAAE;MACzCnE,OAAO,CAACC,GAAG,4BAAqB0C,aAAa,CAACkB,EAAE,EAAG;MACnDxC,MAAM,GAAG,MAAM,IAAI,CAACzB,aAAa,CAAEmC,OAAO,CAACqC,aAAa,CAACC,qBAAqB,CAC5E1B,aAAa,CAACkB,EAAE,CACjB;IACH,CAAC,MAAM;MACL,MAAM;QAACS;MAAM,CAAC,GAAG,IAAI,CAAC1E,aAAc;MACpC,MAAM2E,OAAO,GAAG,IAAI,CAACC,qBAAqB,CAAC/B,UAAU,CAACgC,GAAG,EAAE9B,aAAa,CAAC+B,IAAI,CAAE;MAE/E,MAAMnF,OAAO,GAAG;QACduB,GAAG,EAAE;UACH,GAAG,IAAI,CAAClB,aAAa,CAAEc,WAAW;UAClCiE,YAAY,EAAE,IAAI;UAClBC,WAAW,EAAE;QACf;MACF,CAAC;MAED5E,OAAO,CAACC,GAAG,4BAAqBsE,OAAO,EAAG;MAC1ClD,MAAM,GAAG,MAAMvD,IAAI,CAACyG,OAAO,EAAED,MAAM,EAAE/E,OAAO,CAAC;IAC/C;IACA,OAAO,IAAInB,MAAM,CAAC,IAAI,CAACwB,aAAa,EAAGyB,MAAM,EAAEoB,UAAU,CAAC;EAC5D;;EAOQ+B,qBAAqB,CAACK,OAAe,EAAEC,WAAmB,EAAU;IAC1E,IAAIC,WAAW,GAAGF,OAAO,CAACG,KAAK,CAAC,GAAG,CAAC;IACpC,MAAMC,gBAAgB,GAAGH,WAAW,CAACE,KAAK,CAAC,GAAG,CAAC;IAC/C,KAAK,MAAME,MAAM,IAAID,gBAAgB,EAAE;MACrC,QAAQC,MAAM;QACZ,KAAK,GAAG;UACN;QACF,KAAK,IAAI;UACPH,WAAW,GAAGA,WAAW,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;UACtC;QACF;UACEJ,WAAW,CAACjC,IAAI,CAACoC,MAAM,CAAC;MAAC;IAE/B;IACA,OAAOH,WAAW,CAACtH,IAAI,CAAC,GAAG,CAAC;EAC9B;;EAQA,MAAc2F,oBAAoB,CAChCR,WAAmB,EACnB/C,oBAA0C,EACf;IAC3B,MAAMmE,QAAe,GAAG,EAAE;IAC1B,MAAM;MAACoB;IAAa,CAAC,GAAGxC,WAAW,CAACvB,MAAM;IAE1C,KAAK,IAAIgE,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGD,aAAa,CAACE,MAAM,EAAED,KAAK,EAAE,EAAE;MACzD,MAAMnF,QAAQ,GAAGkF,aAAa,CAACC,KAAK,CAAC;MACrC,MAAME,SAAS,GAAG1F,oBAAoB,CAACwF,KAAK,CAAC;MAC7C,MAAM9F,OAAO,GAAG;QACdiG,aAAa,EAAED,SAAS,CAACE,IAAI;QAC7BC,aAAa,EAAE,IAAI,CAACC,iBAAiB,CAACJ,SAAS;MACjD,CAAC;MAEDvB,QAAQ,CAAClB,IAAI,CAAChF,IAAI,CAACoC,QAAQ,EAAEjC,kBAAkB,EAAEsB,OAAO,CAAC,CAAC;IAC5D;IACA,MAAMqG,cAAc,GAAG,MAAM3B,OAAO,CAACC,GAAG,CAACF,QAAQ,CAAC;IAClD,IAAI,CAAC6B,oBAAoB,CAACD,cAAc,CAAC;IACzC,OAAOE,MAAM,CAACC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAGH,cAAc,CAAC;EAC7C;;EASQD,iBAAiB,CAACJ,SAA+B,EAAU;IACjE,IAAIA,SAAS,CAACS,eAAe,EAAE;MAC7B,OAAOT,SAAS,CAACS,eAAe,CAACC,SAAS;IAC5C,CAAC,MAAM,IAAIV,SAAS,CAACW,SAAS,EAAE;MAC9B,OAAO,OAAO;IAChB;IACA,OAAO,EAAE;EACX;;EAMQL,oBAAoB,CAACD,cAAkC,EAAQ;IACrE,KAAK,IAAIP,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGO,cAAc,CAACN,MAAM,EAAED,KAAK,EAAE,EAAE;MAC1D,MAAMc,eAAe,GAAGP,cAAc,CAACP,KAAK,CAAC;MAE7C,KAAK,MAAMe,GAAG,IAAID,eAAe,EAAE;QACjCA,eAAe,CAACC,GAAG,CAAC,GAAGC,KAAK,CAACC,IAAI,CAACH,eAAe,CAACC,GAAG,CAAC,CAAC;MACzD;IACF;EACF;;EAMA,MAAclE,iBAAiB,CAACqE,MAI/B,EAAiB;IAChB,MAAMC,SAAS,GAAG,MAAM9H,kBAAkB,CAAC6H,MAAM,CAAC;IAClD,MAAME,IAAI,GAAG/I,OAAO,CAAC6C,MAAM,CAAC,IAAI,CAACb,mBAAmB,CAAC;IACrD,MAAMgH,cAAc,GAAG/H,aAAa,CAAC8H,IAAI,CAAC;IAE1CzG,OAAO,CAACC,GAAG,oDAAoD;IAC/DD,OAAO,CAACC,GAAG,gCAAyBb,GAAG,EAAG;IAC1CY,OAAO,CAACC,GAAG,kCAA2ByG,cAAc,EAAG;IACvD1G,OAAO,CAACC,GAAG,mBAAmB,IAAI,CAACR,aAAa,CAAC;IACjDO,OAAO,CAACC,GAAG,mBAAmBuG,SAAS,EAAE,QAAQ,CAAC;IAClDxG,OAAO,CAACC,GAAG,oDAAoD;EACjE;;EAEA,MAAcO,WAAW,GAAkB;IACzCR,OAAO,CAACC,GAAG,6BAA6B;IACxC,MAAM0G,yBAAyB,GAAG1H,YAAY,CAACF,sBAAsB,EAAE;MAAC,GAAGlB,gBAAgB;IAAE,CAAC,CAAC;IAC/F,MAAM+I,cAAc,GAAG,MAAMhJ,SAAS,CAAC+I,yBAAyB,CAAC;IACjE,MAAMjD,MAAM,GAAG,MAAMkD,cAAc,CAACC,IAAI,EAAE;IAE1C,IAAI,CAAC/G,YAAY,CAAC6D,kBAAkB,GAAGD,MAAM;IAC7C1D,OAAO,CAACC,GAAG,qCAAqC;EAClD;AACF"}
|
|
@@ -7,14 +7,14 @@ import { Ellipsoid } from '@math.gl/geospatial';
|
|
|
7
7
|
import { convertTextureAtlas } from './texture-atlas';
|
|
8
8
|
const Z_UP_TO_Y_UP_MATRIX = new Matrix4([1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1]);
|
|
9
9
|
const scratchVector = new Vector3();
|
|
10
|
+
|
|
10
11
|
export default class B3dmConverter {
|
|
11
12
|
constructor() {
|
|
12
13
|
_defineProperty(this, "rtcCenter", void 0);
|
|
13
|
-
|
|
14
14
|
_defineProperty(this, "i3sTile", void 0);
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
async convert(i3sAttributesData) {
|
|
17
|
+
let featureAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
18
18
|
const gltf = await this.buildGltf(i3sAttributesData, featureAttributes);
|
|
19
19
|
const b3dm = encodeSync({
|
|
20
20
|
gltfEncoded: new Uint8Array(gltf),
|
|
@@ -40,36 +40,26 @@ export default class B3dmConverter {
|
|
|
40
40
|
} = tileContent;
|
|
41
41
|
const gltfBuilder = new GLTFScenegraph();
|
|
42
42
|
const textureIndex = await this._addI3sTextureToGltf(tileContent, textureFormat, gltfBuilder);
|
|
43
|
-
|
|
44
43
|
const pbrMaterialInfo = this._convertI3sMaterialToGltfMaterial(material, textureIndex);
|
|
45
|
-
|
|
46
44
|
const materialIndex = gltfBuilder.addMaterial(pbrMaterialInfo);
|
|
47
45
|
const positions = attributes.positions;
|
|
48
46
|
const positionsValue = positions.value;
|
|
49
|
-
|
|
50
47
|
if (attributes.uvRegions && attributes.texCoords) {
|
|
51
48
|
attributes.texCoords.value = convertTextureAtlas(attributes.texCoords.value, attributes.uvRegions.value);
|
|
52
49
|
}
|
|
53
|
-
|
|
54
50
|
attributes.positions.value = this._normalizePositions(positionsValue, cartesianOrigin, cartographicOrigin, modelMatrix);
|
|
55
|
-
|
|
56
51
|
this._createBatchIds(tileContent, featureAttributes);
|
|
57
|
-
|
|
58
52
|
if (attributes.normals && !this._checkNormals(attributes.normals.value)) {
|
|
59
53
|
delete attributes.normals;
|
|
60
54
|
}
|
|
61
|
-
|
|
62
55
|
const indices = originalIndices || this._generateSynteticIndices(positionsValue.length / positions.size);
|
|
63
|
-
|
|
64
56
|
const meshIndex = gltfBuilder.addMesh({
|
|
65
57
|
attributes,
|
|
66
58
|
indices,
|
|
67
59
|
material: materialIndex,
|
|
68
60
|
mode: 4
|
|
69
61
|
});
|
|
70
|
-
|
|
71
62
|
const transformMatrix = this._generateTransformMatrix(cartesianOrigin);
|
|
72
|
-
|
|
73
63
|
const nodeIndex = gltfBuilder.addNode({
|
|
74
64
|
meshIndex,
|
|
75
65
|
matrix: transformMatrix
|
|
@@ -91,27 +81,22 @@ export default class B3dmConverter {
|
|
|
91
81
|
} = tileContent;
|
|
92
82
|
let textureIndex = null;
|
|
93
83
|
let selectedTexture = texture;
|
|
94
|
-
|
|
95
84
|
if (!texture && material) {
|
|
96
85
|
selectedTexture = material.pbrMetallicRoughness && material.pbrMetallicRoughness.baseColorTexture && material.pbrMetallicRoughness.baseColorTexture.texture.source.image;
|
|
97
86
|
}
|
|
98
|
-
|
|
99
87
|
if (selectedTexture) {
|
|
100
88
|
const mimeType = this._deduceMimeTypeFromFormat(textureFormat);
|
|
101
|
-
|
|
102
89
|
const imageIndex = gltfBuilder.addImage(selectedTexture, mimeType);
|
|
103
90
|
textureIndex = gltfBuilder.addTexture({
|
|
104
91
|
imageIndex
|
|
105
92
|
});
|
|
106
93
|
delete attributes.colors;
|
|
107
94
|
}
|
|
108
|
-
|
|
109
95
|
return textureIndex;
|
|
110
96
|
}
|
|
111
97
|
|
|
112
98
|
_normalizePositions(positionsValue, cartesianOrigin, cartographicOrigin, modelMatrix) {
|
|
113
99
|
const newPositionsValue = new Float32Array(positionsValue.length);
|
|
114
|
-
|
|
115
100
|
for (let index = 0; index < positionsValue.length; index += 3) {
|
|
116
101
|
const vertex = positionsValue.subarray(index, index + 3);
|
|
117
102
|
const cartesianOriginVector = new Vector3(cartesianOrigin);
|
|
@@ -120,7 +105,6 @@ export default class B3dmConverter {
|
|
|
120
105
|
vertexVector = scratchVector.subtract(cartesianOriginVector);
|
|
121
106
|
newPositionsValue.set(vertexVector, index);
|
|
122
107
|
}
|
|
123
|
-
|
|
124
108
|
return newPositionsValue;
|
|
125
109
|
}
|
|
126
110
|
|
|
@@ -137,17 +121,14 @@ export default class B3dmConverter {
|
|
|
137
121
|
const {
|
|
138
122
|
OBJECTID: objectIds
|
|
139
123
|
} = featureAttributes || {};
|
|
140
|
-
|
|
141
124
|
if (!featureIds || !objectIds) {
|
|
142
125
|
return;
|
|
143
126
|
}
|
|
144
|
-
|
|
145
127
|
for (let i = 0; i < featureIds.length; i++) {
|
|
146
128
|
const featureId = featureIds[i];
|
|
147
129
|
const batchId = objectIds.indexOf(featureId);
|
|
148
130
|
featureIds[i] = batchId;
|
|
149
131
|
}
|
|
150
|
-
|
|
151
132
|
i3sContent.attributes._BATCHID = {
|
|
152
133
|
size: 1,
|
|
153
134
|
byteOffset: 0,
|
|
@@ -157,11 +138,9 @@ export default class B3dmConverter {
|
|
|
157
138
|
|
|
158
139
|
_generateSynteticIndices(vertexCount) {
|
|
159
140
|
const result = new Uint32Array(vertexCount);
|
|
160
|
-
|
|
161
141
|
for (let index = 0; index < vertexCount; index++) {
|
|
162
142
|
result.set([index], index);
|
|
163
143
|
}
|
|
164
|
-
|
|
165
144
|
return result;
|
|
166
145
|
}
|
|
167
146
|
|
|
@@ -169,13 +148,10 @@ export default class B3dmConverter {
|
|
|
169
148
|
switch (format) {
|
|
170
149
|
case 'jpg':
|
|
171
150
|
return 'image/jpeg';
|
|
172
|
-
|
|
173
151
|
case 'png':
|
|
174
152
|
return 'image/png';
|
|
175
|
-
|
|
176
153
|
case 'ktx2':
|
|
177
154
|
return 'image/ktx2';
|
|
178
|
-
|
|
179
155
|
default:
|
|
180
156
|
console.warn("Unexpected texture format in I3S: ".concat(format));
|
|
181
157
|
return 'image/jpeg';
|
|
@@ -184,7 +160,6 @@ export default class B3dmConverter {
|
|
|
184
160
|
|
|
185
161
|
_convertI3sMaterialToGltfMaterial(material, textureIndex) {
|
|
186
162
|
const isTextureIndexExists = textureIndex !== null;
|
|
187
|
-
|
|
188
163
|
if (!material) {
|
|
189
164
|
material = {
|
|
190
165
|
alphaMode: 'OPAQUE',
|
|
@@ -194,7 +169,6 @@ export default class B3dmConverter {
|
|
|
194
169
|
roughnessFactor: 1
|
|
195
170
|
}
|
|
196
171
|
};
|
|
197
|
-
|
|
198
172
|
if (isTextureIndexExists) {
|
|
199
173
|
material.pbrMetallicRoughness.baseColorTexture = {
|
|
200
174
|
index: textureIndex,
|
|
@@ -203,23 +177,21 @@ export default class B3dmConverter {
|
|
|
203
177
|
} else {
|
|
204
178
|
material.pbrMetallicRoughness.baseColorFactor = [1, 1, 1, 1];
|
|
205
179
|
}
|
|
206
|
-
|
|
207
180
|
return material;
|
|
208
181
|
}
|
|
209
|
-
|
|
210
182
|
if (textureIndex !== null) {
|
|
211
183
|
material = this._setGltfTexture(material, textureIndex);
|
|
212
184
|
}
|
|
213
|
-
|
|
214
185
|
return material;
|
|
215
186
|
}
|
|
216
187
|
|
|
217
188
|
_setGltfTexture(materialDefinition, textureIndex) {
|
|
218
|
-
const material = {
|
|
219
|
-
|
|
189
|
+
const material = {
|
|
190
|
+
...materialDefinition,
|
|
191
|
+
pbrMetallicRoughness: {
|
|
192
|
+
...materialDefinition.pbrMetallicRoughness
|
|
220
193
|
}
|
|
221
194
|
};
|
|
222
|
-
|
|
223
195
|
if (materialDefinition.pbrMetallicRoughness && materialDefinition.pbrMetallicRoughness.baseColorTexture) {
|
|
224
196
|
material.pbrMetallicRoughness.baseColorTexture = {
|
|
225
197
|
index: textureIndex,
|
|
@@ -246,7 +218,6 @@ export default class B3dmConverter {
|
|
|
246
218
|
texCoord: 0
|
|
247
219
|
};
|
|
248
220
|
}
|
|
249
|
-
|
|
250
221
|
return material;
|
|
251
222
|
}
|
|
252
223
|
|
|
@@ -254,7 +225,6 @@ export default class B3dmConverter {
|
|
|
254
225
|
if (!attributes) {
|
|
255
226
|
return 0;
|
|
256
227
|
}
|
|
257
|
-
|
|
258
228
|
const firstKey = Object.keys(attributes)[0];
|
|
259
229
|
return firstKey ? attributes[firstKey].length : 0;
|
|
260
230
|
}
|
|
@@ -262,6 +232,5 @@ export default class B3dmConverter {
|
|
|
262
232
|
_checkNormals(normals) {
|
|
263
233
|
return normals.find(value => value);
|
|
264
234
|
}
|
|
265
|
-
|
|
266
235
|
}
|
|
267
236
|
//# sourceMappingURL=b3dm-converter.js.map
|