@loaders.gl/tile-converter 4.0.0-alpha.4 → 4.0.0-alpha.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (407) hide show
  1. package/dist/3d-tiles-attributes-worker.d.ts +28 -0
  2. package/dist/3d-tiles-attributes-worker.d.ts.map +1 -0
  3. package/dist/3d-tiles-attributes-worker.js +3 -0
  4. package/dist/3d-tiles-attributes-worker.js.map +7 -0
  5. package/dist/3d-tiles-converter/3d-tiles-converter.d.ts +90 -0
  6. package/dist/3d-tiles-converter/3d-tiles-converter.d.ts.map +1 -0
  7. package/dist/3d-tiles-converter/3d-tiles-converter.js +273 -231
  8. package/dist/3d-tiles-converter/helpers/b3dm-converter.d.ts +79 -18
  9. package/dist/3d-tiles-converter/helpers/b3dm-converter.d.ts.map +1 -0
  10. package/dist/3d-tiles-converter/helpers/b3dm-converter.js +269 -236
  11. package/dist/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.d.ts +4 -7
  12. package/dist/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.d.ts.map +1 -0
  13. package/dist/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +22 -9
  14. package/dist/3d-tiles-converter/helpers/texture-atlas.d.ts +9 -0
  15. package/dist/3d-tiles-converter/helpers/texture-atlas.d.ts.map +1 -0
  16. package/dist/3d-tiles-converter/helpers/texture-atlas.js +47 -28
  17. package/dist/3d-tiles-converter/json-templates/tileset.d.ts +15 -0
  18. package/dist/3d-tiles-converter/json-templates/tileset.d.ts.map +1 -0
  19. package/dist/3d-tiles-converter/json-templates/tileset.js +42 -36
  20. package/dist/bundle.d.ts +2 -0
  21. package/dist/bundle.d.ts.map +1 -0
  22. package/dist/bundle.js +2 -2
  23. package/dist/constants.d.ts +2 -0
  24. package/dist/constants.d.ts.map +1 -0
  25. package/dist/constants.js +4 -0
  26. package/dist/converter-cli.d.ts +2 -0
  27. package/dist/converter-cli.d.ts.map +1 -0
  28. package/dist/converter-cli.js +280 -0
  29. package/dist/converter.min.js +186 -190
  30. package/dist/deps-installer/deps-installer.d.ts +11 -3
  31. package/dist/deps-installer/deps-installer.d.ts.map +1 -0
  32. package/dist/deps-installer/deps-installer.js +60 -23
  33. package/dist/dist.min.js +63496 -0
  34. package/dist/es5/3d-tiles-attributes-worker.js +25 -0
  35. package/dist/es5/3d-tiles-attributes-worker.js.map +1 -0
  36. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js +470 -0
  37. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js.map +1 -0
  38. package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js +301 -0
  39. package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -0
  40. package/dist/es5/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +18 -0
  41. package/dist/es5/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +1 -0
  42. package/dist/es5/3d-tiles-converter/helpers/texture-atlas.js +33 -0
  43. package/dist/es5/3d-tiles-converter/helpers/texture-atlas.js.map +1 -0
  44. package/dist/es5/3d-tiles-converter/json-templates/tileset.js +61 -0
  45. package/dist/es5/3d-tiles-converter/json-templates/tileset.js.map +1 -0
  46. package/dist/es5/bundle.js +6 -0
  47. package/dist/es5/bundle.js.map +1 -0
  48. package/dist/es5/constants.js +9 -0
  49. package/dist/es5/constants.js.map +1 -0
  50. package/dist/es5/converter-cli.js +289 -0
  51. package/dist/es5/converter-cli.js.map +1 -0
  52. package/dist/es5/deps-installer/deps-installer.js +123 -0
  53. package/dist/es5/deps-installer/deps-installer.js.map +1 -0
  54. package/dist/es5/i3s-attributes-worker.js +25 -0
  55. package/dist/es5/i3s-attributes-worker.js.map +1 -0
  56. package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js +116 -0
  57. package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js.map +1 -0
  58. package/dist/es5/i3s-converter/helpers/coordinate-converter.js +90 -0
  59. package/dist/es5/i3s-converter/helpers/coordinate-converter.js.map +1 -0
  60. package/dist/es5/i3s-converter/helpers/create-scene-server-path.js +41 -0
  61. package/dist/es5/i3s-converter/helpers/create-scene-server-path.js.map +1 -0
  62. package/dist/es5/i3s-converter/helpers/feature-attributes.js +174 -0
  63. package/dist/es5/i3s-converter/helpers/feature-attributes.js.map +1 -0
  64. package/dist/es5/i3s-converter/helpers/geometry-attributes.js +213 -0
  65. package/dist/es5/i3s-converter/helpers/geometry-attributes.js.map +1 -0
  66. package/dist/es5/i3s-converter/helpers/geometry-converter.js +1173 -0
  67. package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +1 -0
  68. package/dist/es5/i3s-converter/helpers/gltf-attributes.js +83 -0
  69. package/dist/es5/i3s-converter/helpers/gltf-attributes.js.map +1 -0
  70. package/dist/es5/i3s-converter/helpers/node-debug.js +76 -0
  71. package/dist/es5/i3s-converter/helpers/node-debug.js.map +1 -0
  72. package/dist/es5/i3s-converter/helpers/node-index-document.js +492 -0
  73. package/dist/es5/i3s-converter/helpers/node-index-document.js.map +1 -0
  74. package/dist/es5/i3s-converter/helpers/node-pages.js +519 -0
  75. package/dist/es5/i3s-converter/helpers/node-pages.js.map +1 -0
  76. package/dist/es5/i3s-converter/i3s-converter.js +1519 -0
  77. package/dist/es5/i3s-converter/i3s-converter.js.map +1 -0
  78. package/dist/es5/i3s-converter/json-templates/geometry-definitions.js +107 -0
  79. package/dist/es5/i3s-converter/json-templates/geometry-definitions.js.map +1 -0
  80. package/dist/es5/i3s-converter/json-templates/layers.js +163 -0
  81. package/dist/es5/i3s-converter/json-templates/layers.js.map +1 -0
  82. package/dist/es5/i3s-converter/json-templates/metadata.js +31 -0
  83. package/dist/es5/i3s-converter/json-templates/metadata.js.map +1 -0
  84. package/dist/es5/i3s-converter/json-templates/node.js +99 -0
  85. package/dist/es5/i3s-converter/json-templates/node.js.map +1 -0
  86. package/dist/es5/i3s-converter/json-templates/scene-server.js +39 -0
  87. package/dist/es5/i3s-converter/json-templates/scene-server.js.map +1 -0
  88. package/dist/es5/i3s-converter/json-templates/shared-resources.js +173 -0
  89. package/dist/es5/i3s-converter/json-templates/shared-resources.js.map +1 -0
  90. package/dist/es5/i3s-converter/json-templates/store.js +107 -0
  91. package/dist/es5/i3s-converter/json-templates/store.js.map +1 -0
  92. package/dist/es5/i3s-converter/types.js +2 -0
  93. package/dist/es5/i3s-converter/types.js.map +1 -0
  94. package/dist/es5/i3s-server/app.js +18 -0
  95. package/dist/es5/i3s-server/app.js.map +1 -0
  96. package/dist/es5/i3s-server/controllers/index-controller.js +55 -0
  97. package/dist/es5/i3s-server/controllers/index-controller.js.map +1 -0
  98. package/dist/es5/i3s-server/routes/index.js +37 -0
  99. package/dist/es5/i3s-server/routes/index.js.map +1 -0
  100. package/dist/es5/index.js +21 -0
  101. package/dist/es5/index.js.map +1 -0
  102. package/dist/es5/lib/utils/compress-util.js +346 -0
  103. package/dist/es5/lib/utils/compress-util.js.map +1 -0
  104. package/dist/es5/lib/utils/file-utils.js +208 -0
  105. package/dist/es5/lib/utils/file-utils.js.map +1 -0
  106. package/dist/es5/lib/utils/lod-conversion-utils.js +44 -0
  107. package/dist/es5/lib/utils/lod-conversion-utils.js.map +1 -0
  108. package/dist/es5/lib/utils/queue.js +47 -0
  109. package/dist/es5/lib/utils/queue.js.map +1 -0
  110. package/dist/es5/lib/utils/statistic-utills.d.ts +25 -0
  111. package/dist/es5/lib/utils/statistic-utills.js +147 -0
  112. package/dist/es5/lib/utils/statistic-utills.js.map +1 -0
  113. package/dist/es5/lib/utils/write-queue.js +214 -0
  114. package/dist/es5/lib/utils/write-queue.js.map +1 -0
  115. package/dist/es5/pgm-loader.js +41 -0
  116. package/dist/es5/pgm-loader.js.map +1 -0
  117. package/dist/es5/workers/3d-tiles-attributes-worker.js +28 -0
  118. package/dist/es5/workers/3d-tiles-attributes-worker.js.map +1 -0
  119. package/dist/es5/workers/i3s-attributes-worker.js +30 -0
  120. package/dist/es5/workers/i3s-attributes-worker.js.map +1 -0
  121. package/dist/esm/3d-tiles-attributes-worker.js +16 -0
  122. package/dist/esm/3d-tiles-attributes-worker.js.map +1 -0
  123. package/dist/esm/3d-tiles-converter/3d-tiles-converter.js +248 -0
  124. package/dist/esm/3d-tiles-converter/3d-tiles-converter.js.map +1 -0
  125. package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js +224 -0
  126. package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -0
  127. package/dist/esm/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +10 -0
  128. package/dist/esm/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +1 -0
  129. package/dist/esm/3d-tiles-converter/helpers/texture-atlas.js +27 -0
  130. package/dist/esm/3d-tiles-converter/helpers/texture-atlas.js.map +1 -0
  131. package/dist/esm/3d-tiles-converter/json-templates/tileset.js +37 -0
  132. package/dist/esm/3d-tiles-converter/json-templates/tileset.js.map +1 -0
  133. package/dist/esm/bundle.js +4 -0
  134. package/dist/esm/bundle.js.map +1 -0
  135. package/dist/esm/constants.js +2 -0
  136. package/dist/esm/constants.js.map +1 -0
  137. package/dist/esm/converter-cli.js +232 -0
  138. package/dist/esm/converter-cli.js.map +1 -0
  139. package/dist/esm/deps-installer/deps-installer.js +44 -0
  140. package/dist/esm/deps-installer/deps-installer.js.map +1 -0
  141. package/dist/esm/i3s-attributes-worker.js +16 -0
  142. package/dist/esm/i3s-attributes-worker.js.map +1 -0
  143. package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js +105 -0
  144. package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js.map +1 -0
  145. package/dist/esm/i3s-converter/helpers/coordinate-converter.js +80 -0
  146. package/dist/esm/i3s-converter/helpers/coordinate-converter.js.map +1 -0
  147. package/dist/esm/i3s-converter/helpers/create-scene-server-path.js +16 -0
  148. package/dist/esm/i3s-converter/helpers/create-scene-server-path.js.map +1 -0
  149. package/dist/esm/i3s-converter/helpers/feature-attributes.js +147 -0
  150. package/dist/esm/i3s-converter/helpers/feature-attributes.js.map +1 -0
  151. package/{src → dist/esm}/i3s-converter/helpers/geometry-attributes.js +80 -106
  152. package/dist/esm/i3s-converter/helpers/geometry-attributes.js.map +1 -0
  153. package/dist/esm/i3s-converter/helpers/geometry-converter.js +887 -0
  154. package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +1 -0
  155. package/dist/esm/i3s-converter/helpers/gltf-attributes.js +76 -0
  156. package/dist/esm/i3s-converter/helpers/gltf-attributes.js.map +1 -0
  157. package/{src → dist/esm}/i3s-converter/helpers/node-debug.js +20 -41
  158. package/dist/esm/i3s-converter/helpers/node-debug.js.map +1 -0
  159. package/dist/esm/i3s-converter/helpers/node-index-document.js +188 -0
  160. package/dist/esm/i3s-converter/helpers/node-index-document.js.map +1 -0
  161. package/dist/esm/i3s-converter/helpers/node-pages.js +206 -0
  162. package/dist/esm/i3s-converter/helpers/node-pages.js.map +1 -0
  163. package/dist/esm/i3s-converter/i3s-converter.js +771 -0
  164. package/dist/esm/i3s-converter/i3s-converter.js.map +1 -0
  165. package/dist/esm/i3s-converter/json-templates/geometry-definitions.js +89 -0
  166. package/dist/esm/i3s-converter/json-templates/geometry-definitions.js.map +1 -0
  167. package/dist/esm/i3s-converter/json-templates/layers.js +133 -0
  168. package/dist/esm/i3s-converter/json-templates/layers.js.map +1 -0
  169. package/dist/esm/i3s-converter/json-templates/metadata.js +22 -0
  170. package/dist/esm/i3s-converter/json-templates/metadata.js.map +1 -0
  171. package/dist/esm/i3s-converter/json-templates/node.js +80 -0
  172. package/dist/esm/i3s-converter/json-templates/node.js.map +1 -0
  173. package/dist/esm/i3s-converter/json-templates/scene-server.js +28 -0
  174. package/dist/esm/i3s-converter/json-templates/scene-server.js.map +1 -0
  175. package/dist/esm/i3s-converter/json-templates/shared-resources.js +123 -0
  176. package/dist/esm/i3s-converter/json-templates/shared-resources.js.map +1 -0
  177. package/dist/esm/i3s-converter/json-templates/store.js +98 -0
  178. package/dist/esm/i3s-converter/json-templates/store.js.map +1 -0
  179. package/dist/esm/i3s-converter/types.js +2 -0
  180. package/dist/esm/i3s-converter/types.js.map +1 -0
  181. package/dist/esm/i3s-server/app.js +16 -0
  182. package/dist/esm/i3s-server/app.js.map +1 -0
  183. package/dist/esm/i3s-server/bin/www +102 -0
  184. package/dist/esm/i3s-server/certs/cert.pem +19 -0
  185. package/dist/esm/i3s-server/certs/key.pem +27 -0
  186. package/dist/esm/i3s-server/controllers/index-controller.js +24 -0
  187. package/dist/esm/i3s-server/controllers/index-controller.js.map +1 -0
  188. package/dist/esm/i3s-server/routes/index.js +16 -0
  189. package/dist/esm/i3s-server/routes/index.js.map +1 -0
  190. package/dist/esm/index.js +3 -0
  191. package/dist/esm/index.js.map +1 -0
  192. package/dist/esm/lib/utils/compress-util.js +168 -0
  193. package/dist/esm/lib/utils/compress-util.js.map +1 -0
  194. package/dist/esm/lib/utils/file-utils.js +87 -0
  195. package/dist/esm/lib/utils/file-utils.js.map +1 -0
  196. package/dist/esm/lib/utils/lod-conversion-utils.js +37 -0
  197. package/dist/esm/lib/utils/lod-conversion-utils.js.map +1 -0
  198. package/dist/esm/lib/utils/queue.js +15 -0
  199. package/dist/esm/lib/utils/queue.js.map +1 -0
  200. package/dist/esm/lib/utils/statistic-utills.d.ts +25 -0
  201. package/dist/esm/lib/utils/statistic-utills.js +62 -0
  202. package/dist/esm/lib/utils/statistic-utills.js.map +1 -0
  203. package/dist/esm/lib/utils/write-queue.js +85 -0
  204. package/dist/esm/lib/utils/write-queue.js.map +1 -0
  205. package/dist/esm/pgm-loader.js +15 -0
  206. package/dist/esm/pgm-loader.js.map +1 -0
  207. package/dist/esm/workers/3d-tiles-attributes-worker.js +8 -0
  208. package/dist/esm/workers/3d-tiles-attributes-worker.js.map +1 -0
  209. package/dist/esm/workers/i3s-attributes-worker.js +7 -0
  210. package/dist/esm/workers/i3s-attributes-worker.js.map +1 -0
  211. package/dist/i3s-attributes-worker.d.ts +37 -0
  212. package/dist/i3s-attributes-worker.d.ts.map +1 -0
  213. package/dist/i3s-attributes-worker.js +9 -0
  214. package/dist/i3s-attributes-worker.js.map +7 -0
  215. package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts +11 -0
  216. package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts.map +1 -0
  217. package/dist/i3s-converter/helpers/batch-ids-extensions.js +141 -0
  218. package/dist/i3s-converter/helpers/coordinate-converter.d.ts +41 -0
  219. package/dist/i3s-converter/helpers/coordinate-converter.d.ts.map +1 -0
  220. package/dist/i3s-converter/helpers/coordinate-converter.js +120 -42
  221. package/dist/i3s-converter/helpers/create-scene-server-path.d.ts +9 -0
  222. package/dist/i3s-converter/helpers/create-scene-server-path.d.ts.map +1 -0
  223. package/dist/i3s-converter/helpers/create-scene-server-path.js +27 -15
  224. package/dist/i3s-converter/helpers/feature-attributes.d.ts +56 -0
  225. package/dist/i3s-converter/helpers/feature-attributes.d.ts.map +1 -0
  226. package/dist/i3s-converter/helpers/feature-attributes.js +216 -0
  227. package/dist/i3s-converter/helpers/geometry-attributes.d.ts +8 -0
  228. package/dist/i3s-converter/helpers/geometry-attributes.d.ts.map +1 -0
  229. package/dist/i3s-converter/helpers/geometry-attributes.js +188 -185
  230. package/dist/i3s-converter/helpers/geometry-converter.d.ts +36 -35
  231. package/dist/i3s-converter/helpers/geometry-converter.d.ts.map +1 -0
  232. package/dist/i3s-converter/helpers/geometry-converter.js +1149 -650
  233. package/dist/i3s-converter/helpers/gltf-attributes.d.ts +9 -0
  234. package/dist/i3s-converter/helpers/gltf-attributes.d.ts.map +1 -0
  235. package/dist/i3s-converter/helpers/gltf-attributes.js +88 -0
  236. package/dist/i3s-converter/helpers/node-debug.d.ts +8 -0
  237. package/dist/i3s-converter/helpers/node-debug.d.ts.map +1 -0
  238. package/dist/i3s-converter/helpers/node-debug.js +106 -74
  239. package/dist/i3s-converter/helpers/node-index-document.d.ts +95 -0
  240. package/dist/i3s-converter/helpers/node-index-document.d.ts.map +1 -0
  241. package/dist/i3s-converter/helpers/node-index-document.js +250 -0
  242. package/dist/i3s-converter/helpers/node-pages.d.ts +125 -113
  243. package/dist/i3s-converter/helpers/node-pages.d.ts.map +1 -0
  244. package/dist/i3s-converter/helpers/node-pages.js +313 -133
  245. package/dist/i3s-converter/i3s-converter.d.ts +267 -0
  246. package/dist/i3s-converter/i3s-converter.d.ts.map +1 -0
  247. package/dist/i3s-converter/i3s-converter.js +860 -861
  248. package/dist/i3s-converter/json-templates/geometry-definitions.d.ts +7 -0
  249. package/dist/i3s-converter/json-templates/geometry-definitions.d.ts.map +1 -0
  250. package/dist/i3s-converter/json-templates/geometry-definitions.js +87 -0
  251. package/dist/i3s-converter/json-templates/layers.d.ts +70 -0
  252. package/dist/i3s-converter/json-templates/layers.d.ts.map +1 -0
  253. package/dist/i3s-converter/json-templates/layers.js +138 -190
  254. package/dist/i3s-converter/json-templates/metadata.d.ts +22 -0
  255. package/dist/i3s-converter/json-templates/metadata.d.ts.map +1 -0
  256. package/dist/i3s-converter/json-templates/metadata.js +25 -22
  257. package/dist/i3s-converter/json-templates/node.d.ts +61 -0
  258. package/dist/i3s-converter/json-templates/node.d.ts.map +1 -0
  259. package/dist/i3s-converter/json-templates/node.js +88 -79
  260. package/dist/i3s-converter/json-templates/scene-server.d.ts +28 -0
  261. package/dist/i3s-converter/json-templates/scene-server.d.ts.map +1 -0
  262. package/dist/i3s-converter/json-templates/scene-server.js +31 -28
  263. package/dist/i3s-converter/json-templates/shared-resources.d.ts +14 -0
  264. package/dist/i3s-converter/json-templates/shared-resources.d.ts.map +1 -0
  265. package/dist/i3s-converter/json-templates/shared-resources.js +124 -125
  266. package/dist/i3s-converter/json-templates/store.d.ts +95 -0
  267. package/dist/i3s-converter/json-templates/store.d.ts.map +1 -0
  268. package/dist/i3s-converter/json-templates/store.js +100 -95
  269. package/dist/i3s-converter/types.d.ts +145 -0
  270. package/dist/i3s-converter/types.d.ts.map +1 -0
  271. package/dist/i3s-converter/types.js +2 -0
  272. package/dist/i3s-server/app.d.ts +3 -0
  273. package/dist/i3s-server/app.d.ts.map +1 -0
  274. package/dist/i3s-server/app.js +2 -9
  275. package/dist/i3s-server/controllers/index-controller.d.ts +2 -0
  276. package/dist/i3s-server/controllers/index-controller.d.ts.map +1 -0
  277. package/dist/i3s-server/controllers/index-controller.js +16 -24
  278. package/dist/i3s-server/routes/index.d.ts +3 -0
  279. package/dist/i3s-server/routes/index.d.ts.map +1 -0
  280. package/dist/i3s-server/routes/index.js +11 -15
  281. package/dist/index.d.ts +3 -0
  282. package/dist/index.d.ts.map +1 -0
  283. package/dist/index.js +10 -5
  284. package/dist/lib/utils/compress-util.d.ts +45 -0
  285. package/dist/lib/utils/compress-util.d.ts.map +1 -0
  286. package/dist/lib/utils/compress-util.js +238 -160
  287. package/dist/lib/utils/file-utils.d.ts +22 -14
  288. package/dist/lib/utils/file-utils.d.ts.map +1 -0
  289. package/dist/lib/utils/file-utils.js +133 -36
  290. package/dist/lib/utils/lod-conversion-utils.d.ts +21 -12
  291. package/dist/lib/utils/lod-conversion-utils.d.ts.map +1 -0
  292. package/dist/lib/utils/lod-conversion-utils.js +72 -39
  293. package/dist/lib/utils/queue.d.ts +7 -0
  294. package/dist/lib/utils/queue.d.ts.map +1 -0
  295. package/dist/lib/utils/queue.js +18 -0
  296. package/dist/lib/utils/statistic-utills.d.ts +3 -25
  297. package/dist/lib/utils/statistic-utills.d.ts.map +1 -0
  298. package/dist/lib/utils/statistic-utills.js +58 -67
  299. package/dist/lib/utils/write-queue.d.ts +39 -0
  300. package/dist/lib/utils/write-queue.d.ts.map +1 -0
  301. package/dist/lib/utils/write-queue.js +80 -0
  302. package/dist/pgm-loader.d.ts +6 -0
  303. package/dist/pgm-loader.d.ts.map +1 -0
  304. package/dist/pgm-loader.js +23 -14
  305. package/dist/workers/3d-tiles-attributes-worker.d.ts +2 -0
  306. package/dist/workers/3d-tiles-attributes-worker.d.ts.map +1 -0
  307. package/dist/workers/3d-tiles-attributes-worker.js +9 -0
  308. package/dist/workers/i3s-attributes-worker.d.ts +2 -0
  309. package/dist/workers/i3s-attributes-worker.d.ts.map +1 -0
  310. package/dist/workers/i3s-attributes-worker.js +5 -0
  311. package/package.json +35 -24
  312. package/src/3d-tiles-attributes-worker.ts +43 -0
  313. package/src/3d-tiles-converter/3d-tiles-converter.ts +124 -59
  314. package/src/3d-tiles-converter/helpers/{b3dm-converter.js → b3dm-converter.ts} +71 -38
  315. package/src/3d-tiles-converter/helpers/{i3s-obb-to-3d-tiles-obb.js → i3s-obb-to-3d-tiles-obb.ts} +16 -1
  316. package/src/3d-tiles-converter/helpers/texture-atlas.ts +4 -4
  317. package/src/3d-tiles-converter/json-templates/{tileset.js → tileset.ts} +9 -9
  318. package/src/constants.ts +2 -0
  319. package/src/converter-cli.ts +370 -0
  320. package/src/deps-installer/deps-installer.ts +71 -0
  321. package/src/i3s-attributes-worker.ts +50 -0
  322. package/src/i3s-converter/helpers/batch-ids-extensions.ts +206 -0
  323. package/src/i3s-converter/helpers/coordinate-converter.ts +87 -27
  324. package/src/i3s-converter/helpers/create-scene-server-path.ts +29 -0
  325. package/src/i3s-converter/helpers/feature-attributes.ts +247 -0
  326. package/src/i3s-converter/helpers/geometry-attributes.ts +267 -0
  327. package/src/i3s-converter/helpers/geometry-converter.ts +1608 -0
  328. package/src/i3s-converter/helpers/gltf-attributes.ts +103 -0
  329. package/src/i3s-converter/helpers/node-debug.ts +146 -0
  330. package/src/i3s-converter/helpers/node-index-document.ts +315 -0
  331. package/src/i3s-converter/helpers/node-pages.ts +344 -0
  332. package/src/i3s-converter/i3s-converter.ts +557 -627
  333. package/src/i3s-converter/json-templates/geometry-definitions.ts +83 -0
  334. package/src/i3s-converter/json-templates/layers.ts +137 -0
  335. package/src/i3s-converter/json-templates/{metadata.js → metadata.ts} +2 -2
  336. package/src/i3s-converter/json-templates/{node.js → node.ts} +12 -12
  337. package/src/i3s-converter/json-templates/{scene-server.js → scene-server.ts} +2 -2
  338. package/src/i3s-converter/json-templates/{shared-resources.js → shared-resources.ts} +17 -17
  339. package/src/i3s-converter/types.ts +165 -0
  340. package/src/index.ts +0 -4
  341. package/src/lib/utils/{compress-util.js → compress-util.ts} +105 -18
  342. package/src/lib/utils/file-utils.ts +139 -0
  343. package/src/lib/utils/{lod-conversion-utils.js → lod-conversion-utils.ts} +27 -5
  344. package/src/lib/utils/queue.ts +17 -0
  345. package/src/lib/utils/write-queue.ts +110 -0
  346. package/src/pgm-loader.ts +3 -3
  347. package/src/workers/3d-tiles-attributes-worker.ts +6 -0
  348. package/src/workers/i3s-attributes-worker.ts +7 -0
  349. package/dist/3d-tiles-converter/3d-tiles-converter.js.map +0 -1
  350. package/dist/3d-tiles-converter/helpers/b3dm-converter.js.map +0 -1
  351. package/dist/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +0 -1
  352. package/dist/3d-tiles-converter/helpers/texture-atlas.js.map +0 -1
  353. package/dist/3d-tiles-converter/json-templates/tileset.js.map +0 -1
  354. package/dist/bundle.js.map +0 -1
  355. package/dist/deps-installer/deps-installer.js.map +0 -1
  356. package/dist/i3s-converter/helpers/coordinate-converter.js.map +0 -1
  357. package/dist/i3s-converter/helpers/create-scene-server-path.js.map +0 -1
  358. package/dist/i3s-converter/helpers/geometry-attributes.js.map +0 -1
  359. package/dist/i3s-converter/helpers/geometry-converter.js.map +0 -1
  360. package/dist/i3s-converter/helpers/node-debug.js.map +0 -1
  361. package/dist/i3s-converter/helpers/node-pages.js.map +0 -1
  362. package/dist/i3s-converter/i3s-converter.js.map +0 -1
  363. package/dist/i3s-converter/json-templates/layers.js.map +0 -1
  364. package/dist/i3s-converter/json-templates/metadata.js.map +0 -1
  365. package/dist/i3s-converter/json-templates/node.js.map +0 -1
  366. package/dist/i3s-converter/json-templates/scene-server.js.map +0 -1
  367. package/dist/i3s-converter/json-templates/shared-resources.js.map +0 -1
  368. package/dist/i3s-converter/json-templates/store.js.map +0 -1
  369. package/dist/i3s-server/app.js.map +0 -1
  370. package/dist/i3s-server/controllers/index-controller.js.map +0 -1
  371. package/dist/i3s-server/routes/index.js.map +0 -1
  372. package/dist/index.js.map +0 -1
  373. package/dist/lib/geoid-height-model.d.ts +0 -41
  374. package/dist/lib/geoid-height-model.js +0 -140
  375. package/dist/lib/geoid-height-model.js.map +0 -1
  376. package/dist/lib/pgm-parser.d.ts +0 -14
  377. package/dist/lib/pgm-parser.js +0 -183
  378. package/dist/lib/pgm-parser.js.map +0 -1
  379. package/dist/lib/utils/compress-util.js.map +0 -1
  380. package/dist/lib/utils/compress-utils.d.ts +0 -53
  381. package/dist/lib/utils/file-utils.js.map +0 -1
  382. package/dist/lib/utils/lod-conversion-utils.js.map +0 -1
  383. package/dist/lib/utils/statistic-utills.js.map +0 -1
  384. package/dist/pgm-loader.js.map +0 -1
  385. package/src/3d-tiles-converter/helpers/b3dm-converter.d.ts +0 -23
  386. package/src/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.d.ts +0 -16
  387. package/src/deps-installer/deps-installer.d.ts +0 -10
  388. package/src/deps-installer/deps-installer.js +0 -22
  389. package/src/i3s-converter/helpers/create-scene-server-path.js +0 -25
  390. package/src/i3s-converter/helpers/geometry-converter.d.ts +0 -40
  391. package/src/i3s-converter/helpers/geometry-converter.js +0 -915
  392. package/src/i3s-converter/helpers/node-pages.d.ts +0 -144
  393. package/src/i3s-converter/helpers/node-pages.js +0 -208
  394. package/src/i3s-converter/json-templates/layers.js +0 -199
  395. package/src/lib/geoid-height-model.d.ts +0 -41
  396. package/src/lib/geoid-height-model.js +0 -239
  397. package/src/lib/pgm-parser.d.ts +0 -14
  398. package/src/lib/pgm-parser.js +0 -179
  399. package/src/lib/utils/compress-utils.d.ts +0 -53
  400. package/src/lib/utils/file-utils.d.ts +0 -43
  401. package/src/lib/utils/file-utils.js +0 -38
  402. package/src/lib/utils/lod-conversion-utils.d.ts +0 -32
  403. /package/dist/{i3s-server → es5/i3s-server}/bin/www +0 -0
  404. /package/dist/{i3s-server → es5/i3s-server}/certs/cert.pem +0 -0
  405. /package/dist/{i3s-server → es5/i3s-server}/certs/key.pem +0 -0
  406. /package/src/i3s-converter/json-templates/{store.js → store.ts} +0 -0
  407. /package/src/lib/utils/{statistic-utills.js → statistic-utills.ts} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loaders.gl/tile-converter",
3
- "version": "4.0.0-alpha.4",
3
+ "version": "4.0.0-alpha.6",
4
4
  "description": "Converter",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -15,9 +15,9 @@
15
15
  "3dTiles",
16
16
  "i3s"
17
17
  ],
18
- "types": "src/index.ts",
19
- "main": "dist/index.js",
20
- "module": "dist/index.js",
18
+ "types": "dist/index.d.ts",
19
+ "main": "dist/es5/index.js",
20
+ "module": "dist/esm/index.js",
21
21
  "sideEffects": false,
22
22
  "bin": {
23
23
  "tile-converter": "./bin/converter.js",
@@ -30,35 +30,42 @@
30
30
  "README.md"
31
31
  ],
32
32
  "browser": {
33
- "fs": false
33
+ "fs": false,
34
+ "path": false,
35
+ "process": false,
36
+ "archiver": false,
37
+ "join-images": false
34
38
  },
35
39
  "scripts": {
36
- "pre-build": "npm run build-bundle",
37
- "post-build": "npm run build-converter-bundle",
38
- "build-bundle": "esbuild ./src/index.ts --bundle --outfile=dist/bundle.js --platform=node",
39
- "build-converter-bundle": "webpack --display errors-only --config ./converter-webpack/bundle.js"
40
+ "pre-build": "npm run build-bundle && npm run build-converter-bundle && npm run build-i3s-attributes-worker && npm run build-3d-tiles-attributes-worker",
41
+ "build-bundle": "esbuild ./src/index.ts --bundle --outfile=dist/dist.min.js --platform=node --external:join-images",
42
+ "build-converter-bundle": "esbuild src/converter-cli.ts --outfile=dist/converter.min.js --platform=node --target=esnext,node14 --external:join-images --minify --bundle --define:__VERSION__=\\\"$npm_package_version\\\"",
43
+ "build-i3s-attributes-worker": "esbuild src/workers/i3s-attributes-worker.ts --outfile=dist/i3s-attributes-worker.js --platform=node --target=esnext,node14 --external:join-images --minify --bundle --sourcemap --define:__VERSION__=\\\"$npm_package_version\\\"",
44
+ "build-3d-tiles-attributes-worker": "esbuild src/workers/3d-tiles-attributes-worker.ts --outfile=dist/3d-tiles-attributes-worker.js --platform=node --target=esnext,node14 --external:join-images --minify --bundle --sourcemap --define:__VERSION__=\\\"$npm_package_version\\\""
40
45
  },
41
46
  "dependencies": {
42
- "@loaders.gl/3d-tiles": "4.0.0-alpha.4",
43
- "@loaders.gl/crypto": "4.0.0-alpha.4",
44
- "@loaders.gl/draco": "4.0.0-alpha.4",
45
- "@loaders.gl/gltf": "4.0.0-alpha.4",
46
- "@loaders.gl/i3s": "4.0.0-alpha.4",
47
- "@loaders.gl/images": "4.0.0-alpha.4",
48
- "@loaders.gl/loader-utils": "4.0.0-alpha.4",
49
- "@loaders.gl/polyfills": "4.0.0-alpha.4",
50
- "@loaders.gl/tiles": "4.0.0-alpha.4",
51
- "@loaders.gl/worker-utils": "4.0.0-alpha.4",
52
- "@loaders.gl/zip": "4.0.0-alpha.4",
53
- "@luma.gl/engine": "^8.5.4",
47
+ "@loaders.gl/3d-tiles": "4.0.0-alpha.6",
48
+ "@loaders.gl/crypto": "4.0.0-alpha.6",
49
+ "@loaders.gl/draco": "4.0.0-alpha.6",
50
+ "@loaders.gl/gltf": "4.0.0-alpha.6",
51
+ "@loaders.gl/i3s": "4.0.0-alpha.6",
52
+ "@loaders.gl/images": "4.0.0-alpha.6",
53
+ "@loaders.gl/loader-utils": "4.0.0-alpha.6",
54
+ "@loaders.gl/polyfills": "4.0.0-alpha.6",
55
+ "@loaders.gl/schema": "4.0.0-alpha.6",
56
+ "@loaders.gl/textures": "4.0.0-alpha.6",
57
+ "@loaders.gl/tiles": "4.0.0-alpha.6",
58
+ "@loaders.gl/worker-utils": "4.0.0-alpha.6",
59
+ "@loaders.gl/zip": "4.0.0-alpha.6",
54
60
  "@math.gl/core": "^3.5.1",
55
61
  "@math.gl/culling": "^3.5.1",
62
+ "@math.gl/geoid": "^3.5.1",
56
63
  "@math.gl/geospatial": "^3.5.1",
57
64
  "archiver": "^5.0.0",
58
65
  "cors": "^2.8.5",
59
66
  "crypt": "^0.0.2",
60
67
  "debug": "~2.6.9",
61
- "express": "~4.16.1",
68
+ "express": "~4.17.3",
62
69
  "json-map-transform": "^1.2.6",
63
70
  "jszip": "^3.5.0",
64
71
  "md5": "^2.3.0",
@@ -66,7 +73,11 @@
66
73
  "uuid": "^8.1.0"
67
74
  },
68
75
  "peerDependencies": {
69
- "@loaders.gl/core": "^3.0.0"
76
+ "@loaders.gl/core": "4.0.0-alpha.5"
70
77
  },
71
- "gitHead": "53026061b3c8871f7e96d3a5826125cc6613bddc"
78
+ "quarantinedDependencies": {
79
+ "join-images": "^1.1.3",
80
+ "sharp": "^0.31.3"
81
+ },
82
+ "gitHead": "acc1985050dfaa0f1f0c066f8da5bce7454a046c"
72
83
  }
@@ -0,0 +1,43 @@
1
+ import type {WorkerObject} from '@loaders.gl/worker-utils';
2
+ import type {FeatureAttribute} from '@loaders.gl/i3s';
3
+
4
+ import {processOnWorker} from '@loaders.gl/worker-utils';
5
+
6
+ // __VERSION__ is injected by babel-plugin-version-inline
7
+ // @ts-ignore TS2304: Cannot find name '__VERSION__'.
8
+ const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
9
+
10
+ export type Tile3DAttributesWorkerOptions = {
11
+ featureAttributes: FeatureAttribute | null;
12
+ source: string;
13
+ };
14
+
15
+ export type I3SAttributesData = {
16
+ tileContent: any;
17
+ textureFormat: string;
18
+ };
19
+
20
+ /**
21
+ * I3S Attributes Worker to handle B3DM object
22
+ */
23
+ export const Tile3dAttributesWorker = {
24
+ id: '3d-tiles-attributes',
25
+ name: '3DTiles Attributes Worker',
26
+ module: 'tile-converter',
27
+ version: VERSION,
28
+ options: {
29
+ featureAttributes: null
30
+ }
31
+ };
32
+
33
+ /**
34
+ * Performs I3S attributes transformation
35
+ */
36
+ export function transform3DTilesAttributesOnWorker(
37
+ i3sAttributesData: I3SAttributesData,
38
+ options: Tile3DAttributesWorkerOptions
39
+ ): Promise<ArrayBuffer> {
40
+ return processOnWorker(Tile3dAttributesWorker, i3sAttributesData, options);
41
+ }
42
+
43
+ export const _typecheckI3SAttributesWorker: WorkerObject = Tile3dAttributesWorker;
@@ -4,9 +4,10 @@ import type {Node3D} from '@loaders.gl/3d-tiles';
4
4
  import {join} from 'path';
5
5
  import process from 'process';
6
6
  import transform from 'json-map-transform';
7
- import {load} from '@loaders.gl/core';
7
+ import {fetchFile, getLoaderOptions, load, isBrowser} from '@loaders.gl/core';
8
8
  import {I3SLoader, I3SAttributeLoader, COORDINATE_SYSTEM} from '@loaders.gl/i3s';
9
9
  import {Tileset3D, Tile3D} from '@loaders.gl/tiles';
10
+ import {Geoid} from '@math.gl/geoid';
10
11
 
11
12
  import {PGMLoader} from '../pgm-loader';
12
13
  import {i3sObbTo3dTilesObb} from './helpers/i3s-obb-to-3d-tiles-obb';
@@ -14,9 +15,14 @@ import {convertScreenThresholdToGeometricError} from '../lib/utils/lod-conversio
14
15
  import {writeFile, removeDir} from '../lib/utils/file-utils';
15
16
  import {calculateFilesSize, timeConverter} from '../lib/utils/statistic-utills';
16
17
  import {TILESET as tilesetTemplate} from './json-templates/tileset';
17
- import B3dmConverter from './helpers/b3dm-converter';
18
18
  import {createObbFromMbs} from '../i3s-converter/helpers/coordinate-converter';
19
- import {GeoidHeightModel} from '../lib/geoid-height-model';
19
+ import {
20
+ I3SAttributesData,
21
+ Tile3dAttributesWorker,
22
+ transform3DTilesAttributesOnWorker
23
+ } from '../3d-tiles-attributes-worker';
24
+ import {getWorkerURL, WorkerFarm} from '@loaders.gl/worker-utils';
25
+ import {BROWSER_ERROR_MESSAGE} from '../constants';
20
26
 
21
27
  const I3S = 'I3S';
22
28
 
@@ -28,9 +34,10 @@ export default class Tiles3DConverter {
28
34
  tilesetPath: string;
29
35
  vertexCounter: number;
30
36
  conversionStartTime: [number, number];
31
- geoidHeightModel: GeoidHeightModel;
32
- sourceTileset: Tileset3D;
33
- attributeStorageInfo: AttributeStorageInfo;
37
+ geoidHeightModel: Geoid | null;
38
+ sourceTileset: Tileset3D | null;
39
+ attributeStorageInfo: AttributeStorageInfo | null;
40
+ workerSource: {[key: string]: string} = {};
34
41
 
35
42
  constructor() {
36
43
  this.options = {};
@@ -40,6 +47,7 @@ export default class Tiles3DConverter {
40
47
  this.geoidHeightModel = null;
41
48
  this.sourceTileset = null;
42
49
  this.attributeStorageInfo = null;
50
+ this.workerSource = {};
43
51
  }
44
52
 
45
53
  /**
@@ -51,13 +59,17 @@ export default class Tiles3DConverter {
51
59
  * @param options.egmFilePath location of *.pgm file to convert heights from ellipsoidal to gravity-related format
52
60
  * @param options.maxDepth The max tree depth of conversion
53
61
  */
54
- private async convert(options: {
62
+ public async convert(options: {
55
63
  inputUrl: string;
56
64
  outputPath: string;
57
65
  tilesetName: string;
58
- maxDepth: number;
66
+ maxDepth?: number;
59
67
  egmFilePath: string;
60
68
  }): Promise<any> {
69
+ if (isBrowser) {
70
+ console.log(BROWSER_ERROR_MESSAGE);
71
+ return BROWSER_ERROR_MESSAGE;
72
+ }
61
73
  const {inputUrl, outputPath, tilesetName, maxDepth, egmFilePath} = options;
62
74
  this.conversionStartTime = process.hrtime();
63
75
  this.options = {maxDepth};
@@ -66,13 +78,25 @@ export default class Tiles3DConverter {
66
78
  this.geoidHeightModel = await load(egmFilePath, PGMLoader);
67
79
  console.log('Loading egm file completed!'); // eslint-disable-line
68
80
 
81
+ await this.loadWorkers();
82
+
69
83
  const sourceTilesetJson = await load(inputUrl, I3SLoader, {});
84
+
70
85
  this.sourceTileset = new Tileset3D(sourceTilesetJson, {
71
- loadOptions: {i3s: {coordinateSystem: COORDINATE_SYSTEM.LNGLAT_OFFSETS}}
86
+ loadOptions: {
87
+ _nodeWorkers: true,
88
+ reuseWorkers: true,
89
+ 'i3s-content-nodejs': {
90
+ workerUrl: './modules/i3s/dist/i3s-content-nodejs-worker.js'
91
+ },
92
+ i3s: {coordinateSystem: COORDINATE_SYSTEM.LNGLAT_OFFSETS, decodeTextures: false}
93
+ }
72
94
  });
73
95
 
74
- if (!this.sourceTileset.root.header.obb) {
75
- this.sourceTileset.root.header.obb = createObbFromMbs(this.sourceTileset.root.header.mbs);
96
+ await this.sourceTileset.tilesetInitializationPromise;
97
+ const rootNode = this.sourceTileset.root!;
98
+ if (!rootNode.header.obb) {
99
+ rootNode.header.obb = createObbFromMbs(rootNode.header.mbs);
76
100
  }
77
101
 
78
102
  this.tilesetPath = join(`${outputPath}`, `${tilesetName}`);
@@ -86,18 +110,83 @@ export default class Tiles3DConverter {
86
110
 
87
111
  const rootTile: Node3D = {
88
112
  boundingVolume: {
89
- box: i3sObbTo3dTilesObb(this.sourceTileset.root.header.obb, this.geoidHeightModel)
113
+ box: i3sObbTo3dTilesObb(rootNode.header.obb, this.geoidHeightModel)
90
114
  },
91
- geometricError: convertScreenThresholdToGeometricError(this.sourceTileset.root),
115
+ geometricError: convertScreenThresholdToGeometricError(rootNode),
92
116
  children: []
93
117
  };
94
118
 
95
- await this._addChildren(this.sourceTileset.root, rootTile, 1);
119
+ await this._addChildren(rootNode, rootTile, 1);
96
120
 
97
- const tileset = transform({root: rootTile}, tilesetTemplate);
121
+ const tileset = transform({root: rootTile}, tilesetTemplate());
98
122
  await writeFile(this.tilesetPath, JSON.stringify(tileset), 'tileset.json');
99
123
 
100
124
  this._finishConversion({slpk: false, outputPath, tilesetName});
125
+
126
+ // Clean up worker pools
127
+ const workerFarm = WorkerFarm.getWorkerFarm({});
128
+ workerFarm.destroy();
129
+ }
130
+
131
+ /**
132
+ * Convert particular I3S Node
133
+ * @param parentSourceNode the parent node tile object (@loaders.gl/tiles/Tile3D)
134
+ * @param parentNode object in resulting tileset
135
+ * @param level a current level of a tree depth
136
+ * @param childNodeInfo child node to convert
137
+ */
138
+ private async convertChildNode(
139
+ parentSourceNode: Tile3D,
140
+ parentNode: Node3D,
141
+ level: number,
142
+ childNodeInfo: NodeReference
143
+ ): Promise<void> {
144
+ const sourceChild = await this._loadChildNode(parentSourceNode, childNodeInfo);
145
+ parentSourceNode.children.push(sourceChild);
146
+ if (sourceChild.contentUrl) {
147
+ await this.sourceTileset!._loadTile(sourceChild);
148
+ this.vertexCounter += sourceChild.content.vertexCount;
149
+
150
+ let featureAttributes: FeatureAttribute | null = null;
151
+ if (this.attributeStorageInfo) {
152
+ featureAttributes = await this._loadChildAttributes(sourceChild, this.attributeStorageInfo);
153
+ }
154
+
155
+ if (!sourceChild.header.obb) {
156
+ sourceChild.header.obb = createObbFromMbs(sourceChild.header.mbs);
157
+ }
158
+
159
+ const boundingVolume = {
160
+ box: i3sObbTo3dTilesObb(sourceChild.header.obb, this.geoidHeightModel)
161
+ };
162
+ const child: Node3D = {
163
+ boundingVolume,
164
+ geometricError: convertScreenThresholdToGeometricError(sourceChild),
165
+ children: []
166
+ };
167
+
168
+ const i3sAttributesData: I3SAttributesData = {
169
+ tileContent: sourceChild.content,
170
+ textureFormat: sourceChild?.header?.textureFormat
171
+ };
172
+
173
+ const b3dm = await transform3DTilesAttributesOnWorker(i3sAttributesData, {
174
+ source: this.workerSource.tile3dWorkerSource,
175
+ featureAttributes
176
+ });
177
+
178
+ child.content = {
179
+ uri: `${sourceChild.id}.b3dm`,
180
+ boundingVolume
181
+ };
182
+ await writeFile(this.tilesetPath, new Uint8Array(b3dm), `${sourceChild.id}.b3dm`);
183
+ parentNode.children.push(child);
184
+
185
+ sourceChild.unloadContent();
186
+ await this._addChildren(sourceChild, child, level + 1);
187
+ } else {
188
+ await this._addChildren(sourceChild, parentNode, level + 1);
189
+ }
101
190
  }
102
191
 
103
192
  /**
@@ -114,45 +203,11 @@ export default class Tiles3DConverter {
114
203
  if (this.options.maxDepth && level > this.options.maxDepth) {
115
204
  return;
116
205
  }
206
+ const promises: Promise<void>[] = [];
117
207
  for (const childNodeInfo of parentSourceNode.header.children || []) {
118
- const sourceChild = await this._loadChildNode(parentSourceNode, childNodeInfo);
119
- parentSourceNode.children.push(sourceChild);
120
- if (sourceChild.contentUrl) {
121
- await this.sourceTileset._loadTile(sourceChild);
122
- this.vertexCounter += sourceChild.content.vertexCount;
123
-
124
- let attributes = null;
125
- if (this.attributeStorageInfo) {
126
- attributes = await this._loadChildAttributes(sourceChild, this.attributeStorageInfo);
127
- }
128
-
129
- if (!sourceChild.header.obb) {
130
- sourceChild.header.obb = createObbFromMbs(sourceChild.header.mbs);
131
- }
132
-
133
- const boundingVolume = {
134
- box: i3sObbTo3dTilesObb(sourceChild.header.obb, this.geoidHeightModel)
135
- };
136
- const child: Node3D = {
137
- boundingVolume,
138
- geometricError: convertScreenThresholdToGeometricError(sourceChild),
139
- children: []
140
- };
141
-
142
- const b3dm = await new B3dmConverter().convert(sourceChild, attributes);
143
- child.content = {
144
- uri: `${sourceChild.id}.b3dm`,
145
- boundingVolume
146
- };
147
- await writeFile(this.tilesetPath, new Uint8Array(b3dm), `${sourceChild.id}.b3dm`);
148
- parentNode.children.push(child);
149
-
150
- sourceChild.unloadContent();
151
- await this._addChildren(sourceChild, child, level + 1);
152
- } else {
153
- await this._addChildren(sourceChild, parentNode, level + 1);
154
- }
208
+ promises.push(this.convertChildNode(parentSourceNode, parentNode, level, childNodeInfo));
155
209
  }
210
+ await Promise.all(promises);
156
211
  }
157
212
 
158
213
  /**
@@ -163,18 +218,18 @@ export default class Tiles3DConverter {
163
218
  */
164
219
  private async _loadChildNode(parentNode: Tile3D, childNodeInfo: NodeReference): Promise<Tile3D> {
165
220
  let header;
166
- if (this.sourceTileset.tileset.nodePages) {
221
+ if (this.sourceTileset!.tileset.nodePages) {
167
222
  console.log(`Node conversion: ${childNodeInfo.id}`); // eslint-disable-line no-console,no-undef
168
- header = await this.sourceTileset.tileset.nodePagesTile.formTileFromNodePages(
223
+ header = await this.sourceTileset!.tileset.nodePagesTile.formTileFromNodePages(
169
224
  childNodeInfo.id
170
225
  );
171
226
  } else {
172
- const {loader} = this.sourceTileset;
173
- const nodeUrl = this._relativeUrlToFullUrl(parentNode.url, childNodeInfo.href);
227
+ const {loader} = this.sourceTileset!;
228
+ const nodeUrl = this._relativeUrlToFullUrl(parentNode.url, childNodeInfo.href!);
174
229
  // load metadata
175
230
  const options = {
176
231
  i3s: {
177
- ...this.sourceTileset.loadOptions,
232
+ ...this.sourceTileset!.loadOptions,
178
233
  isTileHeader: true,
179
234
  loadContent: false
180
235
  }
@@ -183,7 +238,7 @@ export default class Tiles3DConverter {
183
238
  console.log(`Node conversion: ${nodeUrl}`); // eslint-disable-line no-console,no-undef
184
239
  header = await load(nodeUrl, loader, options);
185
240
  }
186
- return new Tile3D(this.sourceTileset, header, parentNode);
241
+ return new Tile3D(this.sourceTileset!, header, parentNode);
187
242
  }
188
243
 
189
244
  /**
@@ -218,7 +273,7 @@ export default class Tiles3DConverter {
218
273
  sourceChild: Tile3D,
219
274
  attributeStorageInfo: AttributeStorageInfo
220
275
  ): Promise<FeatureAttribute> {
221
- const promises = [];
276
+ const promises: any[] = [];
222
277
  const {attributeUrls} = sourceChild.header;
223
278
 
224
279
  for (let index = 0; index < attributeUrls.length; index++) {
@@ -286,4 +341,14 @@ export default class Tiles3DConverter {
286
341
  console.log(`File(s) size: `, filesSize, ' bytes'); // eslint-disable-line
287
342
  console.log(`------------------------------------------------`); // eslint-disable-line
288
343
  }
344
+
345
+ private async loadWorkers(): Promise<void> {
346
+ console.log(`Loading workers source...`); // eslint-disable-line no-undef, no-console
347
+ const tile3dAttributesWorkerUrl = getWorkerURL(Tile3dAttributesWorker, {...getLoaderOptions()});
348
+ const sourceResponse = await fetchFile(tile3dAttributesWorkerUrl);
349
+ const source = await sourceResponse.text();
350
+
351
+ this.workerSource.tile3dWorkerSource = source;
352
+ console.log(`Loading workers source completed!`); // eslint-disable-line no-undef, no-console
353
+ }
289
354
  }
@@ -1,7 +1,8 @@
1
- import {encode, encodeSync} from '@loaders.gl/core';
1
+ import type {I3SAttributesData} from '../../3d-tiles-attributes-worker';
2
+
3
+ import {encodeSync} from '@loaders.gl/core';
2
4
  import {GLTFScenegraph, GLTFWriter} from '@loaders.gl/gltf';
3
5
  import {Tile3DWriter} from '@loaders.gl/3d-tiles';
4
- import {ImageWriter} from '@loaders.gl/images';
5
6
  import {Matrix4, Vector3} from '@math.gl/core';
6
7
  import {Ellipsoid} from '@math.gl/geospatial';
7
8
  import {convertTextureAtlas} from './texture-atlas';
@@ -9,33 +10,57 @@ import {convertTextureAtlas} from './texture-atlas';
9
10
  const Z_UP_TO_Y_UP_MATRIX = new Matrix4([1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1]);
10
11
  const scratchVector = new Vector3();
11
12
 
13
+ /**
14
+ * Converts content of an I3S node to *.b3dm's file content
15
+ */
12
16
  export default class B3dmConverter {
13
- async convert(i3sTile, attributes = null) {
14
- this.i3sTile = i3sTile;
15
- const gltf = await this.buildGltf(i3sTile);
17
+ // @ts-expect-error
18
+ rtcCenter: Float32Array;
19
+ i3sTile: any;
20
+
21
+ /**
22
+ * The starter of content conversion
23
+ * @param i3sTile - Tile3D instance for I3S node
24
+ * @returns - encoded content
25
+ */
26
+ async convert(
27
+ i3sAttributesData: I3SAttributesData,
28
+ featureAttributes: any = null
29
+ ): Promise<ArrayBuffer> {
30
+ const gltf = await this.buildGltf(i3sAttributesData, featureAttributes);
16
31
  const b3dm = encodeSync(
17
32
  {
18
33
  gltfEncoded: new Uint8Array(gltf),
19
34
  type: 'b3dm',
20
- featuresLength: this._getFeaturesLength(attributes),
21
- batchTable: attributes
35
+ featuresLength: this._getFeaturesLength(featureAttributes),
36
+ batchTable: featureAttributes
22
37
  },
23
38
  Tile3DWriter
24
39
  );
25
40
  return b3dm;
26
41
  }
27
42
 
28
- async buildGltf(i3sTile) {
43
+ /**
44
+ * Build and encode gltf
45
+ * @param i3sTile - Tile3D instance for I3S node
46
+ * @returns - encoded glb content
47
+ */
48
+ async buildGltf(
49
+ i3sAttributesData: I3SAttributesData,
50
+ featureAttributes: any
51
+ ): Promise<ArrayBuffer> {
52
+ const {tileContent, textureFormat} = i3sAttributesData;
29
53
  const {
30
54
  material,
31
55
  attributes,
32
56
  indices: originalIndices,
33
57
  cartesianOrigin,
34
- cartographicOrigin
35
- } = i3sTile.content;
58
+ cartographicOrigin,
59
+ modelMatrix
60
+ } = tileContent;
36
61
  const gltfBuilder = new GLTFScenegraph();
37
62
 
38
- const textureIndex = await this._addI3sTextureToGltf(i3sTile, gltfBuilder);
63
+ const textureIndex = await this._addI3sTextureToGltf(tileContent, textureFormat, gltfBuilder);
39
64
  const pbrMaterialInfo = this._convertI3sMaterialToGltfMaterial(material, textureIndex);
40
65
  const materialIndex = gltfBuilder.addMaterial(pbrMaterialInfo);
41
66
 
@@ -52,8 +77,10 @@ export default class B3dmConverter {
52
77
  attributes.positions.value = this._normalizePositions(
53
78
  positionsValue,
54
79
  cartesianOrigin,
55
- cartographicOrigin
80
+ cartographicOrigin,
81
+ modelMatrix
56
82
  );
83
+ this._createBatchIds(tileContent, featureAttributes);
57
84
  if (attributes.normals && !this._checkNormals(attributes.normals.value)) {
58
85
  delete attributes.normals;
59
86
  }
@@ -62,7 +89,8 @@ export default class B3dmConverter {
62
89
  const meshIndex = gltfBuilder.addMesh({
63
90
  attributes,
64
91
  indices,
65
- material: materialIndex
92
+ material: materialIndex,
93
+ mode: 4
66
94
  });
67
95
  const transformMatrix = this._generateTransformMatrix(cartesianOrigin);
68
96
  const nodeIndex = gltfBuilder.addNode({meshIndex, matrix: transformMatrix});
@@ -82,11 +110,8 @@ export default class B3dmConverter {
82
110
  * @param {GLTFScenegraph} gltfBuilder - gltfScenegraph instance to construct GLTF
83
111
  * @returns {Promise<number | null>} - GLTF texture index
84
112
  */
85
- async _addI3sTextureToGltf(i3sTile, gltfBuilder) {
86
- const {
87
- content: {texture, material, attributes},
88
- header: {textureFormat}
89
- } = i3sTile;
113
+ async _addI3sTextureToGltf(tileContent, textureFormat, gltfBuilder) {
114
+ const {texture, material, attributes} = tileContent;
90
115
  let textureIndex = null;
91
116
  let selectedTexture = texture;
92
117
  if (!texture && material) {
@@ -97,8 +122,7 @@ export default class B3dmConverter {
97
122
  }
98
123
  if (selectedTexture) {
99
124
  const mimeType = this._deduceMimeTypeFromFormat(textureFormat);
100
- const imageBuffer = await encode(selectedTexture, ImageWriter);
101
- const imageIndex = gltfBuilder.addImage(imageBuffer, mimeType);
125
+ const imageIndex = gltfBuilder.addImage(selectedTexture, mimeType);
102
126
  textureIndex = gltfBuilder.addTexture({imageIndex});
103
127
  delete attributes.colors;
104
128
  }
@@ -109,14 +133,18 @@ export default class B3dmConverter {
109
133
  * Generate a positions array which is correct for 3DTiles/GLTF format
110
134
  * @param {Float64Array} positionsValue - the input geometry positions array
111
135
  * @param {number[]} cartesianOrigin - the tile center in the cartesian coordinate system
136
+ * @param {number[]} cartographicOrigin - the tile center in the cartographic coordinate system
137
+ * @param {number[]} modelMatrix - the model matrix of geometry
112
138
  * @returns {Float32Array} - the output geometry positions array
113
139
  */
114
- _normalizePositions(positionsValue, cartesianOrigin, cartographicOrigin) {
140
+ _normalizePositions(positionsValue, cartesianOrigin, cartographicOrigin, modelMatrix) {
115
141
  const newPositionsValue = new Float32Array(positionsValue.length);
116
142
  for (let index = 0; index < positionsValue.length; index += 3) {
117
143
  const vertex = positionsValue.subarray(index, index + 3);
118
144
  const cartesianOriginVector = new Vector3(cartesianOrigin);
119
- let vertexVector = new Vector3(Array.from(vertex)).add(cartographicOrigin);
145
+ let vertexVector = new Vector3(Array.from(vertex))
146
+ .transform(modelMatrix)
147
+ .add(cartographicOrigin);
120
148
  Ellipsoid.WGS84.cartographicToCartesian(vertexVector, scratchVector);
121
149
  vertexVector = scratchVector.subtract(cartesianOriginVector);
122
150
  newPositionsValue.set(vertexVector, index);
@@ -139,25 +167,28 @@ export default class B3dmConverter {
139
167
  }
140
168
 
141
169
  /**
142
- * Generate batchId attribute from faceRanges.
143
- * @param {Uint32Array} faceRanges - the source array
144
- * @returns {Float32Array} batchId list.
170
+ * Create _BATCHID attribute
171
+ * @param {Object} i3sContent - the source object
172
+ * @returns {void}
145
173
  */
146
- _generateBatchId(faceRanges) {
147
- const batchIdArraySize = (faceRanges[faceRanges.length - 1] + 1) * 3;
148
- const batchId = new Float32Array(batchIdArraySize);
149
- let rangeIndex = 0;
150
- let currentBatchId = 0;
151
-
152
- for (let index = 0; index < faceRanges.length / 2; index++) {
153
- const fromIndex = faceRanges[rangeIndex] * 3;
154
- const untilPosition = (faceRanges[rangeIndex + 1] + 1) * 3;
174
+ _createBatchIds(i3sContent, featureAttributes) {
175
+ const {featureIds} = i3sContent;
176
+ const {OBJECTID: objectIds} = featureAttributes || {};
177
+ if (!featureIds || !objectIds) {
178
+ return;
179
+ }
155
180
 
156
- batchId.fill(currentBatchId, fromIndex, untilPosition);
157
- rangeIndex += 2;
158
- currentBatchId += 1;
181
+ for (let i = 0; i < featureIds.length; i++) {
182
+ const featureId = featureIds[i];
183
+ const batchId = objectIds.indexOf(featureId);
184
+ featureIds[i] = batchId;
159
185
  }
160
- return batchId;
186
+
187
+ i3sContent.attributes._BATCHID = {
188
+ size: 1,
189
+ byteOffset: 0,
190
+ value: featureIds
191
+ };
161
192
  }
162
193
 
163
194
  /**
@@ -187,6 +218,8 @@ export default class B3dmConverter {
187
218
  return 'image/jpeg';
188
219
  case 'png':
189
220
  return 'image/png';
221
+ case 'ktx2':
222
+ return 'image/ktx2';
190
223
  default:
191
224
  console.warn(`Unexpected texture format in I3S: ${format}`); // eslint-disable-line no-console, no-undef
192
225
  return 'image/jpeg';
@@ -1,8 +1,23 @@
1
1
  import {Vector3} from '@math.gl/core';
2
2
  import {Ellipsoid} from '@math.gl/geospatial';
3
3
  import {OrientedBoundingBox} from '@math.gl/culling';
4
+ // @ts-expect-error
5
+ import {GeoidHeightModel} from '@loaders.gl/tile-converter/lib/geoid-height-model';
4
6
 
5
- export function i3sObbTo3dTilesObb(i3SObb, geoidHeightModel) {
7
+ /**
8
+ * Convert quaternion-based OBB to half-axes-based OBB
9
+ * @param i3SObb quaternion based OBB
10
+ * @param geoidHeightModel the Earth Gravity Model instance
11
+ * @returns number[12] 3DTiles OBB https://github.com/CesiumGS/3d-tiles/tree/master/specification#box
12
+ */
13
+ export function i3sObbTo3dTilesObb(
14
+ i3SObb: {
15
+ center: number[];
16
+ halfSize: number[];
17
+ quaternion: number[];
18
+ },
19
+ geoidHeightModel: GeoidHeightModel
20
+ ): number[] {
6
21
  const tiles3DCenter = [
7
22
  i3SObb.center[0],
8
23
  i3SObb.center[1],