@loaders.gl/tile-converter 4.0.0-alpha.1 → 4.0.0-alpha.11

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 (502) hide show
  1. package/bin/converter.js +1 -1
  2. package/bin/slpk-extractor.js +4 -0
  3. package/dist/3d-tiles-attributes-worker.d.ts +28 -0
  4. package/dist/3d-tiles-attributes-worker.d.ts.map +1 -0
  5. package/dist/3d-tiles-attributes-worker.js +3 -0
  6. package/dist/3d-tiles-attributes-worker.js.map +7 -0
  7. package/dist/3d-tiles-converter/3d-tiles-converter.d.ts +90 -0
  8. package/dist/3d-tiles-converter/3d-tiles-converter.d.ts.map +1 -0
  9. package/dist/3d-tiles-converter/3d-tiles-converter.js +275 -226
  10. package/dist/3d-tiles-converter/helpers/b3dm-converter.d.ts +71 -18
  11. package/dist/3d-tiles-converter/helpers/b3dm-converter.d.ts.map +1 -0
  12. package/dist/3d-tiles-converter/helpers/b3dm-converter.js +256 -236
  13. package/dist/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.d.ts +4 -7
  14. package/dist/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.d.ts.map +1 -0
  15. package/dist/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +22 -9
  16. package/dist/3d-tiles-converter/helpers/texture-atlas.d.ts +9 -0
  17. package/dist/3d-tiles-converter/helpers/texture-atlas.d.ts.map +1 -0
  18. package/dist/3d-tiles-converter/helpers/texture-atlas.js +47 -28
  19. package/dist/3d-tiles-converter/json-templates/tileset.d.ts +15 -0
  20. package/dist/3d-tiles-converter/json-templates/tileset.d.ts.map +1 -0
  21. package/dist/3d-tiles-converter/json-templates/tileset.js +42 -36
  22. package/dist/bundle.d.ts +2 -0
  23. package/dist/bundle.d.ts.map +1 -0
  24. package/dist/bundle.js +2 -2
  25. package/dist/constants.d.ts +2 -0
  26. package/dist/constants.d.ts.map +1 -0
  27. package/dist/constants.js +4 -0
  28. package/dist/converter-cli.d.ts +2 -0
  29. package/dist/converter-cli.d.ts.map +1 -0
  30. package/dist/converter-cli.js +214 -0
  31. package/dist/converter.min.js +185 -190
  32. package/dist/deps-installer/deps-installer.d.ts +11 -3
  33. package/dist/deps-installer/deps-installer.d.ts.map +1 -0
  34. package/dist/deps-installer/deps-installer.js +61 -23
  35. package/dist/dist.min.js +64143 -0
  36. package/dist/es5/3d-tiles-attributes-worker.js +25 -0
  37. package/dist/es5/3d-tiles-attributes-worker.js.map +1 -0
  38. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js +467 -0
  39. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js.map +1 -0
  40. package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js +293 -0
  41. package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -0
  42. package/dist/es5/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +18 -0
  43. package/dist/es5/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +1 -0
  44. package/dist/es5/3d-tiles-converter/helpers/texture-atlas.js +33 -0
  45. package/dist/es5/3d-tiles-converter/helpers/texture-atlas.js.map +1 -0
  46. package/dist/es5/3d-tiles-converter/json-templates/tileset.js +61 -0
  47. package/dist/es5/3d-tiles-converter/json-templates/tileset.js.map +1 -0
  48. package/dist/es5/bundle.js +6 -0
  49. package/dist/es5/bundle.js.map +1 -0
  50. package/dist/es5/constants.js +9 -0
  51. package/dist/es5/constants.js.map +1 -0
  52. package/dist/es5/converter-cli.js +244 -0
  53. package/dist/es5/converter-cli.js.map +1 -0
  54. package/dist/es5/deps-installer/deps-installer.js +124 -0
  55. package/dist/es5/deps-installer/deps-installer.js.map +1 -0
  56. package/dist/es5/i3s-attributes-worker.js +25 -0
  57. package/dist/es5/i3s-attributes-worker.js.map +1 -0
  58. package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js +116 -0
  59. package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js.map +1 -0
  60. package/dist/es5/i3s-converter/helpers/coordinate-converter.js +89 -0
  61. package/dist/es5/i3s-converter/helpers/coordinate-converter.js.map +1 -0
  62. package/dist/es5/i3s-converter/helpers/create-scene-server-path.js +41 -0
  63. package/dist/es5/i3s-converter/helpers/create-scene-server-path.js.map +1 -0
  64. package/dist/es5/i3s-converter/helpers/feature-attributes.js +174 -0
  65. package/dist/es5/i3s-converter/helpers/feature-attributes.js.map +1 -0
  66. package/dist/es5/i3s-converter/helpers/geometry-attributes.js +213 -0
  67. package/dist/es5/i3s-converter/helpers/geometry-attributes.js.map +1 -0
  68. package/dist/es5/i3s-converter/helpers/geometry-converter.js +1192 -0
  69. package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +1 -0
  70. package/dist/es5/i3s-converter/helpers/gltf-attributes.js +113 -0
  71. package/dist/es5/i3s-converter/helpers/gltf-attributes.js.map +1 -0
  72. package/dist/es5/i3s-converter/helpers/load-3d-tiles.js +82 -0
  73. package/dist/es5/i3s-converter/helpers/load-3d-tiles.js.map +1 -0
  74. package/dist/es5/i3s-converter/helpers/node-debug.js +76 -0
  75. package/dist/es5/i3s-converter/helpers/node-debug.js.map +1 -0
  76. package/dist/es5/i3s-converter/helpers/node-index-document.js +521 -0
  77. package/dist/es5/i3s-converter/helpers/node-index-document.js.map +1 -0
  78. package/dist/es5/i3s-converter/helpers/node-pages.js +519 -0
  79. package/dist/es5/i3s-converter/helpers/node-pages.js.map +1 -0
  80. package/dist/es5/i3s-converter/helpers/preprocess-3d-tiles.js +111 -0
  81. package/dist/es5/i3s-converter/helpers/preprocess-3d-tiles.js.map +1 -0
  82. package/dist/es5/i3s-converter/helpers/tileset-traversal.js +82 -0
  83. package/dist/es5/i3s-converter/helpers/tileset-traversal.js.map +1 -0
  84. package/dist/es5/i3s-converter/i3s-converter.js +1541 -0
  85. package/dist/es5/i3s-converter/i3s-converter.js.map +1 -0
  86. package/dist/es5/i3s-converter/json-templates/geometry-definitions.js +107 -0
  87. package/dist/es5/i3s-converter/json-templates/geometry-definitions.js.map +1 -0
  88. package/dist/es5/i3s-converter/json-templates/layers.js +163 -0
  89. package/dist/es5/i3s-converter/json-templates/layers.js.map +1 -0
  90. package/dist/es5/i3s-converter/json-templates/metadata.js +31 -0
  91. package/dist/es5/i3s-converter/json-templates/metadata.js.map +1 -0
  92. package/dist/es5/i3s-converter/json-templates/node.js +99 -0
  93. package/dist/es5/i3s-converter/json-templates/node.js.map +1 -0
  94. package/dist/es5/i3s-converter/json-templates/scene-server.js +39 -0
  95. package/dist/es5/i3s-converter/json-templates/scene-server.js.map +1 -0
  96. package/dist/es5/i3s-converter/json-templates/shared-resources.js +173 -0
  97. package/dist/es5/i3s-converter/json-templates/shared-resources.js.map +1 -0
  98. package/dist/es5/i3s-converter/json-templates/store.js +107 -0
  99. package/dist/es5/i3s-converter/json-templates/store.js.map +1 -0
  100. package/dist/es5/i3s-converter/types.js +18 -0
  101. package/dist/es5/i3s-converter/types.js.map +1 -0
  102. package/dist/es5/i3s-server/README.md +19 -0
  103. package/dist/es5/i3s-server/app.js +27 -0
  104. package/dist/es5/i3s-server/app.js.map +1 -0
  105. package/dist/es5/i3s-server/controllers/index-controller.js +55 -0
  106. package/dist/es5/i3s-server/controllers/index-controller.js.map +1 -0
  107. package/dist/es5/i3s-server/controllers/slpk-controller.js +84 -0
  108. package/dist/es5/i3s-server/controllers/slpk-controller.js.map +1 -0
  109. package/dist/es5/i3s-server/routes/index.js +37 -0
  110. package/dist/es5/i3s-server/routes/index.js.map +1 -0
  111. package/dist/es5/i3s-server/routes/slpk-router.js +71 -0
  112. package/dist/es5/i3s-server/routes/slpk-router.js.map +1 -0
  113. package/dist/es5/i3s-server/utils/create-scene-server.js +17 -0
  114. package/dist/es5/i3s-server/utils/create-scene-server.js.map +1 -0
  115. package/dist/es5/index.js +21 -0
  116. package/dist/es5/index.js.map +1 -0
  117. package/dist/es5/lib/utils/cli-utils.js +57 -0
  118. package/dist/es5/lib/utils/cli-utils.js.map +1 -0
  119. package/dist/es5/lib/utils/compress-util.js +346 -0
  120. package/dist/es5/lib/utils/compress-util.js.map +1 -0
  121. package/dist/es5/lib/utils/file-utils.js +208 -0
  122. package/dist/es5/lib/utils/file-utils.js.map +1 -0
  123. package/dist/es5/lib/utils/geometry-utils.js +15 -0
  124. package/dist/es5/lib/utils/geometry-utils.js.map +1 -0
  125. package/dist/es5/lib/utils/lod-conversion-utils.js +44 -0
  126. package/dist/es5/lib/utils/lod-conversion-utils.js.map +1 -0
  127. package/dist/es5/lib/utils/queue.js +47 -0
  128. package/dist/es5/lib/utils/queue.js.map +1 -0
  129. package/dist/es5/lib/utils/statistic-utills.d.ts +25 -0
  130. package/dist/es5/lib/utils/statistic-utills.js +147 -0
  131. package/dist/es5/lib/utils/statistic-utills.js.map +1 -0
  132. package/dist/es5/lib/utils/write-queue.js +214 -0
  133. package/dist/es5/lib/utils/write-queue.js.map +1 -0
  134. package/dist/es5/pgm-loader.js +41 -0
  135. package/dist/es5/pgm-loader.js.map +1 -0
  136. package/dist/es5/slpk-extractor/helpers/file-handle-provider.js +181 -0
  137. package/dist/es5/slpk-extractor/helpers/file-handle-provider.js.map +1 -0
  138. package/dist/es5/slpk-extractor/slpk-extractor.js +172 -0
  139. package/dist/es5/slpk-extractor/slpk-extractor.js.map +1 -0
  140. package/dist/es5/slpk-extractor-cli.js +117 -0
  141. package/dist/es5/slpk-extractor-cli.js.map +1 -0
  142. package/dist/es5/workers/3d-tiles-attributes-worker.js +28 -0
  143. package/dist/es5/workers/3d-tiles-attributes-worker.js.map +1 -0
  144. package/dist/es5/workers/i3s-attributes-worker.js +30 -0
  145. package/dist/es5/workers/i3s-attributes-worker.js.map +1 -0
  146. package/dist/esm/3d-tiles-attributes-worker.js +16 -0
  147. package/dist/esm/3d-tiles-attributes-worker.js.map +1 -0
  148. package/dist/esm/3d-tiles-converter/3d-tiles-converter.js +245 -0
  149. package/dist/esm/3d-tiles-converter/3d-tiles-converter.js.map +1 -0
  150. package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js +218 -0
  151. package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -0
  152. package/dist/esm/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +10 -0
  153. package/dist/esm/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +1 -0
  154. package/dist/esm/3d-tiles-converter/helpers/texture-atlas.js +27 -0
  155. package/dist/esm/3d-tiles-converter/helpers/texture-atlas.js.map +1 -0
  156. package/dist/esm/3d-tiles-converter/json-templates/tileset.js +37 -0
  157. package/dist/esm/3d-tiles-converter/json-templates/tileset.js.map +1 -0
  158. package/dist/esm/bundle.js +4 -0
  159. package/dist/esm/bundle.js.map +1 -0
  160. package/dist/esm/constants.js +2 -0
  161. package/dist/esm/constants.js.map +1 -0
  162. package/dist/esm/converter-cli.js +187 -0
  163. package/dist/esm/converter-cli.js.map +1 -0
  164. package/dist/esm/deps-installer/deps-installer.js +45 -0
  165. package/dist/esm/deps-installer/deps-installer.js.map +1 -0
  166. package/dist/esm/i3s-attributes-worker.js +16 -0
  167. package/dist/esm/i3s-attributes-worker.js.map +1 -0
  168. package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js +105 -0
  169. package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js.map +1 -0
  170. package/dist/esm/i3s-converter/helpers/coordinate-converter.js +79 -0
  171. package/dist/esm/i3s-converter/helpers/coordinate-converter.js.map +1 -0
  172. package/dist/esm/i3s-converter/helpers/create-scene-server-path.js +16 -0
  173. package/dist/esm/i3s-converter/helpers/create-scene-server-path.js.map +1 -0
  174. package/dist/esm/i3s-converter/helpers/feature-attributes.js +147 -0
  175. package/dist/esm/i3s-converter/helpers/feature-attributes.js.map +1 -0
  176. package/{src → dist/esm}/i3s-converter/helpers/geometry-attributes.js +80 -106
  177. package/dist/esm/i3s-converter/helpers/geometry-attributes.js.map +1 -0
  178. package/dist/esm/i3s-converter/helpers/geometry-converter.js +906 -0
  179. package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +1 -0
  180. package/dist/esm/i3s-converter/helpers/gltf-attributes.js +110 -0
  181. package/dist/esm/i3s-converter/helpers/gltf-attributes.js.map +1 -0
  182. package/dist/esm/i3s-converter/helpers/load-3d-tiles.js +35 -0
  183. package/dist/esm/i3s-converter/helpers/load-3d-tiles.js.map +1 -0
  184. package/{src → dist/esm}/i3s-converter/helpers/node-debug.js +20 -41
  185. package/dist/esm/i3s-converter/helpers/node-debug.js.map +1 -0
  186. package/dist/esm/i3s-converter/helpers/node-index-document.js +201 -0
  187. package/dist/esm/i3s-converter/helpers/node-index-document.js.map +1 -0
  188. package/dist/esm/i3s-converter/helpers/node-pages.js +206 -0
  189. package/dist/esm/i3s-converter/helpers/node-pages.js.map +1 -0
  190. package/dist/esm/i3s-converter/helpers/preprocess-3d-tiles.js +48 -0
  191. package/dist/esm/i3s-converter/helpers/preprocess-3d-tiles.js.map +1 -0
  192. package/dist/esm/i3s-converter/helpers/tileset-traversal.js +14 -0
  193. package/dist/esm/i3s-converter/helpers/tileset-traversal.js.map +1 -0
  194. package/dist/esm/i3s-converter/i3s-converter.js +778 -0
  195. package/dist/esm/i3s-converter/i3s-converter.js.map +1 -0
  196. package/dist/esm/i3s-converter/json-templates/geometry-definitions.js +89 -0
  197. package/dist/esm/i3s-converter/json-templates/geometry-definitions.js.map +1 -0
  198. package/dist/esm/i3s-converter/json-templates/layers.js +133 -0
  199. package/dist/esm/i3s-converter/json-templates/layers.js.map +1 -0
  200. package/dist/esm/i3s-converter/json-templates/metadata.js +22 -0
  201. package/dist/esm/i3s-converter/json-templates/metadata.js.map +1 -0
  202. package/dist/esm/i3s-converter/json-templates/node.js +80 -0
  203. package/dist/esm/i3s-converter/json-templates/node.js.map +1 -0
  204. package/dist/esm/i3s-converter/json-templates/scene-server.js +28 -0
  205. package/dist/esm/i3s-converter/json-templates/scene-server.js.map +1 -0
  206. package/dist/esm/i3s-converter/json-templates/shared-resources.js +123 -0
  207. package/dist/esm/i3s-converter/json-templates/shared-resources.js.map +1 -0
  208. package/dist/esm/i3s-converter/json-templates/store.js +98 -0
  209. package/dist/esm/i3s-converter/json-templates/store.js.map +1 -0
  210. package/dist/esm/i3s-converter/types.js +11 -0
  211. package/dist/esm/i3s-converter/types.js.map +1 -0
  212. package/dist/esm/i3s-server/README.md +19 -0
  213. package/dist/esm/i3s-server/app.js +26 -0
  214. package/dist/esm/i3s-server/app.js.map +1 -0
  215. package/dist/esm/i3s-server/bin/www +102 -0
  216. package/dist/esm/i3s-server/certs/cert.pem +19 -0
  217. package/dist/esm/i3s-server/certs/key.pem +27 -0
  218. package/dist/esm/i3s-server/controllers/index-controller.js +24 -0
  219. package/dist/esm/i3s-server/controllers/index-controller.js.map +1 -0
  220. package/dist/esm/i3s-server/controllers/slpk-controller.js +36 -0
  221. package/dist/esm/i3s-server/controllers/slpk-controller.js.map +1 -0
  222. package/dist/esm/i3s-server/routes/index.js +16 -0
  223. package/dist/esm/i3s-server/routes/index.js.map +1 -0
  224. package/dist/esm/i3s-server/routes/slpk-router.js +33 -0
  225. package/dist/esm/i3s-server/routes/slpk-router.js.map +1 -0
  226. package/dist/esm/i3s-server/utils/create-scene-server.js +16 -0
  227. package/dist/esm/i3s-server/utils/create-scene-server.js.map +1 -0
  228. package/dist/esm/index.js +3 -0
  229. package/dist/esm/index.js.map +1 -0
  230. package/dist/esm/lib/utils/cli-utils.js +47 -0
  231. package/dist/esm/lib/utils/cli-utils.js.map +1 -0
  232. package/dist/esm/lib/utils/compress-util.js +168 -0
  233. package/dist/esm/lib/utils/compress-util.js.map +1 -0
  234. package/dist/esm/lib/utils/file-utils.js +87 -0
  235. package/dist/esm/lib/utils/file-utils.js.map +1 -0
  236. package/dist/esm/lib/utils/geometry-utils.js +8 -0
  237. package/dist/esm/lib/utils/geometry-utils.js.map +1 -0
  238. package/dist/esm/lib/utils/lod-conversion-utils.js +37 -0
  239. package/dist/esm/lib/utils/lod-conversion-utils.js.map +1 -0
  240. package/dist/esm/lib/utils/queue.js +15 -0
  241. package/dist/esm/lib/utils/queue.js.map +1 -0
  242. package/dist/esm/lib/utils/statistic-utills.d.ts +25 -0
  243. package/dist/esm/lib/utils/statistic-utills.js +62 -0
  244. package/dist/esm/lib/utils/statistic-utills.js.map +1 -0
  245. package/dist/esm/lib/utils/write-queue.js +85 -0
  246. package/dist/esm/lib/utils/write-queue.js.map +1 -0
  247. package/dist/esm/pgm-loader.js +15 -0
  248. package/dist/esm/pgm-loader.js.map +1 -0
  249. package/dist/esm/slpk-extractor/helpers/file-handle-provider.js +43 -0
  250. package/dist/esm/slpk-extractor/helpers/file-handle-provider.js.map +1 -0
  251. package/dist/esm/slpk-extractor/slpk-extractor.js +63 -0
  252. package/dist/esm/slpk-extractor/slpk-extractor.js.map +1 -0
  253. package/dist/esm/slpk-extractor-cli.js +74 -0
  254. package/dist/esm/slpk-extractor-cli.js.map +1 -0
  255. package/dist/esm/workers/3d-tiles-attributes-worker.js +8 -0
  256. package/dist/esm/workers/3d-tiles-attributes-worker.js.map +1 -0
  257. package/dist/esm/workers/i3s-attributes-worker.js +7 -0
  258. package/dist/esm/workers/i3s-attributes-worker.js.map +1 -0
  259. package/dist/i3s-attributes-worker.d.ts +45 -0
  260. package/dist/i3s-attributes-worker.d.ts.map +1 -0
  261. package/dist/i3s-attributes-worker.js +9 -0
  262. package/dist/i3s-attributes-worker.js.map +7 -0
  263. package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts +13 -0
  264. package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts.map +1 -0
  265. package/dist/i3s-converter/helpers/batch-ids-extensions.js +138 -0
  266. package/dist/i3s-converter/helpers/coordinate-converter.d.ts +39 -0
  267. package/dist/i3s-converter/helpers/coordinate-converter.d.ts.map +1 -0
  268. package/dist/i3s-converter/helpers/coordinate-converter.js +118 -42
  269. package/dist/i3s-converter/helpers/create-scene-server-path.d.ts +9 -0
  270. package/dist/i3s-converter/helpers/create-scene-server-path.d.ts.map +1 -0
  271. package/dist/i3s-converter/helpers/create-scene-server-path.js +27 -15
  272. package/dist/i3s-converter/helpers/feature-attributes.d.ts +56 -0
  273. package/dist/i3s-converter/helpers/feature-attributes.d.ts.map +1 -0
  274. package/dist/i3s-converter/helpers/feature-attributes.js +216 -0
  275. package/dist/i3s-converter/helpers/geometry-attributes.d.ts +8 -0
  276. package/dist/i3s-converter/helpers/geometry-attributes.d.ts.map +1 -0
  277. package/dist/i3s-converter/helpers/geometry-attributes.js +188 -185
  278. package/dist/i3s-converter/helpers/geometry-converter.d.ts +41 -35
  279. package/dist/i3s-converter/helpers/geometry-converter.d.ts.map +1 -0
  280. package/dist/i3s-converter/helpers/geometry-converter.js +1179 -650
  281. package/dist/i3s-converter/helpers/gltf-attributes.d.ts +28 -0
  282. package/dist/i3s-converter/helpers/gltf-attributes.d.ts.map +1 -0
  283. package/dist/i3s-converter/helpers/gltf-attributes.js +129 -0
  284. package/dist/i3s-converter/helpers/load-3d-tiles.d.ts +18 -0
  285. package/dist/i3s-converter/helpers/load-3d-tiles.d.ts.map +1 -0
  286. package/dist/i3s-converter/helpers/load-3d-tiles.js +53 -0
  287. package/dist/i3s-converter/helpers/node-debug.d.ts +8 -0
  288. package/dist/i3s-converter/helpers/node-debug.d.ts.map +1 -0
  289. package/dist/i3s-converter/helpers/node-debug.js +106 -74
  290. package/dist/i3s-converter/helpers/node-index-document.d.ts +103 -0
  291. package/dist/i3s-converter/helpers/node-index-document.d.ts.map +1 -0
  292. package/dist/i3s-converter/helpers/node-index-document.js +268 -0
  293. package/dist/i3s-converter/helpers/node-pages.d.ts +125 -113
  294. package/dist/i3s-converter/helpers/node-pages.d.ts.map +1 -0
  295. package/dist/i3s-converter/helpers/node-pages.js +313 -133
  296. package/dist/i3s-converter/helpers/preprocess-3d-tiles.d.ts +22 -0
  297. package/dist/i3s-converter/helpers/preprocess-3d-tiles.d.ts.map +1 -0
  298. package/dist/i3s-converter/helpers/preprocess-3d-tiles.js +75 -0
  299. package/dist/i3s-converter/helpers/tileset-traversal.d.ts +25 -0
  300. package/dist/i3s-converter/helpers/tileset-traversal.d.ts.map +1 -0
  301. package/dist/i3s-converter/helpers/tileset-traversal.js +29 -0
  302. package/dist/i3s-converter/i3s-converter.d.ts +267 -0
  303. package/dist/i3s-converter/i3s-converter.d.ts.map +1 -0
  304. package/dist/i3s-converter/i3s-converter.js +891 -867
  305. package/dist/i3s-converter/json-templates/geometry-definitions.d.ts +7 -0
  306. package/dist/i3s-converter/json-templates/geometry-definitions.d.ts.map +1 -0
  307. package/dist/i3s-converter/json-templates/geometry-definitions.js +87 -0
  308. package/dist/i3s-converter/json-templates/layers.d.ts +70 -0
  309. package/dist/i3s-converter/json-templates/layers.d.ts.map +1 -0
  310. package/dist/i3s-converter/json-templates/layers.js +138 -190
  311. package/dist/i3s-converter/json-templates/metadata.d.ts +22 -0
  312. package/dist/i3s-converter/json-templates/metadata.d.ts.map +1 -0
  313. package/dist/i3s-converter/json-templates/metadata.js +25 -22
  314. package/dist/i3s-converter/json-templates/node.d.ts +61 -0
  315. package/dist/i3s-converter/json-templates/node.d.ts.map +1 -0
  316. package/dist/i3s-converter/json-templates/node.js +88 -79
  317. package/dist/i3s-converter/json-templates/scene-server.d.ts +28 -0
  318. package/dist/i3s-converter/json-templates/scene-server.d.ts.map +1 -0
  319. package/dist/i3s-converter/json-templates/scene-server.js +31 -28
  320. package/dist/i3s-converter/json-templates/shared-resources.d.ts +14 -0
  321. package/dist/i3s-converter/json-templates/shared-resources.d.ts.map +1 -0
  322. package/dist/i3s-converter/json-templates/shared-resources.js +124 -125
  323. package/dist/i3s-converter/json-templates/store.d.ts +95 -0
  324. package/dist/i3s-converter/json-templates/store.d.ts.map +1 -0
  325. package/dist/i3s-converter/json-templates/store.js +100 -95
  326. package/dist/i3s-converter/types.d.ts +163 -0
  327. package/dist/i3s-converter/types.d.ts.map +1 -0
  328. package/dist/i3s-converter/types.js +17 -0
  329. package/dist/i3s-server/app.d.ts +3 -0
  330. package/dist/i3s-server/app.d.ts.map +1 -0
  331. package/dist/i3s-server/app.js +11 -10
  332. package/dist/i3s-server/controllers/index-controller.d.ts +2 -0
  333. package/dist/i3s-server/controllers/index-controller.d.ts.map +1 -0
  334. package/dist/i3s-server/controllers/index-controller.js +16 -24
  335. package/dist/i3s-server/controllers/slpk-controller.d.ts +3 -0
  336. package/dist/i3s-server/controllers/slpk-controller.d.ts.map +1 -0
  337. package/dist/i3s-server/controllers/slpk-controller.js +32 -0
  338. package/dist/i3s-server/routes/index.d.ts +3 -0
  339. package/dist/i3s-server/routes/index.d.ts.map +1 -0
  340. package/dist/i3s-server/routes/index.js +11 -15
  341. package/dist/i3s-server/routes/slpk-router.d.ts +3 -0
  342. package/dist/i3s-server/routes/slpk-router.d.ts.map +1 -0
  343. package/dist/i3s-server/routes/slpk-router.js +33 -0
  344. package/dist/i3s-server/utils/create-scene-server.d.ts +11 -0
  345. package/dist/i3s-server/utils/create-scene-server.d.ts.map +1 -0
  346. package/dist/i3s-server/utils/create-scene-server.js +14 -0
  347. package/dist/index.d.ts +3 -0
  348. package/dist/index.d.ts.map +1 -0
  349. package/dist/index.js +10 -5
  350. package/dist/lib/utils/cli-utils.d.ts +34 -0
  351. package/dist/lib/utils/cli-utils.d.ts.map +1 -0
  352. package/dist/lib/utils/cli-utils.js +82 -0
  353. package/dist/lib/utils/compress-util.d.ts +45 -0
  354. package/dist/lib/utils/compress-util.d.ts.map +1 -0
  355. package/dist/lib/utils/compress-util.js +238 -160
  356. package/dist/lib/utils/file-utils.d.ts +22 -14
  357. package/dist/lib/utils/file-utils.d.ts.map +1 -0
  358. package/dist/lib/utils/file-utils.js +134 -36
  359. package/dist/lib/utils/geometry-utils.d.ts +9 -0
  360. package/dist/lib/utils/geometry-utils.d.ts.map +1 -0
  361. package/dist/lib/utils/geometry-utils.js +18 -0
  362. package/dist/lib/utils/lod-conversion-utils.d.ts +23 -13
  363. package/dist/lib/utils/lod-conversion-utils.d.ts.map +1 -0
  364. package/dist/lib/utils/lod-conversion-utils.js +72 -39
  365. package/dist/lib/utils/queue.d.ts +7 -0
  366. package/dist/lib/utils/queue.d.ts.map +1 -0
  367. package/dist/lib/utils/queue.js +18 -0
  368. package/dist/lib/utils/statistic-utills.d.ts +3 -25
  369. package/dist/lib/utils/statistic-utills.d.ts.map +1 -0
  370. package/dist/lib/utils/statistic-utills.js +58 -67
  371. package/dist/lib/utils/write-queue.d.ts +39 -0
  372. package/dist/lib/utils/write-queue.d.ts.map +1 -0
  373. package/dist/lib/utils/write-queue.js +80 -0
  374. package/dist/pgm-loader.d.ts +6 -0
  375. package/dist/pgm-loader.d.ts.map +1 -0
  376. package/dist/pgm-loader.js +23 -14
  377. package/dist/slpk-extractor/helpers/file-handle-provider.d.ts +48 -0
  378. package/dist/slpk-extractor/helpers/file-handle-provider.d.ts.map +1 -0
  379. package/dist/slpk-extractor/helpers/file-handle-provider.js +71 -0
  380. package/dist/slpk-extractor/slpk-extractor.d.ts +23 -0
  381. package/dist/slpk-extractor/slpk-extractor.d.ts.map +1 -0
  382. package/dist/slpk-extractor/slpk-extractor.js +78 -0
  383. package/dist/slpk-extractor-cli.d.ts +17 -0
  384. package/dist/slpk-extractor-cli.d.ts.map +1 -0
  385. package/dist/slpk-extractor-cli.js +102 -0
  386. package/dist/slpk-extractor.min.js +189 -0
  387. package/dist/workers/3d-tiles-attributes-worker.d.ts +2 -0
  388. package/dist/workers/3d-tiles-attributes-worker.d.ts.map +1 -0
  389. package/dist/workers/3d-tiles-attributes-worker.js +9 -0
  390. package/dist/workers/i3s-attributes-worker.d.ts +2 -0
  391. package/dist/workers/i3s-attributes-worker.d.ts.map +1 -0
  392. package/dist/workers/i3s-attributes-worker.js +5 -0
  393. package/package.json +36 -24
  394. package/src/3d-tiles-attributes-worker.ts +43 -0
  395. package/src/3d-tiles-converter/3d-tiles-converter.ts +131 -63
  396. package/src/3d-tiles-converter/helpers/{b3dm-converter.js → b3dm-converter.ts} +72 -53
  397. package/src/3d-tiles-converter/helpers/{i3s-obb-to-3d-tiles-obb.js → i3s-obb-to-3d-tiles-obb.ts} +16 -1
  398. package/src/3d-tiles-converter/helpers/texture-atlas.ts +4 -4
  399. package/src/3d-tiles-converter/json-templates/{tileset.js → tileset.ts} +9 -9
  400. package/src/constants.ts +2 -0
  401. package/src/converter-cli.ts +305 -0
  402. package/src/deps-installer/deps-installer.ts +72 -0
  403. package/src/i3s-attributes-worker.ts +59 -0
  404. package/src/i3s-converter/helpers/batch-ids-extensions.ts +202 -0
  405. package/src/i3s-converter/helpers/coordinate-converter.ts +94 -34
  406. package/src/i3s-converter/helpers/create-scene-server-path.ts +29 -0
  407. package/src/i3s-converter/helpers/feature-attributes.ts +247 -0
  408. package/src/i3s-converter/helpers/geometry-attributes.ts +267 -0
  409. package/src/i3s-converter/helpers/geometry-converter.ts +1667 -0
  410. package/src/i3s-converter/helpers/gltf-attributes.ts +162 -0
  411. package/src/i3s-converter/helpers/load-3d-tiles.ts +68 -0
  412. package/src/i3s-converter/helpers/node-debug.ts +146 -0
  413. package/src/i3s-converter/helpers/node-index-document.ts +335 -0
  414. package/src/i3s-converter/helpers/node-pages.ts +344 -0
  415. package/src/i3s-converter/helpers/preprocess-3d-tiles.ts +79 -0
  416. package/src/i3s-converter/helpers/tileset-traversal.ts +51 -0
  417. package/src/i3s-converter/i3s-converter.ts +650 -669
  418. package/src/i3s-converter/json-templates/geometry-definitions.ts +83 -0
  419. package/src/i3s-converter/json-templates/layers.ts +137 -0
  420. package/src/i3s-converter/json-templates/{metadata.js → metadata.ts} +2 -2
  421. package/src/i3s-converter/json-templates/{node.js → node.ts} +12 -12
  422. package/src/i3s-converter/json-templates/{scene-server.js → scene-server.ts} +2 -2
  423. package/src/i3s-converter/json-templates/{shared-resources.js → shared-resources.ts} +17 -17
  424. package/src/i3s-converter/types.ts +185 -0
  425. package/src/i3s-server/README.md +19 -0
  426. package/src/i3s-server/app.js +8 -1
  427. package/src/i3s-server/controllers/slpk-controller.js +38 -0
  428. package/src/i3s-server/routes/slpk-router.js +33 -0
  429. package/src/i3s-server/utils/create-scene-server.js +15 -0
  430. package/src/index.ts +0 -4
  431. package/src/lib/utils/cli-utils.ts +78 -0
  432. package/src/lib/utils/{compress-util.js → compress-util.ts} +105 -18
  433. package/src/lib/utils/file-utils.ts +140 -0
  434. package/src/lib/utils/geometry-utils.ts +14 -0
  435. package/src/lib/utils/{lod-conversion-utils.js → lod-conversion-utils.ts} +31 -5
  436. package/src/lib/utils/queue.ts +17 -0
  437. package/src/lib/utils/write-queue.ts +110 -0
  438. package/src/pgm-loader.ts +3 -3
  439. package/src/slpk-extractor/helpers/file-handle-provider.ts +91 -0
  440. package/src/slpk-extractor/slpk-extractor.ts +102 -0
  441. package/src/slpk-extractor-cli.ts +128 -0
  442. package/src/workers/3d-tiles-attributes-worker.ts +6 -0
  443. package/src/workers/i3s-attributes-worker.ts +7 -0
  444. package/dist/3d-tiles-converter/3d-tiles-converter.js.map +0 -1
  445. package/dist/3d-tiles-converter/helpers/b3dm-converter.js.map +0 -1
  446. package/dist/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +0 -1
  447. package/dist/3d-tiles-converter/helpers/texture-atlas.js.map +0 -1
  448. package/dist/3d-tiles-converter/json-templates/tileset.js.map +0 -1
  449. package/dist/bundle.js.map +0 -1
  450. package/dist/deps-installer/deps-installer.js.map +0 -1
  451. package/dist/i3s-converter/helpers/coordinate-converter.js.map +0 -1
  452. package/dist/i3s-converter/helpers/create-scene-server-path.js.map +0 -1
  453. package/dist/i3s-converter/helpers/geometry-attributes.js.map +0 -1
  454. package/dist/i3s-converter/helpers/geometry-converter.js.map +0 -1
  455. package/dist/i3s-converter/helpers/node-debug.js.map +0 -1
  456. package/dist/i3s-converter/helpers/node-pages.js.map +0 -1
  457. package/dist/i3s-converter/i3s-converter.js.map +0 -1
  458. package/dist/i3s-converter/json-templates/layers.js.map +0 -1
  459. package/dist/i3s-converter/json-templates/metadata.js.map +0 -1
  460. package/dist/i3s-converter/json-templates/node.js.map +0 -1
  461. package/dist/i3s-converter/json-templates/scene-server.js.map +0 -1
  462. package/dist/i3s-converter/json-templates/shared-resources.js.map +0 -1
  463. package/dist/i3s-converter/json-templates/store.js.map +0 -1
  464. package/dist/i3s-server/app.js.map +0 -1
  465. package/dist/i3s-server/controllers/index-controller.js.map +0 -1
  466. package/dist/i3s-server/routes/index.js.map +0 -1
  467. package/dist/index.js.map +0 -1
  468. package/dist/lib/geoid-height-model.d.ts +0 -41
  469. package/dist/lib/geoid-height-model.js +0 -140
  470. package/dist/lib/geoid-height-model.js.map +0 -1
  471. package/dist/lib/pgm-parser.d.ts +0 -14
  472. package/dist/lib/pgm-parser.js +0 -183
  473. package/dist/lib/pgm-parser.js.map +0 -1
  474. package/dist/lib/utils/compress-util.js.map +0 -1
  475. package/dist/lib/utils/compress-utils.d.ts +0 -53
  476. package/dist/lib/utils/file-utils.js.map +0 -1
  477. package/dist/lib/utils/lod-conversion-utils.js.map +0 -1
  478. package/dist/lib/utils/statistic-utills.js.map +0 -1
  479. package/dist/pgm-loader.js.map +0 -1
  480. package/src/3d-tiles-converter/helpers/b3dm-converter.d.ts +0 -23
  481. package/src/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.d.ts +0 -16
  482. package/src/deps-installer/deps-installer.d.ts +0 -10
  483. package/src/deps-installer/deps-installer.js +0 -22
  484. package/src/i3s-converter/helpers/create-scene-server-path.js +0 -25
  485. package/src/i3s-converter/helpers/geometry-converter.d.ts +0 -40
  486. package/src/i3s-converter/helpers/geometry-converter.js +0 -915
  487. package/src/i3s-converter/helpers/node-pages.d.ts +0 -144
  488. package/src/i3s-converter/helpers/node-pages.js +0 -208
  489. package/src/i3s-converter/json-templates/layers.js +0 -199
  490. package/src/lib/geoid-height-model.d.ts +0 -41
  491. package/src/lib/geoid-height-model.js +0 -239
  492. package/src/lib/pgm-parser.d.ts +0 -14
  493. package/src/lib/pgm-parser.js +0 -179
  494. package/src/lib/utils/compress-utils.d.ts +0 -53
  495. package/src/lib/utils/file-utils.d.ts +0 -43
  496. package/src/lib/utils/file-utils.js +0 -38
  497. package/src/lib/utils/lod-conversion-utils.d.ts +0 -32
  498. /package/dist/{i3s-server → es5/i3s-server}/bin/www +0 -0
  499. /package/dist/{i3s-server → es5/i3s-server}/certs/cert.pem +0 -0
  500. /package/dist/{i3s-server → es5/i3s-server}/certs/key.pem +0 -0
  501. /package/src/i3s-converter/json-templates/{store.js → store.ts} +0 -0
  502. /package/src/lib/utils/{statistic-utills.js → statistic-utills.ts} +0 -0
@@ -0,0 +1,162 @@
1
+ import type {Tiles3DTileContent} from '@loaders.gl/3d-tiles';
2
+ import type {GLTFAccessorPostprocessed, GLTFNodePostprocessed} from '@loaders.gl/gltf';
3
+ import type {B3DMAttributesData} from '../../i3s-attributes-worker';
4
+ import {Matrix4, TypedArray, Vector3} from '@math.gl/core';
5
+ import {BoundingSphere, OrientedBoundingBox} from '@math.gl/culling';
6
+ import {Ellipsoid} from '@math.gl/geospatial';
7
+
8
+ /**
9
+ * Prepare attributes for conversion to avoid binary data breaking in worker thread.
10
+ * @param tileContent - 3DTiles tile content
11
+ * @param tileTransform - transformation matrix of the tile, calculated recursively multiplying
12
+ * transform of all parent tiles and transform of the current tile
13
+ * @param boundingVolume - initialized bounding volume of the source tile
14
+ * @returns 3DTiles content data, prepared for conversion
15
+ */
16
+ export function prepareDataForAttributesConversion(
17
+ tileContent: Tiles3DTileContent,
18
+ tileTransform: Matrix4,
19
+ boundingVolume: OrientedBoundingBox | BoundingSphere
20
+ ): B3DMAttributesData {
21
+ let nodes =
22
+ tileContent.gltf?.scene?.nodes ||
23
+ tileContent.gltf?.scenes?.[0]?.nodes ||
24
+ tileContent.gltf?.nodes ||
25
+ [];
26
+
27
+ const images =
28
+ tileContent.gltf?.images?.map((imageObject) => {
29
+ // Need data only for uncompressed images because we can't get batchIds from compressed textures.
30
+ if (imageObject?.image?.compressed) {
31
+ return null;
32
+ } else {
33
+ const data = imageObject?.image?.data;
34
+ const dataCopy = new Uint8Array(data.length);
35
+ dataCopy.set(data);
36
+ return {
37
+ data: dataCopy,
38
+ compressed: false,
39
+ height: imageObject.image.height,
40
+ width: imageObject.image.width,
41
+ components: imageObject.image.components,
42
+ mimeType: imageObject.mimeType
43
+ };
44
+ }
45
+ }) || [];
46
+
47
+ prepareNodes(nodes);
48
+
49
+ const {cartographicOrigin, modelMatrix: cartesianModelMatrix} = calculateTransformProps(
50
+ tileContent,
51
+ tileTransform,
52
+ boundingVolume
53
+ );
54
+
55
+ return {
56
+ nodes,
57
+ images,
58
+ cartographicOrigin,
59
+ cartesianModelMatrix
60
+ };
61
+ }
62
+
63
+ /**
64
+ * Keep only values for glTF attributes to pass data to worker thread.
65
+ * @param attributes - geometry attributes
66
+ * @returns attributes with only `value` item
67
+ */
68
+ function getB3DMAttributesWithoutBufferView(
69
+ attributes: Record<string, GLTFAccessorPostprocessed>
70
+ ): Record<string, {value: TypedArray}> {
71
+ const attributesWithoutBufferView: Record<string, {value: TypedArray}> = {};
72
+
73
+ for (const attributeName in attributes) {
74
+ attributesWithoutBufferView[attributeName] = {
75
+ value: attributes[attributeName].value
76
+ };
77
+ }
78
+
79
+ return attributesWithoutBufferView;
80
+ }
81
+
82
+ /**
83
+ * Calculate transformation properties to transform vertex attributes (POSITION, NORMAL, etc.)
84
+ * from METER_OFFSET coorditantes to LNGLAT_OFFSET coordinates
85
+ * @param tileContent - 3DTiles tile content
86
+ * @param tileTransform - transformation matrix of the tile, calculated recursively multiplying
87
+ * transform of all parent tiles and transform of the current tile
88
+ * @param boundingVolume - initialized bounding volume of the source tile
89
+ * @returns modelMatrix - transformation matrix to transform coordinates to cartographic coordinates
90
+ * cartographicOrigin - tile origin coordinates to calculate offsets
91
+ */
92
+ export function calculateTransformProps(
93
+ tileContent: Tiles3DTileContent,
94
+ tileTransform: Matrix4,
95
+ boundingVolume: OrientedBoundingBox | BoundingSphere
96
+ ): {modelMatrix: Matrix4; cartographicOrigin: Vector3} {
97
+ const {rtcCenter, gltfUpAxis} = tileContent;
98
+ const {center} = boundingVolume;
99
+
100
+ let modelMatrix = new Matrix4(tileTransform);
101
+
102
+ // Translate if appropriate
103
+ if (rtcCenter) {
104
+ modelMatrix.translate(rtcCenter);
105
+ }
106
+
107
+ // glTF models need to be rotated from Y to Z up
108
+ // https://github.com/AnalyticalGraphicsInc/3d-tiles/tree/master/specification#y-up-to-z-up
109
+ switch (gltfUpAxis) {
110
+ case 'Z':
111
+ break;
112
+ case 'Y':
113
+ const rotationY = new Matrix4().rotateX(Math.PI / 2);
114
+ modelMatrix = modelMatrix.multiplyRight(rotationY);
115
+ break;
116
+ case 'X':
117
+ const rotationX = new Matrix4().rotateY(-Math.PI / 2);
118
+ modelMatrix = modelMatrix.multiplyRight(rotationX);
119
+ break;
120
+ default:
121
+ break;
122
+ }
123
+
124
+ const cartesianOrigin = new Vector3(center);
125
+ const cartographicOrigin = Ellipsoid.WGS84.cartesianToCartographic(
126
+ cartesianOrigin,
127
+ new Vector3()
128
+ );
129
+ return {modelMatrix, cartographicOrigin};
130
+ }
131
+
132
+ /**
133
+ * Traverse all nodes to replace all sensible data with copy to avoid data corruption in worker.
134
+ * @param nodes
135
+ */
136
+ function prepareNodes(nodes: GLTFNodePostprocessed[]): void {
137
+ for (let index = 0; index < nodes.length; index++) {
138
+ const node = nodes[index] as any;
139
+
140
+ if (node.mesh) {
141
+ nodes[index] = {
142
+ ...node,
143
+ mesh: {
144
+ ...node.mesh,
145
+ primitives: node.mesh?.primitives.map((primitive) => ({
146
+ ...primitive,
147
+ indices: {value: primitive?.indices?.value},
148
+ attributes: getB3DMAttributesWithoutBufferView(primitive.attributes),
149
+ material: {
150
+ id: primitive?.material?.id,
151
+ uniqueId: primitive?.material?.uniqueId
152
+ }
153
+ }))
154
+ }
155
+ };
156
+ }
157
+
158
+ if (node.children) {
159
+ prepareNodes(node.children);
160
+ }
161
+ }
162
+ }
@@ -0,0 +1,68 @@
1
+ import type {
2
+ Tiles3DLoaderOptions,
3
+ Tiles3DTileContent,
4
+ Tiles3DTileJSONPostprocessed,
5
+ Tiles3DTilesetJSONPostprocessed
6
+ } from '@loaders.gl/3d-tiles';
7
+ import {load} from '@loaders.gl/core';
8
+
9
+ /**
10
+ * Load nested 3DTiles tileset. If the sourceTile is not nested tileset - do nothing
11
+ * @param sourceTileset - source root tileset JSON
12
+ * @param sourceTile - source tile JSON that is supposed to has link to nested tileset
13
+ * @param tilesetLoadOptions - load options for Tiles3DLoader
14
+ * @returns nothing
15
+ */
16
+ export const loadNestedTileset = async (
17
+ sourceTileset: Tiles3DTilesetJSONPostprocessed | null,
18
+ sourceTile: Tiles3DTileJSONPostprocessed,
19
+ tilesetLoadOptions: Tiles3DLoaderOptions
20
+ ): Promise<void> => {
21
+ const isTileset = sourceTile.type === 'json';
22
+ if (!sourceTileset || !sourceTile.contentUrl || !isTileset) {
23
+ return;
24
+ }
25
+
26
+ const loadOptions = {
27
+ ...tilesetLoadOptions,
28
+ [sourceTileset.loader.id]: {
29
+ isTileset,
30
+ assetGltfUpAxis: (sourceTileset.asset && sourceTileset.asset.gltfUpAxis) || 'Y'
31
+ }
32
+ };
33
+ const tileContent = await load(sourceTile.contentUrl, sourceTileset.loader, loadOptions);
34
+
35
+ if (tileContent.root) {
36
+ sourceTile.children = [tileContent.root];
37
+ }
38
+ };
39
+
40
+ /**
41
+ * Load 3DTiles tile content, that includes glTF object
42
+ * @param sourceTileset - source root tileset JSON
43
+ * @param sourceTile - source tile JSON that has link to content data
44
+ * @param tilesetLoadOptions - load options for Tiles3DLoader
45
+ * @returns - 3DTiles tile content or null
46
+ */
47
+ export const loadTile3DContent = async (
48
+ sourceTileset: Tiles3DTilesetJSONPostprocessed | null,
49
+ sourceTile: Tiles3DTileJSONPostprocessed,
50
+ tilesetLoadOptions: Tiles3DLoaderOptions
51
+ ): Promise<Tiles3DTileContent | null> => {
52
+ const isTileset = sourceTile.type === 'json';
53
+ if (!sourceTileset || !sourceTile.contentUrl || isTileset) {
54
+ return null;
55
+ }
56
+
57
+ const loadOptions = {
58
+ ...tilesetLoadOptions,
59
+ [sourceTileset.loader.id]: {
60
+ ...(tilesetLoadOptions[sourceTileset.loader.id] || {}),
61
+ isTileset,
62
+ assetGltfUpAxis: (sourceTileset.asset && sourceTileset.asset.gltfUpAxis) || 'Y'
63
+ }
64
+ };
65
+ const tileContent = await load(sourceTile.contentUrl, sourceTileset.loader, loadOptions);
66
+
67
+ return tileContent;
68
+ };
@@ -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,335 @@
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
+ * Finalized property. It means that all child nodes are saved and their data
36
+ * is unloaded
37
+ */
38
+ private _finalized: boolean = false;
39
+ get finalized(): boolean {
40
+ return this._finalized;
41
+ }
42
+
43
+ /**
44
+ * Constructor
45
+ * @param id - id of the node in node pages
46
+ * @param converter - converter instance
47
+ */
48
+ constructor(id: number, converter: I3SConverter) {
49
+ this.inPageId = id;
50
+ this.id = id === 0 ? 'root' : id.toString();
51
+ this.converter = converter;
52
+ }
53
+
54
+ /**
55
+ * Add Node3DIndexDocument data to the node
56
+ * @param data Node3DIndexDocument data
57
+ * @returns this NodeIndexDocument instance (to recurring with constructor)
58
+ */
59
+ public async addData(data: Node3DIndexDocument): Promise<NodeIndexDocument> {
60
+ if (this.converter.options.instantNodeWriting) {
61
+ await this.write(data);
62
+ } else {
63
+ this.data = data;
64
+ }
65
+ return this;
66
+ }
67
+
68
+ /**
69
+ * Add child node references
70
+ * @param childNodes - child NodeIndexDocument instances
71
+ */
72
+ public async addChildren(childNodes: NodeIndexDocument[]): Promise<void> {
73
+ const newChildren: NodeReference[] = [];
74
+ for (const node of childNodes) {
75
+ const nodeData = await node.load();
76
+ newChildren.push({
77
+ id: node.id,
78
+ href: `../${node.id}`,
79
+ obb: nodeData.obb,
80
+ mbs: nodeData.mbs
81
+ });
82
+ }
83
+ this.children = this.children.concat(childNodes);
84
+
85
+ let data: Node3DIndexDocument | null = this.data;
86
+ if (this.converter.options.instantNodeWriting) {
87
+ data = (await this.load()) as Node3DIndexDocument;
88
+ }
89
+ if (data) {
90
+ data.children = data.children ?? [];
91
+ data.children = data.children.concat(newChildren);
92
+ }
93
+ if (this.converter.options.instantNodeWriting && data) {
94
+ await this.write(data);
95
+ }
96
+ }
97
+
98
+ /**
99
+ * Add neighbors to child nodes of this node
100
+ */
101
+ public async addNeighbors(): Promise<void> {
102
+ if (this.finalized) {
103
+ return;
104
+ }
105
+ const nodeData = await this.load();
106
+ for (const childNode of this.children) {
107
+ const childNodeData = await childNode.load();
108
+ childNodeData.neighbors = childNodeData.neighbors ?? [];
109
+
110
+ // Don't do large amount of "neightbors" to avoid big memory consumption
111
+ if (Number(nodeData?.children?.length) < 1000) {
112
+ for (const neighbor of nodeData.children || []) {
113
+ if (childNode.id === neighbor.id) {
114
+ continue; // eslint-disable-line
115
+ }
116
+
117
+ childNodeData.neighbors.push({...neighbor});
118
+ }
119
+ } else {
120
+ // eslint-disable-next-line no-console, no-undef
121
+ console.warn(
122
+ `Node ${childNode.id}: neighbors attribute is omited because of large number of neigbors`
123
+ );
124
+ delete childNodeData.neighbors;
125
+ }
126
+
127
+ if (this.converter.options.instantNodeWriting && childNodeData) {
128
+ await childNode.write(childNodeData);
129
+ }
130
+ await childNode.save();
131
+ }
132
+ // The save after adding neighbors is the last one. Finalize the the node
133
+ this.finalize();
134
+ }
135
+
136
+ /** Save 3DNodeIndexDocument in file on disk */
137
+ public async save(): Promise<void> {
138
+ if (this.data) {
139
+ await this.write(this.data);
140
+ }
141
+ }
142
+
143
+ /** Finalize the node */
144
+ private finalize(): void {
145
+ this._finalized = true;
146
+ for (const child of this.children) {
147
+ child.flush();
148
+ }
149
+ }
150
+
151
+ /**
152
+ * Write 3DNodeIndexDocument https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md
153
+ * @param node - Node3DIndexDocument object
154
+ */
155
+ private async write(node: Node3DIndexDocument): Promise<void> {
156
+ const path = join(this.converter.layers0Path, 'nodes', this.id);
157
+ if (this.converter.options.slpk) {
158
+ await this.converter.writeQueue.enqueue(
159
+ {
160
+ archiveKey: `nodes/${this.id}/3dNodeIndexDocument.json.gz`,
161
+ writePromise: () =>
162
+ writeFileForSlpk(
163
+ path,
164
+ JSON.stringify(node),
165
+ '3dNodeIndexDocument.json',
166
+ true,
167
+ this.converter.compressList
168
+ )
169
+ },
170
+ true
171
+ );
172
+ } else {
173
+ await this.converter.writeQueue.enqueue(
174
+ {writePromise: () => writeFile(path, JSON.stringify(node))},
175
+ true
176
+ );
177
+ }
178
+ }
179
+
180
+ /**
181
+ * Load 3DNodeIndexDocument data from file on disk
182
+ * @returns 3DNodeIndexDocument object
183
+ */
184
+ private async load(): Promise<Node3DIndexDocument> {
185
+ if (this.data) {
186
+ return this.data;
187
+ }
188
+ const path = this.id;
189
+ const parentNodePath = join(this.converter.layers0Path, 'nodes', path);
190
+ let parentNodeFileName = 'index.json';
191
+ if (this.converter.options.slpk) {
192
+ parentNodeFileName = '3dNodeIndexDocument.json';
193
+ }
194
+ return (await openJson(parentNodePath, parentNodeFileName)) as Node3DIndexDocument;
195
+ }
196
+
197
+ /**
198
+ * Unload the Node data
199
+ */
200
+ private flush(): void {
201
+ this.data = null;
202
+ }
203
+
204
+ /**
205
+ * Create root node of the tree
206
+ * @param boundingVolumes - MBS and OOB bounding volumes data
207
+ * @param converter - I3SConverter instance
208
+ * @returns instance of NodeIndexDocument
209
+ */
210
+ static async createRootNode(
211
+ boundingVolumes: BoundingVolumes,
212
+ converter: I3SConverter
213
+ ): Promise<NodeIndexDocument> {
214
+ const rootData = NodeIndexDocument.createRootNodeIndexDocument(boundingVolumes);
215
+ const rootNode = await new NodeIndexDocument(0, converter).addData(rootData);
216
+ return rootNode;
217
+ }
218
+
219
+ /**
220
+ * Create NodeIndexDocument instance
221
+ * @param parentNode - parent NodeIndexDocument
222
+ * @param boundingVolumes - MBS and OOB bounding volumes data
223
+ * @param lodSelection - LOD metrics data
224
+ * @param nodeInPage - node data in node pages
225
+ * @param resources - resources extracted from gltf/b3dm file
226
+ * @param converter - I3SConverter instance
227
+ * @returns NodeIndexDocument instance
228
+ */
229
+ static async createNode(
230
+ parentNode: NodeIndexDocument,
231
+ boundingVolumes: BoundingVolumes,
232
+ lodSelection: LodSelection[],
233
+ nodeInPage: NodeInPage,
234
+ resources: I3SConvertedResources,
235
+ converter: I3SConverter
236
+ ): Promise<NodeIndexDocument> {
237
+ const data = await NodeIndexDocument.createNodeIndexDocument(
238
+ parentNode,
239
+ boundingVolumes,
240
+ lodSelection,
241
+ nodeInPage,
242
+ resources
243
+ );
244
+ const node = await new NodeIndexDocument(nodeInPage.index, converter).addData(data);
245
+ return node;
246
+ }
247
+
248
+ /**
249
+ * Form 3DNodeIndexDocument data for the root node
250
+ * @param boundingVolumes - mbs and obb data about node's bounding volume
251
+ * @return 3DNodeIndexDocument data https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md
252
+ */
253
+ static createRootNodeIndexDocument(boundingVolumes: BoundingVolumes): Node3DIndexDocument {
254
+ const root0data = {
255
+ version: `{${uuidv4().toUpperCase()}}`,
256
+ id: 'root',
257
+ level: 0,
258
+ lodSelection: [
259
+ {
260
+ metricType: 'maxScreenThresholdSQ',
261
+ maxError: 0
262
+ },
263
+ {
264
+ metricType: 'maxScreenThreshold',
265
+ maxError: 0
266
+ }
267
+ ],
268
+ ...boundingVolumes,
269
+ children: []
270
+ };
271
+ return transform(root0data, nodeTemplate());
272
+ }
273
+
274
+ /**
275
+ * Create a new Node3DIndexDocument
276
+ * @param parentNode - 3DNodeIndexDocument https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md object of the parent node
277
+ * @param boundingVolumes - Bounding volumes
278
+ * @param lodSelection - Level of Details (LOD) metrics
279
+ * @param nodeInPage - corresponding node object in a node page
280
+ * @param resources - the node resources data
281
+ * @param resources.texture - texture image
282
+ * @param resources.attributes - feature attributes
283
+ * @return 3DNodeIndexDocument https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md object
284
+ */
285
+ static async createNodeIndexDocument(
286
+ parentNode: NodeIndexDocument,
287
+ boundingVolumes: BoundingVolumes,
288
+ lodSelection: LodSelection[],
289
+ nodeInPage: NodeInPage,
290
+ resources: I3SConvertedResources
291
+ ): Promise<Node3DIndexDocument> {
292
+ const {texture, attributes} = resources;
293
+ const nodeId = nodeInPage.index!;
294
+ const parentNodeData = await parentNode.load();
295
+ const nodeData = {
296
+ version: parentNodeData.version,
297
+ id: nodeId.toString(),
298
+ level: parentNodeData.level! + 1,
299
+ ...boundingVolumes,
300
+ lodSelection,
301
+ parentNode: {
302
+ id: parentNode.id,
303
+ href: `../${parentNode.id}`,
304
+ mbs: parentNodeData.mbs,
305
+ obb: parentNodeData.obb
306
+ },
307
+ children: [],
308
+ neighbors: []
309
+ };
310
+ const node = transform(nodeData, nodeTemplate());
311
+
312
+ if (nodeInPage.mesh) {
313
+ node.geometryData = [{href: './geometries/0'}];
314
+ node.sharedResource = {href: './shared'};
315
+
316
+ if (texture) {
317
+ node.textureData = [{href: './textures/0'}, {href: './textures/1'}];
318
+ }
319
+
320
+ if (
321
+ attributes &&
322
+ attributes.length &&
323
+ parentNode.converter.layers0?.attributeStorageInfo?.length
324
+ ) {
325
+ node.attributeData = [];
326
+ for (let index = 0; index < attributes.length; index++) {
327
+ const folderName = parentNode.converter.layers0.attributeStorageInfo[index].key;
328
+ node.attributeData.push({href: `./attributes/${folderName}/0`});
329
+ }
330
+ }
331
+ }
332
+
333
+ return node;
334
+ }
335
+ }