@developmentseed/deck.gl-raster 0.7.0 → 0.8.0-beta.1

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 (54) hide show
  1. package/dist/fp64.d.ts +18 -0
  2. package/dist/fp64.d.ts.map +1 -0
  3. package/dist/fp64.js +28 -0
  4. package/dist/fp64.js.map +1 -0
  5. package/dist/globe-grid-mesh.d.ts +30 -0
  6. package/dist/globe-grid-mesh.d.ts.map +1 -0
  7. package/dist/globe-grid-mesh.js +67 -0
  8. package/dist/globe-grid-mesh.js.map +1 -0
  9. package/dist/gpu-modules/cutline-bbox.d.ts +26 -40
  10. package/dist/gpu-modules/cutline-bbox.d.ts.map +1 -1
  11. package/dist/gpu-modules/cutline-bbox.js +24 -53
  12. package/dist/gpu-modules/cutline-bbox.js.map +1 -1
  13. package/dist/gpu-modules/index.d.ts +1 -1
  14. package/dist/gpu-modules/index.d.ts.map +1 -1
  15. package/dist/gpu-modules/index.js +1 -1
  16. package/dist/gpu-modules/index.js.map +1 -1
  17. package/dist/mesh-layer/mesh-layer-fragment.glsl.d.ts +1 -1
  18. package/dist/mesh-layer/mesh-layer-fragment.glsl.js +1 -1
  19. package/dist/mesh-layer/mesh-layer-vertex.glsl.d.ts +3 -0
  20. package/dist/mesh-layer/mesh-layer-vertex.glsl.d.ts.map +1 -0
  21. package/dist/mesh-layer/mesh-layer-vertex.glsl.js +90 -0
  22. package/dist/mesh-layer/mesh-layer-vertex.glsl.js.map +1 -0
  23. package/dist/mesh-layer/mesh-layer.d.ts +27 -4
  24. package/dist/mesh-layer/mesh-layer.d.ts.map +1 -1
  25. package/dist/mesh-layer/mesh-layer.js +39 -3
  26. package/dist/mesh-layer/mesh-layer.js.map +1 -1
  27. package/dist/raster-layer.d.ts +18 -1
  28. package/dist/raster-layer.d.ts.map +1 -1
  29. package/dist/raster-layer.js +46 -19
  30. package/dist/raster-layer.js.map +1 -1
  31. package/dist/raster-tile-layer/raster-tile-layer.d.ts.map +1 -1
  32. package/dist/raster-tile-layer/raster-tile-layer.js +29 -21
  33. package/dist/raster-tile-layer/raster-tile-layer.js.map +1 -1
  34. package/dist/raster-tileset/bounding-volume-cache.d.ts +11 -4
  35. package/dist/raster-tileset/bounding-volume-cache.d.ts.map +1 -1
  36. package/dist/raster-tileset/bounding-volume-cache.js +13 -4
  37. package/dist/raster-tileset/bounding-volume-cache.js.map +1 -1
  38. package/dist/raster-tileset/raster-tile-traversal.d.ts +58 -3
  39. package/dist/raster-tileset/raster-tile-traversal.d.ts.map +1 -1
  40. package/dist/raster-tileset/raster-tile-traversal.js +235 -30
  41. package/dist/raster-tileset/raster-tile-traversal.js.map +1 -1
  42. package/dist/raster-tileset/raster-tileset-2d.d.ts +33 -0
  43. package/dist/raster-tileset/raster-tileset-2d.d.ts.map +1 -1
  44. package/dist/raster-tileset/raster-tileset-2d.js +46 -1
  45. package/dist/raster-tileset/raster-tileset-2d.js.map +1 -1
  46. package/dist/raster-tileset/web-mercator-clamp.d.ts +29 -0
  47. package/dist/raster-tileset/web-mercator-clamp.d.ts.map +1 -0
  48. package/dist/raster-tileset/web-mercator-clamp.js +54 -0
  49. package/dist/raster-tileset/web-mercator-clamp.js.map +1 -0
  50. package/package.json +7 -7
  51. package/dist/raster-tile-layer/constants.d.ts +0 -11
  52. package/dist/raster-tile-layer/constants.d.ts.map +0 -1
  53. package/dist/raster-tile-layer/constants.js +0 -11
  54. package/dist/raster-tile-layer/constants.js.map +0 -1
@@ -16,9 +16,10 @@
16
16
  * The traversal is driven by a {@link RasterTilesetDescriptor}, which abstracts over
17
17
  * both OGC TileMatrixSet grids and Zarr multiscale pyramids.
18
18
  */
19
- import { _GlobeViewport, assert } from "@deck.gl/core";
19
+ import { _GlobeViewport as GlobeViewport } from "@deck.gl/core";
20
20
  import { transformBounds } from "@developmentseed/proj";
21
- import { CullingVolume, makeOrientedBoundingBoxFromPoints, Plane, } from "@math.gl/culling";
21
+ import { Vector3 } from "@math.gl/core";
22
+ import { CullingVolume, makeOrientedBoundingBoxFromPoints, OrientedBoundingBox, Plane, } from "@math.gl/culling";
22
23
  import { lngLatToWorld, worldToLngLat } from "@math.gl/web-mercator";
23
24
  import { BoundingVolumeCache } from "./bounding-volume-cache.js";
24
25
  /**
@@ -33,6 +34,12 @@ import { BoundingVolumeCache } from "./bounding-volume-cache.js";
33
34
  * bottom-right.
34
35
  */
35
36
  const TILE_SIZE = 512;
37
+ /**
38
+ * Maximum number of world copies to test on each side of the primary world
39
+ * during multi-world tile traversal. Matches upstream
40
+ * `@deck.gl/geo-layers/tile-2d-traversal.ts`.
41
+ */
42
+ const MAX_MAPS = 3;
36
43
  // Reference points used to sample tile boundaries for bounding volume
37
44
  // calculation.
38
45
  //
@@ -64,6 +71,18 @@ const REF_POINTS_9 = REF_POINTS_5.concat([
64
71
  [1, 0.5], // right edge
65
72
  [0.5, 1], // bottom edge
66
73
  ]);
74
+ // For the globe bounding volume: REF_POINTS_9 plus two more points on the
75
+ // horizontal centerline (11 points total). The sphere surface bulges most
76
+ // between samples along the widest span of a tile, so denser sampling there
77
+ // keeps the oriented bounding box from under-enclosing the tile (which would
78
+ // false-cull it). This matches upstream deck.gl's densest reference set, used
79
+ // there only for the coarsest (whole-world) zoom. We use it for every globe
80
+ // tile: a tile never spans more than the whole world, so 11 points always
81
+ // suffice, and per-tile cost is paid once thanks to the bounding-volume cache.
82
+ const REF_POINTS_11 = REF_POINTS_9.concat([
83
+ [0.25, 0.5],
84
+ [0.75, 0.5],
85
+ ]);
67
86
  /** semi-major axis of the WGS84 ellipsoid
68
87
  *
69
88
  * EPSG:3857 also uses the WGS84 datum, so this is used for conversions from
@@ -174,16 +193,29 @@ export class RasterTileNode {
174
193
  * @returns true if this tile or any descendant is visible, false otherwise
175
194
  */
176
195
  update(params) {
177
- // Reset state
178
- this.childVisible = false;
179
- this.selected = false;
180
- const { viewport, cullingVolume, elevationBounds, minZ, maxZ = this.descriptor.levels.length - 1, project, bounds, pixelRatio, boundingVolumeCache, } = params;
181
- // Get bounding volume for this tile
182
- const { boundingVolume, commonSpaceBounds } = this.getBoundingVolume(elevationBounds, project, boundingVolumeCache);
196
+ const { viewport, cullingVolume, elevationBounds, minZ, maxZ = this.descriptor.levels.length - 1, project, bounds, pixelRatio, worldOffset = 0, boundingVolumeCache, } = params;
197
+ // Reset per-frame state on the primary pass only. Non-zero worldOffset
198
+ // passes are additive — they can flip selected/childVisible from
199
+ // false true but never the reverse. See dev-docs/world-copies.md.
200
+ if (worldOffset === 0) {
201
+ this.childVisible = false;
202
+ this.selected = false;
203
+ }
204
+ // Get bounding volume for this tile (translated for frustum culling at
205
+ // non-zero worldOffset). `commonSpaceBounds` is the Web-Mercator-world AABB
206
+ // used for the LOD latitude (a worldOffset only shifts X, so latitude is
207
+ // unaffected).
208
+ const { boundingVolume, commonSpaceBounds } = this.getBoundingVolume(elevationBounds, project, boundingVolumeCache, worldOffset);
183
209
  // Step 1: Bounds checking
184
- // If geographic bounds are specified, reject tiles outside those bounds
185
- if (bounds && !this.insideBounds(bounds, commonSpaceBounds)) {
186
- return false;
210
+ // If geographic bounds are specified, reject tiles outside those bounds.
211
+ // The dataset's `bounds` live in primary-world common space, and a tile
212
+ // at `(x, y, z)` represents the same data regardless of which world copy
213
+ // it's drawn in — so always compare against the offset-0 AABB.
214
+ if (bounds) {
215
+ const primaryWorldVolume = this.getBoundingVolume(elevationBounds, project, boundingVolumeCache, 0);
216
+ if (!this.insideBounds(bounds, primaryWorldVolume.commonSpaceBounds)) {
217
+ return false;
218
+ }
187
219
  }
188
220
  // Frustum culling
189
221
  // Test if tile's bounding volume intersects the camera frustum
@@ -197,7 +229,7 @@ export class RasterTileNode {
197
229
  // Only select this tile if no child is visible (prevents overlapping tiles)
198
230
  // "When pitch is low, force selection at maxZ."
199
231
  if (!this.childVisible && this.z >= minZ) {
200
- const metersPerCSSPixel = getMetersPerPixelAtBoundingVolume(boundingVolume, viewport.zoom);
232
+ const metersPerCSSPixel = getMetersPerPixelAtCommonSpaceBounds(commonSpaceBounds, viewport.zoom);
201
233
  const tileMetersPerPixel = this.level.metersPerPixel;
202
234
  // On-screen size of one source pixel, measured in device pixels.
203
235
  // ≤ 1 means the source can fully resolve the rendered framebuffer.
@@ -215,14 +247,22 @@ export class RasterTileNode {
215
247
  // Note that if `this.children` is `null`, then there are no children
216
248
  // available because we're already at the finest tile resolution available
217
249
  if (children && children.length > 0) {
218
- this.selected = false;
250
+ if (worldOffset === 0) {
251
+ this.selected = false;
252
+ }
219
253
  let anyChildVisible = false;
220
254
  for (const child of children) {
221
255
  if (child.update(params)) {
222
256
  anyChildVisible = true;
223
257
  }
224
258
  }
225
- this.childVisible = anyChildVisible;
259
+ // Only set childVisible to true; never override a previous true to
260
+ // false on a subsequent pass. Offset-0 already starts with
261
+ // childVisible=false (reset above), so this preserves the
262
+ // "any pass that finds a visible child wins" semantics.
263
+ if (anyChildVisible) {
264
+ this.childVisible = true;
265
+ }
226
266
  return anyChildVisible;
227
267
  }
228
268
  return true;
@@ -266,15 +306,41 @@ export class RasterTileNode {
266
306
  * volume depends only on `(z, x, y, zRange)` for a given descriptor, so on a
267
307
  * cache hit it is returned without rerunning {@link computeBoundingVolume}'s
268
308
  * proj4 reprojections + oriented-bounding-box fit.
309
+ *
310
+ * For non-zero `worldOffset`, returns a translated copy (center shifted by
311
+ * `worldOffset * TILE_SIZE` along common-space X) without polluting the
312
+ * cache — the cache always stores the offset-0 volume. See
313
+ * `dev-docs/world-copies.md`.
314
+ *
315
+ * @param zRange Elevation `[min, max]` in common-space units.
316
+ * @param project Projection function for Globe view, or `null`
317
+ * for Web Mercator common space.
318
+ * @param boundingVolumeCache Cache keyed by `z/x/y`. Stores the offset-0
319
+ * volume only.
320
+ * @param worldOffset Number of world copies to translate the result
321
+ * by along common-space X. `0` returns the
322
+ * cached offset-0 volume directly. Non-zero
323
+ * values return a fresh translated copy.
269
324
  */
270
- getBoundingVolume(zRange, project, boundingVolumeCache) {
271
- const hit = boundingVolumeCache.get(this.z, this.x, this.y);
272
- if (hit && hit.zRange[0] === zRange[0] && hit.zRange[1] === zRange[1]) {
273
- return hit;
325
+ getBoundingVolume(zRange, project, boundingVolumeCache, worldOffset = 0) {
326
+ const cacheHit = boundingVolumeCache.get(this.z, this.x, this.y);
327
+ // `base` is the tile's volume in the primary world (offset 0). The cache
328
+ // only ever stores the primary-world volume; it is returned as-is for
329
+ // worldOffset 0, or translated below for a non-zero offset.
330
+ let base;
331
+ if (cacheHit &&
332
+ cacheHit.zRange[0] === zRange[0] &&
333
+ cacheHit.zRange[1] === zRange[1]) {
334
+ base = cacheHit;
274
335
  }
275
- const result = this.computeBoundingVolume(zRange, project);
276
- boundingVolumeCache.set(this.z, this.x, this.y, { zRange, ...result });
277
- return result;
336
+ else {
337
+ base = this.computeBoundingVolume(zRange, project);
338
+ boundingVolumeCache.set(this.z, this.x, this.y, { zRange, ...base });
339
+ }
340
+ if (worldOffset === 0) {
341
+ return base;
342
+ }
343
+ return translateBoundingVolume(base, worldOffset * TILE_SIZE);
278
344
  }
279
345
  /**
280
346
  * Compute (without caching) the 3D bounding volume for this tile in deck.gl's
@@ -284,12 +350,10 @@ export class RasterTileNode {
284
350
  * tiling is already in EPSG:3857.
285
351
  */
286
352
  computeBoundingVolume(zRange, project) {
287
- // Case 1: Globe view - need to construct an oriented bounding box from
288
- // reprojected sample points, but also using the `project` param
353
+ // Case 1: Globe view reproject sample points to WGS84 and project them
354
+ // onto the globe sphere with the viewport's `project` function.
289
355
  if (project) {
290
- assert(false, "TODO: implement getBoundingVolume in Globe view");
291
- // Reproject positions to wgs84 instead, then pass them into `project`
292
- // return makeOrientedBoundingBoxFromPoints(refPointPositions);
356
+ return this._getGlobeBoundingVolume(project);
293
357
  }
294
358
  // (Future) Case 2: Web Mercator input image, can directly compute AABB in
295
359
  // common space
@@ -344,6 +408,47 @@ export class RasterTileNode {
344
408
  commonSpaceBounds,
345
409
  };
346
410
  }
411
+ /**
412
+ * Globe-view bounding volume: reproject the tile's reference points to WGS84,
413
+ * project them onto the globe sphere (`project` = `viewport.projectPosition`)
414
+ * to build the oriented bounding box used for frustum culling, and separately
415
+ * compute a Web-Mercator-world AABB for the `bounds` pre-filter in
416
+ * {@link update} (which compares against `wgs84Bounds` in mercator world).
417
+ *
418
+ * NOTE: elevation is not modeled on globe yet — reference points are sampled
419
+ * at the surface (z = 0). Flat rasters only. See
420
+ * `dev-docs/specs/2026-05-21-globe-view-design.md`.
421
+ */
422
+ _getGlobeBoundingVolume(project) {
423
+ const tileCorners = this.level.projectedTileCorners(this.x, this.y);
424
+ const refPointsWgs84 = sampleReferencePointsInWGS84(REF_POINTS_11, tileCorners, this.descriptor.projectTo4326);
425
+ const refPointPositions = [];
426
+ let minX = Number.POSITIVE_INFINITY;
427
+ let minY = Number.POSITIVE_INFINITY;
428
+ let maxX = Number.NEGATIVE_INFINITY;
429
+ let maxY = Number.NEGATIVE_INFINITY;
430
+ for (const [lng, lat] of refPointsWgs84) {
431
+ const projected = project([lng, lat, 0]);
432
+ refPointPositions.push([projected[0], projected[1], projected[2]]);
433
+ const [worldX, worldY] = lngLatToWorld([lng, lat]);
434
+ if (worldX < minX) {
435
+ minX = worldX;
436
+ }
437
+ if (worldY < minY) {
438
+ minY = worldY;
439
+ }
440
+ if (worldX > maxX) {
441
+ maxX = worldX;
442
+ }
443
+ if (worldY > maxY) {
444
+ maxY = worldY;
445
+ }
446
+ }
447
+ return {
448
+ boundingVolume: makeOrientedBoundingBoxFromPoints(refPointPositions),
449
+ commonSpaceBounds: [minX, minY, maxX, maxY],
450
+ };
451
+ }
347
452
  }
348
453
  /**
349
454
  * Wrap a forward projection to EPSG:3857 so that it never returns NaN.
@@ -403,13 +508,31 @@ function sampleReferencePointsInEPSG3857(refPoints, tileCorners, projectTo3857,
403
508
  }
404
509
  return refPointPositions;
405
510
  }
511
+ /**
512
+ * Sample the selected reference points in WGS84 lng/lat.
513
+ *
514
+ * Like {@link sampleReferencePointsInEPSG3857}, reference points are `[relX,
515
+ * relY]` fractions in `[0, 1]` bilinearly interpolated across the tile's four
516
+ * CRS corners, then reprojected to WGS84. Used by the GlobeView bounding-volume
517
+ * path, which projects lng/lat onto the sphere rather than rescaling 3857
518
+ * meters into common space.
519
+ */
520
+ function sampleReferencePointsInWGS84(refPoints, tileCorners, projectTo4326) {
521
+ const { topLeft, topRight, bottomLeft, bottomRight } = tileCorners;
522
+ const refPointPositions = [];
523
+ for (const [relX, relY] of refPoints) {
524
+ const [geoX, geoY] = bilerpPoint(topLeft, topRight, bottomLeft, bottomRight, relX, relY);
525
+ refPointPositions.push(projectTo4326(geoX, geoY));
526
+ }
527
+ return refPointPositions;
528
+ }
406
529
  /**
407
530
  * Rescale positions from EPSG:3857 into deck.gl's common space
408
531
  *
409
532
  * Similar to the upstream code here:
410
533
  * https://github.com/visgl/deck.gl/blob/b0134f025148b52b91320d16768ab5d14a745328/modules/geo-layers/src/tileset-2d/tile-2d-traversal.ts#L172-L177
411
534
  */
412
- function rescaleEPSG3857ToCommonSpace([x, y]) {
535
+ export function rescaleEPSG3857ToCommonSpace([x, y]) {
413
536
  // Clamp Y to Web Mercator bounds
414
537
  const clampedY = Math.max(-EPSG_3857_HALF_CIRCUMFERENCE, Math.min(EPSG_3857_HALF_CIRCUMFERENCE, y));
415
538
  return [
@@ -417,6 +540,19 @@ function rescaleEPSG3857ToCommonSpace([x, y]) {
417
540
  (clampedY / EPSG_3857_CIRCUMFERENCE + 0.5) * TILE_SIZE,
418
541
  ];
419
542
  }
543
+ /**
544
+ * Inverse of {@link rescaleEPSG3857ToCommonSpace}: rescale a deck.gl
545
+ * common-space position back into EPSG:3857 meters.
546
+ *
547
+ * Common-space inputs are in-range by construction, so (unlike the forward
548
+ * direction) no latitude clamp is applied.
549
+ */
550
+ export function rescaleCommonSpaceToEPSG3857([x, y]) {
551
+ return [
552
+ (x / TILE_SIZE - 0.5) * EPSG_3857_CIRCUMFERENCE,
553
+ (y / TILE_SIZE - 0.5) * EPSG_3857_CIRCUMFERENCE,
554
+ ];
555
+ }
420
556
  /**
421
557
  * Above this root-tile count, `createRootTiles` culls to the viewport
422
558
  * before instantiation. Below it, every root tile is created and downstream
@@ -497,7 +633,7 @@ export function getTileIndices(descriptor, opts) {
497
633
  // so this frame can never evict an entry it will need again this frame.
498
634
  boundingVolumeCache.sweep();
499
635
  // Only define `project` function for Globe viewports, same as upstream
500
- const project = viewport instanceof _GlobeViewport && viewport.resolution
636
+ const project = viewport instanceof GlobeViewport && viewport.resolution
501
637
  ? viewport.projectPosition
502
638
  : null;
503
639
  // Get the culling volume of the current camera
@@ -562,6 +698,24 @@ export function getTileIndices(descriptor, opts) {
562
698
  for (const root of roots) {
563
699
  root.update(traversalParams);
564
700
  }
701
+ // World-copy passes: when the viewport spans multiple world copies (e.g.
702
+ // WebMercatorViewport with repeat: true panned across the antimeridian),
703
+ // re-run the traversal with the tile bounding volumes shifted by ±1, ±2…
704
+ // world copies along common-space X. A tile is selected if any pass selects
705
+ // it. See dev-docs/world-copies.md.
706
+ const subViewportCount = viewport.subViewports?.length ?? 0;
707
+ if (subViewportCount > 1) {
708
+ for (let offset = -1; offset >= -MAX_MAPS; offset--) {
709
+ if (!runOffsetPass(roots, traversalParams, offset)) {
710
+ break;
711
+ }
712
+ }
713
+ for (let offset = 1; offset <= MAX_MAPS; offset++) {
714
+ if (!runOffsetPass(roots, traversalParams, offset)) {
715
+ break;
716
+ }
717
+ }
718
+ }
565
719
  // Collect selected tiles
566
720
  const selectedNodes = [];
567
721
  for (const root of roots) {
@@ -569,6 +723,23 @@ export function getTileIndices(descriptor, opts) {
569
723
  }
570
724
  return selectedNodes;
571
725
  }
726
+ /**
727
+ * Run a non-zero world-offset traversal pass over each root.
728
+ *
729
+ * Returns `true` if any root tile was visible at this offset, signaling the
730
+ * caller to walk further from the primary world. Returns `false` when no
731
+ * tiles were visible — the offset has gone past the visible range and the
732
+ * caller stops walking that side.
733
+ */
734
+ function runOffsetPass(roots, baseParams, worldOffset) {
735
+ let anyVisible = false;
736
+ for (const root of roots) {
737
+ if (root.update({ ...baseParams, worldOffset })) {
738
+ anyVisible = true;
739
+ }
740
+ }
741
+ return anyVisible;
742
+ }
572
743
  /**
573
744
  * Compute the meters per pixel at a given latitude and zoom level.
574
745
  *
@@ -583,10 +754,44 @@ function getMetersPerPixel(latitude, zoom) {
583
754
  return ((earthCircumference * Math.cos((latitude * Math.PI) / 180)) /
584
755
  2 ** (zoom + 8));
585
756
  }
586
- function getMetersPerPixelAtBoundingVolume(boundingVolume, zoom) {
587
- const [_lng, lat] = worldToLngLat(boundingVolume.center);
757
+ function getMetersPerPixelAtCommonSpaceBounds(commonSpaceBounds, zoom) {
758
+ const [minX, minY, maxX, maxY] = commonSpaceBounds;
759
+ // `commonSpaceBounds` is in Web Mercator world space ([0, 512]) in BOTH the
760
+ // mercator and globe paths (the globe path builds it via `lngLatToWorld`), so
761
+ // its center maps back to a real latitude. The 3D oriented-bounding-box
762
+ // center, by contrast, is in globe common space on a globe and would
763
+ // `worldToLngLat` to a garbage latitude (~-89°, near the Mercator
764
+ // singularity), making meters-per-pixel far too small so the LOD always
765
+ // recursed to the finest level.
766
+ const [, lat] = worldToLngLat([(minX + maxX) / 2, (minY + maxY) / 2]);
588
767
  return getMetersPerPixel(lat, zoom);
589
768
  }
769
+ /**
770
+ * Translate a tile's bounding volume by `dx` units along common-space X.
771
+ *
772
+ * Returns a fresh OBB and AABB; does not mutate the input. Used by the
773
+ * world-copy traversal to test the same tile at multiple shifted positions
774
+ * without recomputing the underlying geometry.
775
+ */
776
+ function translateBoundingVolume(base, dx) {
777
+ const { boundingVolume, commonSpaceBounds } = base;
778
+ const center = boundingVolume.center;
779
+ const translatedCenter = new Vector3((center[0] ?? 0) + dx, center[1] ?? 0, center[2] ?? 0);
780
+ const translated = new OrientedBoundingBox(translatedCenter, boundingVolume.halfAxes);
781
+ // `update()`'s bounds check always re-reads the offset-0 `commonSpaceBounds`,
782
+ // so this translated AABB isn't consumed in production — it's kept for API
783
+ // symmetry with `boundingVolume` and is asserted directly by unit tests.
784
+ const translatedBounds = [
785
+ commonSpaceBounds[0] + dx,
786
+ commonSpaceBounds[1],
787
+ commonSpaceBounds[2] + dx,
788
+ commonSpaceBounds[3],
789
+ ];
790
+ return {
791
+ boundingVolume: translated,
792
+ commonSpaceBounds: translatedBounds,
793
+ };
794
+ }
590
795
  /**
591
796
  * Compute the axis-aligned bounding box of a rotated tile rectangle.
592
797
  */
@@ -1 +1 @@
1
- {"version":3,"file":"raster-tile-traversal.js","sourceRoot":"","sources":["../../src/raster-tileset/raster-tile-traversal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"raster-tile-traversal.js","sourceRoot":"","sources":["../../src/raster-tileset/raster-tile-traversal.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@
8
8
  import type { Viewport } from "@deck.gl/core";
9
9
  import type { GeoBoundingBox, _Tileset2DProps as Tileset2DProps } from "@deck.gl/geo-layers";
10
10
  import { _Tileset2D as Tileset2D } from "@deck.gl/geo-layers";
11
+ import type { InitialTriangulation } from "@developmentseed/raster-reproject";
11
12
  import type { Matrix4 } from "@math.gl/core";
12
13
  import type { RasterTilesetDescriptor } from "./tileset-interface.js";
13
14
  import type { Corners, ProjectedBoundingBox, ProjectionFunction, TileIndex, ZRange } from "./types.js";
@@ -53,6 +54,30 @@ export type RasterTileMetadata = {
53
54
  * Same stability guarantees as {@link TileMetadata.forwardTransform}.
54
55
  */
55
56
  inverseTransform: ProjectionFunction;
57
+ /**
58
+ * Forward (source CRS → deck.gl common space) projection.
59
+ *
60
+ * Mirrors deck.gl's `Viewport.projectPosition` but for this descriptor's
61
+ * source CRS rather than lng/lat. Descriptor-global (identical for every
62
+ * tile) and built once on the tileset, so the reference is stable for the
63
+ * tileset's lifetime — which is what `RasterLayer`'s `reprojectionFnsChanged`
64
+ * check relies on to avoid regenerating the mesh every render.
65
+ */
66
+ _projectPosition: ProjectionFunction;
67
+ /**
68
+ * Inverse (deck.gl common space → source CRS) projection.
69
+ *
70
+ * Mirrors deck.gl's `Viewport.unprojectPosition`. Same stability guarantees
71
+ * as {@link RasterTileMetadata._projectPosition}.
72
+ */
73
+ _unprojectPosition: ProjectionFunction;
74
+ /**
75
+ * Seed triangulation that clamps this tile's reprojection mesh to the valid
76
+ * Web Mercator latitude band (±85.051°), or `undefined` if no clamp is needed.
77
+ * Consumed only by the Web Mercator render path; the globe path renders the
78
+ * full mesh. See {@link createInitialWebMercatorTriangulation}.
79
+ */
80
+ _webMercatorInitialTriangulation?: InitialTriangulation;
56
81
  };
57
82
  /**
58
83
  * Configuration for a {@link RasterTileset2D}.
@@ -94,6 +119,14 @@ export declare class RasterTileset2D extends Tileset2D {
94
119
  private wgs84Bounds;
95
120
  private getPixelRatio;
96
121
  private boundingVolumeCache;
122
+ private projectPosition;
123
+ private unprojectPosition;
124
+ /**
125
+ * Projection mode of the viewport on the previous `getTileIndices` call.
126
+ * `undefined` until the first call. Used to clear {@link boundingVolumeCache}
127
+ * on a globe↔mercator switch (volumes are not valid across projection modes).
128
+ */
129
+ private lastViewportIsGlobe?;
97
130
  constructor(opts: Tileset2DProps, descriptor: RasterTilesetDescriptor, { getPixelRatio, maxBoundingVolumeCacheSize }?: RasterTileset2DOptions);
98
131
  /**
99
132
  * Get tile indices visible in viewport
@@ -1 +1 @@
1
- {"version":3,"file":"raster-tileset-2d.d.ts","sourceRoot":"","sources":["../../src/raster-tileset/raster-tileset-2d.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EACV,cAAc,EACd,eAAe,IAAI,cAAc,EAClC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,IAAI,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI7C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,KAAK,EAEV,OAAO,EACP,oBAAoB,EACpB,kBAAkB,EAClB,SAAS,EACT,MAAM,EACP,MAAM,YAAY,CAAC;AAEpB,+DAA+D;AAC/D,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;OAEG;IACH,IAAI,EAAE,cAAc,CAAC;IAErB;;OAEG;IACH,aAAa,EAAE,oBAAoB,CAAC;IAEpC;;;;;;OAMG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;;;;;;OAQG;IACH,gBAAgB,EAAE,kBAAkB,CAAC;IAErC;;;;OAIG;IACH,gBAAgB,EAAE,kBAAkB,CAAC;CACtC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,EAAE,MAAM,MAAM,CAAC;IAE7B;;;;;;;;OAQG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAC;CACrC;AAED;;;;;;GAMG;AACH,qBAAa,eAAgB,SAAQ,SAAS;IAC5C,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,mBAAmB,CAAsB;gBAG/C,IAAI,EAAE,cAAc,EACpB,UAAU,EAAE,uBAAuB,EACnC,EAAE,aAAa,EAAE,0BAA0B,EAAE,GAAE,sBAA2B;IA2B5E;;;;;;;;;;;;;;;;OAgBG;IACM,cAAc,CAAC,IAAI,EAAE;QAC5B,QAAQ,EAAE,QAAQ,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;KAC9B,GAAG,SAAS,EAAE;IAyBf;;;;;;;OAOG;IACH,OAAO,CAAC,yBAAyB;IA4BxB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM;IAInC,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS;IAiC3C,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM;IAIrC,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,kBAAkB;CAwD/D"}
1
+ {"version":3,"file":"raster-tileset-2d.d.ts","sourceRoot":"","sources":["../../src/raster-tileset/raster-tileset-2d.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAK,EACV,cAAc,EACd,eAAe,IAAI,cAAc,EAClC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,IAAI,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAQ7C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,KAAK,EAEV,OAAO,EACP,oBAAoB,EACpB,kBAAkB,EAClB,SAAS,EACT,MAAM,EACP,MAAM,YAAY,CAAC;AAGpB,+DAA+D;AAC/D,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;OAEG;IACH,IAAI,EAAE,cAAc,CAAC;IAErB;;OAEG;IACH,aAAa,EAAE,oBAAoB,CAAC;IAEpC;;;;;;OAMG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;;;;;;OAQG;IACH,gBAAgB,EAAE,kBAAkB,CAAC;IAErC;;;;OAIG;IACH,gBAAgB,EAAE,kBAAkB,CAAC;IAErC;;;;;;;;OAQG;IACH,gBAAgB,EAAE,kBAAkB,CAAC;IAErC;;;;;OAKG;IACH,kBAAkB,EAAE,kBAAkB,CAAC;IAEvC;;;;;OAKG;IACH,gCAAgC,CAAC,EAAE,oBAAoB,CAAC;CACzD,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,EAAE,MAAM,MAAM,CAAC;IAE7B;;;;;;;;OAQG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAC;CACrC;AAED;;;;;;GAMG;AACH,qBAAa,eAAgB,SAAQ,SAAS;IAC5C,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,iBAAiB,CAAqB;IAC9C;;;;OAIG;IACH,OAAO,CAAC,mBAAmB,CAAC,CAAU;gBAGpC,IAAI,EAAE,cAAc,EACpB,UAAU,EAAE,uBAAuB,EACnC,EAAE,aAAa,EAAE,0BAA0B,EAAE,GAAE,sBAA2B;IAwC5E;;;;;;;;;;;;;;;;OAgBG;IACM,cAAc,CAAC,IAAI,EAAE;QAC5B,QAAQ,EAAE,QAAQ,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;KAC9B,GAAG,SAAS,EAAE;IAyCf;;;;;;;OAOG;IACH,OAAO,CAAC,yBAAyB;IA4BxB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM;IAInC,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS;IAiC3C,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM;IAIrC,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,kBAAkB;CAwE/D"}
@@ -5,11 +5,13 @@
5
5
  * This version properly implements frustum culling and bounding volume calculations
6
6
  * following the pattern from deck.gl's OSM tile indexing.
7
7
  */
8
+ import { _GlobeViewport as GlobeViewport } from "@deck.gl/core";
8
9
  import { _Tileset2D as Tileset2D } from "@deck.gl/geo-layers";
9
10
  import { transformBounds } from "@developmentseed/proj";
10
11
  import { BoundingVolumeCache } from "./bounding-volume-cache.js";
11
- import { getTileIndices } from "./raster-tile-traversal.js";
12
+ import { getTileIndices, rescaleCommonSpaceToEPSG3857, rescaleEPSG3857ToCommonSpace, } from "./raster-tile-traversal.js";
12
13
  import { sortItemsByDistanceFromViewportCenter } from "./sort-by-distance.js";
14
+ import { createInitialWebMercatorTriangulation } from "./web-mercator-clamp.js";
13
15
  /**
14
16
  * A generic tileset implementation organized according to the OGC
15
17
  * [TileMatrixSet](https://docs.ogc.org/is/17-083r4/17-083r4.html)
@@ -22,6 +24,14 @@ export class RasterTileset2D extends Tileset2D {
22
24
  wgs84Bounds;
23
25
  getPixelRatio;
24
26
  boundingVolumeCache;
27
+ projectPosition;
28
+ unprojectPosition;
29
+ /**
30
+ * Projection mode of the viewport on the previous `getTileIndices` call.
31
+ * `undefined` until the first call. Used to clear {@link boundingVolumeCache}
32
+ * on a globe↔mercator switch (volumes are not valid across projection modes).
33
+ */
34
+ lastViewportIsGlobe;
25
35
  constructor(opts, descriptor, { getPixelRatio, maxBoundingVolumeCacheSize } = {}) {
26
36
  super(opts);
27
37
  this.descriptor = descriptor;
@@ -29,6 +39,17 @@ export class RasterTileset2D extends Tileset2D {
29
39
  this.boundingVolumeCache = new BoundingVolumeCache({
30
40
  maxEntries: maxBoundingVolumeCacheSize,
31
41
  });
42
+ // Source-CRS ↔ deck.gl common-space projection, built once here so the
43
+ // closures are reference-stable for the tileset's lifetime. Exposed on
44
+ // each tile's metadata; `RasterTileLayer._renderSubLayers` reads them off
45
+ // the tile to keep `RasterLayer`'s reprojection-equality check stable
46
+ // across renders (deck.gl recreates the layer instance every render, so
47
+ // per-render-derived closures would regenerate the mesh every frame).
48
+ this.projectPosition = (x, y) => rescaleEPSG3857ToCommonSpace(descriptor.projectTo3857(x, y));
49
+ this.unprojectPosition = (cx, cy) => {
50
+ const [mx, my] = rescaleCommonSpaceToEPSG3857([cx, cy]);
51
+ return descriptor.projectFrom3857(mx, my);
52
+ };
32
53
  const rawBounds = transformBounds(this.descriptor.projectTo4326, ...this.descriptor.projectedBounds);
33
54
  // Web Mercator cannot represent latitudes outside ~±85.051°, and the
34
55
  // downstream tile traversal calls `lngLatToWorld` on these bounds which
@@ -62,6 +83,17 @@ export class RasterTileset2D extends Tileset2D {
62
83
  */
63
84
  getTileIndices(opts) {
64
85
  const { viewport, minZoom } = opts;
86
+ // A tile's bounding volume is computed in a different common space under a
87
+ // GlobeView than under Web Mercator, but the cache key is only (z, x, y).
88
+ // When the viewport's projection mode flips, drop the stale volumes. This
89
+ // mirrors the `project` gate in the tile traversal. (See
90
+ // BoundingVolumeCache.)
91
+ const isGlobe = Boolean(viewport instanceof GlobeViewport && viewport.resolution);
92
+ if (this.lastViewportIsGlobe !== undefined &&
93
+ this.lastViewportIsGlobe !== isGlobe) {
94
+ this.boundingVolumeCache.clear();
95
+ }
96
+ this.lastViewportIsGlobe = isGlobe;
65
97
  if (typeof minZoom === "number" && viewport.zoom < minZoom) {
66
98
  return [];
67
99
  }
@@ -159,6 +191,16 @@ export class RasterTileset2D extends Tileset2D {
159
191
  // (best-available) would not show parent tiles correctly.
160
192
  const [west, south, east, north] = transformBounds(this.descriptor.projectTo4326, ...projectedBounds);
161
193
  const { forwardTransform, inverseTransform } = levelDescriptor.tileTransform(x, y);
194
+ // Clamp the reprojection mesh to the valid Web Mercator latitude band for
195
+ // tiles that extend past ±85.051° (e.g. a global EPSG:4326 image reaching
196
+ // ±90°). Computed once here so the reference is stable across renders.
197
+ const cornerLat = (corner) => this.descriptor.projectTo4326(corner[0], corner[1])[1];
198
+ const _webMercatorInitialTriangulation = createInitialWebMercatorTriangulation({
199
+ topLeft: cornerLat(topLeft),
200
+ topRight: cornerLat(topRight),
201
+ bottomLeft: cornerLat(bottomLeft),
202
+ bottomRight: cornerLat(bottomRight),
203
+ });
162
204
  return {
163
205
  bbox: {
164
206
  west,
@@ -177,6 +219,9 @@ export class RasterTileset2D extends Tileset2D {
177
219
  tileHeight,
178
220
  forwardTransform,
179
221
  inverseTransform,
222
+ _projectPosition: this.projectPosition,
223
+ _unprojectPosition: this.unprojectPosition,
224
+ _webMercatorInitialTriangulation,
180
225
  };
181
226
  }
182
227
  }