@loaders.gl/tile-converter 4.2.0-alpha.4 → 4.2.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.
Files changed (192) hide show
  1. package/dist/3d-tiles-converter/3d-tiles-converter.d.ts +4 -4
  2. package/dist/3d-tiles-converter/3d-tiles-converter.d.ts.map +1 -1
  3. package/dist/3d-tiles-converter/3d-tiles-converter.js +349 -293
  4. package/dist/3d-tiles-converter/helpers/b3dm-converter.d.ts.map +1 -1
  5. package/dist/3d-tiles-converter/helpers/b3dm-converter.js +261 -200
  6. package/dist/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +14 -5
  7. package/dist/3d-tiles-converter/helpers/load-i3s.d.ts.map +1 -1
  8. package/dist/3d-tiles-converter/helpers/load-i3s.js +83 -77
  9. package/dist/3d-tiles-converter/helpers/texture-atlas.js +44 -21
  10. package/dist/3d-tiles-converter/json-templates/tileset.js +32 -33
  11. package/dist/constants.js +0 -1
  12. package/dist/converter-cli.js +257 -234
  13. package/dist/converter.min.cjs +95 -105
  14. package/dist/deps-installer/deps-installer.d.ts.map +1 -1
  15. package/dist/deps-installer/deps-installer.js +78 -59
  16. package/dist/i3s-converter/helpers/attribute-metadata-info.js +210 -153
  17. package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts +1 -1
  18. package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts.map +1 -1
  19. package/dist/i3s-converter/helpers/batch-ids-extensions.js +146 -103
  20. package/dist/i3s-converter/helpers/coordinate-converter.js +100 -65
  21. package/dist/i3s-converter/helpers/create-scene-server-path.js +14 -9
  22. package/dist/i3s-converter/helpers/feature-attributes.d.ts.map +1 -1
  23. package/dist/i3s-converter/helpers/feature-attributes.js +170 -105
  24. package/dist/i3s-converter/helpers/geometry-attributes.d.ts +1 -1
  25. package/dist/i3s-converter/helpers/geometry-attributes.d.ts.map +1 -1
  26. package/dist/i3s-converter/helpers/geometry-attributes.js +205 -212
  27. package/dist/i3s-converter/helpers/geometry-converter.d.ts +17 -3
  28. package/dist/i3s-converter/helpers/geometry-converter.d.ts.map +1 -1
  29. package/dist/i3s-converter/helpers/geometry-converter.js +1189 -830
  30. package/dist/i3s-converter/helpers/gltf-attributes.d.ts +1 -1
  31. package/dist/i3s-converter/helpers/gltf-attributes.d.ts.map +1 -1
  32. package/dist/i3s-converter/helpers/gltf-attributes.js +109 -97
  33. package/dist/i3s-converter/helpers/load-3d-tiles.js +103 -66
  34. package/dist/i3s-converter/helpers/node-debug.js +98 -54
  35. package/dist/i3s-converter/helpers/node-index-document.d.ts +11 -4
  36. package/dist/i3s-converter/helpers/node-index-document.d.ts.map +1 -1
  37. package/dist/i3s-converter/helpers/node-index-document.js +255 -177
  38. package/dist/i3s-converter/helpers/node-pages.d.ts +1 -1
  39. package/dist/i3s-converter/helpers/node-pages.d.ts.map +1 -1
  40. package/dist/i3s-converter/helpers/node-pages.js +299 -193
  41. package/dist/i3s-converter/helpers/preprocess-3d-tiles.d.ts +1 -1
  42. package/dist/i3s-converter/helpers/preprocess-3d-tiles.d.ts.map +1 -1
  43. package/dist/i3s-converter/helpers/preprocess-3d-tiles.js +92 -60
  44. package/dist/i3s-converter/helpers/progress.d.ts.map +1 -1
  45. package/dist/i3s-converter/helpers/progress.js +139 -83
  46. package/dist/i3s-converter/helpers/tileset-traversal.d.ts +9 -2
  47. package/dist/i3s-converter/helpers/tileset-traversal.d.ts.map +1 -1
  48. package/dist/i3s-converter/helpers/tileset-traversal.js +33 -13
  49. package/dist/i3s-converter/i3s-converter.d.ts +7 -7
  50. package/dist/i3s-converter/i3s-converter.d.ts.map +1 -1
  51. package/dist/i3s-converter/i3s-converter.js +1165 -895
  52. package/dist/i3s-converter/json-templates/geometry-definitions.js +70 -79
  53. package/dist/i3s-converter/json-templates/layers.js +120 -121
  54. package/dist/i3s-converter/json-templates/metadata.js +19 -20
  55. package/dist/i3s-converter/json-templates/node.js +73 -71
  56. package/dist/i3s-converter/json-templates/scene-server.js +25 -26
  57. package/dist/i3s-converter/json-templates/shared-resources.js +107 -108
  58. package/dist/i3s-converter/json-templates/store.js +96 -94
  59. package/dist/i3s-converter/types.js +35 -23
  60. package/dist/i3s-server/app.js +15 -12
  61. package/dist/i3s-server/bin/i3s-server.min.cjs +69 -69
  62. package/dist/i3s-server/bin/www.js +16 -7
  63. package/dist/i3s-server/controllers/index-controller.js +18 -15
  64. package/dist/i3s-server/controllers/slpk-controller.d.ts.map +1 -1
  65. package/dist/i3s-server/controllers/slpk-controller.js +24 -11
  66. package/dist/i3s-server/routes/index.js +13 -9
  67. package/dist/i3s-server/routes/slpk-router.d.ts.map +1 -1
  68. package/dist/i3s-server/routes/slpk-router.js +26 -19
  69. package/dist/i3s-server/utils/create-scene-server.js +15 -10
  70. package/dist/i3s-server/utils/server-utils.d.ts.map +1 -1
  71. package/dist/i3s-server/utils/server-utils.js +52 -32
  72. package/dist/index.cjs +616 -967
  73. package/dist/index.cjs.map +7 -0
  74. package/dist/index.d.ts +2 -2
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +0 -1
  77. package/dist/lib/json-schemas/conversion-dump-json-schema.js +243 -421
  78. package/dist/lib/utils/cli-utils.d.ts.map +1 -1
  79. package/dist/lib/utils/cli-utils.js +65 -36
  80. package/dist/lib/utils/compress-util.js +20 -15
  81. package/dist/lib/utils/conversion-dump.d.ts +10 -2
  82. package/dist/lib/utils/conversion-dump.d.ts.map +1 -1
  83. package/dist/lib/utils/conversion-dump.js +242 -197
  84. package/dist/lib/utils/file-utils.d.ts +1 -1
  85. package/dist/lib/utils/file-utils.d.ts.map +1 -1
  86. package/dist/lib/utils/file-utils.js +120 -74
  87. package/dist/lib/utils/geometry-utils.js +13 -7
  88. package/dist/lib/utils/lod-conversion-utils.js +65 -33
  89. package/dist/lib/utils/queue.js +12 -13
  90. package/dist/lib/utils/statistic-utills.d.ts +6 -23
  91. package/dist/lib/utils/statistic-utills.d.ts.map +1 -1
  92. package/dist/lib/utils/statistic-utills.js +58 -55
  93. package/dist/lib/utils/write-queue.d.ts +2 -2
  94. package/dist/lib/utils/write-queue.d.ts.map +1 -1
  95. package/dist/lib/utils/write-queue.js +72 -86
  96. package/dist/pgm-loader.js +17 -13
  97. package/dist/slpk-extractor/slpk-extractor.d.ts.map +1 -1
  98. package/dist/slpk-extractor/slpk-extractor.js +60 -50
  99. package/dist/slpk-extractor-cli.d.ts.map +1 -1
  100. package/dist/slpk-extractor-cli.js +90 -59
  101. package/dist/slpk-extractor.min.cjs +1 -1
  102. package/package.json +27 -26
  103. package/src/3d-tiles-converter/3d-tiles-converter.ts +21 -10
  104. package/src/3d-tiles-converter/helpers/b3dm-converter.ts +1 -0
  105. package/src/3d-tiles-converter/helpers/load-i3s.ts +3 -27
  106. package/src/converter-cli.ts +4 -2
  107. package/src/deps-installer/deps-installer.ts +7 -0
  108. package/src/i3s-converter/helpers/attribute-metadata-info.ts +1 -1
  109. package/src/i3s-converter/helpers/batch-ids-extensions.ts +3 -1
  110. package/src/i3s-converter/helpers/coordinate-converter.ts +2 -2
  111. package/src/i3s-converter/helpers/feature-attributes.ts +5 -2
  112. package/src/i3s-converter/helpers/geometry-attributes.ts +6 -5
  113. package/src/i3s-converter/helpers/geometry-converter.ts +118 -72
  114. package/src/i3s-converter/helpers/gltf-attributes.ts +12 -13
  115. package/src/i3s-converter/helpers/node-index-document.ts +18 -10
  116. package/src/i3s-converter/helpers/node-pages.ts +27 -29
  117. package/src/i3s-converter/helpers/preprocess-3d-tiles.ts +1 -0
  118. package/src/i3s-converter/helpers/progress.ts +1 -0
  119. package/src/i3s-converter/helpers/tileset-traversal.ts +22 -13
  120. package/src/i3s-converter/i3s-converter.ts +173 -114
  121. package/src/i3s-converter/json-templates/node.ts +1 -1
  122. package/src/i3s-server/bin/www.ts +6 -4
  123. package/src/i3s-server/controllers/slpk-controller.ts +4 -2
  124. package/src/i3s-server/routes/index.ts +10 -7
  125. package/src/i3s-server/routes/slpk-router.ts +22 -16
  126. package/src/i3s-server/utils/server-utils.ts +6 -4
  127. package/src/lib/utils/cli-utils.ts +2 -0
  128. package/src/lib/utils/conversion-dump.ts +35 -20
  129. package/src/lib/utils/file-utils.ts +11 -11
  130. package/src/lib/utils/statistic-utills.ts +5 -6
  131. package/src/lib/utils/write-queue.ts +2 -2
  132. package/src/slpk-extractor/slpk-extractor.ts +2 -1
  133. package/src/slpk-extractor-cli.ts +16 -8
  134. package/dist/3d-tiles-converter/3d-tiles-converter.js.map +0 -1
  135. package/dist/3d-tiles-converter/helpers/b3dm-converter.js.map +0 -1
  136. package/dist/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +0 -1
  137. package/dist/3d-tiles-converter/helpers/load-i3s.js.map +0 -1
  138. package/dist/3d-tiles-converter/helpers/texture-atlas.js.map +0 -1
  139. package/dist/3d-tiles-converter/json-templates/tileset.js.map +0 -1
  140. package/dist/constants.js.map +0 -1
  141. package/dist/converter-cli.js.map +0 -1
  142. package/dist/deps-installer/deps-installer.js.map +0 -1
  143. package/dist/i3s-converter/helpers/attribute-metadata-info.js.map +0 -1
  144. package/dist/i3s-converter/helpers/batch-ids-extensions.js.map +0 -1
  145. package/dist/i3s-converter/helpers/coordinate-converter.js.map +0 -1
  146. package/dist/i3s-converter/helpers/create-scene-server-path.js.map +0 -1
  147. package/dist/i3s-converter/helpers/feature-attributes.js.map +0 -1
  148. package/dist/i3s-converter/helpers/geometry-attributes.js.map +0 -1
  149. package/dist/i3s-converter/helpers/geometry-converter.js.map +0 -1
  150. package/dist/i3s-converter/helpers/gltf-attributes.js.map +0 -1
  151. package/dist/i3s-converter/helpers/load-3d-tiles.js.map +0 -1
  152. package/dist/i3s-converter/helpers/node-debug.js.map +0 -1
  153. package/dist/i3s-converter/helpers/node-index-document.js.map +0 -1
  154. package/dist/i3s-converter/helpers/node-pages.js.map +0 -1
  155. package/dist/i3s-converter/helpers/preprocess-3d-tiles.js.map +0 -1
  156. package/dist/i3s-converter/helpers/progress.js.map +0 -1
  157. package/dist/i3s-converter/helpers/tileset-traversal.js.map +0 -1
  158. package/dist/i3s-converter/i3s-converter.js.map +0 -1
  159. package/dist/i3s-converter/json-templates/geometry-definitions.js.map +0 -1
  160. package/dist/i3s-converter/json-templates/layers.js.map +0 -1
  161. package/dist/i3s-converter/json-templates/metadata.js.map +0 -1
  162. package/dist/i3s-converter/json-templates/node.js.map +0 -1
  163. package/dist/i3s-converter/json-templates/scene-server.js.map +0 -1
  164. package/dist/i3s-converter/json-templates/shared-resources.js.map +0 -1
  165. package/dist/i3s-converter/json-templates/store.js.map +0 -1
  166. package/dist/i3s-converter/types.js.map +0 -1
  167. package/dist/i3s-server/README.md +0 -63
  168. package/dist/i3s-server/app.js.map +0 -1
  169. package/dist/i3s-server/bin/www.js.map +0 -1
  170. package/dist/i3s-server/certs/cert.pem +0 -19
  171. package/dist/i3s-server/certs/key.pem +0 -27
  172. package/dist/i3s-server/controllers/index-controller.js.map +0 -1
  173. package/dist/i3s-server/controllers/slpk-controller.js.map +0 -1
  174. package/dist/i3s-server/routes/index.js.map +0 -1
  175. package/dist/i3s-server/routes/slpk-router.js.map +0 -1
  176. package/dist/i3s-server/utils/create-scene-server.js.map +0 -1
  177. package/dist/i3s-server/utils/server-utils.js.map +0 -1
  178. package/dist/index.js.map +0 -1
  179. package/dist/lib/json-schemas/conversion-dump-json-schema.js.map +0 -1
  180. package/dist/lib/utils/cli-utils.js.map +0 -1
  181. package/dist/lib/utils/compress-util.js.map +0 -1
  182. package/dist/lib/utils/conversion-dump.js.map +0 -1
  183. package/dist/lib/utils/file-utils.js.map +0 -1
  184. package/dist/lib/utils/geometry-utils.js.map +0 -1
  185. package/dist/lib/utils/lod-conversion-utils.js.map +0 -1
  186. package/dist/lib/utils/queue.js.map +0 -1
  187. package/dist/lib/utils/statistic-utills.js.map +0 -1
  188. package/dist/lib/utils/write-queue.js.map +0 -1
  189. package/dist/pgm-loader.js.map +0 -1
  190. package/dist/slpk-extractor/slpk-extractor.js.map +0 -1
  191. package/dist/slpk-extractor-cli.js.map +0 -1
  192. package/src/lib/utils/statistic-utills.d.ts +0 -25
@@ -3,197 +3,275 @@ import transform from 'json-map-transform';
3
3
  import { v4 as uuidv4 } from 'uuid';
4
4
  import { openJson, writeFile, writeFileForSlpk } from "../../lib/utils/file-utils.js";
5
5
  import { NODE as nodeTemplate } from "../json-templates/node.js";
6
+ /**
7
+ * Wrapper for https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md data
8
+ * The class allows working with 3DNodeIndexDocument in 2 modes:
9
+ * in memory: the data is stored in `data` field
10
+ * on disk: the data is written on disk in a file. The file can be rewritten when new childrend or neighbors have to be added
11
+ */
6
12
  export class NodeIndexDocument {
7
- get finalized() {
8
- return this._finalized;
9
- }
10
- constructor(id, converter) {
11
- this.id = void 0;
12
- this.inPageId = void 0;
13
- this.data = null;
14
- this.children = [];
15
- this.converter = void 0;
16
- this._finalized = false;
17
- this.inPageId = id;
18
- this.id = id === 0 ? 'root' : id.toString();
19
- this.converter = converter;
20
- }
21
- async addData(data) {
22
- if (this.converter.options.instantNodeWriting) {
23
- await this.write(data);
24
- } else {
25
- this.data = data;
13
+ /** Node id */
14
+ id;
15
+ /** Id in node pages */
16
+ inPageId;
17
+ /** 3DNodeIndexDocument data */
18
+ data = null;
19
+ /** children */
20
+ children = [];
21
+ /** converter instance */
22
+ converter;
23
+ /**
24
+ * Finalized property. It means that all child nodes are saved and their data
25
+ * is unloaded
26
+ */
27
+ _finalized = false;
28
+ get finalized() {
29
+ return this._finalized;
26
30
  }
27
- return this;
28
- }
29
- async addChildren(childNodes) {
30
- const newChildren = [];
31
- for (const node of childNodes) {
32
- const nodeData = await node.load();
33
- newChildren.push({
34
- id: node.id,
35
- href: `../${node.id}`,
36
- obb: nodeData.obb,
37
- mbs: nodeData.mbs
38
- });
31
+ /**
32
+ * Constructor
33
+ * @param id - id of the node in node pages
34
+ * @param converter - converter instance
35
+ */
36
+ constructor(id, converter) {
37
+ this.inPageId = id;
38
+ this.id = id === 0 ? 'root' : id.toString();
39
+ this.converter = converter;
39
40
  }
40
- this.children = this.children.concat(childNodes);
41
- let data = this.data;
42
- if (this.converter.options.instantNodeWriting) {
43
- data = await this.load();
41
+ /**
42
+ * Add Node3DIndexDocument data to the node
43
+ * @param data Node3DIndexDocument data
44
+ * @returns this NodeIndexDocument instance (to recurring with constructor)
45
+ */
46
+ async addData(data) {
47
+ if (this.converter.options.instantNodeWriting) {
48
+ await this.write(data);
49
+ }
50
+ else {
51
+ this.data = data;
52
+ }
53
+ return this;
54
+ }
55
+ /**
56
+ * Add child node references
57
+ * @param childNodes - child NodeIndexDocument instances
58
+ */
59
+ async addChildren(childNodes) {
60
+ const newChildren = [];
61
+ for (const node of childNodes) {
62
+ const nodeData = await node.load();
63
+ newChildren.push({
64
+ id: node.id,
65
+ href: `../${node.id}`,
66
+ obb: nodeData.obb,
67
+ mbs: nodeData.mbs
68
+ });
69
+ }
70
+ this.children = this.children.concat(childNodes);
71
+ let data = this.data;
72
+ if (this.converter.options.instantNodeWriting) {
73
+ data = await this.load();
74
+ }
75
+ if (data) {
76
+ data.children = data.children ?? [];
77
+ data.children = data.children.concat(newChildren);
78
+ }
79
+ if (this.converter.options.instantNodeWriting && data) {
80
+ await this.write(data);
81
+ }
44
82
  }
45
- if (data) {
46
- var _data$children;
47
- data.children = (_data$children = data.children) !== null && _data$children !== void 0 ? _data$children : [];
48
- data.children = data.children.concat(newChildren);
83
+ /**
84
+ * Add neighbors to child nodes of this node
85
+ */
86
+ async addNeighbors() {
87
+ if (this.finalized) {
88
+ return;
89
+ }
90
+ const nodeData = await this.load();
91
+ for (const childNode of this.children) {
92
+ const childNodeData = await childNode.load();
93
+ childNodeData.neighbors = childNodeData.neighbors ?? [];
94
+ // Don't do large amount of "neightbors" to avoid big memory consumption
95
+ if (Number(nodeData?.children?.length) < 1000) {
96
+ for (const neighbor of nodeData.children || []) {
97
+ if (childNode.id === neighbor.id) {
98
+ continue; // eslint-disable-line
99
+ }
100
+ childNodeData.neighbors.push({ ...neighbor });
101
+ }
102
+ }
103
+ else {
104
+ // eslint-disable-next-line no-console, no-undef
105
+ console.warn(`Node ${childNode.id}: neighbors attribute is omited because of large number of neigbors`);
106
+ delete childNodeData.neighbors;
107
+ }
108
+ if (this.converter.options.instantNodeWriting && childNodeData) {
109
+ await childNode.write(childNodeData);
110
+ }
111
+ await childNode.save();
112
+ }
113
+ // The save after adding neighbors is the last one. Finalize the the node
114
+ this.finalize();
49
115
  }
50
- if (this.converter.options.instantNodeWriting && data) {
51
- await this.write(data);
116
+ /** Save 3DNodeIndexDocument in file on disk */
117
+ async save() {
118
+ if (this.data) {
119
+ await this.write(this.data);
120
+ }
52
121
  }
53
- }
54
- async addNeighbors() {
55
- if (this.finalized) {
56
- return;
122
+ /** Finalize the node */
123
+ finalize() {
124
+ this._finalized = true;
125
+ for (const child of this.children) {
126
+ child.flush();
127
+ }
57
128
  }
58
- const nodeData = await this.load();
59
- for (const childNode of this.children) {
60
- var _childNodeData$neighb, _nodeData$children;
61
- const childNodeData = await childNode.load();
62
- childNodeData.neighbors = (_childNodeData$neighb = childNodeData.neighbors) !== null && _childNodeData$neighb !== void 0 ? _childNodeData$neighb : [];
63
- if (Number(nodeData === null || nodeData === void 0 ? void 0 : (_nodeData$children = nodeData.children) === null || _nodeData$children === void 0 ? void 0 : _nodeData$children.length) < 1000) {
64
- for (const neighbor of nodeData.children || []) {
65
- if (childNode.id === neighbor.id) {
66
- continue;
67
- }
68
- childNodeData.neighbors.push({
69
- ...neighbor
70
- });
129
+ /**
130
+ * Write 3DNodeIndexDocument https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md
131
+ * @param node - Node3DIndexDocument object
132
+ */
133
+ async write(node) {
134
+ const path = join(this.converter.layers0Path, 'nodes', this.id);
135
+ if (this.converter.options.slpk) {
136
+ await this.converter.writeQueue.enqueue({
137
+ archiveKey: `nodes/${this.id}/3dNodeIndexDocument.json.gz`,
138
+ writePromise: () => writeFileForSlpk(path, JSON.stringify(node), '3dNodeIndexDocument.json', true, this.converter.compressList)
139
+ }, true);
140
+ }
141
+ else {
142
+ await this.converter.writeQueue.enqueue({ writePromise: () => writeFile(path, JSON.stringify(node)) }, true);
71
143
  }
72
- } else {
73
- console.warn(`Node ${childNode.id}: neighbors attribute is omited because of large number of neigbors`);
74
- delete childNodeData.neighbors;
75
- }
76
- if (this.converter.options.instantNodeWriting && childNodeData) {
77
- await childNode.write(childNodeData);
78
- }
79
- await childNode.save();
80
144
  }
81
- this.finalize();
82
- }
83
- async save() {
84
- if (this.data) {
85
- await this.write(this.data);
145
+ /**
146
+ * Load 3DNodeIndexDocument data from file on disk
147
+ * @returns 3DNodeIndexDocument object
148
+ */
149
+ async load() {
150
+ if (this.data) {
151
+ return this.data;
152
+ }
153
+ const path = this.id;
154
+ const parentNodePath = join(this.converter.layers0Path, 'nodes', path);
155
+ let parentNodeFileName = 'index.json';
156
+ if (this.converter.options.slpk) {
157
+ parentNodeFileName = '3dNodeIndexDocument.json';
158
+ }
159
+ return (await openJson(parentNodePath, parentNodeFileName));
86
160
  }
87
- }
88
- finalize() {
89
- this._finalized = true;
90
- for (const child of this.children) {
91
- child.flush();
161
+ /**
162
+ * Unload the Node data
163
+ */
164
+ flush() {
165
+ this.data = null;
92
166
  }
93
- }
94
- async write(node) {
95
- const path = join(this.converter.layers0Path, 'nodes', this.id);
96
- if (this.converter.options.slpk) {
97
- await this.converter.writeQueue.enqueue({
98
- archiveKey: `nodes/${this.id}/3dNodeIndexDocument.json.gz`,
99
- writePromise: () => writeFileForSlpk(path, JSON.stringify(node), '3dNodeIndexDocument.json', true, this.converter.compressList)
100
- }, true);
101
- } else {
102
- await this.converter.writeQueue.enqueue({
103
- writePromise: () => writeFile(path, JSON.stringify(node))
104
- }, true);
167
+ /**
168
+ * Create root node of the tree
169
+ * @param boundingVolumes - MBS and OOB bounding volumes data
170
+ * @param converter - I3SConverter instance
171
+ * @returns instance of NodeIndexDocument
172
+ */
173
+ static async createRootNode(boundingVolumes, converter) {
174
+ const rootData = NodeIndexDocument.createRootNodeIndexDocument(boundingVolumes);
175
+ const rootNode = await new NodeIndexDocument(0, converter).addData(rootData);
176
+ return rootNode;
105
177
  }
106
- }
107
- async load() {
108
- if (this.data) {
109
- return this.data;
178
+ /**
179
+ * Create NodeIndexDocument instance
180
+ * @param parentNode - parent NodeIndexDocument
181
+ * @param boundingVolumes - MBS and OOB bounding volumes data
182
+ * @param lodSelection - LOD metrics data
183
+ * @param nodeInPage - node data in node pages
184
+ * @param resources - resources extracted from gltf/b3dm file
185
+ * @param converter - I3SConverter instance
186
+ * @returns NodeIndexDocument instance
187
+ */
188
+ static async createNode({ parentNode, boundingVolumes, lodSelection, nodeInPage, resources, converter }) {
189
+ const data = await NodeIndexDocument.createNodeIndexDocument(parentNode, boundingVolumes, lodSelection, nodeInPage, resources);
190
+ const node = await new NodeIndexDocument(nodeInPage.index, converter).addData(data);
191
+ return node;
110
192
  }
111
- const path = this.id;
112
- const parentNodePath = join(this.converter.layers0Path, 'nodes', path);
113
- let parentNodeFileName = 'index.json';
114
- if (this.converter.options.slpk) {
115
- parentNodeFileName = '3dNodeIndexDocument.json';
193
+ /**
194
+ * Form 3DNodeIndexDocument data for the root node
195
+ * @param boundingVolumes - mbs and obb data about node's bounding volume
196
+ * @return 3DNodeIndexDocument data https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md
197
+ */
198
+ static createRootNodeIndexDocument(boundingVolumes) {
199
+ const root0data = {
200
+ version: `{${uuidv4().toUpperCase()}}`,
201
+ id: 'root',
202
+ level: 0,
203
+ lodSelection: [
204
+ {
205
+ metricType: 'maxScreenThresholdSQ',
206
+ maxError: 0
207
+ },
208
+ {
209
+ metricType: 'maxScreenThreshold',
210
+ maxError: 0
211
+ }
212
+ ],
213
+ ...boundingVolumes,
214
+ children: []
215
+ };
216
+ return transform(root0data, nodeTemplate());
116
217
  }
117
- return await openJson(parentNodePath, parentNodeFileName);
118
- }
119
- flush() {
120
- this.data = null;
121
- }
122
- static async createRootNode(boundingVolumes, converter) {
123
- const rootData = NodeIndexDocument.createRootNodeIndexDocument(boundingVolumes);
124
- const rootNode = await new NodeIndexDocument(0, converter).addData(rootData);
125
- return rootNode;
126
- }
127
- static async createNode(parentNode, boundingVolumes, lodSelection, nodeInPage, resources, converter) {
128
- const data = await NodeIndexDocument.createNodeIndexDocument(parentNode, boundingVolumes, lodSelection, nodeInPage, resources);
129
- const node = await new NodeIndexDocument(nodeInPage.index, converter).addData(data);
130
- return node;
131
- }
132
- static createRootNodeIndexDocument(boundingVolumes) {
133
- const root0data = {
134
- version: `{${uuidv4().toUpperCase()}}`,
135
- id: 'root',
136
- level: 0,
137
- lodSelection: [{
138
- metricType: 'maxScreenThresholdSQ',
139
- maxError: 0
140
- }, {
141
- metricType: 'maxScreenThreshold',
142
- maxError: 0
143
- }],
144
- ...boundingVolumes,
145
- children: []
146
- };
147
- return transform(root0data, nodeTemplate());
148
- }
149
- static async createNodeIndexDocument(parentNode, boundingVolumes, lodSelection, nodeInPage, resources) {
150
- const nodeId = nodeInPage.index;
151
- const parentNodeData = await parentNode.load();
152
- const nodeData = {
153
- version: parentNodeData.version,
154
- id: nodeId.toString(),
155
- level: parentNodeData.level + 1,
156
- ...boundingVolumes,
157
- lodSelection,
158
- parentNode: {
159
- id: parentNode.id,
160
- href: `../${parentNode.id}`,
161
- mbs: parentNodeData.mbs,
162
- obb: parentNodeData.obb
163
- },
164
- children: [],
165
- neighbors: []
166
- };
167
- const node = transform(nodeData, nodeTemplate());
168
- if (nodeInPage.mesh) {
169
- var _parentNode$converter, _parentNode$converter2, _parentNode$converter3, _parentNode$converter4;
170
- node.geometryData = [{
171
- href: './geometries/0'
172
- }];
173
- node.sharedResource = {
174
- href: './shared'
175
- };
176
- if ('texture' in resources && resources.texture || 'texelCountHint' in resources && resources.texelCountHint) {
177
- node.textureData = [{
178
- href: './textures/0'
179
- }, {
180
- href: './textures/1'
181
- }];
182
- }
183
- if ('attributes' in resources && resources.attributes && resources.attributes.length && (_parentNode$converter = parentNode.converter.layers0) !== null && _parentNode$converter !== void 0 && (_parentNode$converter2 = _parentNode$converter.attributeStorageInfo) !== null && _parentNode$converter2 !== void 0 && _parentNode$converter2.length || 'attributesCount' in resources && resources.attributesCount && (_parentNode$converter3 = parentNode.converter.layers0) !== null && _parentNode$converter3 !== void 0 && (_parentNode$converter4 = _parentNode$converter3.attributeStorageInfo) !== null && _parentNode$converter4 !== void 0 && _parentNode$converter4.length) {
184
- var _resources$attributes;
185
- const attributesLength = ('attributes' in resources ? (_resources$attributes = resources.attributes) === null || _resources$attributes === void 0 ? void 0 : _resources$attributes.length : resources.attributesCount) || 0;
186
- node.attributeData = [];
187
- const minimumLength = attributesLength < parentNode.converter.layers0.attributeStorageInfo.length ? attributesLength : parentNode.converter.layers0.attributeStorageInfo.length;
188
- for (let index = 0; index < minimumLength; index++) {
189
- const folderName = parentNode.converter.layers0.attributeStorageInfo[index].key;
190
- node.attributeData.push({
191
- href: `./attributes/${folderName}/0`
192
- });
218
+ /**
219
+ * Create a new Node3DIndexDocument
220
+ * @param parentNode - 3DNodeIndexDocument https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md object of the parent node
221
+ * @param boundingVolumes - Bounding volumes
222
+ * @param lodSelection - Level of Details (LOD) metrics
223
+ * @param nodeInPage - corresponding node object in a node page
224
+ * @param resources - the node resources data
225
+ * @param resources.texture - texture image
226
+ * @param resources.attributes - feature attributes
227
+ * @return 3DNodeIndexDocument https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md object
228
+ */
229
+ // eslint-disable-next-line complexity
230
+ static async createNodeIndexDocument(parentNode, boundingVolumes, lodSelection, nodeInPage, resources) {
231
+ const nodeId = nodeInPage.index;
232
+ const parentNodeData = await parentNode.load();
233
+ const nodeData = {
234
+ version: parentNodeData.version,
235
+ id: nodeId.toString(),
236
+ level: parentNodeData.level + 1,
237
+ ...boundingVolumes,
238
+ lodSelection,
239
+ parentNode: {
240
+ id: parentNode.id,
241
+ href: `../${parentNode.id}`,
242
+ mbs: parentNodeData.mbs,
243
+ obb: parentNodeData.obb
244
+ },
245
+ children: [],
246
+ neighbors: []
247
+ };
248
+ const node = transform(nodeData, nodeTemplate());
249
+ if (nodeInPage.mesh) {
250
+ node.geometryData = [{ href: './geometries/0' }];
251
+ node.sharedResource = { href: './shared' };
252
+ if (('texture' in resources && resources.texture) ||
253
+ ('texelCountHint' in resources && resources.texelCountHint)) {
254
+ node.textureData = [{ href: './textures/0' }, { href: './textures/1' }];
255
+ }
256
+ if (('attributes' in resources &&
257
+ resources.attributes &&
258
+ resources.attributes.length &&
259
+ parentNode.converter.layers0?.attributeStorageInfo?.length) ||
260
+ ('attributesCount' in resources &&
261
+ resources.attributesCount &&
262
+ parentNode.converter.layers0?.attributeStorageInfo?.length)) {
263
+ const attributesLength = ('attributes' in resources ? resources.attributes?.length : resources.attributesCount) ||
264
+ 0;
265
+ node.attributeData = [];
266
+ const minimumLength = attributesLength < parentNode.converter.layers0.attributeStorageInfo.length
267
+ ? attributesLength
268
+ : parentNode.converter.layers0.attributeStorageInfo.length;
269
+ for (let index = 0; index < minimumLength; index++) {
270
+ const folderName = parentNode.converter.layers0.attributeStorageInfo[index].key;
271
+ node.attributeData.push({ href: `./attributes/${folderName}/0` });
272
+ }
273
+ }
193
274
  }
194
- }
275
+ return node;
195
276
  }
196
- return node;
197
- }
198
277
  }
199
- //# sourceMappingURL=node-index-document.js.map
@@ -1,5 +1,5 @@
1
1
  import { NodeInPage } from '@loaders.gl/i3s';
2
- import I3SConverter from '../i3s-converter';
2
+ import I3SConverter from "../i3s-converter.js";
3
3
  /**
4
4
  * class NodePages - wrapper of nodePages array
5
5
  *
@@ -1 +1 @@
1
- {"version":3,"file":"node-pages.d.ts","sourceRoot":"","sources":["../../../src/i3s-converter/helpers/node-pages.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAE3C,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,CAAC,GAAG,IAAI,OAAA,KAAK,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;IAC/C,SAAS,EAAE,YAAY,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE;QAAC,KAAK,EAAE,UAAU,EAAE,CAAA;KAAC,EAAE,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAK;IAE5B;;;;;OAKG;gBACS,aAAa,KAAA,EAAE,YAAY,KAAA,EAAE,SAAS,EAAE,YAAY;IAWhE;;;OAGG;IACH,gBAAgB,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,OAAA,KAAK,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,IAAI;IAIjE;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;;;OAIG;YACW,YAAY;IAW1B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;;;OAIG;YACW,eAAe;IAQ7B;;;;OAIG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE;QAAC,KAAK,EAAE,UAAU,EAAE,CAAA;KAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAMpF;;;;OAIG;YACW,gBAAgB;IAS9B;;;;;OAKG;IACG,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAgBpE;;;OAGG;IACG,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC/C;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAenC;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA0B3B;;;OAGG;IACH,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAMnD;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU;IAMhE;;;;OAIG;IACH,MAAM,CAAC,sBAAsB,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAUzE;;;;OAIG;IACH,MAAM,CAAC,yBAAyB,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAO7E;;;OAGG;IACH,MAAM,CAAC,2BAA2B,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAO1D;;;;OAIG;IACH,MAAM,CAAC,0BAA0B,CAAC,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAO/E;;;;OAIG;IACH,MAAM,CAAC,4BAA4B,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;CAMpF"}
1
+ {"version":3,"file":"node-pages.d.ts","sourceRoot":"","sources":["../../../src/i3s-converter/helpers/node-pages.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAE3C,OAAO,YAAY,4BAAyB;AAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,CAAC,GAAG,IAAI,OAAA,KAAK,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;IAC/C,SAAS,EAAE,YAAY,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE;QAAC,KAAK,EAAE,UAAU,EAAE,CAAA;KAAC,EAAE,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAK;IAE5B;;;;;OAKG;gBACS,aAAa,KAAA,EAAE,YAAY,KAAA,EAAE,SAAS,EAAE,YAAY;IAWhE;;;OAGG;IACH,gBAAgB,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,OAAA,KAAK,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,IAAI;IAIjE;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;;;OAIG;YACW,YAAY;IAU1B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;;;OAIG;YACW,eAAe;IAQ7B;;;;OAIG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE;QAAC,KAAK,EAAE,UAAU,EAAE,CAAA;KAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAMpF;;;;OAIG;YACW,gBAAgB;IAS9B;;;;;OAKG;IACG,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAgBpE;;;OAGG;IACG,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAiC/C;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAenC;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA0B3B;;;OAGG;IACH,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAMnD;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU;IAMhE;;;;OAIG;IACH,MAAM,CAAC,sBAAsB,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAUzE;;;;OAIG;IACH,MAAM,CAAC,yBAAyB,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAO7E;;;OAGG;IACH,MAAM,CAAC,2BAA2B,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAO1D;;;;OAIG;IACH,MAAM,CAAC,0BAA0B,CAAC,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAO/E;;;;OAIG;IACH,MAAM,CAAC,4BAA4B,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;CAMpF"}