Backends & Adapters

Easy-EO uses an adapter-based backend architecture to decouple raster processing logic from data storage formats.

This design allows the same high-level API to operate on:

  • Raster files on disk (Rasterio-backed)

  • In-memory NumPy arrays

  • Future backends (e.g. xarray, cloud-native rasters)

The backend is transparent by default (meaning users normally do not need to know or care whether the data is backed by Rasterio or NumPy, as all public methods behave the same), but advanced users can access or convert it explicitly when needed.


Conceptual Overview

At the core of Easy-EO is the EEORasterDataset, which delegates all I/O and metadata access to an internal adapter.

  EEORasterDataset
         |
         v
  BaseRasterAdapter (abstract)
       /     \
      v       v
Rasterio   NumPy
 Adapter   Adapter

Each adapter exposes a uniform interface for:

  • Metadata access (CRS, transform, bounds)

  • Reading raster values

  • Writing or persisting data

  • Accessing the underlying backend object


Available Adapters

RasterioAdapter

The RasterioAdapter wraps a rasterio.DatasetReader and provides full support for spatial operations.

It may used when:

  • Loading rasters from disk

  • Performing spatial resampling

  • Writing georeferenced outputs

This adapter supports:

  • CRS-aware operations

  • Spatial transforms

  • RasterIO resampling and reprojection

NumPyRasterioAdapter

The NumPyRasterioAdapter wraps an in-memory NumPy array together with explicit spatial metadata.

It may be used when:

  • Creating datasets from arrays

  • Performing numerical or analytical operations

  • Prototyping without disk I/O

This adapter supports:

  • Fast array-based operations

  • Explicit CRS and transform handling

  • Seamless promotion to Rasterio when required


Explicit Backend Conversion

Advanced users may explicitly convert between backends.

Convert to Rasterio

ds_rio = ds.to_rasterio()

This creates an in-memory Rasterio-backed dataset and returns a new EEORasterDataset.

Convert to NumPy

array = ds.to_array()

This returns the raster data as a NumPy array with shape:

  • (bands, height, width) for multiband rasters

  • (height, width) for single-band rasters


Design Philosophy

This adapter-based design provides:

  • Separation of concerns

  • Backend extensibility

  • Performance-aware operations

  • A clean, stable public API

Most users will never need to think about backends — but when they do, the system remains explicit and predictable.