Stack Concat
Stack T per-axis multi-band rasters along a new axis to produce a single (T*D)-band raster. Output band b at offset (t * D + d) corresponds to axis index t and source band index d. The "axis" is the meaning of the new dimension being introduced — typically `time` (multi-year embedding stacks, used by the trajectory pattern in §recipes), but also valid for `model` (ensemble embeddings from different foundation models), `polarization` (SAR HH/HV), or any other discrete dimension a downstream op wants to reason over. Inputs are passed as named raster layers; the optional `keys` parameter controls ordering. If `keys` is omitted, input keys are sorted lexicographically (which yields the desired chronological order for per-year keys like `aef_2019`, `aef_2020`, …, when `axis: time`). Output band names are `{key}_{NN}` where NN is the zero-padded source band index (e.g., `aef_2019_00`, …, `aef_2024_63`). This is the `{time_key}_{NN}` convention documented in OPERATIONS.md §input-output-types. All input layers must share the same spatial grid (width, height, bbox, CRS, transform) and the same band count D. Mismatched shapes fail with a clear error. NaN handling (strict): if any value at pixel p across any axis index or band is NaN, the entire stack at p is filled with NaN. This ensures downstream similarity / reduction computations never see partial vectors. Renamed 2026-05-01 from `embedding_trajectory_concat` per arch-review verdict that the math is general — see registry alias in `packages/compute/src/ops/index.ts` for backward compatibility.
| ID | stack_concat |
|---|---|
| Domain | geo |
| Category | analysis |
| Type | raster-to-raster |
| Version | 1.0.0 |