Published February 12, 2025 | Version V1.1

Surface soil moisture for Europe 2014-2024 at 1 km annual and quarterly aggregates

  • 1. OpenGeoHub foundation
  • 2. Envirometrix Ltd

Description

Copernicus Land Monitoring Services provides Surface Soil Moisture 2014-present (raster 1 km), Europe, daily – version 1. Each day covers only 5 to 10% of European land mask and shows lines of scenes (obvious artifacts). This is the long-term aggregates of daily images of soil moisture (0–100%) based on two types of aggregation:

  • Long-term quarterly (qr.1 - winter, qr.2 - spring, qr.3 - summer and qr.4 - autumn),
  • Annual quantiles P.05, P.50 and P.95,

The soil moisture rasters are based on Sentinel 1 and described in detail in: 

  • Bauer-Marschallinger, B. ; Freeman, V. ; Cao, S. ; Paulik, C. ; Schaufler, S. ; Stachl, T. ; Modanesi, S. ; Massari, C. ; Ciabatta, L. ; Brocca, L. ; Wagner, W. Toward Global Soil Moisture Monitoring With Sentinel-1: Harnessing Assets and Overcoming Obstacles. IEEE Transactions on Geoscience and Remote Sensing 2019, 1 - 20. DOI 10.1109/TGRS.2018.2858004

You can access and download the original data as .nc files from: https://globalland.vito.be/download/manifest/ssm_1km_v1_daily_netcdf/.

The files with pattern "soil.moisture_s1.clms.qr.*.p0.*.gf_m_1km_20140101_20241231_eu_epsg4326_v20250211.tif" are the gap-filled soil moisture quarterly estimates. For gap filling I build a model using cca 250k random training points and relationship with CHELSA climate bioclimatic variables, ESA CCI snow cover probability, ESA CCI forest and bare areas percent cover and Global Water Pack long-term surface water fraction. The gap-filling model had an R-square of 0.96 and RMSE of 6.5% of soil moisture.

Aggregation has been generated using the terra package in R in combination with the matrixStats::rowQuantiles function. Tiling system and land mask for pan-EU is also available.

library(terra)
library(matrixStats)
g1 = terra::vect("/mnt/inca/EU_landmask/tilling_filter/eu_ard2_final_status.gpkg")
## 1254 tiles
tile = g1[534]
nc.lst = list.files('/mnt/landmark/SM1km/ssm_1km_v1_daily_netcdf/', pattern = glob2rx("*.nc$"), full.names=TRUE)
## 3726
## test it
#r = terra::rast(nc.lst[100:210])

agg_tile = function(r, tile, pv=c(0.05,0.5,0.95), out.year="2015.annual"){
  bb = paste(as.vector(ext(tile)), collapse = ".")
  out.tif = paste0("./eu_tmp/", out.year, "/sm1km_", pv, "_", out.year, "_", bb, ".tif")
  if(any(!file.exists(out.tif))){
    r.t = terra::crop(r, ext(tile))
    r.t = as.data.frame(r.t, xy=TRUE, na.rm=FALSE)
    sel.c = grep(glob2rx("ssm$"), colnames(r.t))
    t1s = cbind(data.frame(matrixStats::rowQuantiles(as.matrix(r.t[,sel.c]), probs = pv, na.rm=TRUE)),  data.frame(x=r.t$x,  y=r.t$y))
    ## write to GeoTIFFs
    r.o = terra::rast(t1s[,c("x","y","X5.","X50.","X95.")], type="xyz", crs="+proj=longlat +datum=WGS84 +no_defs")
    for(k in 1:length(pv)){ 
      terra::writeRaster(r.o[[k]], filename=out.tif[k], gdal=c("COMPRESS=DEFLATE"), datatype='INT2U', NAflag=32768, overwrite=FALSE)
    }
    rm(r.t); gc()
    tmpFiles(remove=TRUE)
  }
}

## quarterly values:
lA = data.frame(filename=nc.lst)
library(lubridate)
lA$Date = ymd(sapply(lA$filename, function(i){substr(strsplit(basename(i), "_")[[1]][4], 1, 8)}))
#summary(is.na(lA$Date))
#hist(lA$Date, breaks=60)
lA$quarter = quarter(lA$Date, fiscal_start = 11)
summary(as.factor(lA$quarter))

for(qr in 1:4){
  #qr=1
  pth = paste0("A.q", qr)
  rs = terra::rast(lA$filename[lA$quarter==qr])
  x = parallel::mclapply(sample(1:length(g1)), function(i){try( agg_tile(rs, tile=g1[i], out.year=pth) )}, mc.cores=20)
  for(type in c(0.05,0.5,0.95)){
    x <- list.files(path=paste0("./eu_tmp/", pth), pattern=glob2rx(paste0("sm1km_", type, "_*.tif$")), full.names=TRUE)
    out.tmp <- paste0(pth, ".", type, ".sm1km_eu.txt")
    vrt.tmp <- paste0(pth, ".", type, ".sm1km_eu.vrt")
    cat(x, sep="\n", file=out.tmp)
    system(paste0('gdalbuildvrt -input_file_list ', out.tmp, ' ', vrt.tmp))
    system(paste0('gdal_translate ', vrt.tmp, ' ./cogs/soil.moisture_s1.clms.qr.', qr, '.p', type, '_m_1km_20140101_20241231_eu_epsg4326_v20250206.tif -ot "Byte" -r "near" --config GDAL_CACHEMAX 9216 -co BIGTIFF=YES -co NUM_THREADS=80 -co COMPRESS=DEFLATE -of COG -projwin -32 72 45 27'))
  }
}

## per year ----
for(year in 2015:2023){
  l.lst = nc.lst[grep(year, basename(nc.lst))]
  r = terra::rast(l.lst)
  pth = paste0(year, ".annual")
  x = parallel::mclapply(sample(1:length(g1)), function(i){try( agg_tile(r, tile=g1[i], out.year=pth) )}, mc.cores=40)
  ## Mosaics:
  for(type in c(0.05,0.5,0.95)){
    x <- list.files(path=paste0("./eu_tmp/", pth), pattern=glob2rx(paste0("sm1km_", type, "_*.tif$")), full.names=TRUE)
    out.tmp <- paste0(pth, ".", type, ".sm1km_eu.txt")
    vrt.tmp <- paste0(pth, ".", type, ".sm1km_eu.vrt")
    cat(x, sep="\n", file=out.tmp)
    system(paste0('gdalbuildvrt -input_file_list ', out.tmp, ' ', vrt.tmp))
    system(paste0('gdal_translate ', vrt.tmp, ' ./cogs/soil.moisture_s1.clms.annual.', type, '_m_1km_', year, '0101_', year, '1231_eu_epsg4326_v20250206.tif -ot "Byte" -r "near" --config GDAL_CACHEMAX 9216 -co BIGTIFF=YES -co NUM_THREADS=80 -co COMPRESS=DEFLATE -of COG -projwin -32 72 45 27'))
  }
}

Files

00_gapfilling_soilmoisture_EU.gif

Files (605.8 MB)

Name Size
md5:982e8332b4663ca35e735f99a6522f6a
3.4 MB Preview Download
md5:0aecb34b11a9084a38777ea42589f090
2.1 MB Preview Download
md5:ff16ef25fad3f325442285065760df12
2.3 MB Preview Download
md5:e579434b5fa33483e5092d417405cc83
10.7 MB Preview Download
md5:5d770f6bda2f269e1b4683e1cf68156c
12.3 MB Preview Download
md5:4d2226332f93483955e80bdbc7a7d5b5
14.8 MB Preview Download
md5:20def777a82c5ffc205d9daa3934111f
14.9 MB Preview Download
md5:e7327c5d8b3a3920a8f432e90a174bb3
12.6 MB Preview Download
md5:5486be9496185a7715c4af8255a87726
12.2 MB Preview Download
md5:c52b4a21a699f5169a586ea7dd8cd97e
29.3 MB Preview Download
md5:1649fdd3ee8b206cebfd0a3a1300b8ac
15.8 MB Preview Download
md5:7857d529db48db2ca33bc0b91d05837b
9.1 MB Preview Download
md5:b586bcad482aa51538ac9666f854022e
8.1 kB Download
md5:100da2488d7b201b4277c06f07afd6e2
11.2 MB Preview Download
md5:a3f8f6039a7c62b80aaaa79e3fdfd2b3
13.3 MB Preview Download
md5:6969453d665167b0efee1ea2756612e3
478.9 kB Preview Download
md5:08518ef5ee112f5f14545c06feefb0b5
9.1 MB Preview Download
md5:98811411398152fda743afc35d3b63ab
8.0 MB Preview Download
md5:b3404ba7aacd158476274775b6e4f93a
7.4 MB Preview Download
md5:729fb9f96f594cef9acc4efa1b1faaf7
7.7 MB Preview Download
md5:8d4c14feaa26276c58ba15e51783d1a9
8.2 MB Preview Download
md5:2831446d9b62ecf6c63a7b0ab500e1d9
8.2 MB Preview Download
md5:2f7bf6a911a31dabb6a7e05d8cb675a9
8.2 MB Preview Download
md5:6f62d2d5713a7b9be37ec408957c86b9
7.8 MB Preview Download
md5:a82ad678e87d60aee16ca9a311c5267d
8.0 MB Preview Download
md5:b43d2897f0d82b464bc2a0a0cb029f6d
8.9 MB Preview Download
md5:fef8ec926b6f665a25d862d23e8c3bc5
8.8 MB Preview Download
md5:cebbea2c6957a7fb7a4174aec6504601
8.6 MB Preview Download
md5:0a05330403729d822468cc9e738b42ff
8.8 MB Preview Download
md5:b231cc216966c8c3c6ef2438ffb8c8dc
9.0 MB Preview Download
md5:c9188c5e2e3171594c405ad64c561bf4
9.0 MB Preview Download
md5:a75d8069de664a5bd86733444324abdc
9.2 MB Preview Download
md5:2bde93fe04c60e2e58d162433af3b8c7
9.3 MB Preview Download
md5:5c7b7d9ffbcfdd46efac88ba42f60943
9.4 MB Preview Download
md5:e339ba59df58c8864625b9ecf1ccde55
5.6 MB Preview Download
md5:795eac5b1b332c2bc4c98f8a9eb7cf33
8.0 MB Preview Download
md5:ededbded71530777adb88d63bf22b508
7.9 MB Preview Download
md5:718bc089e08eee8c282d4ae2f0a4720e
7.7 MB Preview Download
md5:f3d396404a5330b3f9a6d48d30cc636d
8.1 MB Preview Download
md5:1f27f9e9382c0e3e5466c9546f09c363
7.7 MB Preview Download
md5:f6a6cc874a41a0842fc84bddea13c7f6
8.0 MB Preview Download
md5:7cf1c7d908d7b4442e3846a5aaeaffcd
8.4 MB Preview Download
md5:7495deaa5a08166354eb1c3f9eda3bb2
8.3 MB Preview Download
md5:0948e5ab10fd1e9e59b6712cf5296d99
7.9 MB Preview Download
md5:5803e837b0bb2e6aec5e678e5b305bdb
6.7 MB Preview Download
md5:c6afd5dc36cad12d6405cbd1bbb6a797
10.1 MB Preview Download
md5:c77faa7ca599048179fc9d3a7f78f043
8.6 MB Preview Download
md5:42c46b8dc0b700550b77c031f33c17ce
8.7 MB Preview Download
md5:4c0c47b570f3da06a6486bd5d1b97a6e
7.5 MB Preview Download
md5:d4a726c9d3fd17c88e5102377e54f2c8
7.7 MB Preview Download
md5:078efb66c671e34bece0847c6cbd560c
6.7 MB Preview Download
md5:d195769c0a8f8dfa835e8500a785e76a
10.4 MB Preview Download
md5:949db9efdf542439bb87c73945851efd
8.9 MB Preview Download
md5:8e929ac324b6926e8acaf29857ebb8c8
9.2 MB Preview Download
md5:7c33b45c01f675a5c932dc354a5267b1
7.9 MB Preview Download
md5:eb135494fc673545ce4ee91dc8246c74
10.3 MB Preview Download
md5:df09904db363e9c8996e869eded2662c
9.0 MB Preview Download
md5:16279fe1b1a570bdeaf0b83a90241b99
10.7 MB Preview Download
md5:9db382d04df141009464ab631b3341ca
9.1 MB Preview Download
md5:d2ce655559f62ed1de111f23654a50b5
9.0 MB Preview Download
md5:0b472ef9100e2b88c80bb865e43c0025
7.8 MB Preview Download
md5:a1762f3810af97a5b6e3f60ee58b6239
10.0 MB Preview Download
md5:65d66e718fb663eac0e71397226bb82a
8.6 MB Preview Download
md5:651972b35c6a045979d4d7c705b1ff80
10.2 MB Preview Download
md5:d54bb4ff48d99ee69ecbbb52919dd4ad
8.7 MB Preview Download
md5:b84e023579cc4ff4c0b35c11ff028d99
9.0 MB Preview Download
md5:4322dec726ed97743b0d816a51ca9b22
7.8 MB Preview Download
md5:cf0b57f18b945cb3e39de188d9d148a0
7.6 MB Preview Download

Additional details

Related works

Cites
Dataset: 10.5281/zenodo.8171860 (DOI)

Funding

European Commission
AI4SoilHealth - AI4SoilHealth: Accelerating collection and use of soil health information using AI technology to support the Soil Deal for Europe and EU Soil Observatory 101086179

Dates

Created
2025-02-06

Software

Programming language
R

References

  • Bauer-Marschallinger, B. ; Freeman, V. ; Cao, S. ; Paulik, C. ; Schaufler, S. ; Stachl, T. ; Modanesi, S. ; Massari, C. ; Ciabatta, L. ; Brocca, L. ; Wagner, W. Toward Global Soil Moisture Monitoring With Sentinel-1: Harnessing Assets and Overcoming Obstacles. IEEE Transactions on Geoscience and Remote Sensing 2019, 1 - 20. DOI 10.1109/TGRS.2018.2858004