From 8e8444136beb5909101213dc35e246b3c02f9849 Mon Sep 17 00:00:00 2001 From: Kyle Barron Date: Mon, 12 Jan 2026 22:18:41 -0500 Subject: [PATCH] fix: Clamp to Web Mercator latitude bounds --- .../src/raster-tileset/raster-tile-traversal.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/deck.gl-raster/src/raster-tileset/raster-tile-traversal.ts b/packages/deck.gl-raster/src/raster-tileset/raster-tile-traversal.ts index 9251262f..7769bf31 100644 --- a/packages/deck.gl-raster/src/raster-tileset/raster-tile-traversal.ts +++ b/packages/deck.gl-raster/src/raster-tileset/raster-tile-traversal.ts @@ -556,8 +556,18 @@ function sampleReferencePointsInEPSG3857( const geoY = minY + relY * (maxY - minY); // Reproject to Web Mercator (EPSG 3857) - const projected = projectTo3857([geoX, geoY]); - refPointPositions.push(projected); + const [projectedX, projectedY] = projectTo3857([geoX, geoY]); + + // Handle invalid projections (e.g., latitudes beyond ±85.05° produce NaN/Infinity) + // Clamp Y to valid Web Mercator bounds in EPSG:3857 meters + // + // Note that whenever a NaN is created from a positive geoY, that this must + // be the north pole. And vice versa for negative geoY. + const clampedY = Number.isFinite(projectedY) + ? projectedY + : Math.sign(geoY) * EPSG_3857_HALF_CIRCUMFERENCE; + + refPointPositions.push([projectedX, clampedY]); } return refPointPositions;