@loaders.gl/tile-converter 4.0.0-alpha.4 → 4.0.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 (407) hide show
  1. package/dist/3d-tiles-attributes-worker.d.ts +28 -0
  2. package/dist/3d-tiles-attributes-worker.d.ts.map +1 -0
  3. package/dist/3d-tiles-attributes-worker.js +3 -0
  4. package/dist/3d-tiles-attributes-worker.js.map +7 -0
  5. package/dist/3d-tiles-converter/3d-tiles-converter.d.ts +90 -0
  6. package/dist/3d-tiles-converter/3d-tiles-converter.d.ts.map +1 -0
  7. package/dist/3d-tiles-converter/3d-tiles-converter.js +273 -231
  8. package/dist/3d-tiles-converter/helpers/b3dm-converter.d.ts +79 -18
  9. package/dist/3d-tiles-converter/helpers/b3dm-converter.d.ts.map +1 -0
  10. package/dist/3d-tiles-converter/helpers/b3dm-converter.js +269 -236
  11. package/dist/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.d.ts +4 -7
  12. package/dist/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.d.ts.map +1 -0
  13. package/dist/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +22 -9
  14. package/dist/3d-tiles-converter/helpers/texture-atlas.d.ts +9 -0
  15. package/dist/3d-tiles-converter/helpers/texture-atlas.d.ts.map +1 -0
  16. package/dist/3d-tiles-converter/helpers/texture-atlas.js +47 -28
  17. package/dist/3d-tiles-converter/json-templates/tileset.d.ts +15 -0
  18. package/dist/3d-tiles-converter/json-templates/tileset.d.ts.map +1 -0
  19. package/dist/3d-tiles-converter/json-templates/tileset.js +42 -36
  20. package/dist/bundle.d.ts +2 -0
  21. package/dist/bundle.d.ts.map +1 -0
  22. package/dist/bundle.js +2 -2
  23. package/dist/constants.d.ts +2 -0
  24. package/dist/constants.d.ts.map +1 -0
  25. package/dist/constants.js +4 -0
  26. package/dist/converter-cli.d.ts +2 -0
  27. package/dist/converter-cli.d.ts.map +1 -0
  28. package/dist/converter-cli.js +280 -0
  29. package/dist/converter.min.js +186 -190
  30. package/dist/deps-installer/deps-installer.d.ts +11 -3
  31. package/dist/deps-installer/deps-installer.d.ts.map +1 -0
  32. package/dist/deps-installer/deps-installer.js +60 -23
  33. package/dist/dist.min.js +63496 -0
  34. package/dist/es5/3d-tiles-attributes-worker.js +25 -0
  35. package/dist/es5/3d-tiles-attributes-worker.js.map +1 -0
  36. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js +470 -0
  37. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js.map +1 -0
  38. package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js +301 -0
  39. package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -0
  40. package/dist/es5/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +18 -0
  41. package/dist/es5/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +1 -0
  42. package/dist/es5/3d-tiles-converter/helpers/texture-atlas.js +33 -0
  43. package/dist/es5/3d-tiles-converter/helpers/texture-atlas.js.map +1 -0
  44. package/dist/es5/3d-tiles-converter/json-templates/tileset.js +61 -0
  45. package/dist/es5/3d-tiles-converter/json-templates/tileset.js.map +1 -0
  46. package/dist/es5/bundle.js +6 -0
  47. package/dist/es5/bundle.js.map +1 -0
  48. package/dist/es5/constants.js +9 -0
  49. package/dist/es5/constants.js.map +1 -0
  50. package/dist/es5/converter-cli.js +289 -0
  51. package/dist/es5/converter-cli.js.map +1 -0
  52. package/dist/es5/deps-installer/deps-installer.js +123 -0
  53. package/dist/es5/deps-installer/deps-installer.js.map +1 -0
  54. package/dist/es5/i3s-attributes-worker.js +25 -0
  55. package/dist/es5/i3s-attributes-worker.js.map +1 -0
  56. package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js +116 -0
  57. package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js.map +1 -0
  58. package/dist/es5/i3s-converter/helpers/coordinate-converter.js +90 -0
  59. package/dist/es5/i3s-converter/helpers/coordinate-converter.js.map +1 -0
  60. package/dist/es5/i3s-converter/helpers/create-scene-server-path.js +41 -0
  61. package/dist/es5/i3s-converter/helpers/create-scene-server-path.js.map +1 -0
  62. package/dist/es5/i3s-converter/helpers/feature-attributes.js +174 -0
  63. package/dist/es5/i3s-converter/helpers/feature-attributes.js.map +1 -0
  64. package/dist/es5/i3s-converter/helpers/geometry-attributes.js +213 -0
  65. package/dist/es5/i3s-converter/helpers/geometry-attributes.js.map +1 -0
  66. package/dist/es5/i3s-converter/helpers/geometry-converter.js +1173 -0
  67. package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +1 -0
  68. package/dist/es5/i3s-converter/helpers/gltf-attributes.js +83 -0
  69. package/dist/es5/i3s-converter/helpers/gltf-attributes.js.map +1 -0
  70. package/dist/es5/i3s-converter/helpers/node-debug.js +76 -0
  71. package/dist/es5/i3s-converter/helpers/node-debug.js.map +1 -0
  72. package/dist/es5/i3s-converter/helpers/node-index-document.js +492 -0
  73. package/dist/es5/i3s-converter/helpers/node-index-document.js.map +1 -0
  74. package/dist/es5/i3s-converter/helpers/node-pages.js +519 -0
  75. package/dist/es5/i3s-converter/helpers/node-pages.js.map +1 -0
  76. package/dist/es5/i3s-converter/i3s-converter.js +1519 -0
  77. package/dist/es5/i3s-converter/i3s-converter.js.map +1 -0
  78. package/dist/es5/i3s-converter/json-templates/geometry-definitions.js +107 -0
  79. package/dist/es5/i3s-converter/json-templates/geometry-definitions.js.map +1 -0
  80. package/dist/es5/i3s-converter/json-templates/layers.js +163 -0
  81. package/dist/es5/i3s-converter/json-templates/layers.js.map +1 -0
  82. package/dist/es5/i3s-converter/json-templates/metadata.js +31 -0
  83. package/dist/es5/i3s-converter/json-templates/metadata.js.map +1 -0
  84. package/dist/es5/i3s-converter/json-templates/node.js +99 -0
  85. package/dist/es5/i3s-converter/json-templates/node.js.map +1 -0
  86. package/dist/es5/i3s-converter/json-templates/scene-server.js +39 -0
  87. package/dist/es5/i3s-converter/json-templates/scene-server.js.map +1 -0
  88. package/dist/es5/i3s-converter/json-templates/shared-resources.js +173 -0
  89. package/dist/es5/i3s-converter/json-templates/shared-resources.js.map +1 -0
  90. package/dist/es5/i3s-converter/json-templates/store.js +107 -0
  91. package/dist/es5/i3s-converter/json-templates/store.js.map +1 -0
  92. package/dist/es5/i3s-converter/types.js +2 -0
  93. package/dist/es5/i3s-converter/types.js.map +1 -0
  94. package/dist/es5/i3s-server/app.js +18 -0
  95. package/dist/es5/i3s-server/app.js.map +1 -0
  96. package/dist/es5/i3s-server/controllers/index-controller.js +55 -0
  97. package/dist/es5/i3s-server/controllers/index-controller.js.map +1 -0
  98. package/dist/es5/i3s-server/routes/index.js +37 -0
  99. package/dist/es5/i3s-server/routes/index.js.map +1 -0
  100. package/dist/es5/index.js +21 -0
  101. package/dist/es5/index.js.map +1 -0
  102. package/dist/es5/lib/utils/compress-util.js +346 -0
  103. package/dist/es5/lib/utils/compress-util.js.map +1 -0
  104. package/dist/es5/lib/utils/file-utils.js +208 -0
  105. package/dist/es5/lib/utils/file-utils.js.map +1 -0
  106. package/dist/es5/lib/utils/lod-conversion-utils.js +44 -0
  107. package/dist/es5/lib/utils/lod-conversion-utils.js.map +1 -0
  108. package/dist/es5/lib/utils/queue.js +47 -0
  109. package/dist/es5/lib/utils/queue.js.map +1 -0
  110. package/dist/es5/lib/utils/statistic-utills.d.ts +25 -0
  111. package/dist/es5/lib/utils/statistic-utills.js +147 -0
  112. package/dist/es5/lib/utils/statistic-utills.js.map +1 -0
  113. package/dist/es5/lib/utils/write-queue.js +214 -0
  114. package/dist/es5/lib/utils/write-queue.js.map +1 -0
  115. package/dist/es5/pgm-loader.js +41 -0
  116. package/dist/es5/pgm-loader.js.map +1 -0
  117. package/dist/es5/workers/3d-tiles-attributes-worker.js +28 -0
  118. package/dist/es5/workers/3d-tiles-attributes-worker.js.map +1 -0
  119. package/dist/es5/workers/i3s-attributes-worker.js +30 -0
  120. package/dist/es5/workers/i3s-attributes-worker.js.map +1 -0
  121. package/dist/esm/3d-tiles-attributes-worker.js +16 -0
  122. package/dist/esm/3d-tiles-attributes-worker.js.map +1 -0
  123. package/dist/esm/3d-tiles-converter/3d-tiles-converter.js +248 -0
  124. package/dist/esm/3d-tiles-converter/3d-tiles-converter.js.map +1 -0
  125. package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js +224 -0
  126. package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -0
  127. package/dist/esm/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +10 -0
  128. package/dist/esm/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +1 -0
  129. package/dist/esm/3d-tiles-converter/helpers/texture-atlas.js +27 -0
  130. package/dist/esm/3d-tiles-converter/helpers/texture-atlas.js.map +1 -0
  131. package/dist/esm/3d-tiles-converter/json-templates/tileset.js +37 -0
  132. package/dist/esm/3d-tiles-converter/json-templates/tileset.js.map +1 -0
  133. package/dist/esm/bundle.js +4 -0
  134. package/dist/esm/bundle.js.map +1 -0
  135. package/dist/esm/constants.js +2 -0
  136. package/dist/esm/constants.js.map +1 -0
  137. package/dist/esm/converter-cli.js +232 -0
  138. package/dist/esm/converter-cli.js.map +1 -0
  139. package/dist/esm/deps-installer/deps-installer.js +44 -0
  140. package/dist/esm/deps-installer/deps-installer.js.map +1 -0
  141. package/dist/esm/i3s-attributes-worker.js +16 -0
  142. package/dist/esm/i3s-attributes-worker.js.map +1 -0
  143. package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js +105 -0
  144. package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js.map +1 -0
  145. package/dist/esm/i3s-converter/helpers/coordinate-converter.js +80 -0
  146. package/dist/esm/i3s-converter/helpers/coordinate-converter.js.map +1 -0
  147. package/dist/esm/i3s-converter/helpers/create-scene-server-path.js +16 -0
  148. package/dist/esm/i3s-converter/helpers/create-scene-server-path.js.map +1 -0
  149. package/dist/esm/i3s-converter/helpers/feature-attributes.js +147 -0
  150. package/dist/esm/i3s-converter/helpers/feature-attributes.js.map +1 -0
  151. package/{src → dist/esm}/i3s-converter/helpers/geometry-attributes.js +80 -106
  152. package/dist/esm/i3s-converter/helpers/geometry-attributes.js.map +1 -0
  153. package/dist/esm/i3s-converter/helpers/geometry-converter.js +887 -0
  154. package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +1 -0
  155. package/dist/esm/i3s-converter/helpers/gltf-attributes.js +76 -0
  156. package/dist/esm/i3s-converter/helpers/gltf-attributes.js.map +1 -0
  157. package/{src → dist/esm}/i3s-converter/helpers/node-debug.js +20 -41
  158. package/dist/esm/i3s-converter/helpers/node-debug.js.map +1 -0
  159. package/dist/esm/i3s-converter/helpers/node-index-document.js +188 -0
  160. package/dist/esm/i3s-converter/helpers/node-index-document.js.map +1 -0
  161. package/dist/esm/i3s-converter/helpers/node-pages.js +206 -0
  162. package/dist/esm/i3s-converter/helpers/node-pages.js.map +1 -0
  163. package/dist/esm/i3s-converter/i3s-converter.js +771 -0
  164. package/dist/esm/i3s-converter/i3s-converter.js.map +1 -0
  165. package/dist/esm/i3s-converter/json-templates/geometry-definitions.js +89 -0
  166. package/dist/esm/i3s-converter/json-templates/geometry-definitions.js.map +1 -0
  167. package/dist/esm/i3s-converter/json-templates/layers.js +133 -0
  168. package/dist/esm/i3s-converter/json-templates/layers.js.map +1 -0
  169. package/dist/esm/i3s-converter/json-templates/metadata.js +22 -0
  170. package/dist/esm/i3s-converter/json-templates/metadata.js.map +1 -0
  171. package/dist/esm/i3s-converter/json-templates/node.js +80 -0
  172. package/dist/esm/i3s-converter/json-templates/node.js.map +1 -0
  173. package/dist/esm/i3s-converter/json-templates/scene-server.js +28 -0
  174. package/dist/esm/i3s-converter/json-templates/scene-server.js.map +1 -0
  175. package/dist/esm/i3s-converter/json-templates/shared-resources.js +123 -0
  176. package/dist/esm/i3s-converter/json-templates/shared-resources.js.map +1 -0
  177. package/dist/esm/i3s-converter/json-templates/store.js +98 -0
  178. package/dist/esm/i3s-converter/json-templates/store.js.map +1 -0
  179. package/dist/esm/i3s-converter/types.js +2 -0
  180. package/dist/esm/i3s-converter/types.js.map +1 -0
  181. package/dist/esm/i3s-server/app.js +16 -0
  182. package/dist/esm/i3s-server/app.js.map +1 -0
  183. package/dist/esm/i3s-server/bin/www +102 -0
  184. package/dist/esm/i3s-server/certs/cert.pem +19 -0
  185. package/dist/esm/i3s-server/certs/key.pem +27 -0
  186. package/dist/esm/i3s-server/controllers/index-controller.js +24 -0
  187. package/dist/esm/i3s-server/controllers/index-controller.js.map +1 -0
  188. package/dist/esm/i3s-server/routes/index.js +16 -0
  189. package/dist/esm/i3s-server/routes/index.js.map +1 -0
  190. package/dist/esm/index.js +3 -0
  191. package/dist/esm/index.js.map +1 -0
  192. package/dist/esm/lib/utils/compress-util.js +168 -0
  193. package/dist/esm/lib/utils/compress-util.js.map +1 -0
  194. package/dist/esm/lib/utils/file-utils.js +87 -0
  195. package/dist/esm/lib/utils/file-utils.js.map +1 -0
  196. package/dist/esm/lib/utils/lod-conversion-utils.js +37 -0
  197. package/dist/esm/lib/utils/lod-conversion-utils.js.map +1 -0
  198. package/dist/esm/lib/utils/queue.js +15 -0
  199. package/dist/esm/lib/utils/queue.js.map +1 -0
  200. package/dist/esm/lib/utils/statistic-utills.d.ts +25 -0
  201. package/dist/esm/lib/utils/statistic-utills.js +62 -0
  202. package/dist/esm/lib/utils/statistic-utills.js.map +1 -0
  203. package/dist/esm/lib/utils/write-queue.js +85 -0
  204. package/dist/esm/lib/utils/write-queue.js.map +1 -0
  205. package/dist/esm/pgm-loader.js +15 -0
  206. package/dist/esm/pgm-loader.js.map +1 -0
  207. package/dist/esm/workers/3d-tiles-attributes-worker.js +8 -0
  208. package/dist/esm/workers/3d-tiles-attributes-worker.js.map +1 -0
  209. package/dist/esm/workers/i3s-attributes-worker.js +7 -0
  210. package/dist/esm/workers/i3s-attributes-worker.js.map +1 -0
  211. package/dist/i3s-attributes-worker.d.ts +37 -0
  212. package/dist/i3s-attributes-worker.d.ts.map +1 -0
  213. package/dist/i3s-attributes-worker.js +9 -0
  214. package/dist/i3s-attributes-worker.js.map +7 -0
  215. package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts +11 -0
  216. package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts.map +1 -0
  217. package/dist/i3s-converter/helpers/batch-ids-extensions.js +141 -0
  218. package/dist/i3s-converter/helpers/coordinate-converter.d.ts +41 -0
  219. package/dist/i3s-converter/helpers/coordinate-converter.d.ts.map +1 -0
  220. package/dist/i3s-converter/helpers/coordinate-converter.js +120 -42
  221. package/dist/i3s-converter/helpers/create-scene-server-path.d.ts +9 -0
  222. package/dist/i3s-converter/helpers/create-scene-server-path.d.ts.map +1 -0
  223. package/dist/i3s-converter/helpers/create-scene-server-path.js +27 -15
  224. package/dist/i3s-converter/helpers/feature-attributes.d.ts +56 -0
  225. package/dist/i3s-converter/helpers/feature-attributes.d.ts.map +1 -0
  226. package/dist/i3s-converter/helpers/feature-attributes.js +216 -0
  227. package/dist/i3s-converter/helpers/geometry-attributes.d.ts +8 -0
  228. package/dist/i3s-converter/helpers/geometry-attributes.d.ts.map +1 -0
  229. package/dist/i3s-converter/helpers/geometry-attributes.js +188 -185
  230. package/dist/i3s-converter/helpers/geometry-converter.d.ts +36 -35
  231. package/dist/i3s-converter/helpers/geometry-converter.d.ts.map +1 -0
  232. package/dist/i3s-converter/helpers/geometry-converter.js +1149 -650
  233. package/dist/i3s-converter/helpers/gltf-attributes.d.ts +9 -0
  234. package/dist/i3s-converter/helpers/gltf-attributes.d.ts.map +1 -0
  235. package/dist/i3s-converter/helpers/gltf-attributes.js +88 -0
  236. package/dist/i3s-converter/helpers/node-debug.d.ts +8 -0
  237. package/dist/i3s-converter/helpers/node-debug.d.ts.map +1 -0
  238. package/dist/i3s-converter/helpers/node-debug.js +106 -74
  239. package/dist/i3s-converter/helpers/node-index-document.d.ts +95 -0
  240. package/dist/i3s-converter/helpers/node-index-document.d.ts.map +1 -0
  241. package/dist/i3s-converter/helpers/node-index-document.js +250 -0
  242. package/dist/i3s-converter/helpers/node-pages.d.ts +125 -113
  243. package/dist/i3s-converter/helpers/node-pages.d.ts.map +1 -0
  244. package/dist/i3s-converter/helpers/node-pages.js +313 -133
  245. package/dist/i3s-converter/i3s-converter.d.ts +267 -0
  246. package/dist/i3s-converter/i3s-converter.d.ts.map +1 -0
  247. package/dist/i3s-converter/i3s-converter.js +860 -861
  248. package/dist/i3s-converter/json-templates/geometry-definitions.d.ts +7 -0
  249. package/dist/i3s-converter/json-templates/geometry-definitions.d.ts.map +1 -0
  250. package/dist/i3s-converter/json-templates/geometry-definitions.js +87 -0
  251. package/dist/i3s-converter/json-templates/layers.d.ts +70 -0
  252. package/dist/i3s-converter/json-templates/layers.d.ts.map +1 -0
  253. package/dist/i3s-converter/json-templates/layers.js +138 -190
  254. package/dist/i3s-converter/json-templates/metadata.d.ts +22 -0
  255. package/dist/i3s-converter/json-templates/metadata.d.ts.map +1 -0
  256. package/dist/i3s-converter/json-templates/metadata.js +25 -22
  257. package/dist/i3s-converter/json-templates/node.d.ts +61 -0
  258. package/dist/i3s-converter/json-templates/node.d.ts.map +1 -0
  259. package/dist/i3s-converter/json-templates/node.js +88 -79
  260. package/dist/i3s-converter/json-templates/scene-server.d.ts +28 -0
  261. package/dist/i3s-converter/json-templates/scene-server.d.ts.map +1 -0
  262. package/dist/i3s-converter/json-templates/scene-server.js +31 -28
  263. package/dist/i3s-converter/json-templates/shared-resources.d.ts +14 -0
  264. package/dist/i3s-converter/json-templates/shared-resources.d.ts.map +1 -0
  265. package/dist/i3s-converter/json-templates/shared-resources.js +124 -125
  266. package/dist/i3s-converter/json-templates/store.d.ts +95 -0
  267. package/dist/i3s-converter/json-templates/store.d.ts.map +1 -0
  268. package/dist/i3s-converter/json-templates/store.js +100 -95
  269. package/dist/i3s-converter/types.d.ts +145 -0
  270. package/dist/i3s-converter/types.d.ts.map +1 -0
  271. package/dist/i3s-converter/types.js +2 -0
  272. package/dist/i3s-server/app.d.ts +3 -0
  273. package/dist/i3s-server/app.d.ts.map +1 -0
  274. package/dist/i3s-server/app.js +2 -9
  275. package/dist/i3s-server/controllers/index-controller.d.ts +2 -0
  276. package/dist/i3s-server/controllers/index-controller.d.ts.map +1 -0
  277. package/dist/i3s-server/controllers/index-controller.js +16 -24
  278. package/dist/i3s-server/routes/index.d.ts +3 -0
  279. package/dist/i3s-server/routes/index.d.ts.map +1 -0
  280. package/dist/i3s-server/routes/index.js +11 -15
  281. package/dist/index.d.ts +3 -0
  282. package/dist/index.d.ts.map +1 -0
  283. package/dist/index.js +10 -5
  284. package/dist/lib/utils/compress-util.d.ts +45 -0
  285. package/dist/lib/utils/compress-util.d.ts.map +1 -0
  286. package/dist/lib/utils/compress-util.js +238 -160
  287. package/dist/lib/utils/file-utils.d.ts +22 -14
  288. package/dist/lib/utils/file-utils.d.ts.map +1 -0
  289. package/dist/lib/utils/file-utils.js +133 -36
  290. package/dist/lib/utils/lod-conversion-utils.d.ts +21 -12
  291. package/dist/lib/utils/lod-conversion-utils.d.ts.map +1 -0
  292. package/dist/lib/utils/lod-conversion-utils.js +72 -39
  293. package/dist/lib/utils/queue.d.ts +7 -0
  294. package/dist/lib/utils/queue.d.ts.map +1 -0
  295. package/dist/lib/utils/queue.js +18 -0
  296. package/dist/lib/utils/statistic-utills.d.ts +3 -25
  297. package/dist/lib/utils/statistic-utills.d.ts.map +1 -0
  298. package/dist/lib/utils/statistic-utills.js +58 -67
  299. package/dist/lib/utils/write-queue.d.ts +39 -0
  300. package/dist/lib/utils/write-queue.d.ts.map +1 -0
  301. package/dist/lib/utils/write-queue.js +80 -0
  302. package/dist/pgm-loader.d.ts +6 -0
  303. package/dist/pgm-loader.d.ts.map +1 -0
  304. package/dist/pgm-loader.js +23 -14
  305. package/dist/workers/3d-tiles-attributes-worker.d.ts +2 -0
  306. package/dist/workers/3d-tiles-attributes-worker.d.ts.map +1 -0
  307. package/dist/workers/3d-tiles-attributes-worker.js +9 -0
  308. package/dist/workers/i3s-attributes-worker.d.ts +2 -0
  309. package/dist/workers/i3s-attributes-worker.d.ts.map +1 -0
  310. package/dist/workers/i3s-attributes-worker.js +5 -0
  311. package/package.json +35 -24
  312. package/src/3d-tiles-attributes-worker.ts +43 -0
  313. package/src/3d-tiles-converter/3d-tiles-converter.ts +124 -59
  314. package/src/3d-tiles-converter/helpers/{b3dm-converter.js → b3dm-converter.ts} +71 -38
  315. package/src/3d-tiles-converter/helpers/{i3s-obb-to-3d-tiles-obb.js → i3s-obb-to-3d-tiles-obb.ts} +16 -1
  316. package/src/3d-tiles-converter/helpers/texture-atlas.ts +4 -4
  317. package/src/3d-tiles-converter/json-templates/{tileset.js → tileset.ts} +9 -9
  318. package/src/constants.ts +2 -0
  319. package/src/converter-cli.ts +370 -0
  320. package/src/deps-installer/deps-installer.ts +71 -0
  321. package/src/i3s-attributes-worker.ts +50 -0
  322. package/src/i3s-converter/helpers/batch-ids-extensions.ts +206 -0
  323. package/src/i3s-converter/helpers/coordinate-converter.ts +87 -27
  324. package/src/i3s-converter/helpers/create-scene-server-path.ts +29 -0
  325. package/src/i3s-converter/helpers/feature-attributes.ts +247 -0
  326. package/src/i3s-converter/helpers/geometry-attributes.ts +267 -0
  327. package/src/i3s-converter/helpers/geometry-converter.ts +1608 -0
  328. package/src/i3s-converter/helpers/gltf-attributes.ts +103 -0
  329. package/src/i3s-converter/helpers/node-debug.ts +146 -0
  330. package/src/i3s-converter/helpers/node-index-document.ts +315 -0
  331. package/src/i3s-converter/helpers/node-pages.ts +344 -0
  332. package/src/i3s-converter/i3s-converter.ts +557 -627
  333. package/src/i3s-converter/json-templates/geometry-definitions.ts +83 -0
  334. package/src/i3s-converter/json-templates/layers.ts +137 -0
  335. package/src/i3s-converter/json-templates/{metadata.js → metadata.ts} +2 -2
  336. package/src/i3s-converter/json-templates/{node.js → node.ts} +12 -12
  337. package/src/i3s-converter/json-templates/{scene-server.js → scene-server.ts} +2 -2
  338. package/src/i3s-converter/json-templates/{shared-resources.js → shared-resources.ts} +17 -17
  339. package/src/i3s-converter/types.ts +165 -0
  340. package/src/index.ts +0 -4
  341. package/src/lib/utils/{compress-util.js → compress-util.ts} +105 -18
  342. package/src/lib/utils/file-utils.ts +139 -0
  343. package/src/lib/utils/{lod-conversion-utils.js → lod-conversion-utils.ts} +27 -5
  344. package/src/lib/utils/queue.ts +17 -0
  345. package/src/lib/utils/write-queue.ts +110 -0
  346. package/src/pgm-loader.ts +3 -3
  347. package/src/workers/3d-tiles-attributes-worker.ts +6 -0
  348. package/src/workers/i3s-attributes-worker.ts +7 -0
  349. package/dist/3d-tiles-converter/3d-tiles-converter.js.map +0 -1
  350. package/dist/3d-tiles-converter/helpers/b3dm-converter.js.map +0 -1
  351. package/dist/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +0 -1
  352. package/dist/3d-tiles-converter/helpers/texture-atlas.js.map +0 -1
  353. package/dist/3d-tiles-converter/json-templates/tileset.js.map +0 -1
  354. package/dist/bundle.js.map +0 -1
  355. package/dist/deps-installer/deps-installer.js.map +0 -1
  356. package/dist/i3s-converter/helpers/coordinate-converter.js.map +0 -1
  357. package/dist/i3s-converter/helpers/create-scene-server-path.js.map +0 -1
  358. package/dist/i3s-converter/helpers/geometry-attributes.js.map +0 -1
  359. package/dist/i3s-converter/helpers/geometry-converter.js.map +0 -1
  360. package/dist/i3s-converter/helpers/node-debug.js.map +0 -1
  361. package/dist/i3s-converter/helpers/node-pages.js.map +0 -1
  362. package/dist/i3s-converter/i3s-converter.js.map +0 -1
  363. package/dist/i3s-converter/json-templates/layers.js.map +0 -1
  364. package/dist/i3s-converter/json-templates/metadata.js.map +0 -1
  365. package/dist/i3s-converter/json-templates/node.js.map +0 -1
  366. package/dist/i3s-converter/json-templates/scene-server.js.map +0 -1
  367. package/dist/i3s-converter/json-templates/shared-resources.js.map +0 -1
  368. package/dist/i3s-converter/json-templates/store.js.map +0 -1
  369. package/dist/i3s-server/app.js.map +0 -1
  370. package/dist/i3s-server/controllers/index-controller.js.map +0 -1
  371. package/dist/i3s-server/routes/index.js.map +0 -1
  372. package/dist/index.js.map +0 -1
  373. package/dist/lib/geoid-height-model.d.ts +0 -41
  374. package/dist/lib/geoid-height-model.js +0 -140
  375. package/dist/lib/geoid-height-model.js.map +0 -1
  376. package/dist/lib/pgm-parser.d.ts +0 -14
  377. package/dist/lib/pgm-parser.js +0 -183
  378. package/dist/lib/pgm-parser.js.map +0 -1
  379. package/dist/lib/utils/compress-util.js.map +0 -1
  380. package/dist/lib/utils/compress-utils.d.ts +0 -53
  381. package/dist/lib/utils/file-utils.js.map +0 -1
  382. package/dist/lib/utils/lod-conversion-utils.js.map +0 -1
  383. package/dist/lib/utils/statistic-utills.js.map +0 -1
  384. package/dist/pgm-loader.js.map +0 -1
  385. package/src/3d-tiles-converter/helpers/b3dm-converter.d.ts +0 -23
  386. package/src/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.d.ts +0 -16
  387. package/src/deps-installer/deps-installer.d.ts +0 -10
  388. package/src/deps-installer/deps-installer.js +0 -22
  389. package/src/i3s-converter/helpers/create-scene-server-path.js +0 -25
  390. package/src/i3s-converter/helpers/geometry-converter.d.ts +0 -40
  391. package/src/i3s-converter/helpers/geometry-converter.js +0 -915
  392. package/src/i3s-converter/helpers/node-pages.d.ts +0 -144
  393. package/src/i3s-converter/helpers/node-pages.js +0 -208
  394. package/src/i3s-converter/json-templates/layers.js +0 -199
  395. package/src/lib/geoid-height-model.d.ts +0 -41
  396. package/src/lib/geoid-height-model.js +0 -239
  397. package/src/lib/pgm-parser.d.ts +0 -14
  398. package/src/lib/pgm-parser.js +0 -179
  399. package/src/lib/utils/compress-utils.d.ts +0 -53
  400. package/src/lib/utils/file-utils.d.ts +0 -43
  401. package/src/lib/utils/file-utils.js +0 -38
  402. package/src/lib/utils/lod-conversion-utils.d.ts +0 -32
  403. /package/dist/{i3s-server → es5/i3s-server}/bin/www +0 -0
  404. /package/dist/{i3s-server → es5/i3s-server}/certs/cert.pem +0 -0
  405. /package/dist/{i3s-server → es5/i3s-server}/certs/key.pem +0 -0
  406. /package/src/i3s-converter/json-templates/{store.js → store.ts} +0 -0
  407. /package/src/lib/utils/{statistic-utills.js → statistic-utills.ts} +0 -0
@@ -0,0 +1,103 @@
1
+ import type {B3DMContent} from '@loaders.gl/3d-tiles';
2
+ import type {GLTFAccessorPostprocessed, GLTFNodePostprocessed} from '@loaders.gl/gltf';
3
+ import type {B3DMAttributesData} from '../../i3s-attributes-worker';
4
+
5
+ type AttributesObject = {
6
+ [k: string]: GLTFAccessorPostprocessed;
7
+ };
8
+
9
+ /**
10
+ * Keep only values for B3DM attributes to pass data to worker thread.
11
+ * @param attributes
12
+ */
13
+ function getB3DMAttributesWithoutBufferView(attributes: AttributesObject): AttributesObject {
14
+ const attributesWithoutBufferView = {};
15
+
16
+ for (const attributeName in attributes) {
17
+ attributesWithoutBufferView[attributeName] = {
18
+ value: attributes[attributeName].value
19
+ };
20
+ }
21
+
22
+ return attributesWithoutBufferView;
23
+ }
24
+
25
+ /**
26
+ * Prepare attributes for conversion to avoid binary data breaking in worker thread.
27
+ * @param tileContent
28
+ * @returns
29
+ */
30
+ export function prepareDataForAttributesConversion(tileContent: B3DMContent): B3DMAttributesData {
31
+ let nodes =
32
+ tileContent.gltf?.scene?.nodes ||
33
+ tileContent.gltf?.scenes?.[0]?.nodes ||
34
+ tileContent.gltf?.nodes ||
35
+ [];
36
+
37
+ const images =
38
+ tileContent.gltf?.images?.map((imageObject) => {
39
+ // Need data only for uncompressed images because we can't get batchIds from compressed textures.
40
+ if (imageObject?.image?.compressed) {
41
+ return {
42
+ data: null,
43
+ compressed: true
44
+ };
45
+ } else {
46
+ const data = imageObject?.image?.data;
47
+ const dataCopy = new Uint8Array(data.length);
48
+ dataCopy.set(data);
49
+ return {
50
+ data: dataCopy,
51
+ compressed: false,
52
+ height: imageObject.image.height,
53
+ width: imageObject.image.width,
54
+ components: imageObject.image.components,
55
+ mimeType: imageObject.mimeType
56
+ };
57
+ }
58
+ }) || [];
59
+
60
+ prepareNodes(nodes);
61
+
62
+ const cartographicOrigin = tileContent.cartographicOrigin;
63
+ const cartesianModelMatrix = tileContent.cartesianModelMatrix;
64
+
65
+ return {
66
+ nodes,
67
+ images,
68
+ cartographicOrigin,
69
+ cartesianModelMatrix
70
+ };
71
+ }
72
+
73
+ /**
74
+ * Traverse all nodes to replace all sensible data with copy to avoid data corruption in worker.
75
+ * @param nodes
76
+ */
77
+ function prepareNodes(nodes: GLTFNodePostprocessed[]): void {
78
+ for (let index = 0; index < nodes.length; index++) {
79
+ const node = nodes[index] as any;
80
+
81
+ if (node.mesh) {
82
+ nodes[index] = {
83
+ ...node,
84
+ mesh: {
85
+ ...node.mesh,
86
+ primitives: node.mesh?.primitives.map((primitive) => ({
87
+ ...primitive,
88
+ indices: {value: primitive?.indices?.value},
89
+ attributes: getB3DMAttributesWithoutBufferView(primitive.attributes),
90
+ material: {
91
+ id: primitive?.material?.id,
92
+ uniqueId: primitive?.material?.uniqueId
93
+ }
94
+ }))
95
+ }
96
+ };
97
+ }
98
+
99
+ if (node.children) {
100
+ prepareNodes(node.children);
101
+ }
102
+ }
103
+ }
@@ -0,0 +1,146 @@
1
+ import type {Mbs, Node3DIndexDocument, Obb} from '@loaders.gl/i3s';
2
+ import {OrientedBoundingBox, BoundingSphere} from '@math.gl/culling';
3
+ import {Vector3} from '@math.gl/core';
4
+ import {Ellipsoid} from '@math.gl/geospatial';
5
+
6
+ // prettier-ignore
7
+ const CUBE_POSITIONS = new Float32Array([
8
+ -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1,
9
+ -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1,
10
+ -1, 1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1,
11
+ -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1,
12
+ 1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1,
13
+ -1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1
14
+ ]);
15
+
16
+ // TODO Unite Tile validation logic in i3s-17-and-debug with this code.
17
+
18
+ /**
19
+ * Do validation of bounding volumes for particular node.
20
+ * Generates special warnings if there are some issues.
21
+ * @param node
22
+ */
23
+ export function validateNodeBoundingVolumes(node: Node3DIndexDocument): string[] {
24
+ if (!node?.parentNode?.obb || !node?.parentNode?.mbs) {
25
+ return [];
26
+ }
27
+
28
+ const tileWarnings: string[] = [];
29
+
30
+ validateObb(tileWarnings, node);
31
+ validateMbs(tileWarnings, node);
32
+
33
+ return tileWarnings;
34
+ }
35
+
36
+ /**
37
+ * Check if child Obb fit into parent Obb.
38
+ * @param tileWarnings
39
+ * @param node
40
+ */
41
+ function validateObb(tileWarnings: string[], node: Node3DIndexDocument): void {
42
+ // @ts-expect-error
43
+ const parentObb = createBoundingBoxFromTileObb(node.parentNode.obb);
44
+ const tileVertices = getTileObbVertices(node);
45
+ const isTileObbInsideParentObb = isAllVerticesInsideBoundingVolume(parentObb, tileVertices);
46
+
47
+ if (isTileObbInsideParentObb) {
48
+ return;
49
+ }
50
+
51
+ const title = `OBB of Tile (${node.id}) doesn't fit into Parent (${node.parentNode?.id}) tile OBB`;
52
+ tileWarnings.push(title);
53
+ }
54
+
55
+ /**
56
+ * Check if child Mbs fit into parent Mbs.
57
+ * @param tileWarnings
58
+ * @param node
59
+ */
60
+ function validateMbs(tileWarnings: string[], node: Node3DIndexDocument): void {
61
+ // @ts-expect-error
62
+ const tileMbs = createBoundingSphereFromTileMbs(node.mbs);
63
+ // @ts-expect-error
64
+ const parentMbs = createBoundingSphereFromTileMbs(node.parentNode.mbs);
65
+ const distanceBetweenCenters = tileMbs.center.distanceTo(parentMbs.center);
66
+
67
+ if (distanceBetweenCenters + tileMbs.radius > parentMbs.radius) {
68
+ const title = `MBS of Tile (${node.id}) doesn't fit into Parent (${node.parentNode?.id}) tile MBS`;
69
+ tileWarnings.push(title);
70
+ }
71
+ }
72
+
73
+ /**
74
+ * Generates bounding sphere from mbs
75
+ * @param mbs
76
+ */
77
+ function createBoundingSphereFromTileMbs(mbs: Mbs): BoundingSphere {
78
+ return new BoundingSphere([mbs[0], mbs[1], mbs[2]], mbs[3]);
79
+ }
80
+
81
+ /**
82
+ * Generates oriented bounding box from tile obb
83
+ * @param obb
84
+ * @returns
85
+ */
86
+ function createBoundingBoxFromTileObb(obb: Obb): OrientedBoundingBox {
87
+ const {center, halfSize, quaternion} = obb;
88
+ return new OrientedBoundingBox().fromCenterHalfSizeQuaternion(center, halfSize, quaternion);
89
+ }
90
+
91
+ /**
92
+ * Get vertices fromnode obb
93
+ * TODO check if Obb generates properly
94
+ * @param node
95
+ */
96
+ function getTileObbVertices(node: Node3DIndexDocument): number[] {
97
+ // @ts-expect-error
98
+ const halfSize = node.obb.halfSize;
99
+ const positions = CUBE_POSITIONS;
100
+ // @ts-expect-error
101
+ const obbCenterCartesian = Ellipsoid.WGS84.cartographicToCartesian(node.obb.center);
102
+
103
+ let vertices = [];
104
+
105
+ for (let i = 0; i < positions.length; i += 3) {
106
+ const positionsVector = new Vector3(
107
+ (positions[i] *= halfSize[0]),
108
+ (positions[i + 1] *= halfSize[1]),
109
+ (positions[i + 2] *= halfSize[2])
110
+ );
111
+ const rotatedPositions = positionsVector
112
+ // @ts-expect-error
113
+ .transformByQuaternion(node.obb.quaternion)
114
+ .add(obbCenterCartesian);
115
+ // @ts-expect-error
116
+ vertices = vertices.concat(rotatedPositions);
117
+ }
118
+
119
+ return vertices;
120
+ }
121
+
122
+ /**
123
+ * Check if all vertices inside bounding volume
124
+ * @param boundingVolume
125
+ * @param positions
126
+ */
127
+ function isAllVerticesInsideBoundingVolume(
128
+ boundingVolume: OrientedBoundingBox,
129
+ positions: number[]
130
+ ): boolean {
131
+ let isVerticesInsideObb = true;
132
+
133
+ for (let index = 0; index < positions.length / 3; index += 3) {
134
+ const point = [positions[index], positions[index + 1], positions[index + 2]];
135
+ const cartographicPoint = Ellipsoid.WGS84.cartesianToCartographic(point);
136
+
137
+ const distance = boundingVolume.distanceTo(cartographicPoint);
138
+
139
+ if (distance > 0) {
140
+ isVerticesInsideObb = false;
141
+ break;
142
+ }
143
+ }
144
+
145
+ return isVerticesInsideObb;
146
+ }
@@ -0,0 +1,315 @@
1
+ import {join} from 'path';
2
+ import {
3
+ BoundingVolumes,
4
+ LodSelection,
5
+ Node3DIndexDocument,
6
+ NodeInPage,
7
+ NodeReference
8
+ } from '@loaders.gl/i3s';
9
+ import transform from 'json-map-transform';
10
+ import {v4 as uuidv4} from 'uuid';
11
+ import {openJson, writeFile, writeFileForSlpk} from '../../lib/utils/file-utils';
12
+ import I3SConverter from '../i3s-converter';
13
+ import {NODE as nodeTemplate} from '../json-templates/node';
14
+ import {I3SConvertedResources} from '../types';
15
+
16
+ /**
17
+ * Wrapper for https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md data
18
+ * The class allows working with 3DNodeIndexDocument in 2 modes:
19
+ * in memory: the data is stored in `data` field
20
+ * 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
21
+ */
22
+ export class NodeIndexDocument {
23
+ /** Node id */
24
+ public id: string;
25
+ /** Id in node pages */
26
+ public inPageId: number;
27
+ /** 3DNodeIndexDocument data */
28
+ public data: Node3DIndexDocument | null = null;
29
+ /** children */
30
+ public children: NodeIndexDocument[] = [];
31
+ /** converter instance */
32
+ private converter: I3SConverter;
33
+
34
+ /**
35
+ * Constructor
36
+ * @param id - id of the node in node pages
37
+ * @param converter - converter instance
38
+ */
39
+ constructor(id: number, converter: I3SConverter) {
40
+ this.inPageId = id;
41
+ this.id = id === 0 ? 'root' : id.toString();
42
+ this.converter = converter;
43
+ }
44
+
45
+ /**
46
+ * Add Node3DIndexDocument data to the node
47
+ * @param data Node3DIndexDocument data
48
+ * @returns this NodeIndexDocument instance (to recurring with constructor)
49
+ */
50
+ public async addData(data: Node3DIndexDocument): Promise<NodeIndexDocument> {
51
+ if (this.converter.options.instantNodeWriting) {
52
+ await this.write(data);
53
+ } else {
54
+ this.data = data;
55
+ }
56
+ return this;
57
+ }
58
+
59
+ /**
60
+ * Add child node references
61
+ * @param childNodes - child NodeIndexDocument instances
62
+ */
63
+ public async addChildren(childNodes: NodeIndexDocument[]): Promise<void> {
64
+ const newChildren: NodeReference[] = [];
65
+ for (const node of childNodes) {
66
+ const nodeData = await node.load();
67
+ newChildren.push({
68
+ id: node.id,
69
+ href: `../${node.id}`,
70
+ obb: nodeData.obb,
71
+ mbs: nodeData.mbs
72
+ });
73
+ }
74
+ this.children = this.children.concat(childNodes);
75
+
76
+ let data: Node3DIndexDocument | null = this.data;
77
+ if (this.converter.options.instantNodeWriting) {
78
+ data = (await this.load()) as Node3DIndexDocument;
79
+ }
80
+ if (data) {
81
+ data.children = data.children ?? [];
82
+ data.children = data.children.concat(newChildren);
83
+ }
84
+ if (this.converter.options.instantNodeWriting && data) {
85
+ await this.write(data);
86
+ }
87
+ }
88
+
89
+ /**
90
+ * Add neighbors to child nodes of this node
91
+ */
92
+ public async addNeighbors(): Promise<void> {
93
+ const nodeData = await this.load();
94
+ for (const childNode of this.children) {
95
+ const childNodeData = await childNode.load();
96
+ childNodeData.neighbors = childNodeData.neighbors ?? [];
97
+
98
+ // Don't do large amount of "neightbors" to avoid big memory consumption
99
+ if (Number(nodeData?.children?.length) < 1000) {
100
+ for (const neighbor of nodeData.children || []) {
101
+ if (childNode.id === neighbor.id) {
102
+ continue; // eslint-disable-line
103
+ }
104
+
105
+ childNodeData.neighbors.push({...neighbor});
106
+ }
107
+ } else {
108
+ // eslint-disable-next-line no-console, no-undef
109
+ console.warn(
110
+ `Node ${childNode.id}: neighbors attribute is omited because of large number of neigbors`
111
+ );
112
+ delete childNodeData.neighbors;
113
+ }
114
+
115
+ if (this.converter.options.instantNodeWriting && childNodeData) {
116
+ await childNode.write(childNodeData);
117
+ }
118
+ await childNode.save();
119
+ // The save after adding neighbors is the last one. Flush the the node
120
+ childNode.flush();
121
+ }
122
+ }
123
+
124
+ /** Save 3DNodeIndexDocument in file on disk */
125
+ public async save(): Promise<void> {
126
+ if (this.data) {
127
+ await this.write(this.data);
128
+ }
129
+ }
130
+
131
+ /**
132
+ * Write 3DNodeIndexDocument https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md
133
+ * @param node - Node3DIndexDocument object
134
+ */
135
+ private async write(node: Node3DIndexDocument): Promise<void> {
136
+ const path = join(this.converter.layers0Path, 'nodes', this.id);
137
+ if (this.converter.options.slpk) {
138
+ await this.converter.writeQueue.enqueue(
139
+ {
140
+ archiveKey: `nodes/${this.id}/3dNodeIndexDocument.json.gz`,
141
+ writePromise: () =>
142
+ writeFileForSlpk(
143
+ path,
144
+ JSON.stringify(node),
145
+ '3dNodeIndexDocument.json',
146
+ true,
147
+ this.converter.compressList
148
+ )
149
+ },
150
+ true
151
+ );
152
+ } else {
153
+ await this.converter.writeQueue.enqueue(
154
+ {writePromise: () => writeFile(path, JSON.stringify(node))},
155
+ true
156
+ );
157
+ }
158
+ }
159
+
160
+ /**
161
+ * Load 3DNodeIndexDocument data from file on disk
162
+ * @returns 3DNodeIndexDocument object
163
+ */
164
+ private async load(): Promise<Node3DIndexDocument> {
165
+ if (this.data) {
166
+ return this.data;
167
+ }
168
+ const path = this.id;
169
+ const parentNodePath = join(this.converter.layers0Path, 'nodes', path);
170
+ let parentNodeFileName = 'index.json';
171
+ if (this.converter.options.slpk) {
172
+ parentNodeFileName = '3dNodeIndexDocument.json';
173
+ }
174
+ return (await openJson(parentNodePath, parentNodeFileName)) as Node3DIndexDocument;
175
+ }
176
+
177
+ /**
178
+ * Unload the Node data
179
+ */
180
+ private flush(): void {
181
+ this.data = null;
182
+ }
183
+
184
+ /**
185
+ * Create root node of the tree
186
+ * @param boundingVolumes - MBS and OOB bounding volumes data
187
+ * @param converter - I3SConverter instance
188
+ * @returns instance of NodeIndexDocument
189
+ */
190
+ static async createRootNode(
191
+ boundingVolumes: BoundingVolumes,
192
+ converter: I3SConverter
193
+ ): Promise<NodeIndexDocument> {
194
+ const rootData = NodeIndexDocument.createRootNodeIndexDocument(boundingVolumes);
195
+ const rootNode = await new NodeIndexDocument(0, converter).addData(rootData);
196
+ return rootNode;
197
+ }
198
+
199
+ /**
200
+ * Create NodeIndexDocument instance
201
+ * @param parentNode - parent NodeIndexDocument
202
+ * @param boundingVolumes - MBS and OOB bounding volumes data
203
+ * @param lodSelection - LOD metrics data
204
+ * @param nodeInPage - node data in node pages
205
+ * @param resources - resources extracted from gltf/b3dm file
206
+ * @param converter - I3SConverter instance
207
+ * @returns NodeIndexDocument instance
208
+ */
209
+ static async createNode(
210
+ parentNode: NodeIndexDocument,
211
+ boundingVolumes: BoundingVolumes,
212
+ lodSelection: LodSelection[],
213
+ nodeInPage: NodeInPage,
214
+ resources: I3SConvertedResources,
215
+ converter: I3SConverter
216
+ ): Promise<NodeIndexDocument> {
217
+ const data = await NodeIndexDocument.createNodeIndexDocument(
218
+ parentNode,
219
+ boundingVolumes,
220
+ lodSelection,
221
+ nodeInPage,
222
+ resources
223
+ );
224
+ const node = await new NodeIndexDocument(nodeInPage.index, converter).addData(data);
225
+ return node;
226
+ }
227
+
228
+ /**
229
+ * Form 3DNodeIndexDocument data for the root node
230
+ * @param boundingVolumes - mbs and obb data about node's bounding volume
231
+ * @return 3DNodeIndexDocument data https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md
232
+ */
233
+ static createRootNodeIndexDocument(boundingVolumes: BoundingVolumes): Node3DIndexDocument {
234
+ const root0data = {
235
+ version: `{${uuidv4().toUpperCase()}}`,
236
+ id: 'root',
237
+ level: 0,
238
+ lodSelection: [
239
+ {
240
+ metricType: 'maxScreenThresholdSQ',
241
+ maxError: 0
242
+ },
243
+ {
244
+ metricType: 'maxScreenThreshold',
245
+ maxError: 0
246
+ }
247
+ ],
248
+ ...boundingVolumes,
249
+ children: []
250
+ };
251
+ return transform(root0data, nodeTemplate());
252
+ }
253
+
254
+ /**
255
+ * Create a new Node3DIndexDocument
256
+ * @param parentNode - 3DNodeIndexDocument https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md object of the parent node
257
+ * @param boundingVolumes - Bounding volumes
258
+ * @param lodSelection - Level of Details (LOD) metrics
259
+ * @param nodeInPage - corresponding node object in a node page
260
+ * @param resources - the node resources data
261
+ * @param resources.texture - texture image
262
+ * @param resources.attributes - feature attributes
263
+ * @return 3DNodeIndexDocument https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md object
264
+ */
265
+ static async createNodeIndexDocument(
266
+ parentNode: NodeIndexDocument,
267
+ boundingVolumes: BoundingVolumes,
268
+ lodSelection: LodSelection[],
269
+ nodeInPage: NodeInPage,
270
+ resources: I3SConvertedResources
271
+ ): Promise<Node3DIndexDocument> {
272
+ const {texture, attributes} = resources;
273
+ const nodeId = nodeInPage.index!;
274
+ const parentNodeData = await parentNode.load();
275
+ const nodeData = {
276
+ version: parentNodeData.version,
277
+ id: nodeId.toString(),
278
+ level: parentNodeData.level! + 1,
279
+ ...boundingVolumes,
280
+ lodSelection,
281
+ parentNode: {
282
+ id: parentNode.id,
283
+ href: `../${parentNode.id}`,
284
+ mbs: parentNodeData.mbs,
285
+ obb: parentNodeData.obb
286
+ },
287
+ children: [],
288
+ neighbors: []
289
+ };
290
+ const node = transform(nodeData, nodeTemplate());
291
+
292
+ if (nodeInPage.mesh) {
293
+ node.geometryData = [{href: './geometries/0'}];
294
+ node.sharedResource = {href: './shared'};
295
+
296
+ if (texture) {
297
+ node.textureData = [{href: './textures/0'}, {href: './textures/1'}];
298
+ }
299
+
300
+ if (
301
+ attributes &&
302
+ attributes.length &&
303
+ parentNode.converter.layers0?.attributeStorageInfo?.length
304
+ ) {
305
+ node.attributeData = [];
306
+ for (let index = 0; index < attributes.length; index++) {
307
+ const folderName = parentNode.converter.layers0.attributeStorageInfo[index].key;
308
+ node.attributeData.push({href: `./attributes/${folderName}/0`});
309
+ }
310
+ }
311
+ }
312
+
313
+ return node;
314
+ }
315
+ }