Releases: openlandmap/GEDTM30
GEDTM v1.1 Update
Technical documentation:
Project landing page - link
Contact: [email protected]
Update about adjustment according to spotted issues
1. Water body
The GEDTM30 terrain height product exhibits unrealistic or noisy elevation values over permanent water bodies (e.g., oceans, lakes, the Caspian Sea). This is primarily due to the incorporation of auxiliary datasets, specifically Landsat-derived biophysical indices and ETOPO2022 slope in degrees, alongside DSMs during model inference.
While these auxiliary layers enhance land-surface predictions, they degrade accuracy over water surfaces:
-
Landsat biophysical indices introduce noise over water due to their optical sensitivity to surface reflectance variability, which is not correlated with topography.
-
ETOPO2022, although valuable in terrestrial regions, includes bathymetric data that is fundamentally incompatible with the elevation specifications of GEDTM30.
These auxiliary features interfere with machine learning-based filtering of vegetation and man-made structures, resulting in artifacts where the model misinterprets water surfaces as containing elevation features.
Fig. 1 GEDTM v1 contains unrealistic water surface noise. Image attributed to @hannesaddec, spotted by @neodescis, @hannesaddec and @robbibt
To mitigate this without fundamentally altering the model architecture, we integrated the JRC Global Surface Water (GSW) dataset as a reference to identify water pixels. The underlying assumption is that persistent water bodies (excluding features like mangroves, canals, and large vessels, which JRC classifies as land) are devoid of buildings or tall vegetation.
Fig. 2 JRC surface water at 30m resolution (Pekel, 2016)
Using this, we constructed a water surface mask. For all auxiliary covariates—excluding ALOS AW3D30 and GLO30—pixels corresponding to masked water areas were set to neutral values (e.g., 0 height, NDVI = -1), effectively removing spurious contributions from non-topographic sources. Comparison result of GLO30, ALOS, GEDTM v1.0 and v1.1 is showed below (Fig 3 & 4).
#pseudo code to create surface water mask and replace covariates' pixel value
surface_water_mask = surface_water > 20
covariates_matrix[covariates_except_for_GLO30_ALOS, surface_water] = 0
Fig. 3 Visual comparison of GEDTM30 v1 and GEDTM30 v1.1.
Fig. 4 Comparing multidirectional hillshade among GLO30, ALOS AW3D30m, GEDTM30 v1, GEDTM30 v1.1.
Limitations
Despite masking, ALOS AW3D30 and GLO30 retain elevation variability over water surfaces. Notably, ALOS occurs to exhibit lower elevation values near lake edges compared to lake centers, likely due to its photogrammetry characteristics.
Several mitigation strategies were
- Replacing water pixels with ETOPO2022 values: Introduced resolution mismatches and abrupt elevation transitions at lake boundaries.
- Substituting ALOS water pixels with GLO30 values prior to training model: Led to topographical inconsistencies, such as lake surfaces being elevated above adjacent land.
- Post-hoc replacement of predicted water pixels with GLO30: Yielded similarly degraded results.
As with most global terrain products, GEDTM30 is best used in conjunction with a water mask (e.g., JRC-GSW) to exclude water surfaces. We still keep pixel for ML use cases internally but we strongly encourage to mask out water surface for hydrology and topography analysis. The JRC-GSW dataset is publicly available and facilitates reproducibility and community-driven refinement of GEDTM30 at any scale (local, regional, global). Users are also permitted to modify licensing as needed to support downstream applications.
2. Tile Boundary Inconsistencies
GEDTM30 exhibits discontinuities at tile boundaries, manifesting as abrupt changes in elevation values (see Fig 5). These artifacts arise from the global-to-local model refinement process, which uses warm_start=True to accelerate convergence during local model fine-tuning. This strategy improves training efficiency and preserves global-scale consistency but introduces limitations:
- Inability to extrapolate across tile boundaries.
- Increased sensitivity to noise, particularly where terrain variability is high near edges.
Fig. 5 Inconsistency spotted by @robbibt. Image attributed by @robbibt in issue #4
Empirical analysis shows that global-to-local standard deviation increases relative to the global model in these boundary regions. This indicates that added decision trees in the refinement phase may overfit local noise, particularly at topographic peaks near tile edges.
Resolution Strategy
To address these inconsistencies, we implemented a statistical post-processing method to conditionally select local improvements. The procedure is as follows:
(1) Generate:
- Global model predictions
- Global-to-local model predictions
- Global standard deviation
- Global-to-local standard deviation
(2) Compute a mask ("local_improvement"): A boolean mask where global-to-local standard deviation is less than that of the global model.
(3) Apply substitution:
For pixels where the mask is True, replace global prediction and standard deviation with their global-to-local counterparts. Below is the pseudo code for pixel replacement algorithm.
global_m, global_std = model.predict(X_global) # global prediction
model.fit(extra_local_samples, warm_start=True)
local_m, local_std = model.predict(X_local) # local prediction with extra local samples
local_improvement = global_std >= local_std
global_m[local_improvement] = local_m[local_improvement]
global_std[local_improvement] = local_std[local_improvement]
global_local_mask = local_improvement.astype(int)
save_raster(global_std,global_m,local_improvement.astype(int))
This selective replacement reduces boundary discontinuities while preserving the benefits of local adaptation. Figure 6 illustrates the replacement framework and Figure 7 showcases the result as improving tile consistency at Etna Mountain, Italy.
Fig. 6 The pipeline of updating global-to-local modeling to avoid tile inconsistency.
3. Vertical datum
We have registered vertical datum as EGM2008 (right code), compatible with CoperincusDEM and ALOS AW3D30.
4. Layers update
Here is the list of the update and additional layers. For the dataset reference please visit our Zenodo repository (10.5281/zenodo.15645631).
-
Global Ensemble Digital Terrain Model:
https://s3.opengeohub.org/global/edtm/gedtm_rf_m_30m_s_20060101_20151231_go_epsg.4326.3855_v20250611.tif -
Standard deviation of GEDTM30 prediction:
https://s3.opengeohub.org/global/edtm/gedtm_rf_std_30m_s_20060101_20151231_go_epsg.4326.3855_v20250611.tif -
Global-to-local pixel selection mask:
https://s3.opengeohub.org/global/edtm/gedtm_mask_c_30m_s_20060101_20151231_go_epsg.4326.3855_v20250611.tif
Below is the overview of the new Global-to-local pixel selection mask:
The new release of data is updated on our Zenodo repository (https://zenodo.org/records/15689805).
Reference
Pekel, J.-F., Cottam, A., Gorelick, N., and Belward, A.S. (2016). High-resolution mapping of global surface water and its long-term changes. Nature, 540(4), 418-422. doi:10.1038/nature20584
Full Changelog: https://github.com/openlandmap/GEDTM30/commits/v1.1