Catalog Overview#
This page gives a complete overview of all collections currently registered in the EOForestSTAC catalog, organised by theme.
Themes#
The catalog is divided into four thematic groups. Use DiscoveryProvider.list_themes() to retrieve this list programmatically.
Biomass & Carbon (biomass-carbon)#
Collection ID |
Title |
Description |
|---|---|---|
|
ESA CCI Biomass – Global annual aboveground biomass |
Global aboveground biomass (Mg/ha) at 100 m, multiple epochs. |
|
Saatchi & Yu – Global aboveground biomass |
Global aboveground biomass at 100 m (Saatchi & Yu 2020). |
|
Liu et al. – Europe aboveground biomass, canopy cover, and canopy height |
European aboveground biomass, canopy cover, and canopy height at 30 m. |
|
Robinson et al. – Chapman-Richards growth-curve parameters |
Secondary-forest aboveground carbon dynamics at 1 km. |
Disturbance & Change (disturbance-change)#
Collection ID |
Title |
Description |
|---|---|---|
|
European Forest Disturbance Atlas (EFDA) |
Annual disturbance maps for European forests (fire, wind, bark beetle, …) at 30 m. |
|
JRC Tropical Moist Forests (TMF) |
Forest change (degradation, deforestation, regrowth) at 30 m. |
|
Hansen Global Forest Change (GFC) |
Tree cover and annual loss/gain at 30 m. |
|
JRC Global Forest Cover 2020 (GFC2020) |
Forest presence/absence at 10 m. |
|
RADD Europe |
Monthly forest disturbance occurrence from Sentinel-1 at 10 m (2020–2025). |
Structure & Demography (structure-demography)#
Collection ID |
Title |
Description |
|---|---|---|
|
Global Age Mapping Integration (GAMI) |
Global forest age ensemble at 100 m. |
|
GAMI – Global Forest Age-Class Fractions |
Forest age-class fractions (12 classes, 20 ensemble members) at 5 resolutions: 1°–0.0833°. Reference years 2010 and 2020. |
|
Global Canopy Height (Potapov et al.) |
Global forest canopy height at 30 m. |
|
ForestPaths – European Tree Genus Map 2020 |
European tree genus classification at 10 m. |
Land Use & Land Cover (land-use-land-cover)#
Collection ID |
Title |
Description |
|---|---|---|
|
Annual Land Use and Land Cover maps for the Brazilian Amazon |
Annual LULC classification for the Brazilian Amazon (2000–2022) at 30 m. |
|
Potapov Land Cover and Land Use Change 2000–2020 |
Global cropland and land use change maps at 30 m. |
Direct access without installing eoforeststac#
All datasets are publicly accessible via HTTPS (i.e, no Python package or credentials
required). Browse the STAC Browser
to find the Zarr asset URL for any collection/version, then stream it directly with
xarray (Python) or Rarr / rstac (R).
Install dependencies:
pip install xarray zarr
Open and subset a Zarr store over HTTPS:
import xarray as xr
s3_path = (
"https://s3.gfz-potsdam.de/dog.atlaseo-glm.eo-gridded-data"
"/collections/CCI_BIOMASS/CCI_BIOMASS_v6.0.zarr"
)
# Open lazily — no data is downloaded yet
ds = xr.open_zarr(s3_path)
print(ds)
# Spatial + temporal slice
agb = ds.sel(
time="2010-01-01",
latitude=slice(-3, -6),
longitude=slice(-68, -62),
).aboveground_biomass
agb.compute() # triggers the actual S3 read
# Optional: export to GeoTIFF
import rioxarray
agb.rio.set_spatial_dims(x_dim="longitude", y_dim="latitude")
agb.rio.write_crs("EPSG:4326", inplace=True)
agb.compute().rio.to_raster("agb_2010_subset.tif")
Install dependencies:
install.packages("rstac")
BiocManager::install("Rarr") # Bioconductor
install.packages("terra")
Browse the catalog with rstac:
library(rstac)
s <- stac("https://simonbesnard1.github.io/eoforeststac")
cols <- s |> collections() |> get_request()
print(cols)
# Extract the Zarr href for a specific item
items <- s |> collections("CCI_BIOMASS") |> items() |> get_request()
zarr_href <- items$features[[1]]$assets$zarr$href
Read and export with Rarr over HTTPS (no credentials needed):
library(Rarr)
library(terra)
zarr_path <- zarr_href # from rstac above, or paste directly
# Read coordinate arrays first (small/fast)
lat <- read_zarr_array(file.path(zarr_path, "latitude"))
lon <- read_zarr_array(file.path(zarr_path, "longitude"))
time <- read_zarr_array(file.path(zarr_path, "time"))
time_dates <- as.Date(time, origin = "2007-01-01")
time_idx <- which(time_dates == as.Date("2010-01-01"))
lat_idx <- which(lat >= -6 & lat <= -3)
lon_idx <- which(lon >= -68 & lon <= -62)
# Read only the slice you need
agb_subset <- read_zarr_array(
file.path(zarr_path, "aboveground_biomass"),
index = list(lat_idx, lon_idx, time_idx)
)
# Convert to SpatRaster and export
agb_2d <- drop(agb_subset)
r <- rast(agb_2d)
ext(r) <- c(min(lon[lon_idx]), max(lon[lon_idx]),
min(lat[lat_idx]), max(lat[lat_idx]))
crs(r) <- "EPSG:4326"
writeRaster(r, "agb_2010_subset.tif", overwrite = TRUE)
Note
Rarr supports HTTPS endpoints directly — pass the full URL as zarr_path.
No Python bridge or S3 credentials are needed for public datasets.
Adding new collections#
To register a new product in the catalog, add entries to:
eoforeststac/products/<product>.py— product metadata and S3 path config.eoforeststac/catalog/<product>.py— STAC collection and item factory.eoforeststac/catalog/root.py— register inDEFAULT_VERSIONSand_product_specs().
See Contributing to EOForestSTAC for a full contributor guide.