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

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