Surface soil moisture for Europe 2014-2024 at 1 km annual and quarterly aggregates
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/.
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))
## each tile is 100x100 pixels 365 days
r.t = as.data.frame(r.t, xy=TRUE, na.rm=FALSE)
sel.c = grep(glob2rx("ssm$"), colnames(r.t))
## remove everything outside the range
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))
#str(t1s)
## 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])
#agg_tile(rs, tile, out.year=pth)
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)
## test it:
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_soil.moisture_quarterly_long.term.png
Files
(322.8 MB)
Name | Size | Download all |
---|---|---|
md5:0aecb34b11a9084a38777ea42589f090
|
2.1 MB | 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:5803e837b0bb2e6aec5e678e5b305bdb
|
6.7 MB | Preview Download |
md5:c77faa7ca599048179fc9d3a7f78f043
|
8.6 MB | Preview Download |
md5:4c0c47b570f3da06a6486bd5d1b97a6e
|
7.5 MB | Preview Download |
md5:078efb66c671e34bece0847c6cbd560c
|
6.7 MB | Preview Download |
md5:949db9efdf542439bb87c73945851efd
|
8.9 MB | Preview Download |
md5:7c33b45c01f675a5c932dc354a5267b1
|
7.9 MB | Preview Download |
md5:df09904db363e9c8996e869eded2662c
|
9.0 MB | Preview Download |
md5:9db382d04df141009464ab631b3341ca
|
9.1 MB | Preview Download |
md5:0b472ef9100e2b88c80bb865e43c0025
|
7.8 MB | Preview Download |
md5:65d66e718fb663eac0e71397226bb82a
|
8.6 MB | Preview Download |
md5:d54bb4ff48d99ee69ecbbb52919dd4ad
|
8.7 MB | Preview Download |
md5:4322dec726ed97743b0d816a51ca9b22
|
7.8 MB | Preview Download |
Additional details
Related works
- Cites
- Dataset: 10.5281/zenodo.8171860 (DOI)
Funding
Dates
- Created
-
2025-02-06