@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,206 @@
1
+ import {
2
+ GLTFAccessorPostprocessed,
3
+ GLTFImagePostprocessed,
4
+ GLTFMeshPrimitivePostprocessed
5
+ } from '@loaders.gl/gltf';
6
+ import type {
7
+ GLTF_EXT_feature_metadata_attribute,
8
+ GLTF_EXT_feature_metadata_primitive
9
+ } from 'modules/gltf/src/lib/types/gltf-json-schema';
10
+
11
+ const EXT_MESH_FEATURES = 'EXT_mesh_features';
12
+ const EXT_FEATURE_METADATA = 'EXT_feature_metadata';
13
+
14
+ /**
15
+ * Getting batchIds from 3DTilesNext extensions.
16
+ * @param attributes - gltf accessors
17
+ * @param primitive - gltf primitive data
18
+ * @param images - gltf texture images
19
+ */
20
+ export function handleBatchIdsExtensions(
21
+ attributes: {
22
+ [key: string]: GLTFAccessorPostprocessed;
23
+ },
24
+ primitive: GLTFMeshPrimitivePostprocessed,
25
+ images: GLTFImagePostprocessed[]
26
+ ): number[] {
27
+ const extensions = primitive?.extensions;
28
+
29
+ if (!extensions) {
30
+ return [];
31
+ }
32
+
33
+ for (const [extensionName, extensionData] of Object.entries(extensions || {})) {
34
+ switch (extensionName) {
35
+ case EXT_FEATURE_METADATA:
36
+ return handleExtFeatureMetadataExtension(
37
+ attributes,
38
+ extensionData as GLTF_EXT_feature_metadata_primitive,
39
+ images
40
+ );
41
+ case EXT_MESH_FEATURES:
42
+ console.warn('EXT_mesh_features extension is not supported yet');
43
+ return [];
44
+ default:
45
+ return [];
46
+ }
47
+ }
48
+
49
+ return [];
50
+ }
51
+
52
+ /**
53
+ * Get batchIds from EXT_feature_metadata extension.
54
+ * Docs - https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata
55
+ * @param attributes
56
+ * @param extFeatureMetadata
57
+ * @param textures
58
+ */
59
+ function handleExtFeatureMetadataExtension(
60
+ attributes: {
61
+ [key: string]: GLTFAccessorPostprocessed;
62
+ },
63
+ extFeatureMetadata: GLTF_EXT_feature_metadata_primitive,
64
+ images: GLTFImagePostprocessed[]
65
+ ): number[] {
66
+ // Take only first extension object to get batchIds attribute name.
67
+ const featureIdAttribute = extFeatureMetadata?.featureIdAttributes?.[0];
68
+
69
+ if (featureIdAttribute?.featureIds?.attribute) {
70
+ const batchIdsAttribute = attributes[featureIdAttribute.featureIds.attribute];
71
+ return batchIdsAttribute.value;
72
+ }
73
+
74
+ if (
75
+ featureIdAttribute?.featureIds?.hasOwnProperty('constant') &&
76
+ featureIdAttribute?.featureIds?.hasOwnProperty('divisor')
77
+ ) {
78
+ const featuresCount = attributes?.POSITIONS?.value.length / 3 || 0;
79
+ return generateImplicitFeatureIds(
80
+ featuresCount,
81
+ featureIdAttribute.featureIds.constant,
82
+ featureIdAttribute.featureIds.divisor
83
+ );
84
+ }
85
+
86
+ // Take only first extension object to get batchIds attribute name.
87
+ const featureIdTexture =
88
+ extFeatureMetadata?.featureIdTextures && extFeatureMetadata?.featureIdTextures[0];
89
+
90
+ if (featureIdTexture) {
91
+ const textureAttributeIndex = featureIdTexture?.featureIds?.texture?.texCoord || 0;
92
+ const textCoordAttribute = `TEXCOORD_${textureAttributeIndex}`;
93
+ const textureCoordinates = attributes[textCoordAttribute].value;
94
+ return generateBatchIdsFromTexture(featureIdTexture, textureCoordinates, images);
95
+ }
96
+
97
+ // Take only first extension texture to get batchIds from the root EXT_feature_metadata object.
98
+ const featureTexture =
99
+ extFeatureMetadata?.featureTextures && extFeatureMetadata?.featureTextures[0];
100
+
101
+ /**
102
+ * TODO need to get batchIds from root extension
103
+ */
104
+ if (featureTexture) {
105
+ console.warn("EXT_feature_metadata doesn't yet support featureTextures in primitive");
106
+ return [];
107
+ }
108
+
109
+ return [];
110
+ }
111
+
112
+ /**
113
+ * Generates implicit feature ids
114
+ * Spec - https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata#implicit-feature-ids
115
+ * @param featuresCount
116
+ * @param constant
117
+ * @param devisor
118
+ */
119
+ function generateImplicitFeatureIds(
120
+ featuresCount: number,
121
+ constant: number = 0,
122
+ divisor: number = 0
123
+ ): number[] {
124
+ let featureIds: number[] = [];
125
+
126
+ if (divisor > 0) {
127
+ let currentValue = constant;
128
+ let devisorCounter = divisor;
129
+
130
+ for (let index = 0; index < featuresCount; index++) {
131
+ featureIds.push(currentValue);
132
+
133
+ devisorCounter -= 1;
134
+
135
+ if (devisorCounter === 0) {
136
+ currentValue++;
137
+ devisorCounter = divisor;
138
+ }
139
+ }
140
+ } else {
141
+ featureIds = Array<number>(featuresCount).fill(constant, 0, featuresCount);
142
+ }
143
+
144
+ return featureIds;
145
+ }
146
+
147
+ /**
148
+ * Get batchIds from texture.
149
+ * @param primitive
150
+ * @param featureIdTextures
151
+ */
152
+ function generateBatchIdsFromTexture(
153
+ featureIdTexture: GLTF_EXT_feature_metadata_attribute,
154
+ textureCoordinates: Float32Array,
155
+ images: GLTFImagePostprocessed[]
156
+ ) {
157
+ if (!images?.length) {
158
+ return [];
159
+ }
160
+
161
+ const CHANNELS_MAP = {
162
+ r: 0,
163
+ g: 1,
164
+ b: 2,
165
+ a: 3
166
+ };
167
+
168
+ const textureIndex = featureIdTexture?.featureIds?.texture?.index;
169
+ const featureChannel = featureIdTexture?.featureIds?.channels;
170
+
171
+ if (!featureChannel || textureIndex === undefined) {
172
+ return [];
173
+ }
174
+
175
+ const image = images[textureIndex];
176
+ const batchIds: number[] = [];
177
+ const channels = CHANNELS_MAP[featureChannel];
178
+
179
+ if (!image.compressed) {
180
+ for (let index = 0; index < textureCoordinates.length; index += 2) {
181
+ const u = textureCoordinates[index];
182
+ const v = textureCoordinates[index + 1];
183
+
184
+ const tx = Math.min((emod(u) * image.width) | 0, image.width - 1);
185
+ const ty = Math.min((emod(v) * image.height) | 0, image.height - 1);
186
+
187
+ const offset = (ty * image.width + tx) * image.components + channels;
188
+ const batchId = new Uint8Array(image.data)[offset];
189
+
190
+ batchIds.push(batchId);
191
+ }
192
+ } else {
193
+ console.warn(`Can't get batch Ids from ${image.mimeType} compressed texture`);
194
+ }
195
+
196
+ return batchIds;
197
+ }
198
+
199
+ /**
200
+ * Handle UVs if they are out of range [0,1].
201
+ * @param n
202
+ * @param m
203
+ */
204
+ function emod(n: number): number {
205
+ return ((n % 1) + 1) % 1;
206
+ }
@@ -1,11 +1,15 @@
1
- import type {BoundingVolumes, Extent, Mbs, Obb} from '@loaders.gl/i3s';
1
+ import type {BoundingVolumes, FullExtent, Mbs, Obb} from '@loaders.gl/i3s';
2
2
 
3
3
  import {Matrix3, Quaternion, Vector3} from '@math.gl/core';
4
4
  import {Ellipsoid} from '@math.gl/geospatial';
5
- import {OrientedBoundingBox} from '@math.gl/culling';
6
- import TileHeader from '@loaders.gl/tiles/src/tileset/tile-3d';
7
- import {GeoidHeightModel} from '../../lib/geoid-height-model';
8
- import {Tileset3D} from '@loaders.gl/tiles';
5
+ import {
6
+ OrientedBoundingBox,
7
+ makeOrientedBoundingBoxFromPoints,
8
+ makeBoundingSphereFromPoints,
9
+ BoundingSphere
10
+ } from '@math.gl/culling';
11
+ import {Tile3D} from '@loaders.gl/tiles';
12
+ import {Geoid} from '@math.gl/geoid';
9
13
 
10
14
  /**
11
15
  * Create bounding volumes object from tile and geoid height model.
@@ -13,10 +17,7 @@ import {Tileset3D} from '@loaders.gl/tiles';
13
17
  * @param geoidHeightModel
14
18
  * @returns - Bounding volumes object
15
19
  */
16
- export function createBoundingVolumes(
17
- tile: TileHeader,
18
- geoidHeightModel: GeoidHeightModel
19
- ): BoundingVolumes {
20
+ export function createBoundingVolumes(tile: Tile3D, geoidHeightModel: Geoid): BoundingVolumes {
20
21
  let radius;
21
22
  let halfSize;
22
23
  let quaternion;
@@ -52,30 +53,89 @@ export function createBoundingVolumes(
52
53
  }
53
54
 
54
55
  /**
55
- * Convert common coordinate to extent coordinate
56
- * @param tileset
57
- * @returns - Extent
56
+ * Generates bounding volumes from geometry positions
57
+ * @param cartesianPositions
58
+ * @param geoidHeightModel
59
+ */
60
+ export function createBoundingVolumesFromGeometry(
61
+ cartesianPositions: Float32Array,
62
+ geoidHeightModel: Geoid
63
+ ): {mbs: Mbs; obb: Obb} {
64
+ const positionVectors = convertPositionsToVectors(cartesianPositions);
65
+
66
+ const geometryObb = makeOrientedBoundingBoxFromPoints(positionVectors);
67
+ const geometryMbs = makeBoundingSphereFromPoints(positionVectors);
68
+
69
+ let mbsCenter = Ellipsoid.WGS84.cartesianToCartographic(geometryMbs.center, new Vector3());
70
+ let obbCenter = Ellipsoid.WGS84.cartesianToCartographic(geometryObb.center, new Vector3());
71
+
72
+ mbsCenter[2] = mbsCenter[2] - geoidHeightModel.getHeight(mbsCenter[1], mbsCenter[0]);
73
+ obbCenter[2] = obbCenter[2] - geoidHeightModel.getHeight(obbCenter[1], obbCenter[0]);
74
+
75
+ return {
76
+ mbs: [mbsCenter[0], mbsCenter[1], mbsCenter[2], geometryMbs.radius],
77
+ obb: {
78
+ center: obbCenter,
79
+ halfSize: geometryObb.halfSize,
80
+ quaternion: geometryObb.quaternion
81
+ }
82
+ };
83
+ }
84
+
85
+ /**
86
+ * Create array of posisitons where each vertex is vector
87
+ * @param {array} positions
88
+ * @returns {Vector3[]}
89
+ */
90
+ export function convertPositionsToVectors(positions: Float32Array): Vector3[] {
91
+ const result: Vector3[] = [];
92
+
93
+ for (let i = 0; i < positions.length; i += 3) {
94
+ // TODO: (perf) new Vector3 is not optimal but required in `makeOrientedBoundingBoxFromPoints`.
95
+ // modify `makeOrientedBoundingBoxFromPoints` to use scratch vectors
96
+ const positionVector = new Vector3([positions[i], positions[i + 1], positions[i + 2]]);
97
+ result.push(positionVector);
98
+ }
99
+
100
+ return result;
101
+ }
102
+
103
+ /**
104
+ * Convert common coordinate to fullExtent https://github.com/Esri/i3s-spec/blob/master/docs/1.8/fullExtent.cmn.md
105
+ * @param
106
+ * @param boundingVolume
107
+ * @returns - fullExtent object
58
108
  */
59
- export function convertCommonToI3SExtentCoordinate(tileset: Tileset3D): Extent {
60
- const cartesianCenter = tileset.cartesianCenter;
61
- const radius = tileset.lodMetricValue;
62
- const rightTop = Ellipsoid.WGS84.cartesianToCartographic(
63
- new Vector3(cartesianCenter[0] + radius, cartesianCenter[1] + radius, cartesianCenter[2]),
109
+ export function convertBoundingVolumeToI3SFullExtent(
110
+ boundingVolume: OrientedBoundingBox | BoundingSphere
111
+ ): FullExtent {
112
+ let sphere: BoundingSphere;
113
+ if (boundingVolume instanceof BoundingSphere) {
114
+ sphere = boundingVolume;
115
+ } else {
116
+ sphere = boundingVolume.getBoundingSphere();
117
+ }
118
+ const center: Vector3 = sphere.center;
119
+ const radius: number = sphere.radius;
120
+ const vertexMax = Ellipsoid.WGS84.cartesianToCartographic(
121
+ new Vector3(center[0] + radius, center[1] + radius, center[2] + radius),
64
122
  new Vector3()
65
123
  );
66
- const leftBottom = Ellipsoid.WGS84.cartesianToCartographic(
67
- new Vector3(cartesianCenter[0] - radius, cartesianCenter[1] - radius, cartesianCenter[2]),
124
+ const vertexMin = Ellipsoid.WGS84.cartesianToCartographic(
125
+ new Vector3(center[0] - radius, center[1] - radius, center[2] - radius),
68
126
  new Vector3()
69
127
  );
70
- const isFirstRight = rightTop[0] < leftBottom[0];
71
- const isFirstTop = rightTop[1] < leftBottom[1];
72
128
 
73
- return [
74
- isFirstRight ? rightTop[0] : leftBottom[0],
75
- isFirstTop ? rightTop[1] : leftBottom[1],
76
- isFirstRight ? leftBottom[0] : rightTop[0],
77
- isFirstTop ? leftBottom[1] : rightTop[1]
78
- ];
129
+ // Converter sometimes returns min values that are bigger then max,
130
+ // so we should check and take bigger value from max and smaller for nim
131
+ return {
132
+ xmin: Math.min(vertexMin[0], vertexMax[0]),
133
+ xmax: Math.max(vertexMin[0], vertexMax[0]),
134
+ ymin: Math.min(vertexMin[1], vertexMax[1]),
135
+ ymax: Math.max(vertexMin[1], vertexMax[1]),
136
+ zmin: Math.min(vertexMin[2], vertexMax[2]),
137
+ zmax: Math.max(vertexMin[2], vertexMax[2])
138
+ };
79
139
  }
80
140
 
81
141
  /**
@@ -0,0 +1,29 @@
1
+ import type {SceneLayer3D} from '@loaders.gl/i3s';
2
+ import {v4 as uuidv4} from 'uuid';
3
+ import transform from 'json-map-transform';
4
+ import {join} from 'path';
5
+
6
+ import {SCENE_SERVER as sceneServerTemplate} from '../json-templates/scene-server';
7
+ import {writeFile} from '../../lib/utils/file-utils';
8
+
9
+ /**
10
+ * Form and save sceneServer meta data into a file
11
+ * @param layerName - layer name to display
12
+ * @param layers0 - layer object embedded into sceneServer meta data
13
+ * @param rootPath - root path of new converted tileset
14
+ */
15
+ export async function createSceneServerPath(
16
+ layerName: string,
17
+ layers0: SceneLayer3D,
18
+ rootPath: string
19
+ ): Promise<void> {
20
+ const sceneServerData = {
21
+ serviceItemId: uuidv4().replace(/-/gi, ''),
22
+ layerName,
23
+ layers0
24
+ };
25
+
26
+ const sceneServer = transform(sceneServerData, sceneServerTemplate());
27
+ const nodePagePath = join(rootPath, 'SceneServer');
28
+ await writeFile(nodePagePath, JSON.stringify(sceneServer));
29
+ }
@@ -0,0 +1,247 @@
1
+ import type {FeatureTableJson} from '@loaders.gl/3d-tiles';
2
+ import {
3
+ Attribute,
4
+ AttributeStorageInfo,
5
+ ESRIField,
6
+ Field,
7
+ FieldInfo,
8
+ PopupInfo
9
+ } from '@loaders.gl/i3s';
10
+
11
+ /**
12
+ * Takes attributes from property table based on featureIds.
13
+ * If there is no property value for particular featureId (index) the property will be null.
14
+ * Example:
15
+ * Initial data:
16
+ * OBJECTID: [0, 1, 5]
17
+ * component: ['Windows', 'Frames', 'Wall', 'Roof', 'Skylight']
18
+ * Result:
19
+ * OBJECTID: [0, 1, 5]
20
+ * component: ['Windows', 'Frames', 'null']
21
+ * @param featureIds
22
+ * @param propertyTable
23
+ */
24
+ export function flattenPropertyTableByFeatureIds(
25
+ featureIds: number[],
26
+ propertyTable: FeatureTableJson
27
+ ): FeatureTableJson {
28
+ const resultPropertyTable: FeatureTableJson = {};
29
+ for (const propertyName in propertyTable) {
30
+ const properties = propertyTable[propertyName];
31
+ resultPropertyTable[propertyName] = getPropertiesByFeatureIds(properties, featureIds);
32
+ }
33
+
34
+ return resultPropertyTable;
35
+ }
36
+
37
+ /**
38
+ * Getting properties by featureId index
39
+ * @param properties
40
+ * @param featureIds
41
+ */
42
+ function getPropertiesByFeatureIds(properties: any[], featureIds: number[]): any[] {
43
+ const resultProperties: any = [];
44
+
45
+ for (const featureId of featureIds) {
46
+ const property = properties[featureId] || null;
47
+ resultProperties.push(property);
48
+ }
49
+
50
+ return resultProperties;
51
+ }
52
+
53
+ /**
54
+ * Check that all attributes in propertyTable have the same length as FeatureIds.
55
+ * If there are differencies between lengths we should flatten property table based on exiesting featureIds.
56
+ * @param featureIds
57
+ * @param propertyTable
58
+ * @returns
59
+ */
60
+ export function checkPropertiesLength(
61
+ featureIds: number[],
62
+ propertyTable: FeatureTableJson
63
+ ): boolean {
64
+ let needFlatten = false;
65
+
66
+ for (const attribute of Object.values(propertyTable)) {
67
+ if (featureIds.length !== attribute.length) {
68
+ needFlatten = true;
69
+ }
70
+ }
71
+
72
+ return needFlatten;
73
+ }
74
+
75
+ /** String data type name for feature attributes */
76
+ const STRING_TYPE = 'string';
77
+ /** Integer data type name for feature attributes */
78
+ const SHORT_INT_TYPE = 'Int32';
79
+ /** Double data type name for feature attributes */
80
+ const DOUBLE_TYPE = 'double';
81
+ /** Type of attribute that is linked with feature ids */
82
+ const OBJECT_ID_TYPE = 'OBJECTID';
83
+ /**
84
+ * Get the attribute type for attributeStorageInfo https://github.com/Esri/i3s-spec/blob/master/docs/1.7/attributeStorageInfo.cmn.md
85
+ * @param key - attribute's key
86
+ * @param attribute - attribute's type in propertyTable
87
+ */
88
+ export function getAttributeType(key: string, attribute: string): string {
89
+ if (key === OBJECT_ID_TYPE) {
90
+ return OBJECT_ID_TYPE;
91
+ }
92
+ if (typeof attribute === STRING_TYPE) {
93
+ return STRING_TYPE;
94
+ } else if (typeof attribute === 'number') {
95
+ return Number.isInteger(attribute) ? SHORT_INT_TYPE : DOUBLE_TYPE;
96
+ }
97
+ return STRING_TYPE;
98
+ }
99
+
100
+ /**
101
+ * Generate storage attribute for map segmentation.
102
+ * @param attributeIndex - order index of attribute (f_0, f_1 ...).
103
+ * @param key - attribute key from propertyTable.
104
+ * @param attributeType - attribute type.
105
+ * @return Updated storageAttribute.
106
+ */
107
+ export function createdStorageAttribute(
108
+ attributeIndex: number,
109
+ key: string,
110
+ attributeType: Attribute
111
+ ): AttributeStorageInfo {
112
+ const storageAttribute = {
113
+ key: `f_${attributeIndex}`,
114
+ name: key,
115
+ ordering: ['attributeValues'],
116
+ header: [{property: 'count', valueType: 'UInt32'}],
117
+ attributeValues: {valueType: 'Int32', valuesPerElement: 1}
118
+ };
119
+
120
+ switch (attributeType) {
121
+ case OBJECT_ID_TYPE:
122
+ setupIdAttribute(storageAttribute);
123
+ break;
124
+ case STRING_TYPE:
125
+ setupStringAttribute(storageAttribute);
126
+ break;
127
+ case DOUBLE_TYPE:
128
+ setupDoubleAttribute(storageAttribute);
129
+ break;
130
+ case SHORT_INT_TYPE:
131
+ break;
132
+ default:
133
+ setupStringAttribute(storageAttribute);
134
+ }
135
+
136
+ return storageAttribute;
137
+ }
138
+
139
+ /**
140
+ * Find and return attribute type based on key form propertyTable.
141
+ * @param attributeType
142
+ */
143
+ export function getFieldAttributeType(attributeType: Attribute): ESRIField {
144
+ switch (attributeType) {
145
+ case OBJECT_ID_TYPE:
146
+ return 'esriFieldTypeOID';
147
+ case STRING_TYPE:
148
+ return 'esriFieldTypeString';
149
+ case SHORT_INT_TYPE:
150
+ return 'esriFieldTypeInteger';
151
+ case DOUBLE_TYPE:
152
+ return 'esriFieldTypeDouble';
153
+ default:
154
+ return 'esriFieldTypeString';
155
+ }
156
+ }
157
+
158
+ /**
159
+ * Setup field attribute for map segmentation.
160
+ * @param key - attribute for map segmentation.
161
+ * @param fieldAttributeType - esri attribute type ('esriFieldTypeString' or 'esriFieldTypeOID').
162
+ */
163
+ export function createFieldAttribute(key: string, fieldAttributeType: ESRIField): Field {
164
+ return {
165
+ name: key,
166
+ type: fieldAttributeType,
167
+ alias: key
168
+ };
169
+ }
170
+
171
+ /**
172
+ * Generate popup info to show metadata on the map.
173
+ * @param propertyTable - table data with OBJECTID.
174
+ * @return data for correct rendering of popup.
175
+ */
176
+ export function createPopupInfo(propertyTable: FeatureTableJson): PopupInfo {
177
+ const title = '{OBJECTID}';
178
+ const mediaInfos = [];
179
+ const fieldInfos: FieldInfo[] = [];
180
+ const popupElements: {
181
+ fieldInfos: FieldInfo[];
182
+ type: string;
183
+ }[] = [];
184
+ const expressionInfos = [];
185
+
186
+ for (const key in propertyTable) {
187
+ fieldInfos.push({
188
+ fieldName: key,
189
+ visible: true,
190
+ isEditable: false,
191
+ label: key
192
+ });
193
+ }
194
+ popupElements.push({
195
+ fieldInfos,
196
+ type: 'fields'
197
+ });
198
+
199
+ return {
200
+ title,
201
+ mediaInfos,
202
+ popupElements,
203
+ fieldInfos,
204
+ expressionInfos
205
+ };
206
+ }
207
+
208
+ /**
209
+ * Setup storage attribute as string.
210
+ * @param storageAttribute - attribute for map segmentation.
211
+ */
212
+ function setupStringAttribute(storageAttribute: AttributeStorageInfo): void {
213
+ // @ts-expect-error
214
+ storageAttribute.ordering.unshift('attributeByteCounts');
215
+ storageAttribute.header.push({property: 'attributeValuesByteCount', valueType: 'UInt32'});
216
+ storageAttribute.attributeValues = {
217
+ valueType: 'String',
218
+ encoding: 'UTF-8',
219
+ valuesPerElement: 1
220
+ };
221
+ storageAttribute.attributeByteCounts = {
222
+ valueType: 'UInt32',
223
+ valuesPerElement: 1
224
+ };
225
+ }
226
+
227
+ /**
228
+ * Setup Id attribute for map segmentation.
229
+ * @param storageAttribute - attribute for map segmentation .
230
+ */
231
+ function setupIdAttribute(storageAttribute: AttributeStorageInfo): void {
232
+ storageAttribute.attributeValues = {
233
+ valueType: 'Oid32',
234
+ valuesPerElement: 1
235
+ };
236
+ }
237
+
238
+ /**
239
+ * Setup double attribute for map segmentation.
240
+ * @param storageAttribute - attribute for map segmentation .
241
+ */
242
+ function setupDoubleAttribute(storageAttribute: AttributeStorageInfo): void {
243
+ storageAttribute.attributeValues = {
244
+ valueType: 'Float64',
245
+ valuesPerElement: 1
246
+ };
247
+ }