Skip to content

fix(deck.gl-geotiff): fill MultiCOGLayer edge-tile padding with nodata - #651

Open
earlybard wants to merge 1 commit into
developmentseed:mainfrom
earlybard:fix/multi-cog-edge-tile-nodata
Open

earlybard wants to merge 1 commit into
developmentseed:mainfrom
earlybard:fix/multi-cog-edge-tile-nodata

Conversation

@earlybard

@earlybard earlybard commented Sep 17, 2026 •

Copy link
Copy Markdown
Contributor

What I am changing

MultiCOGLayer edge tiles now get their padding rewritten to the file's nodata value before upload, in both the primary and the stitched secondary path, so a nodata filter throws it away along with the real nodata. Files without a nodata value are left alone.

How you can test it

Any nodata-stamped COG that isn't a whole number of tiles wide. DEA's public Sentinel-2 ARD works, but it's Int16 so you need #650 as well:

const scene =
  "https://dea-public-data.s3.ap-southeast-2.amazonaws.com/baseline/ga_s2am_ard_3/55/HFB/2026/01/03/20260103T012735/ga_s2am_nbart_3-2-1_55HFB_2026-01-03_final_band";
new MultiCOGLayer({
  id: "s2",
  sources: {
    red: { url: `${scene}04.tif` },
    green: { url: `${scene}03.tif` },
    blue: { url: `${scene}02.tif` },
  },
  composite: { r: "red", g: "green", b: "blue" },
  renderPipeline: [
    { module: FilterNoDataVal, props: { value: -999 } },
    { module: LinearRescale, props: { rescaleMin: 0, rescaleMax: 3000 } },
  ],
});

Zoom out until the coarse overviews draw. On main there's a black band past the scene's right and bottom edges; with this it's transparent. Linear sampling still leaves a one-texel dark fringe where nodata blends into data; #640's bandSampler: nearest fixes that.

Related Issues

Related to #580, which clips the tile geometry to the array extent. This fixes the samples instead, so the two stack fine.

AI disclosure: written with Claude Code as a code assistant, reviewed by me.

@github-actions github-actions Bot added the fix label Sep 17, 2026
@earlybard
earlybard force-pushed the fix/multi-cog-edge-tile-nodata branch from 0579620 to 3300f54 Compare September 17, 2026 08:30
@earlybard
earlybard marked this pull request as ready for review September 17, 2026 08:39
MultiCOGLayer reads tiles boundless so every band texture has the nominal
tile size, which keeps the zero padding a COG stores past the image
bounds. Zeros sample as real data, so at a coarse overview an edge tile
draws an opaque band over its neighbours; on a scene whose coarsest
overview is a third padding that is a black L across the map. Edge tiles
now have their padding rewritten to the image's nodata value before
upload, in both the primary and the stitched secondary path, so one
nodata filter discards padding and fill alike. Images without a nodata
value are unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@earlybard
earlybard force-pushed the fix/multi-cog-edge-tile-nodata branch from 3300f54 to 04f1d35 Compare September 22, 2026 05:52

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant