@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
@@ -10,6 +10,14 @@ import {FrameState} from '../helpers/frame-state';
10
10
  export type TilesetTraverserProps = {
11
11
  loadSiblings?: boolean;
12
12
  skipLevelOfDetail?: boolean;
13
+ /** SSE above which tiles remain part of the non-skipping base traversal. */
14
+ baseScreenSpaceError?: number;
15
+ /** Required SSE reduction from the nearest requested or loaded ancestor before loading a tile. */
16
+ skipScreenSpaceErrorFactor?: number;
17
+ /** Minimum hierarchy levels between requested tiles during skip-LOD traversal. */
18
+ skipLevels?: number;
19
+ /** Requests only final tiles that meet the active SSE target when skip-LOD is enabled. */
20
+ immediatelyLoadDesiredLevelOfDetail?: boolean;
13
21
  updateTransforms?: boolean;
14
22
  onTraversalEnd?: (frameState) => any;
15
23
  viewportTraversersMap?: Record<string, any>;
@@ -19,6 +27,10 @@ export type TilesetTraverserProps = {
19
27
  export const DEFAULT_PROPS: Required<TilesetTraverserProps> = {
20
28
  loadSiblings: false,
21
29
  skipLevelOfDetail: false,
30
+ baseScreenSpaceError: 1024,
31
+ skipScreenSpaceErrorFactor: 16,
32
+ skipLevels: 1,
33
+ immediatelyLoadDesiredLevelOfDetail: false,
22
34
  updateTransforms: true,
23
35
  onTraversalEnd: () => {},
24
36
  viewportTraversersMap: {},
@@ -28,6 +40,9 @@ export const DEFAULT_PROPS: Required<TilesetTraverserProps> = {
28
40
  export class TilesetTraverser {
29
41
  options: Required<TilesetTraverserProps>;
30
42
 
43
+ /** Whether loaded content has disabled skip-LOD traversal for this tileset. */
44
+ disableSkipLevelOfDetail: boolean = false;
45
+
31
46
  // fulfill in traverse call
32
47
  root: any = null;
33
48
 
@@ -58,6 +73,11 @@ export class TilesetTraverser {
58
73
  this.options = {...DEFAULT_PROPS, ...options};
59
74
  }
60
75
 
76
+ /** Returns whether skip-LOD traversal is enabled and supported by the loaded content. */
77
+ isSkipLevelOfDetailEnabled(): boolean {
78
+ return this.options.skipLevelOfDetail && !this.disableSkipLevelOfDetail;
79
+ }
80
+
61
81
  // tiles should be visible
62
82
  traverse(root, frameState, options) {
63
83
  this.root = root; // for root screen space error
@@ -142,7 +162,7 @@ export class TilesetTraverser {
142
162
  this.loadTile(tile, frameState);
143
163
  // Skip-LOD keeps a ready ancestor selected while descendants stream in. This prevents
144
164
  // replacement holes when traversal jumps over one or more hierarchy levels.
145
- if (stoppedRefining || this.options.skipLevelOfDetail) {
165
+ if (stoppedRefining || this.isSkipLevelOfDetailEnabled()) {
146
166
  this.selectTile(tile, frameState);
147
167
  }
148
168
  }
@@ -154,6 +174,11 @@ export class TilesetTraverser {
154
174
  tile._shouldRefine = shouldRefine && parentRefines;
155
175
  }
156
176
 
177
+ this.completeTraversal(frameState);
178
+ }
179
+
180
+ /** Notifies the owning tileset when traversal is complete or its debounce interval expires. */
181
+ protected completeTraversal(frameState: FrameState): void {
157
182
  const newTime = new Date().getTime();
158
183
  if (this.traversalFinished(frameState) || newTime - this.lastUpdate > this.updateDebounceTime) {
159
184
  this.lastUpdate = newTime;
@@ -170,7 +195,8 @@ export class TilesetTraverser {
170
195
 
171
196
  /* eslint-disable complexity, max-statements */
172
197
  updateAndPushChildren(tile: Tile3D, frameState: FrameState, stack, depth): boolean {
173
- const {loadSiblings, skipLevelOfDetail} = this.options;
198
+ const {loadSiblings} = this.options;
199
+ const skipLevelOfDetail = this.isSkipLevelOfDetailEnabled();
174
200
 
175
201
  const children = tile.children;
176
202
 
@@ -193,9 +219,10 @@ export class TilesetTraverser {
193
219
  }
194
220
  stack.push(child);
195
221
  hasVisibleChild = true;
196
- } else if (checkRefines || loadSiblings) {
197
- // Keep non-visible children loaded since they are still needed before the parent can refine.
198
- // Or loadSiblings is true so always load tiles regardless of visibility.
222
+ } else if ((checkRefines || loadSiblings) && child._inRequestVolume) {
223
+ // Keep non-visible children loaded when they are inside their viewer request volume;
224
+ // they may still be needed before a replacement parent can refine. The request-volume
225
+ // check intentionally applies to sibling loading as well, preventing off-volume work.
199
226
  this.loadTile(child, frameState);
200
227
  this.touchTile(child, frameState);
201
228
  }