@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,72 @@
1
+ import {load, fetchFile} from '@loaders.gl/core';
2
+ import {ZipLoader} from '@loaders.gl/zip';
3
+ import {writeFile} from '../lib/utils/file-utils';
4
+ import {join} from 'path';
5
+ import {ChildProcessProxy} from '@loaders.gl/worker-utils';
6
+
7
+ // @ts-ignore TS2304: Cannot find name '__VERSION__'.
8
+ const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'beta';
9
+
10
+ const PGM_LINK = 'https://raw.githubusercontent.com/visgl/deck.gl-data/master/egm/egm2008-5.zip';
11
+
12
+ /**
13
+ * Install external dependencies for converter:
14
+ * * PGM file (implemented);
15
+ * * Draco library (not implemented);
16
+ * * 7z archiver (not implemented);
17
+ */
18
+ export class DepsInstaller {
19
+ /**
20
+ * Run instalation
21
+ * @param path destination folder
22
+ * @param workersPath destination folder for workers.
23
+ * This path is '' by default and is not used by tile-converter.
24
+ * It is used in tests to prevent rewriting actual workers during tests running
25
+ */
26
+ async install(path: string = '', workersPath: string = ''): Promise<void> {
27
+ console.log('Installing "EGM2008-5" model...'); // eslint-disable-line no-console
28
+ const fileMap = await load(PGM_LINK, ZipLoader, {});
29
+
30
+ let depsPath = process.cwd();
31
+ if (path) {
32
+ depsPath = join(depsPath, path);
33
+ }
34
+
35
+ await writeFile(depsPath, new Uint8Array(fileMap['geoids/egm2008-5.pgm']), 'egm2008-5.pgm');
36
+
37
+ console.log('Installing "I3S Content Loader worker"'); // eslint-disable-line no-console
38
+ await this.installWorker('i3s', 'i3s-content-worker-node.js', workersPath);
39
+
40
+ console.log('Installing "Draco Loader worker"'); // eslint-disable-line no-console
41
+ await this.installWorker('draco', 'draco-worker-node.js', workersPath);
42
+
43
+ console.log('Installing "Basis Loader worker"'); // eslint-disable-line no-console
44
+ await this.installWorker('textures', 'basis-worker-node.js', workersPath);
45
+
46
+ console.log('Installing "join-images" npm package');
47
+ const childProcess = new ChildProcessProxy();
48
+ await childProcess.start({
49
+ command: process.platform === 'win32' ? 'npm.cmd' : 'npm',
50
+ // `npm install sharp join-images` works unstable. It fails because installed `sharp` version
51
+ // may be different from the version required by `join-images`. Pointing to specific versions
52
+ // resolve this issue
53
+ arguments: ['install', 'sharp@0.30.4', 'join-images@1.1.3'],
54
+ wait: 0,
55
+ ignoreStderr: true
56
+ });
57
+
58
+ console.log('All dependencies were installed succesfully.'); // eslint-disable-line no-console
59
+ }
60
+
61
+ private async installWorker(module: string, name: string, extraPath: string) {
62
+ const fileResponse = await fetchFile(
63
+ `https://unpkg.com/@loaders.gl/${module}@${VERSION}/dist/${name}`
64
+ );
65
+ const fileData = await fileResponse.arrayBuffer();
66
+ if (!fileData) {
67
+ return;
68
+ }
69
+ const path = join(process.cwd(), extraPath, 'modules', module, 'dist');
70
+ await writeFile(path, fileData, name);
71
+ }
72
+ }
@@ -0,0 +1,59 @@
1
+ import type {WorkerObject} from '@loaders.gl/worker-utils';
2
+ import type {ConvertedAttributes} from './i3s-converter/types';
3
+ import type {Matrix4, Vector3} from '@math.gl/core';
4
+ import type {GLTFNodePostprocessed} from '@loaders.gl/gltf';
5
+
6
+ import {processOnWorker} from '@loaders.gl/worker-utils';
7
+
8
+ // __VERSION__ is injected by babel-plugin-version-inline
9
+ // @ts-ignore TS2304: Cannot find name '__VERSION__'.
10
+ const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
11
+
12
+ export type I3SAttributesWorkerOptions = {
13
+ _nodeWorkers: boolean;
14
+ reuseWorkers: boolean;
15
+ useCartesianPositions: boolean;
16
+ source: string;
17
+ };
18
+
19
+ export type TextureImageProperties = {
20
+ data: Uint8Array;
21
+ compressed?: boolean;
22
+ height?: number;
23
+ width?: number;
24
+ components?: number;
25
+ mimeType?: string;
26
+ };
27
+
28
+ export type B3DMAttributesData = {
29
+ gltfMaterials?: {id: string}[];
30
+ nodes: GLTFNodePostprocessed[];
31
+ images: (null | TextureImageProperties)[];
32
+ cartographicOrigin: Vector3;
33
+ cartesianModelMatrix: Matrix4;
34
+ };
35
+
36
+ /**
37
+ * I3S Attributes Worker to handle B3DM object
38
+ */
39
+ export const I3SAttributesWorker = {
40
+ id: 'i3s-attributes',
41
+ name: 'I3S Attributes Worker',
42
+ module: 'tile-converter',
43
+ version: VERSION,
44
+ options: {
45
+ useCartesianPositions: false
46
+ }
47
+ };
48
+
49
+ /**
50
+ * Performs I3S attributes transformation
51
+ */
52
+ export function transformI3SAttributesOnWorker(
53
+ attributesData: B3DMAttributesData,
54
+ options: I3SAttributesWorkerOptions
55
+ ): Promise<Map<string, ConvertedAttributes>> {
56
+ return processOnWorker(I3SAttributesWorker, attributesData, options);
57
+ }
58
+
59
+ export const _typecheckI3SAttributesWorker: WorkerObject = I3SAttributesWorker;
@@ -0,0 +1,202 @@
1
+ import {GLTFAccessorPostprocessed, GLTFMeshPrimitivePostprocessed} from '@loaders.gl/gltf';
2
+ import type {NumericArray} from '@loaders.gl/loader-utils';
3
+ import type {
4
+ GLTF_EXT_feature_metadata_attribute,
5
+ GLTF_EXT_feature_metadata_primitive
6
+ } from '@loaders.gl/gltf';
7
+ import {TypedArray} from '@math.gl/core';
8
+ import {TextureImageProperties} from '../../i3s-attributes-worker';
9
+
10
+ const EXT_MESH_FEATURES = 'EXT_mesh_features';
11
+ const EXT_FEATURE_METADATA = 'EXT_feature_metadata';
12
+
13
+ /**
14
+ * Getting batchIds from 3DTilesNext extensions.
15
+ * @param attributes - gltf accessors
16
+ * @param primitive - gltf primitive data
17
+ * @param images - gltf texture images
18
+ */
19
+ export function handleBatchIdsExtensions(
20
+ attributes: {
21
+ [key: string]: GLTFAccessorPostprocessed;
22
+ },
23
+ primitive: GLTFMeshPrimitivePostprocessed,
24
+ images: (TextureImageProperties | null)[]
25
+ ): NumericArray {
26
+ const extensions = primitive?.extensions;
27
+
28
+ if (!extensions) {
29
+ return [];
30
+ }
31
+
32
+ for (const [extensionName, extensionData] of Object.entries(extensions || {})) {
33
+ switch (extensionName) {
34
+ case EXT_FEATURE_METADATA:
35
+ return handleExtFeatureMetadataExtension(
36
+ attributes,
37
+ extensionData as GLTF_EXT_feature_metadata_primitive,
38
+ images
39
+ );
40
+ case EXT_MESH_FEATURES:
41
+ console.warn('EXT_mesh_features extension is not supported yet');
42
+ return [];
43
+ default:
44
+ return [];
45
+ }
46
+ }
47
+
48
+ return [];
49
+ }
50
+
51
+ /**
52
+ * Get batchIds from EXT_feature_metadata extension.
53
+ * Docs - https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata
54
+ * @param attributes
55
+ * @param extFeatureMetadata
56
+ * @param textures
57
+ */
58
+ function handleExtFeatureMetadataExtension(
59
+ attributes: {
60
+ [key: string]: GLTFAccessorPostprocessed;
61
+ },
62
+ extFeatureMetadata: GLTF_EXT_feature_metadata_primitive,
63
+ images: (TextureImageProperties | null)[]
64
+ ): NumericArray {
65
+ // Take only first extension object to get batchIds attribute name.
66
+ const featureIdAttribute = extFeatureMetadata?.featureIdAttributes?.[0];
67
+
68
+ if (featureIdAttribute?.featureIds?.attribute) {
69
+ const batchIdsAttribute = attributes[featureIdAttribute.featureIds.attribute];
70
+ return batchIdsAttribute.value;
71
+ }
72
+
73
+ if (
74
+ featureIdAttribute?.featureIds?.hasOwnProperty('constant') &&
75
+ featureIdAttribute?.featureIds?.hasOwnProperty('divisor')
76
+ ) {
77
+ const featuresCount = attributes?.POSITIONS?.value.length / 3 || 0;
78
+ return generateImplicitFeatureIds(
79
+ featuresCount,
80
+ featureIdAttribute.featureIds.constant,
81
+ featureIdAttribute.featureIds.divisor
82
+ );
83
+ }
84
+
85
+ // Take only first extension object to get batchIds attribute name.
86
+ const featureIdTexture =
87
+ extFeatureMetadata?.featureIdTextures && extFeatureMetadata?.featureIdTextures[0];
88
+
89
+ if (featureIdTexture) {
90
+ const textureAttributeIndex = featureIdTexture?.featureIds?.texture?.texCoord || 0;
91
+ const textCoordAttribute = `TEXCOORD_${textureAttributeIndex}`;
92
+ const textureCoordinates = attributes[textCoordAttribute].value;
93
+ return generateBatchIdsFromTexture(featureIdTexture, textureCoordinates, images);
94
+ }
95
+
96
+ // Take only first extension texture to get batchIds from the root EXT_feature_metadata object.
97
+ const featureTexture =
98
+ extFeatureMetadata?.featureTextures && extFeatureMetadata?.featureTextures[0];
99
+
100
+ if (featureTexture) {
101
+ const batchIdsAttribute = attributes[featureTexture];
102
+ return batchIdsAttribute.value;
103
+ }
104
+
105
+ return [];
106
+ }
107
+
108
+ /**
109
+ * Generates implicit feature ids
110
+ * Spec - https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata#implicit-feature-ids
111
+ * @param featuresCount
112
+ * @param constant
113
+ * @param devisor
114
+ */
115
+ function generateImplicitFeatureIds(
116
+ featuresCount: number,
117
+ constant: number = 0,
118
+ divisor: number = 0
119
+ ): number[] {
120
+ let featureIds: number[] = [];
121
+
122
+ if (divisor > 0) {
123
+ let currentValue = constant;
124
+ let devisorCounter = divisor;
125
+
126
+ for (let index = 0; index < featuresCount; index++) {
127
+ featureIds.push(currentValue);
128
+
129
+ devisorCounter -= 1;
130
+
131
+ if (devisorCounter === 0) {
132
+ currentValue++;
133
+ devisorCounter = divisor;
134
+ }
135
+ }
136
+ } else {
137
+ featureIds = Array<number>(featuresCount).fill(constant, 0, featuresCount);
138
+ }
139
+
140
+ return featureIds;
141
+ }
142
+
143
+ /**
144
+ * Get batchIds from texture.
145
+ * @param primitive
146
+ * @param featureIdTextures
147
+ */
148
+ function generateBatchIdsFromTexture(
149
+ featureIdTexture: GLTF_EXT_feature_metadata_attribute,
150
+ textureCoordinates: TypedArray,
151
+ images: (TextureImageProperties | null)[]
152
+ ) {
153
+ if (!images?.length) {
154
+ return [];
155
+ }
156
+
157
+ const CHANNELS_MAP = {
158
+ r: 0,
159
+ g: 1,
160
+ b: 2,
161
+ a: 3
162
+ };
163
+
164
+ const textureIndex = featureIdTexture?.featureIds?.texture?.index;
165
+ const featureChannel = featureIdTexture?.featureIds?.channels;
166
+
167
+ if (!featureChannel || textureIndex === undefined) {
168
+ return [];
169
+ }
170
+
171
+ const image = images[textureIndex];
172
+ const batchIds: number[] = [];
173
+ const channels = CHANNELS_MAP[featureChannel];
174
+
175
+ if (image && image?.width && image?.height && image?.components) {
176
+ for (let index = 0; index < textureCoordinates.length; index += 2) {
177
+ const u = textureCoordinates[index];
178
+ const v = textureCoordinates[index + 1];
179
+
180
+ const tx = Math.min((emod(u) * image.width) | 0, image.width - 1);
181
+ const ty = Math.min((emod(v) * image.height) | 0, image.height - 1);
182
+
183
+ const offset = (ty * image.width + tx) * image.components + channels;
184
+ const batchId = new Uint8Array(image.data)[offset];
185
+
186
+ batchIds.push(batchId);
187
+ }
188
+ } else {
189
+ console.warn(`Can't get batch Ids from ${image?.mimeType || ''} compressed texture`);
190
+ }
191
+
192
+ return batchIds;
193
+ }
194
+
195
+ /**
196
+ * Handle UVs if they are out of range [0,1].
197
+ * @param n
198
+ * @param m
199
+ */
200
+ function emod(n: number): number {
201
+ return ((n % 1) + 1) % 1;
202
+ }
@@ -1,40 +1,42 @@
1
- import type {BoundingVolumes, Extent, Mbs, Obb} from '@loaders.gl/i3s';
1
+ import type {BoundingVolumes, FullExtent, Mbs, Obb} from '@loaders.gl/i3s';
2
2
 
3
3
  import {Matrix3, Quaternion, Vector3} from '@math.gl/core';
4
4
  import {Ellipsoid} from '@math.gl/geospatial';
5
- import {OrientedBoundingBox} from '@math.gl/culling';
6
- import TileHeader from '@loaders.gl/tiles/src/tileset/tile-3d';
7
- import {GeoidHeightModel} from '../../lib/geoid-height-model';
8
- import {Tileset3D} from '@loaders.gl/tiles';
5
+ import {
6
+ OrientedBoundingBox,
7
+ makeOrientedBoundingBoxFromPoints,
8
+ makeBoundingSphereFromPoints,
9
+ BoundingSphere
10
+ } from '@math.gl/culling';
11
+ import {Geoid} from '@math.gl/geoid';
9
12
 
10
13
  /**
11
14
  * Create bounding volumes object from tile and geoid height model.
12
- * @param tile
13
- * @param geoidHeightModel
15
+ * @param sourceBoundingVolume - initialized bounding volume of the source tile
16
+ * @param geoidHeightModel - instance of Geoid class that converts elevation from geoidal to ellipsoidal and back
14
17
  * @returns - Bounding volumes object
15
18
  */
16
19
  export function createBoundingVolumes(
17
- tile: TileHeader,
18
- geoidHeightModel: GeoidHeightModel
20
+ sourceBoundingVolume: OrientedBoundingBox | BoundingSphere,
21
+ geoidHeightModel: Geoid
19
22
  ): BoundingVolumes {
20
23
  let radius;
21
24
  let halfSize;
22
25
  let quaternion;
23
26
 
24
- const boundingVolume = tile.boundingVolume;
25
27
  const cartographicCenter = Ellipsoid.WGS84.cartesianToCartographic(
26
- boundingVolume.center,
28
+ sourceBoundingVolume.center,
27
29
  new Vector3()
28
30
  );
29
31
  cartographicCenter[2] =
30
32
  cartographicCenter[2] -
31
33
  geoidHeightModel.getHeight(cartographicCenter[1], cartographicCenter[0]);
32
- if (boundingVolume instanceof OrientedBoundingBox) {
33
- halfSize = boundingVolume.halfSize;
34
+ if (sourceBoundingVolume instanceof OrientedBoundingBox) {
35
+ halfSize = sourceBoundingVolume.halfSize;
34
36
  radius = new Vector3(halfSize[0], halfSize[1], halfSize[2]).len();
35
- quaternion = boundingVolume.quaternion;
37
+ quaternion = sourceBoundingVolume.quaternion;
36
38
  } else {
37
- radius = tile.boundingVolume.radius;
39
+ radius = sourceBoundingVolume.radius;
38
40
  halfSize = [radius, radius, radius];
39
41
  quaternion = new Quaternion()
40
42
  .fromMatrix3(new Matrix3([halfSize[0], 0, 0, 0, halfSize[1], 0, 0, 0, halfSize[2]]))
@@ -52,36 +54,94 @@ export function createBoundingVolumes(
52
54
  }
53
55
 
54
56
  /**
55
- * Convert common coordinate to extent coordinate
56
- * @param tileset
57
- * @returns - Extent
57
+ * Generates bounding volumes from geometry positions
58
+ * @param cartesianPositions
59
+ * @param geoidHeightModel
58
60
  */
59
- export function convertCommonToI3SExtentCoordinate(tileset: Tileset3D): Extent {
60
- const cartesianCenter = tileset.cartesianCenter;
61
- const radius = tileset.lodMetricValue;
62
- const rightTop = Ellipsoid.WGS84.cartesianToCartographic(
63
- new Vector3(cartesianCenter[0] + radius, cartesianCenter[1] + radius, cartesianCenter[2]),
61
+ export function createBoundingVolumesFromGeometry(
62
+ cartesianPositions: Float32Array,
63
+ geoidHeightModel: Geoid
64
+ ): {mbs: Mbs; obb: Obb} {
65
+ const positionVectors = convertPositionsToVectors(cartesianPositions);
66
+
67
+ const geometryObb = makeOrientedBoundingBoxFromPoints(positionVectors);
68
+ const geometryMbs = makeBoundingSphereFromPoints(positionVectors);
69
+
70
+ let mbsCenter = Ellipsoid.WGS84.cartesianToCartographic(geometryMbs.center, new Vector3());
71
+ let obbCenter = Ellipsoid.WGS84.cartesianToCartographic(geometryObb.center, new Vector3());
72
+
73
+ mbsCenter[2] = mbsCenter[2] - geoidHeightModel.getHeight(mbsCenter[1], mbsCenter[0]);
74
+ obbCenter[2] = obbCenter[2] - geoidHeightModel.getHeight(obbCenter[1], obbCenter[0]);
75
+
76
+ return {
77
+ mbs: [mbsCenter[0], mbsCenter[1], mbsCenter[2], geometryMbs.radius],
78
+ obb: {
79
+ center: obbCenter,
80
+ halfSize: geometryObb.halfSize,
81
+ quaternion: geometryObb.quaternion
82
+ }
83
+ };
84
+ }
85
+
86
+ /**
87
+ * Create array of posisitons where each vertex is vector
88
+ * @param {array} positions
89
+ * @returns {Vector3[]}
90
+ */
91
+ export function convertPositionsToVectors(positions: Float32Array): Vector3[] {
92
+ const result: Vector3[] = [];
93
+
94
+ for (let i = 0; i < positions.length; i += 3) {
95
+ // TODO: (perf) new Vector3 is not optimal but required in `makeOrientedBoundingBoxFromPoints`.
96
+ // modify `makeOrientedBoundingBoxFromPoints` to use scratch vectors
97
+ const positionVector = new Vector3([positions[i], positions[i + 1], positions[i + 2]]);
98
+ result.push(positionVector);
99
+ }
100
+
101
+ return result;
102
+ }
103
+
104
+ /**
105
+ * Convert common coordinate to fullExtent https://github.com/Esri/i3s-spec/blob/master/docs/1.8/fullExtent.cmn.md
106
+ * @param boundingVolume
107
+ * @returns - fullExtent object
108
+ */
109
+ export function convertBoundingVolumeToI3SFullExtent(
110
+ boundingVolume: OrientedBoundingBox | BoundingSphere
111
+ ): FullExtent {
112
+ let sphere: BoundingSphere;
113
+ if (boundingVolume instanceof BoundingSphere) {
114
+ sphere = boundingVolume;
115
+ } else {
116
+ sphere = boundingVolume.getBoundingSphere();
117
+ }
118
+ const center: Vector3 = sphere.center;
119
+ const radius: number = sphere.radius;
120
+ const vertexMax = Ellipsoid.WGS84.cartesianToCartographic(
121
+ new Vector3(center[0] + radius, center[1] + radius, center[2] + radius),
64
122
  new Vector3()
65
123
  );
66
- const leftBottom = Ellipsoid.WGS84.cartesianToCartographic(
67
- new Vector3(cartesianCenter[0] - radius, cartesianCenter[1] - radius, cartesianCenter[2]),
124
+ const vertexMin = Ellipsoid.WGS84.cartesianToCartographic(
125
+ new Vector3(center[0] - radius, center[1] - radius, center[2] - radius),
68
126
  new Vector3()
69
127
  );
70
- const isFirstRight = rightTop[0] < leftBottom[0];
71
- const isFirstTop = rightTop[1] < leftBottom[1];
72
128
 
73
- return [
74
- isFirstRight ? rightTop[0] : leftBottom[0],
75
- isFirstTop ? rightTop[1] : leftBottom[1],
76
- isFirstRight ? leftBottom[0] : rightTop[0],
77
- isFirstTop ? leftBottom[1] : rightTop[1]
78
- ];
129
+ // Converter sometimes returns min values that are bigger then max,
130
+ // so we should check and take bigger value from max and smaller for nim
131
+ return {
132
+ xmin: Math.min(vertexMin[0], vertexMax[0]),
133
+ xmax: Math.max(vertexMin[0], vertexMax[0]),
134
+ ymin: Math.min(vertexMin[1], vertexMax[1]),
135
+ ymax: Math.max(vertexMin[1], vertexMax[1]),
136
+ zmin: Math.min(vertexMin[2], vertexMax[2]),
137
+ zmax: Math.max(vertexMin[2], vertexMax[2])
138
+ };
79
139
  }
80
140
 
81
141
  /**
82
142
  * Creates oriented boundinb box from mbs.
83
143
  * @param mbs - Minimum Bounding Sphere
84
- * @returns - Oriented BOunding Box
144
+ * @returns - Oriented Bounding Box
85
145
  */
86
146
  export function createObbFromMbs(mbs: Mbs): Obb {
87
147
  const radius = mbs[3];
@@ -0,0 +1,29 @@
1
+ import type {SceneLayer3D} from '@loaders.gl/i3s';
2
+ import {v4 as uuidv4} from 'uuid';
3
+ import transform from 'json-map-transform';
4
+ import {join} from 'path';
5
+
6
+ import {SCENE_SERVER as sceneServerTemplate} from '../json-templates/scene-server';
7
+ import {writeFile} from '../../lib/utils/file-utils';
8
+
9
+ /**
10
+ * Form and save sceneServer meta data into a file
11
+ * @param layerName - layer name to display
12
+ * @param layers0 - layer object embedded into sceneServer meta data
13
+ * @param rootPath - root path of new converted tileset
14
+ */
15
+ export async function createSceneServerPath(
16
+ layerName: string,
17
+ layers0: SceneLayer3D,
18
+ rootPath: string
19
+ ): Promise<void> {
20
+ const sceneServerData = {
21
+ serviceItemId: uuidv4().replace(/-/gi, ''),
22
+ layerName,
23
+ layers0
24
+ };
25
+
26
+ const sceneServer = transform(sceneServerData, sceneServerTemplate());
27
+ const nodePagePath = join(rootPath, 'SceneServer');
28
+ await writeFile(nodePagePath, JSON.stringify(sceneServer));
29
+ }