xcube EOPF Data Store
xcube-eopf
is a Python package that extends xcube with a new data store
called "eopf-zarr"
. This plugin enables the creation of analysis-ready data cubes
(ARDC) from Sentinel products published by the EOPF Sentinel Zarr Sample Service.
Overview
Once installed, the package gives access to EOPF data products in an analysis-ready data cube format through the standard xcube data store interface. You can:
- List available data sources
- Check data availability
- Get metadata of the data sources
- View available open parameters for each source
- Open data source directly as xcube Dataset
To explore all available functions, see the Python API.
The data retrieval process uses the EOPF STAC API, which allows querying observations over a specified time range and spatial extent. The resulting datasets are mosaicked per time step and stacked into a 3D spatiotemporal data cube.
Each data variable is returned as a chunked Dask array, supporting efficient out-of-core computations and visualization.
Internally, the package uses the xarray-eopf backend for reading, and leverages xcube to construct spatiotemporal analysis-ready data cubes.
Features
IMPORTANT
xcube-eopf
is currently under active development.
Some features may be partially implemented or still in progress.
The EOPF xcube data store is designed to provide analysis-ready data cubes from the EOPF Sentinel Zarr samples for Sentinel-1, Sentinel-2, and Sentinel-3 missions. The main features are summarized below. A more in depth documentation is given in the User Guide.
Currently, support is focused on Sentinel-2 and Sentinel-3 products.
Sentinel-1
Support for Sentinel-1 will be added in an upcoming release.
Sentinel-2
The current implementation supports two Sentinel-2 product levels, available as
data_id
values:
sentinel-2-l1c
: Level-1C top-of-atmosphere reflectancesentinel-2-l2a
: Level-2A atmospherically corrected surface reflectance
Cube Generation Workflow
The workflow for building 3D analysis-ready cubes from Sentinel-2 products involves the following steps:
- Query products using the EOPF STAC API for a given time range and spatial extent.
- Retrieve observations as cloud-optimized Zarr chunks via the xarray-eopf backend.
- Mosaic spatial tiles into single images per timestamp.
- Stack the mosaicked scenes along the temporal axis to form a 3D cube.
Supported Variables
- Surface reflectance bands:
b01
,b02
,b03
,b04
,b05
,b06
,b07
,b08
,b8a
,b09
,b11
,b12
- Classification/Quality layers (L2A only):
cld
,scl
,snw
Example: Sentinel-2 L2A
from xcube.core.store import new_data_store
store = new_data_store("eopf-stac")
ds = store.open_data(
data_id="sentinel-2-l2a",
bbox=[9.7, 53.4, 10.3, 53.7],
time_range=["2025-05-01", "2025-05-07"],
spatial_res=10 / 111320, # meters to degrees (approx.)
crs="EPSG:4326",
variables=["b02", "b03", "b04", "scl"],
)
Sentinel-3
The current implementation supports three Sentinel-3 product levels, available as
data_id
values:
sentinel-3-olci-l1-efr
: Level-1 top-of-atmosphere radiance from OLCI instrumentsentinel-3-olci-l2-lfr
: Level-2 land and atmospheric geophysical parameters derived from OLCI instrumentsentinel-3-slstr-l2-lst
: Level-2 land surface temperature derived from SLSTR instrument
Cube Generation Workflow
The workflow for building 3D analysis-ready cubes from Sentinel-3 products involves the following steps:
- Query tiles using the EOPF Zarr Sample Service STAC API for a given time range and spatial extent.
- Group items by solar day.
- Rectify data from the native 2D irregular grid to a regular grid using xcube-resampling.
- Mosaic adjacent tiles into seamless daily scenes.
- Stack the daily mosaics along the temporal axis to form 3D data cubes for each variable (e.g., spectral bands).
Supported Variables
sentinel-3-olci-l1-efr
:
oa01_radiance
,oa02_radiance
,oa03_radiance
,oa04_radiance
,oa05_radiance
,oa06_radiance
,oa07_radiance
,oa08_radiance
,oa09_radiance
,oa10_radiance
,oa11_radiance
,oa12_radiance
,oa13_radiance
,oa14_radiance
,oa15_radiance
,oa16_radiance
,oa17_radiance
,oa18_radiance
,oa19_radiance
,oa20_radiance
,oa21_radiance
sentinel-3-olci-l2-lfr
:
gifapar
,iwv
,otci
,rc681
,rc865
sentinel-3-slstr-l2-lst
:
lst
Example: Sentinel-3 SLSTR Level-2 LST
from xcube.core.store import new_data_store
store = new_data_store("eopf-stac")
ds = store.open_data(
data_id="sentinel-3-slstr-l2-lst",
bbox=[9., 53., 11., 54.],
time_range=["2025-06-01", "2025-06-05"],
spatial_res=300 / 111320, # conversion to degree approx.
crs="EPSG:4326"
)
License
The package is open source and released under the
Apache 2.0 license license.