L2A — Ground Elevation & Canopy Height¶
Version 2 — User Guide · ATBD Version 3 — User Guide · Data dictionary
Overview¶
GEDI L2A provides ground elevation, canopy height metrics, and relative height (RH) metrics for each GEDI footprint. Data is organized by 8 beams.
Quick Start¶
using SpaceAltimetry, DataFrames
g = granule("GEDI02_A_2020257225350_O09946_02_T08506_02_004_02_V003.h5")
t = table(g)
df = DataFrame(t)
Default Columns¶
| Column | HDF5 Path | Type |
|---|---|---|
longitude |
lon_lowestmode |
Float64 |
latitude |
lat_lowestmode |
Float64 |
height |
elev_lowestmode |
Float32 |
height_error |
elevation_bin0_error |
Float32 |
datetime |
delta_time |
DateTime |
intensity |
energy_total |
Float32 |
sensitivity |
sensitivity |
Float32 |
surface |
surface_flag |
Bool |
quality |
l2a_quality_flag_rel3 |
Bool |
nmodes |
num_detectedmodes |
UInt8 |
sun_angle |
solar_elevation |
Float32 |
height_reference |
digital_elevation_model |
Float32 |
strong_beam |
attribute | — |
Default Tracks¶
Canopy Heights¶
Use gedi_l2a_canopy_variables(g) to read highest return instead of lowest mode:
Passing the granule picks the quality flag of its product version; without it the version 3 flag is used.
This reads elev_highestreturn / lon_highestreturn / lat_highestreturn.
Quality Filtering¶
The GEDI.Quality filter auto-loads the receive assessment, stale/degrade, amplitude, and selected algorithm fields required by the full points(g; filtered=true) predicate. The optional GEDI.Sensitivity filter keeps gt < sensitivity <= 1.0; gt defaults to 0.9.
Version 3¶
Version 3 (PGE 004, filenames ending in _V003.h5) is the default since it was released in 2026. It is read with the same schema as version 2, with these differences (GEDI Level 2 User Guide V3.0, section 7.1):
| version 2 | version 3 | |
|---|---|---|
quality column |
quality_flag |
l2a_quality_flag_rel3: the version 2 conditions plus sensitivity_a2 > 0.95 over land (> 0.98 in tropical forest) and elev_highestreturn − digital_elevation_model < 150 m. The version 2 flag is still in the file as l2a_quality_flag_rel2. |
| algorithm setting groups | 1–6 | 1, 2, 5, 10 |
GEDI.Quality algorithm checks |
rx_processing_aN/{rx_algrunflag, zcross, toploc} of the selected group |
l2_algrunflag, which combines the same checks and adds 0 < sensitivity < 1 |
gs = search(:GEDI, :GEDI02_A; extent = extent) # version 3 (default)
gs2 = search(:GEDI, :GEDI02_A; version = 2, extent = extent) # version 2
selected_algorithm in version 3
In version 3 files, selected_algorithm keeps the version 2 valid_range of 1–6, but shots also use group 10. Because nodata masking honours valid_range, those shots read as missing when you add selected_algorithm as a column. GEDI.Quality uses l2_algrunflag instead, so it is not affected.