@loaders.gl/tiles 5.0.0-alpha.5 → 5.0.0-alpha.7

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 (106) hide show
  1. package/dist/dist.dev.js +5122 -2641
  2. package/dist/dist.min.js +4 -2
  3. package/dist/index.cjs +1670 -403
  4. package/dist/index.cjs.map +3 -3
  5. package/dist/index.d.ts +8 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +3 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/spatial/format-spatial-reference.d.ts +1 -0
  10. package/dist/spatial/format-spatial-reference.d.ts.map +1 -1
  11. package/dist/spatial/format-spatial-reference.js +104 -46
  12. package/dist/spatial/format-spatial-reference.js.map +1 -1
  13. package/dist/spatial/get-spatial-coordinate-frame.d.ts +12 -1
  14. package/dist/spatial/get-spatial-coordinate-frame.d.ts.map +1 -1
  15. package/dist/spatial/get-spatial-coordinate-frame.js +105 -24
  16. package/dist/spatial/get-spatial-coordinate-frame.js.map +1 -1
  17. package/dist/spatial/normalize-crs-identifier.d.ts +15 -0
  18. package/dist/spatial/normalize-crs-identifier.d.ts.map +1 -0
  19. package/dist/spatial/normalize-crs-identifier.js +22 -0
  20. package/dist/spatial/normalize-crs-identifier.js.map +1 -0
  21. package/dist/spatial/spatial-coordinate-transformer.d.ts +4 -0
  22. package/dist/spatial/spatial-coordinate-transformer.d.ts.map +1 -1
  23. package/dist/spatial/spatial-coordinate-transformer.js +89 -12
  24. package/dist/spatial/spatial-coordinate-transformer.js.map +1 -1
  25. package/dist/spatial/tiles-3d-spatial-transformer.d.ts +32 -0
  26. package/dist/spatial/tiles-3d-spatial-transformer.d.ts.map +1 -0
  27. package/dist/spatial/tiles-3d-spatial-transformer.js +175 -0
  28. package/dist/spatial/tiles-3d-spatial-transformer.js.map +1 -0
  29. package/dist/tileset-3d/common/indexed-archive-tileset-source.d.ts +3 -3
  30. package/dist/tileset-3d/common/indexed-archive-tileset-source.d.ts.map +1 -1
  31. package/dist/tileset-3d/common/indexed-archive-tileset-source.js.map +1 -1
  32. package/dist/tileset-3d/common/tile-3d-contracts.d.ts +63 -0
  33. package/dist/tileset-3d/common/tile-3d-contracts.d.ts.map +1 -0
  34. package/dist/tileset-3d/common/tile-3d-contracts.js +51 -0
  35. package/dist/tileset-3d/common/tile-3d-contracts.js.map +1 -0
  36. package/dist/tileset-3d/common/tile-3d.d.ts +29 -5
  37. package/dist/tileset-3d/common/tile-3d.d.ts.map +1 -1
  38. package/dist/tileset-3d/common/tile-3d.js +151 -20
  39. package/dist/tileset-3d/common/tile-3d.js.map +1 -1
  40. package/dist/tileset-3d/common/tileset-3d.d.ts +44 -2
  41. package/dist/tileset-3d/common/tileset-3d.d.ts.map +1 -1
  42. package/dist/tileset-3d/common/tileset-3d.js +31 -1
  43. package/dist/tileset-3d/common/tileset-3d.js.map +1 -1
  44. package/dist/tileset-3d/common/tileset-observability.d.ts +60 -0
  45. package/dist/tileset-3d/common/tileset-observability.d.ts.map +1 -0
  46. package/dist/tileset-3d/common/tileset-observability.js +39 -0
  47. package/dist/tileset-3d/common/tileset-observability.js.map +1 -0
  48. package/dist/tileset-3d/common/tileset-source.d.ts +11 -8
  49. package/dist/tileset-3d/common/tileset-source.d.ts.map +1 -1
  50. package/dist/tileset-3d/common/tileset-source.js.map +1 -1
  51. package/dist/tileset-3d/common/tileset-traverser.d.ts +14 -0
  52. package/dist/tileset-3d/common/tileset-traverser.d.ts.map +1 -1
  53. package/dist/tileset-3d/common/tileset-traverser.js +21 -5
  54. package/dist/tileset-3d/common/tileset-traverser.js.map +1 -1
  55. package/dist/tileset-3d/format-3d-tiles/implicit-tiling.d.ts +47 -1
  56. package/dist/tileset-3d/format-3d-tiles/implicit-tiling.d.ts.map +1 -1
  57. package/dist/tileset-3d/format-3d-tiles/implicit-tiling.js +327 -30
  58. package/dist/tileset-3d/format-3d-tiles/implicit-tiling.js.map +1 -1
  59. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.d.ts +34 -2
  60. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.d.ts.map +1 -1
  61. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.js +265 -14
  62. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.js.map +1 -1
  63. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.d.ts +70 -3
  64. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.d.ts.map +1 -1
  65. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.js +216 -4
  66. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.js.map +1 -1
  67. package/dist/tileset-3d/format-i3s/i3s-source.d.ts +5 -3
  68. package/dist/tileset-3d/format-i3s/i3s-source.d.ts.map +1 -1
  69. package/dist/tileset-3d/format-i3s/i3s-source.js +14 -7
  70. package/dist/tileset-3d/format-i3s/i3s-source.js.map +1 -1
  71. package/dist/tileset-3d/helpers/bounding-volume.d.ts +7 -3
  72. package/dist/tileset-3d/helpers/bounding-volume.d.ts.map +1 -1
  73. package/dist/tileset-3d/helpers/bounding-volume.js +19 -61
  74. package/dist/tileset-3d/helpers/bounding-volume.js.map +1 -1
  75. package/dist/tileset-3d/helpers/frame-state.d.ts +4 -0
  76. package/dist/tileset-3d/helpers/frame-state.d.ts.map +1 -1
  77. package/dist/tileset-3d/helpers/frame-state.js +6 -1
  78. package/dist/tileset-3d/helpers/frame-state.js.map +1 -1
  79. package/dist/tileset-3d/helpers/s2-bounding-volume.d.ts +17 -0
  80. package/dist/tileset-3d/helpers/s2-bounding-volume.d.ts.map +1 -0
  81. package/dist/tileset-3d/helpers/s2-bounding-volume.js +20 -0
  82. package/dist/tileset-3d/helpers/s2-bounding-volume.js.map +1 -0
  83. package/dist/types.d.ts +2 -0
  84. package/dist/types.d.ts.map +1 -1
  85. package/package.json +14 -13
  86. package/src/index.ts +13 -1
  87. package/src/spatial/format-spatial-reference.ts +127 -53
  88. package/src/spatial/get-spatial-coordinate-frame.ts +126 -31
  89. package/src/spatial/normalize-crs-identifier.ts +26 -0
  90. package/src/spatial/spatial-coordinate-transformer.ts +106 -15
  91. package/src/spatial/tiles-3d-spatial-transformer.ts +206 -0
  92. package/src/tileset-3d/common/indexed-archive-tileset-source.ts +4 -9
  93. package/src/tileset-3d/common/tile-3d-contracts.ts +115 -0
  94. package/src/tileset-3d/common/tile-3d.ts +178 -20
  95. package/src/tileset-3d/common/tileset-3d.ts +63 -3
  96. package/src/tileset-3d/common/tileset-observability.ts +100 -0
  97. package/src/tileset-3d/common/tileset-source.ts +11 -12
  98. package/src/tileset-3d/common/tileset-traverser.ts +32 -5
  99. package/src/tileset-3d/format-3d-tiles/implicit-tiling.ts +481 -34
  100. package/src/tileset-3d/format-3d-tiles/tiles-3d-source.ts +390 -17
  101. package/src/tileset-3d/format-3d-tiles/tileset-3d-traverser.ts +243 -4
  102. package/src/tileset-3d/format-i3s/i3s-source.ts +25 -9
  103. package/src/tileset-3d/helpers/bounding-volume.ts +29 -62
  104. package/src/tileset-3d/helpers/frame-state.ts +6 -1
  105. package/src/tileset-3d/helpers/s2-bounding-volume.ts +35 -0
  106. package/src/types.ts +2 -0
@@ -1 +1 @@
1
- {"version":3,"file":"tileset-traverser.js","sourceRoot":"","sources":["../../../src/tileset-3d/common/tileset-traverser.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,YAAY,EAAC,qCAAkC;AACvD,OAAO,EAAC,eAAe,EAAC,2BAAwB;AAYhD,MAAM,CAAC,MAAM,aAAa,GAAoC;IAC5D,YAAY,EAAE,KAAK;IACnB,iBAAiB,EAAE,KAAK;IACxB,gBAAgB,EAAE,IAAI;IACtB,cAAc,EAAE,GAAG,EAAE,GAAE,CAAC;IACxB,qBAAqB,EAAE,EAAE;IACzB,QAAQ,EAAE,EAAE;CACb,CAAC;AAEF,MAAM,OAAO,gBAAgB;IAC3B,OAAO,CAAkC;IAEzC,2BAA2B;IAC3B,IAAI,GAAQ,IAAI,CAAC;IAEjB,2BAA2B;IAC3B,aAAa,GAA2B,EAAE,CAAC;IAC3C,qCAAqC;IACrC,cAAc,GAA2B,EAAE,CAAC;IAC5C,6FAA6F;IAC7F,aAAa,GAA2B,EAAE,CAAC;IAC3C,qCAAqC;IACrC,UAAU,GAA2B,EAAE,CAAC;IAE9B,UAAU,GAAW,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IACjC,kBAAkB,GAAG,IAAI,CAAC;IAC7C,uEAAuE;IAC7D,eAAe,GAAG,IAAI,YAAY,EAAE,CAAC;IACrC,oBAAoB,GAAG,IAAI,YAAY,EAAE,CAAC;IACpD,kCAAkC;IACxB,YAAY,GAAkB,IAAI,CAAC;IAE7C,SAAS;IACC,iBAAiB,CAAC,UAAsB;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oBAAoB;IACpB,YAAY,OAA8B;QACxC,IAAI,CAAC,OAAO,GAAG,EAAC,GAAG,aAAa,EAAE,GAAG,OAAO,EAAC,CAAC;IAChD,CAAC;IAED,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,8BAA8B;QAChD,IAAI,CAAC,OAAO,GAAG,EAAC,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,OAAO,EAAC,CAAC;QAE7C,eAAe;QACf,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,0CAA0C;QAC1C,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAElC,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,WAAW,CAAC;QAC3C,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK;QACH,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;IACpC,CAAC;IAED;;;;;;;;OAQG;IACH,yDAAyD;IACzD,gBAAgB,CAAC,IAAI,EAAE,UAAsB;QAC3C,8EAA8E;QAC9E,+CAA+C;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC;QACnC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;QAEzB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,cAAc;YACd,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;YAEzB,0IAA0I;YAC1I,IAAI,YAAY,GAAG,KAAK,CAAC;YACzB,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;gBACvC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBACxC,YAAY,GAAG,IAAI,CAAC,qBAAqB,CACvC,IAAI,EACJ,UAAU,EACV,KAAK,EACL,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CACxE,CAAC;YACJ,CAAC;YAED,gDAAgD;YAChD,wCAAwC;YACxC,kEAAkE;YAClE,uGAAuG;YACvG,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC;YAC/D,MAAM,eAAe,GAAG,CAAC,YAAY,CAAC;YAEtC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;gBAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAChC,IAAI,eAAe,EAAE,CAAC;oBACpB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBACpC,CAAC;gBACD,iBAAiB;YACnB,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,KAAK,eAAe,CAAC,GAAG,EAAE,CAAC;gBAC/C,gDAAgD;gBAChD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAChC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAElC,gBAAgB;YAClB,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,KAAK,eAAe,CAAC,OAAO,EAAE,CAAC;gBACnD,0CAA0C;gBAC1C,yCAAyC;gBACzC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAChC,sFAAsF;gBACtF,4EAA4E;gBAC5E,IAAI,eAAe,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;oBACtD,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;YAED,4FAA4F;YAC5F,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAEjC,6FAA6F;YAC7F,IAAI,CAAC,aAAa,GAAG,YAAY,IAAI,aAAa,CAAC;QACrD,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC9F,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;YAC1B,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,gBAAgB,CAAC,IAAY,EAAE,UAAsB;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,qBAAqB,CAAC,IAAY,EAAE,UAAsB,EAAE,KAAK,EAAE,KAAK;QACtE,MAAM,EAAC,YAAY,EAAE,iBAAiB,EAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QAEvD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE/B,sBAAsB;QACtB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEvD,iFAAiF;QACjF,iHAAiH;QACjH,MAAM,YAAY,GAChB,IAAI,CAAC,MAAM,KAAK,eAAe,CAAC,OAAO,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,iBAAiB,CAAC;QAEzF,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,IAAI,OAAO,GAAG,IAAI,CAAC;QAEnB,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC;YAC9B,IAAI,KAAK,CAAC,2BAA2B,EAAE,CAAC;gBACtC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBACtB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClB,eAAe,GAAG,IAAI,CAAC;YACzB,CAAC;iBAAM,IAAI,YAAY,IAAI,YAAY,EAAE,CAAC;gBACxC,6FAA6F;gBAC7F,yEAAyE;gBACzE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;gBACjC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACpC,CAAC;YAED,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,YAAY,CAAC;gBACjB,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;oBAC5B,YAAY,GAAG,KAAK,CAAC;gBACvB,CAAC;qBAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;oBACnC,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;gBAC/D,CAAC;qBAAM,CAAC;oBACN,YAAY,GAAG,KAAK,CAAC,gBAAgB,CAAC;gBACxC,CAAC;gBACD,OAAO,GAAG,OAAO,IAAI,YAAY,CAAC;gBAElC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,8CAA8C;IAE9C,UAAU,CAAC,IAAY,EAAE,UAAsB;QAC7C,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED,gCAAgC;IAChC,UAAU,CAAC,IAAY,EAAE,UAAsB;QAC7C,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;YAC5C,6EAA6E;YAC7E,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,WAAW,CAAC;YAC7C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;QACrC,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,QAAQ,CAAC,IAAY,EAAE,UAAsB;QAC3C,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;gBACnC,OAAO;YACT,CAAC;YACD,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,WAAW,CAAC;YAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACrC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;QACtC,CAAC;IACH,CAAC;IAED;;;;;;;;;OASG;IACH,sBAAsB,CAAC,IAAY;QACjC,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,aAAa;IACb,SAAS,CAAC,IAAY,EAAE,UAAsB;QAC5C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,WAAW,CAAC;IAC9C,CAAC;IAED,yBAAyB;IACzB,4BAA4B;IAC5B,sEAAsE;IACtE,WAAW,CAAC,IAAY,EAAE,UAAsB;QAC9C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,kBAAkB;QAClB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,gDAAgD;YAChD,wEAAwE;YACxE,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC;QAC9B,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC7C,CAAC;IAED,cAAc,CAAC,IAAY;QACzB,sCAAsC;QACtC,mCAAmC;QACnC,OAAO,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,cAAc,CAAC;IACxD,CAAC;IAED;;;;OAIG;IACH,gBAAgB,CAAC,IAAY,EAAE,UAAsB;QACnD,OAAO,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC;IACnF,CAAC;IAED,oFAAoF;IACpF,YAAY,CAAC,IAAY,EAAE,UAAsB,EAAE,kBAA2B,KAAK;QACjF,IAAI,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAC9C,IAAI,eAAe,EAAE,CAAC;YACpB,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAChE,CAAC;QAED,OAAO,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,8BAA8B,CAAC;IACxE,CAAC;IAED,oBAAoB,CAAC,IAAY,EAAE,UAAsB;QACvD,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;YACvC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;gBACrD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;gBACtD,IAAI,KAAK,KAAK,UAAU,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACrC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACjD,CAAC;IAED,YAAY;IAEZ,uBAAuB,CAAC,CAAS,EAAE,CAAS;QAC1C,OAAO,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,iBAAiB,CAAC;IACnD,CAAC;IAED,kBAAkB,CAAC,IAAY,EAAE,UAAsB;QACrD,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,mBAAmB;YACnB,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;YACnC,mBAAmB;YACnB,UAAU,GAAG,UAAU,IAAI,KAAK,CAAC,2BAA2B,CAAC;QAC/D,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,wFAAwF;IACxF,sBAAsB;IACtB,qBAAqB,CAAC,IAAY,EAAE,UAAsB;QACxD,IAAI,oBAAoB,GAAG,IAAI,CAAC;QAChC,IAAI,sBAAsB,GAAG,KAAK,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;YAEzB,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC9E,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;YACvE,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;gBAChC,0FAA0F;gBAC1F,0FAA0F;gBAC1F,sBAAsB,GAAG,IAAI,CAAC;gBAC9B,oBAAoB,GAAG,KAAK,CAAC;YAC/B,CAAC;YAED,yDAAyD;YACzD,qFAAqF;YACrF,qFAAqF;YACrF,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,SAAS,EAAE,CAAC;gBACtD,oBAAoB,GAAG,KAAK,CAAC;YAC/B,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAElC,IAAI,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC;gBACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAChC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACnC,CAAC;YAED,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAC/B,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;oBAC7B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,sBAAsB,CAAC,IAAI,oBAAoB,CAAC;IACnF,CAAC;CACF"}
1
+ {"version":3,"file":"tileset-traverser.js","sourceRoot":"","sources":["../../../src/tileset-3d/common/tileset-traverser.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,8 @@ export type ImplicitTilingDescriptor = {
20
20
  contentHeader?: Record<string, any>;
21
21
  /** Metadata inherited by every implicit content stream, in source order. */
22
22
  contentHeaders?: Array<Record<string, any>>;
23
+ /** Whether generated headers preserve the standard `contents` source representation. */
24
+ useCanonicalContents?: boolean;
23
25
  /** Absolute template URL for subtree availability files. */
24
26
  subtreesUrlTemplate: string;
25
27
  /** Spatial subdivision used by the hierarchy. */
@@ -36,6 +38,26 @@ export type ImplicitTilingDescriptor = {
36
38
  rootLodMetricValue: number;
37
39
  /** Bounding volume of the complete implicit hierarchy. */
38
40
  rootBoundingVolume: Record<string, any>;
41
+ /** Whether runtime transforms scale geometric error; false for draft 2.0. */
42
+ scaleGeometricError?: boolean;
43
+ /** Package files that may satisfy concrete content and subtree template references. */
44
+ resourceFiles?: ImplicitPackageFile[];
45
+ };
46
+ /** Structured-cloneable file retained from a draft glTF package. */
47
+ export type ImplicitPackageFile = {
48
+ name?: string;
49
+ mimeType: string;
50
+ uri?: string;
51
+ originalUri?: string;
52
+ data?: ArrayBuffer;
53
+ byteOffset: number;
54
+ byteLength: number;
55
+ bufferUri?: string;
56
+ };
57
+ /** Package reference attached to a generated content or subtree URL. */
58
+ export type ImplicitPackageResource = {
59
+ fileIndex: number;
60
+ files: ImplicitPackageFile[];
39
61
  };
40
62
  /** Lazy pointer from a runtime tile to the subtree that defines it and its descendants. */
41
63
  export type ImplicitSubtreeReference = {
@@ -45,6 +67,8 @@ export type ImplicitSubtreeReference = {
45
67
  subtreeUrl: string;
46
68
  /** Serializable hierarchy description used to materialize the subtree. */
47
69
  descriptor: ImplicitTilingDescriptor;
70
+ /** Embedded package resource matching {@link subtreeUrl}, when available. */
71
+ resource?: ImplicitPackageResource;
48
72
  };
49
73
  /** Constant or bitstream-backed availability declaration from a parsed subtree. */
50
74
  export type ImplicitAvailability = {
@@ -72,6 +96,24 @@ export type ParsedImplicitSubtree = {
72
96
  contentMetadata?: unknown;
73
97
  /** Metadata entity attached to the subtree itself. */
74
98
  subtreeMetadata?: unknown;
99
+ /** Decoded standard attribute accessors keyed by tile semantic. */
100
+ tileAttributes?: Record<string, ArrayLike<number>>;
101
+ /** Decoded standard attribute accessors keyed by content semantic. */
102
+ contentAttributes?: Record<string, ArrayLike<number>>;
103
+ /** Index of the property table assigned to available tiles. */
104
+ tileProperties?: unknown;
105
+ /** Index of the property table assigned to available contents. */
106
+ contentProperties?: unknown;
107
+ /** Fully decoded property rows for available tiles, in availability order. */
108
+ tilePropertyRows?: Array<Record<string, unknown>>;
109
+ /** Fully decoded property rows for available contents, in availability order. */
110
+ contentPropertyRows?: Array<Record<string, unknown>>;
111
+ /** Tile property rows filtered to values permitted in URI templates. */
112
+ tileTemplatePropertyRows?: Array<Record<string, unknown>>;
113
+ /** Content property rows filtered to values permitted in URI templates. */
114
+ contentTemplatePropertyRows?: Array<Record<string, unknown>>;
115
+ /** Files retained by a glTF subtree package for later content/subtree resolution. */
116
+ resourceFiles?: ImplicitPackageFile[];
75
117
  };
76
118
  /** Runtime header produced for an available implicit tile. */
77
119
  export type ImplicitTileHeader = Record<string, any> & {
@@ -94,6 +136,10 @@ export type ImplicitSubtreeMetadata = {
94
136
  contentMetadata?: unknown;
95
137
  /** Subtree-level metadata entity. */
96
138
  subtreeMetadata?: unknown;
139
+ /** Decoded property-table row for this tile. */
140
+ tileProperties?: Record<string, unknown>;
141
+ /** Decoded property-table row for this tile's available content. */
142
+ contentProperties?: Record<string, unknown>;
97
143
  };
98
144
  /** Result of materializing exactly one subtree resource. */
99
145
  export type MaterializedImplicitSubtree = {
@@ -132,5 +178,5 @@ export declare function materializeImplicitSubtree(subtree: ParsedImplicitSubtre
132
178
  * @param coordinates - Global coordinates to insert.
133
179
  * @returns URL with all coordinate placeholders replaced.
134
180
  */
135
- export declare function replaceImplicitUrlTemplate(templateUrl: string, coordinates: ImplicitTileCoordinates): string;
181
+ export declare function replaceImplicitUrlTemplate(templateUrl: string, coordinates: ImplicitTileCoordinates, properties?: Record<string, unknown>): string;
136
182
  //# sourceMappingURL=implicit-tiling.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"implicit-tiling.d.ts","sourceRoot":"","sources":["../../../src/tileset-3d/format-3d-tiles/implicit-tiling.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"implicit-tiling.d.ts","sourceRoot":"","sources":["../../../src/tileset-3d/format-3d-tiles/implicit-tiling.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,15 @@
1
1
  // loaders.gl
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright vis.gl contributors
4
- import { TILE_TYPE } from "../../constants.js";
4
+ import { TILE_REFINEMENT, TILE_TYPE } from "../../constants.js";
5
+ // TypeScript's legacy `node` resolution does not inspect package `exports`, but this public
6
+ // subpath is resolved by the package at runtime and avoids loading unrelated DGGS decoders.
7
+ // @ts-expect-error Conditional package subpath exports require a modern module resolver.
8
+ import { getS2DescendantIndex, getS2IndexFromToken, getS2TokenFromIndex } from '@math.gl/dggs/s2';
9
+ import { convertS2BoundingVolumeToOBB } from "../helpers/s2-bounding-volume.js";
5
10
  const QUADTREE_CHILD_COUNT = 4;
6
11
  const OCTREE_CHILD_COUNT = 8;
12
+ const AVAILABILITY_RANK_CACHE = new WeakMap();
7
13
  /**
8
14
  * Creates the lazy reference stored on an implicit subtree-root header.
9
15
  *
@@ -15,7 +21,8 @@ export function createImplicitSubtreeReference(descriptor, coordinates) {
15
21
  return {
16
22
  coordinates,
17
23
  subtreeUrl: replaceImplicitUrlTemplate(descriptor.subtreesUrlTemplate, coordinates),
18
- descriptor
24
+ descriptor,
25
+ resource: findImplicitPackageResource(descriptor.resourceFiles, replaceImplicitUrlTemplate(descriptor.subtreesUrlTemplate, coordinates))
19
26
  };
20
27
  }
21
28
  /**
@@ -33,6 +40,7 @@ export function createImplicitSubtreeReference(descriptor, coordinates) {
33
40
  export function materializeImplicitSubtree(subtree, reference) {
34
41
  const { descriptor } = reference;
35
42
  validateImplicitDescriptor(descriptor);
43
+ validateImplicitSubtree(subtree, descriptor);
36
44
  const counters = { tileCount: 0, childSubtreeCount: 0 };
37
45
  const root = materializeAvailableTile(subtree, reference, { localLevel: 0, mortonIndex: 0 }, reference.coordinates, counters);
38
46
  if (!root) {
@@ -40,6 +48,78 @@ export function materializeImplicitSubtree(subtree, reference) {
40
48
  }
41
49
  return { root, ...counters };
42
50
  }
51
+ /** Validates availability lengths and tightly packed draft attribute/property row counts. */
52
+ function validateImplicitSubtree(subtree, descriptor) {
53
+ const childCount = getImplicitChildCount(descriptor.subdivisionScheme);
54
+ const tileElementCount = (childCount ** descriptor.subtreeLevels - 1) / (childCount - 1);
55
+ const childSubtreeElementCount = childCount ** descriptor.subtreeLevels;
56
+ validateAvailabilityLength(subtree.tileAvailability, tileElementCount, 'tile');
57
+ const contentAvailabilityStreams = Array.isArray(subtree.contentAvailability)
58
+ ? subtree.contentAvailability
59
+ : subtree.contentAvailability
60
+ ? [subtree.contentAvailability]
61
+ : [];
62
+ for (const contentAvailability of contentAvailabilityStreams) {
63
+ validateAvailabilityLength(contentAvailability, tileElementCount, 'content');
64
+ }
65
+ validateAvailabilityLength(subtree.childSubtreeAvailability, childSubtreeElementCount, 'child subtree');
66
+ const availableTileCount = countAvailableElements(subtree.tileAvailability, tileElementCount);
67
+ const availableContentCount = contentAvailabilityStreams[0]
68
+ ? countAvailableElements(contentAvailabilityStreams[0], tileElementCount)
69
+ : 0;
70
+ validateAttributeLengths(subtree.tileAttributes, availableTileCount, 'tile');
71
+ validateAttributeLengths(subtree.contentAttributes, availableContentCount, 'content');
72
+ if (subtree.tilePropertyRows && subtree.tilePropertyRows.length !== availableTileCount) {
73
+ throw new Error('3DTILES_subtree: tile property-table count does not match availability');
74
+ }
75
+ if (subtree.contentPropertyRows && subtree.contentPropertyRows.length !== availableContentCount) {
76
+ throw new Error('3DTILES_subtree: content property-table count does not match availability');
77
+ }
78
+ }
79
+ /** Verifies that a bitstream contains every bit required by its implicit subtree. */
80
+ function validateAvailabilityLength(availability, elementCount, label) {
81
+ if (availability.constant === 0 || availability.constant === 1) {
82
+ return;
83
+ }
84
+ if (!availability.explicitBitstream ||
85
+ availability.explicitBitstream.byteLength * 8 < elementCount) {
86
+ throw new Error(`3DTILES_subtree: ${label} availability bitstream is too short`);
87
+ }
88
+ }
89
+ /** Counts available elements within the meaningful, unpadded part of an availability stream. */
90
+ function countAvailableElements(availability, elementCount) {
91
+ if (availability.constant === 1) {
92
+ return elementCount;
93
+ }
94
+ if (availability.constant === 0) {
95
+ return 0;
96
+ }
97
+ let availableCount = 0;
98
+ for (let index = 0; index < elementCount; index++) {
99
+ if (getAvailabilityValue(availability, index)) {
100
+ availableCount++;
101
+ }
102
+ }
103
+ return availableCount;
104
+ }
105
+ /** Validates standard subtree attribute accessor counts after availability expansion. */
106
+ function validateAttributeLengths(attributes, availableCount, label) {
107
+ const componentCounts = {
108
+ TILE_BOUNDING_BOX: 16,
109
+ TILE_BOUNDING_SPHERE: 4,
110
+ TILE_GEOMETRIC_ERROR: 1,
111
+ TILE_REFINE: 1,
112
+ TILE_TRANSFORM: 16,
113
+ CONTENT_BOUNDING_BOX: 16,
114
+ CONTENT_BOUNDING_SPHERE: 4
115
+ };
116
+ for (const [semantic, values] of Object.entries(attributes || {})) {
117
+ const componentCount = componentCounts[semantic];
118
+ if (componentCount && values.length !== availableCount * componentCount) {
119
+ throw new Error(`3DTILES_subtree: ${label} attribute ${semantic} count does not match availability`);
120
+ }
121
+ }
122
+ }
43
123
  /**
44
124
  * Replaces implicit coordinate placeholders in a content or subtree URL.
45
125
  *
@@ -47,14 +127,20 @@ export function materializeImplicitSubtree(subtree, reference) {
47
127
  * @param coordinates - Global coordinates to insert.
48
128
  * @returns URL with all coordinate placeholders replaced.
49
129
  */
50
- export function replaceImplicitUrlTemplate(templateUrl, coordinates) {
130
+ export function replaceImplicitUrlTemplate(templateUrl, coordinates, properties = {}) {
51
131
  const values = {
52
132
  level: coordinates.level,
53
133
  x: coordinates.x,
54
134
  y: coordinates.y,
55
- z: coordinates.z
135
+ z: coordinates.z,
136
+ ...properties
56
137
  };
57
- return templateUrl.replace(/{(level|x|y|z)}/gi, (_match, coordinateName) => String(values[coordinateName.toLowerCase()]));
138
+ return templateUrl.replace(/{([^{}]+)}/g, (match, propertyName) => {
139
+ const value = Object.hasOwn(values, propertyName)
140
+ ? values[propertyName]
141
+ : values[propertyName.toLowerCase()];
142
+ return value === undefined ? match : String(value);
143
+ });
58
144
  }
59
145
  /**
60
146
  * Builds one available tile and recursively materializes descendants in the same subtree.
@@ -100,7 +186,7 @@ function materializeAvailableTile(subtree, reference, localCoordinates, globalCo
100
186
  }
101
187
  }
102
188
  }
103
- return formatImplicitTileHeader(subtree, descriptor, reference, globalCoordinates, contentAvailability, children);
189
+ return formatImplicitTileHeader(subtree, descriptor, reference, globalCoordinates, availabilityIndex, contentAvailability, children);
104
190
  }
105
191
  /**
106
192
  * Creates a contentless placeholder for an available child subtree.
@@ -110,7 +196,9 @@ function materializeAvailableTile(subtree, reference, localCoordinates, globalCo
110
196
  * @returns Header that participates in culling and SSE before its subtree is requested.
111
197
  */
112
198
  function createLazyImplicitTileHeader(subtree, descriptor, coordinates) {
113
- const reference = createImplicitSubtreeReference(descriptor, coordinates);
199
+ const resourceFiles = mergeImplicitPackageFiles(descriptor.resourceFiles, subtree.resourceFiles);
200
+ const childDescriptor = resourceFiles ? { ...descriptor, resourceFiles } : descriptor;
201
+ const reference = createImplicitSubtreeReference(childDescriptor, coordinates);
114
202
  return {
115
203
  id: getImplicitTileId(reference, coordinates),
116
204
  children: [],
@@ -121,9 +209,126 @@ function createLazyImplicitTileHeader(subtree, descriptor, coordinates) {
121
209
  lodMetricValue: descriptor.rootLodMetricValue / 2 ** coordinates.level,
122
210
  refine: descriptor.refine,
123
211
  type: TILE_TYPE.EMPTY,
124
- implicitMetadata: getImplicitSubtreeMetadata(subtree)
212
+ implicitMetadata: getImplicitSubtreeMetadata(subtree),
213
+ _scaleGeometricError: descriptor.scaleGeometricError !== false
125
214
  };
126
215
  }
216
+ /** Decodes supported standard subtree attributes for one tightly packed available row. */
217
+ function getSubtreeAttributeOverrides(attributes, rowIndex, scope) {
218
+ if (!attributes || rowIndex < 0) {
219
+ return {};
220
+ }
221
+ const box = getAttributeComponents(attributes[scope === 'tile' ? 'TILE_BOUNDING_BOX' : 'CONTENT_BOUNDING_BOX'], rowIndex, 16);
222
+ const sphere = getAttributeComponents(attributes[scope === 'tile' ? 'TILE_BOUNDING_SPHERE' : 'CONTENT_BOUNDING_SPHERE'], rowIndex, 4);
223
+ const boundingVolume = box
224
+ ? {
225
+ box: [
226
+ box[12],
227
+ box[13],
228
+ box[14],
229
+ box[0] / 2,
230
+ box[1] / 2,
231
+ box[2] / 2,
232
+ box[4] / 2,
233
+ box[5] / 2,
234
+ box[6] / 2,
235
+ box[8] / 2,
236
+ box[9] / 2,
237
+ box[10] / 2
238
+ ]
239
+ }
240
+ : sphere
241
+ ? { sphere }
242
+ : undefined;
243
+ if (scope === 'content') {
244
+ return { boundingVolume };
245
+ }
246
+ const geometricError = getAttributeComponents(attributes.TILE_GEOMETRIC_ERROR, rowIndex, 1)?.[0];
247
+ if (geometricError !== undefined && (!Number.isFinite(geometricError) || geometricError < 0)) {
248
+ throw new Error('3DTILES_subtree: TILE_GEOMETRIC_ERROR must be nonnegative');
249
+ }
250
+ const refineValue = getAttributeComponents(attributes.TILE_REFINE, rowIndex, 1)?.[0];
251
+ if (refineValue !== undefined && refineValue !== 0 && refineValue !== 1) {
252
+ throw new Error('3DTILES_subtree: TILE_REFINE must be 0 or 1');
253
+ }
254
+ return {
255
+ boundingVolume,
256
+ geometricError,
257
+ refine: refineValue === undefined
258
+ ? undefined
259
+ : refineValue === 0
260
+ ? TILE_REFINEMENT.ADD
261
+ : TILE_REFINEMENT.REPLACE,
262
+ transform: getAttributeComponents(attributes.TILE_TRANSFORM, rowIndex, 16)
263
+ };
264
+ }
265
+ /** Copies one logical accessor element and validates its available-row count. */
266
+ function getAttributeComponents(values, rowIndex, componentCount) {
267
+ if (!values) {
268
+ return undefined;
269
+ }
270
+ const offset = rowIndex * componentCount;
271
+ if (offset + componentCount > values.length) {
272
+ throw new Error('3DTILES_subtree: attribute accessor is shorter than availability');
273
+ }
274
+ return Array.from({ length: componentCount }, (_unused, componentIndex) => Number(values[offset + componentIndex]));
275
+ }
276
+ /** Returns the tightly packed property/attribute row index for an available element. */
277
+ function getAvailabilityRank(availability, index) {
278
+ if (availability.constant === 1) {
279
+ return index;
280
+ }
281
+ if (availability.constant === 0) {
282
+ return 0;
283
+ }
284
+ let ranks = AVAILABILITY_RANK_CACHE.get(availability);
285
+ if (!ranks) {
286
+ const bitCount = (availability.explicitBitstream?.byteLength || 0) * 8;
287
+ ranks = new Uint32Array(bitCount + 1);
288
+ for (let candidateIndex = 0; candidateIndex < bitCount; candidateIndex++) {
289
+ ranks[candidateIndex + 1] =
290
+ ranks[candidateIndex] + Number(getAvailabilityValue(availability, candidateIndex));
291
+ }
292
+ AVAILABILITY_RANK_CACHE.set(availability, ranks);
293
+ }
294
+ return ranks[index];
295
+ }
296
+ /** Locates a concrete generated URI in a retained glTF package. */
297
+ function findImplicitPackageResource(files, resourceUrl) {
298
+ if (!files?.length) {
299
+ return undefined;
300
+ }
301
+ const urlWithoutQuery = resourceUrl.split('?')[0];
302
+ const packageRelativePath = /^gltf-package:\/\/[^/]+\/(.*)$/.exec(urlWithoutQuery)?.[1];
303
+ const exactFileIndex = files.findIndex(file => {
304
+ const reference = file.originalUri || file.name;
305
+ return (file.uri === urlWithoutQuery ||
306
+ Boolean(reference && (urlWithoutQuery === reference || packageRelativePath === reference)));
307
+ });
308
+ if (exactFileIndex >= 0) {
309
+ return { fileIndex: exactFileIndex, files };
310
+ }
311
+ const fileIndex = files.findIndex(file => {
312
+ const reference = file.originalUri || file.name;
313
+ return Boolean(reference &&
314
+ (urlWithoutQuery.endsWith(`/${reference}`) || urlWithoutQuery.endsWith(`:${reference}`)));
315
+ });
316
+ return fileIndex < 0 ? undefined : { fileIndex, files };
317
+ }
318
+ /** Layers files declared by a child package over inherited parent-package files. */
319
+ function mergeImplicitPackageFiles(parentFiles, childFiles) {
320
+ if (!childFiles?.length) {
321
+ return parentFiles;
322
+ }
323
+ if (!parentFiles?.length) {
324
+ return childFiles;
325
+ }
326
+ const childReferences = new Set(childFiles.flatMap(file => [file.uri, file.originalUri, file.name].filter(Boolean)));
327
+ return [
328
+ ...childFiles,
329
+ ...parentFiles.filter(file => ![file.uri, file.originalUri, file.name].some(reference => reference && childReferences.has(reference)))
330
+ ];
331
+ }
127
332
  /**
128
333
  * Formats an available implicit tile as a runtime header.
129
334
  *
@@ -134,7 +339,22 @@ function createLazyImplicitTileHeader(subtree, descriptor, coordinates) {
134
339
  * @param children - Materialized or lazy child headers.
135
340
  * @returns Runtime tile header.
136
341
  */
137
- function formatImplicitTileHeader(subtree, descriptor, reference, coordinates, contentAvailability, children) {
342
+ function formatImplicitTileHeader(subtree, descriptor, reference, coordinates, availabilityIndex, contentAvailability, children) {
343
+ const tilePropertyIndex = getAvailabilityRank(subtree.tileAvailability, availabilityIndex);
344
+ const tileProperties = subtree.tilePropertyRows?.[tilePropertyIndex];
345
+ const primaryContentAvailability = Array.isArray(subtree.contentAvailability)
346
+ ? subtree.contentAvailability[0]
347
+ : subtree.contentAvailability;
348
+ const contentPropertyIndex = primaryContentAvailability &&
349
+ getAvailabilityValue(primaryContentAvailability, availabilityIndex)
350
+ ? getAvailabilityRank(primaryContentAvailability, availabilityIndex)
351
+ : -1;
352
+ const contentProperties = subtree.contentPropertyRows?.[contentPropertyIndex];
353
+ const tileTemplateProperties = subtree.tileTemplatePropertyRows?.[tilePropertyIndex] || tileProperties;
354
+ const contentTemplateProperties = subtree.contentTemplatePropertyRows?.[contentPropertyIndex] || contentProperties;
355
+ const templateProperties = { ...tileTemplateProperties, ...contentTemplateProperties };
356
+ const tileAttributes = getSubtreeAttributeOverrides(subtree.tileAttributes, tilePropertyIndex, 'tile');
357
+ const contentAttributes = getSubtreeAttributeOverrides(subtree.contentAttributes, contentPropertyIndex, 'content');
138
358
  const contentUrlTemplates = descriptor.contentUrlTemplates?.length
139
359
  ? descriptor.contentUrlTemplates
140
360
  : [descriptor.contentUrlTemplate];
@@ -143,34 +363,52 @@ function formatImplicitTileHeader(subtree, descriptor, reference, coordinates, c
143
363
  if (!contentAvailability[contentIndex] || !templateUrl) {
144
364
  return null;
145
365
  }
366
+ const contentUrl = replaceImplicitUrlTemplate(templateUrl, coordinates, templateProperties);
367
+ if (/{[^{}]+}/.test(contentUrl)) {
368
+ throw new Error(`Implicit content URI has unresolved template values: ${contentUrl}`);
369
+ }
146
370
  return {
147
371
  contentIndex,
148
- contentUrl: replaceImplicitUrlTemplate(templateUrl, coordinates)
372
+ contentUrl
149
373
  };
150
374
  })
151
375
  .filter((entry) => Boolean(entry));
152
376
  const availableContentUrls = contentEntries.map(entry => entry.contentUrl);
153
- const content = contentEntries.map(({ contentIndex, contentUrl }) => ({
154
- ...(descriptor.contentHeaders?.[contentIndex] ||
155
- (contentIndex === 0 ? descriptor.contentHeader : {}) ||
156
- {}),
157
- uri: contentUrl
158
- }));
377
+ const resourceFiles = mergeImplicitPackageFiles(descriptor.resourceFiles, subtree.resourceFiles);
378
+ const content = contentEntries.map(({ contentIndex, contentUrl }) => {
379
+ const packageResource = findImplicitPackageResource(resourceFiles, contentUrl);
380
+ return {
381
+ ...(descriptor.contentHeaders?.[contentIndex] ||
382
+ (contentIndex === 0 ? descriptor.contentHeader : {}) ||
383
+ {}),
384
+ ...contentAttributes,
385
+ uri: contentUrl,
386
+ ...(contentProperties ? { metadata: { properties: contentProperties } } : {}),
387
+ ...(packageResource ? { _resource: packageResource } : {})
388
+ };
389
+ });
159
390
  const contentUrl = availableContentUrls[0];
160
- const lodMetricValue = descriptor.rootLodMetricValue / 2 ** coordinates.level;
391
+ const computedLodMetricValue = descriptor.rootLodMetricValue / 2 ** coordinates.level;
392
+ const lodMetricValue = tileAttributes.geometricError ?? computedLodMetricValue;
393
+ const computedBoundingVolume = calculateImplicitBoundingVolume(descriptor.rootBoundingVolume, coordinates, descriptor.subdivisionScheme);
161
394
  return {
162
395
  id: getImplicitTileId(reference, coordinates),
163
396
  children,
164
397
  contentUrl,
165
398
  content: content.length > 1 ? content : content[0],
399
+ contents: descriptor.useCanonicalContents && content.length ? content : undefined,
166
400
  contentUrls: availableContentUrls,
167
- refine: descriptor.refine,
401
+ refine: tileAttributes.refine || descriptor.refine,
168
402
  type: getImplicitTileType(contentUrl),
169
403
  lodMetricType: descriptor.lodMetricType,
170
404
  lodMetricValue,
171
405
  geometricError: lodMetricValue,
172
- boundingVolume: calculateImplicitBoundingVolume(descriptor.rootBoundingVolume, coordinates, descriptor.subdivisionScheme),
173
- implicitMetadata: getImplicitSubtreeMetadata(subtree)
406
+ boundingVolume: tileAttributes.boundingVolume || computedBoundingVolume,
407
+ transform: tileAttributes.transform,
408
+ transformMatrix: tileAttributes.transform,
409
+ metadata: tileProperties ? { properties: tileProperties } : undefined,
410
+ implicitMetadata: getImplicitSubtreeMetadata(subtree, tileProperties, contentProperties),
411
+ _scaleGeometricError: descriptor.scaleGeometricError !== false
174
412
  };
175
413
  }
176
414
  /**
@@ -182,18 +420,22 @@ function formatImplicitTileHeader(subtree, descriptor, reference, coordinates, c
182
420
  * @param subtree - Parsed subtree containing optional metadata declarations.
183
421
  * @returns Metadata references, or `undefined` when the subtree declares none.
184
422
  */
185
- function getImplicitSubtreeMetadata(subtree) {
423
+ function getImplicitSubtreeMetadata(subtree, tileProperties, contentProperties) {
186
424
  if (!subtree.propertyTables &&
187
425
  subtree.tileMetadata === undefined &&
188
426
  !subtree.contentMetadata &&
189
- subtree.subtreeMetadata === undefined) {
427
+ subtree.subtreeMetadata === undefined &&
428
+ !tileProperties &&
429
+ !contentProperties) {
190
430
  return undefined;
191
431
  }
192
432
  return {
193
433
  propertyTables: subtree.propertyTables,
194
434
  tileMetadata: subtree.tileMetadata,
195
435
  contentMetadata: subtree.contentMetadata,
196
- subtreeMetadata: subtree.subtreeMetadata
436
+ subtreeMetadata: subtree.subtreeMetadata,
437
+ tileProperties,
438
+ contentProperties
197
439
  };
198
440
  }
199
441
  /**
@@ -274,9 +516,8 @@ function getImplicitChildCount(subdivisionScheme) {
274
516
  * Calculates the bounding volume for global implicit coordinates.
275
517
  *
276
518
  * Region volumes are divided in longitude/latitude and, for octrees, height. Oriented boxes are
277
- * divided along their half-axis vectors. S2-derived boxes retain the root box conservatively: the
278
- * lower-level tiles module intentionally does not duplicate the S2 geometry implementation owned
279
- * by `@loaders.gl/3d-tiles`, and a conservative volume avoids incorrect culling.
519
+ * divided along their half-axis vectors. S2 roots use math.gl's Hilbert-aware descendant indexing
520
+ * to produce the exact child token and a corresponding geospatial oriented box.
280
521
  *
281
522
  * @param rootBoundingVolume - Bounding volume of the complete implicit hierarchy.
282
523
  * @param coordinates - Global tile coordinates.
@@ -287,9 +528,11 @@ function calculateImplicitBoundingVolume(rootBoundingVolume, coordinates, subdiv
287
528
  if (rootBoundingVolume.region) {
288
529
  const [west, south, east, north, minimumHeight, maximumHeight] = rootBoundingVolume.region;
289
530
  const divisionCount = 2 ** coordinates.level;
290
- const longitudeSize = (east - west) / divisionCount;
531
+ const longitudeSpan = east >= west ? east - west : east + 2 * Math.PI - west;
532
+ const longitudeSize = longitudeSpan / divisionCount;
291
533
  const latitudeSize = (north - south) / divisionCount;
292
- const childWest = west + longitudeSize * coordinates.x;
534
+ const childWest = normalizeRegionLongitude(west + longitudeSize * coordinates.x);
535
+ const childEast = normalizeRegionLongitude(west + longitudeSize * (coordinates.x + 1));
293
536
  const childSouth = south + latitudeSize * coordinates.y;
294
537
  let childMinimumHeight = minimumHeight;
295
538
  let childMaximumHeight = maximumHeight;
@@ -302,7 +545,7 @@ function calculateImplicitBoundingVolume(rootBoundingVolume, coordinates, subdiv
302
545
  region: [
303
546
  childWest,
304
547
  childSouth,
305
- childWest + longitudeSize,
548
+ childEast,
306
549
  childSouth + latitudeSize,
307
550
  childMinimumHeight,
308
551
  childMaximumHeight
@@ -311,7 +554,13 @@ function calculateImplicitBoundingVolume(rootBoundingVolume, coordinates, subdiv
311
554
  }
312
555
  if (rootBoundingVolume.box) {
313
556
  if (rootBoundingVolume.s2VolumeInfo) {
314
- return { box: [...rootBoundingVolume.box], s2VolumeInfo: rootBoundingVolume.s2VolumeInfo };
557
+ return calculateS2ImplicitBoundingVolume(rootBoundingVolume, coordinates, subdivisionScheme);
558
+ }
559
+ if (rootBoundingVolume.extensions?.['3DTILES_shape_cylinder_region']) {
560
+ return {
561
+ ...rootBoundingVolume,
562
+ box: [...rootBoundingVolume.box]
563
+ };
315
564
  }
316
565
  const box = rootBoundingVolume.box;
317
566
  const divisionCount = 2 ** coordinates.level;
@@ -341,6 +590,54 @@ function calculateImplicitBoundingVolume(rootBoundingVolume, coordinates, subdiv
341
590
  }
342
591
  throw new Error(`Unsupported implicit 3D Tiles bounding volume: ${JSON.stringify(rootBoundingVolume)}`);
343
592
  }
593
+ /**
594
+ * Calculates an implicit descendant of an S2 root using math.gl's canonical Hilbert hierarchy.
595
+ *
596
+ * @param rootBoundingVolume - Normalized S2 root volume.
597
+ * @param coordinates - Global implicit tile coordinates.
598
+ * @param subdivisionScheme - Quadtree or octree subdivision.
599
+ * @returns Child volume with updated S2 metadata and oriented box.
600
+ */
601
+ function calculateS2ImplicitBoundingVolume(rootBoundingVolume, coordinates, subdivisionScheme) {
602
+ const rootS2VolumeInfo = rootBoundingVolume.s2VolumeInfo;
603
+ const rootIndex = getS2IndexFromToken(rootS2VolumeInfo.token);
604
+ const descendantIndex = getS2DescendantIndex(rootIndex, coordinates.level, coordinates.x, coordinates.y);
605
+ const divisionCount = 2 ** coordinates.level;
606
+ const heightSize = (rootS2VolumeInfo.maximumHeight - rootS2VolumeInfo.minimumHeight) / divisionCount;
607
+ const childS2VolumeInfo = {
608
+ token: getS2TokenFromIndex(descendantIndex),
609
+ minimumHeight: rootS2VolumeInfo.minimumHeight +
610
+ (subdivisionScheme === 'OCTREE' ? heightSize * coordinates.z : 0),
611
+ maximumHeight: rootS2VolumeInfo.minimumHeight +
612
+ (subdivisionScheme === 'OCTREE'
613
+ ? heightSize * (coordinates.z + 1)
614
+ : heightSize * divisionCount)
615
+ };
616
+ const extensions = rootBoundingVolume.extensions ? { ...rootBoundingVolume.extensions } : undefined;
617
+ if (extensions?.['3DTILES_bounding_volume_S2']) {
618
+ extensions['3DTILES_bounding_volume_S2'] = childS2VolumeInfo;
619
+ }
620
+ if (extensions?.['3DTILES_shape_s2']) {
621
+ extensions['3DTILES_shape_s2'] = childS2VolumeInfo;
622
+ }
623
+ return {
624
+ ...rootBoundingVolume,
625
+ ...(extensions ? { extensions } : {}),
626
+ s2VolumeInfo: childS2VolumeInfo,
627
+ box: convertS2BoundingVolumeToOBB(childS2VolumeInfo)
628
+ };
629
+ }
630
+ /** Normalize a longitude while preserving the positive pi boundary for non-wrapped regions. */
631
+ function normalizeRegionLongitude(longitude) {
632
+ let normalizedLongitude = longitude;
633
+ while (normalizedLongitude > Math.PI) {
634
+ normalizedLongitude -= 2 * Math.PI;
635
+ }
636
+ while (normalizedLongitude < -Math.PI) {
637
+ normalizedLongitude += 2 * Math.PI;
638
+ }
639
+ return normalizedLongitude;
640
+ }
344
641
  /**
345
642
  * Detects the runtime tile category from an available content URL.
346
643
  *