Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

earth and related environmental sciences

Open Sentinel-3-OLCI-Level-1-EFR Data with GDAL and eopfzarr

Authors
Affiliations
Eurac Research
Eurac Research
ESA EOPF Zarr Logo

This Jupyter notebook demonstrates how to open Sentinel-3-OLCI-Level-1-EFR data using GDAL, the eopfzarr plugin, mirroring the structure and functionality of the xarray-eopf example notebook for Sentinel-3.

Key features demonstrated:

  • GDAL native approach: Direct access to Zarr subdatasets

  • xarray-style visualization: Simple plotting with robust=True

  • Geographic coordinates: Latitude/longitude access like xarray-eopf analysis mode

  • Multi-product exploration: OLCI L1/L2 and SLSTR products

Products covered:

  • Sentinel-3 OLCI Level-1 EFR (TOA radiances, full resolution)

🚀 Launch in JupyterHub

Run this notebook interactively with all dependencies pre-installed

Setup and Imports

Import the necessary libraries for working with GDAL, xarray, and visualization tools.

Explore OLCI L1 EFR Structure

Open the Sentinel-3 OLCI Level-1 EFR product and explore its structure, including available subdatasets.

Driver: EOPFZARR
Projection (CRS): GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]]
GeoTransform: (18.4535, 0.031338476563, 0.0, -21.0585, 0.0, -0.02630859375)
Available Subdatasets for OLCI L1 EFR:
  /conditions/geometry/latitude
  /conditions/geometry/longitude
  /conditions/geometry/oaa
  /conditions/geometry/oza
  /conditions/geometry/saa
  /conditions/geometry/sza
  /conditions/image/altitude
  /conditions/image/detector_index
  /conditions/image/frame_offset
  /conditions/image/latitude
  /conditions/image/longitude
  /conditions/instrument/fwhm
  /conditions/instrument/lambda0
  /conditions/instrument/relative_spectral_covariance
  /conditions/instrument/solar_flux
  /conditions/meteorology/atmospheric_temperature_profile
  /conditions/meteorology/horizontal_wind
  /conditions/meteorology/humidity
  /conditions/meteorology/sea_level_pressure
  /conditions/meteorology/total_columnar_water_vapour
  /conditions/meteorology/total_ozone
  /conditions/orphans/altitude
  /conditions/orphans/detector_index
  /conditions/orphans/frame_offset
  /conditions/orphans/latitude
  /conditions/orphans/longitude
  /conditions/orphans/sza
  /measurements/latitude
  /measurements/longitude
  /measurements/oa01_radiance
  /measurements/oa02_radiance
  /measurements/oa03_radiance
  /measurements/oa04_radiance
  /measurements/oa05_radiance
  /measurements/oa06_radiance
  /measurements/oa07_radiance
  /measurements/oa08_radiance
  /measurements/oa09_radiance
  /measurements/oa10_radiance
  /measurements/oa11_radiance
  /measurements/oa12_radiance
  /measurements/oa13_radiance
  /measurements/oa14_radiance
  /measurements/oa15_radiance
  /measurements/oa16_radiance
  /measurements/oa17_radiance
  /measurements/oa18_radiance
  /measurements/oa19_radiance
  /measurements/oa20_radiance
  /measurements/oa21_radiance
  /measurements/orphans/altitude
  /measurements/orphans/latitude
  /measurements/orphans/longitude
  /measurements/orphans/oa01_radiance
  /measurements/orphans/oa02_radiance
  /measurements/orphans/oa03_radiance
  /measurements/orphans/oa04_radiance
  /measurements/orphans/oa05_radiance
  /measurements/orphans/oa06_radiance
  /measurements/orphans/oa07_radiance
  /measurements/orphans/oa08_radiance
  /measurements/orphans/oa09_radiance
  /measurements/orphans/oa10_radiance
  /measurements/orphans/oa11_radiance
  /measurements/orphans/oa12_radiance
  /measurements/orphans/oa13_radiance
  /measurements/orphans/oa14_radiance
  /measurements/orphans/oa15_radiance
  /measurements/orphans/oa16_radiance
  /measurements/orphans/oa17_radiance
  /measurements/orphans/oa18_radiance
  /measurements/orphans/oa19_radiance
  /measurements/orphans/oa20_radiance
  /measurements/orphans/oa21_radiance
  /quality/latitude
  /quality/longitude
  /quality/oa01_radiance_unc
  /quality/oa02_radiance_unc
  /quality/oa03_radiance_unc
  /quality/oa04_radiance_unc
  /quality/oa05_radiance_unc
  /quality/oa06_radiance_unc
  /quality/oa07_radiance_unc
  /quality/oa08_radiance_unc
  /quality/oa09_radiance_unc
  /quality/oa10_radiance_unc
  /quality/oa11_radiance_unc
  /quality/oa12_radiance_unc
  /quality/oa13_radiance_unc
  /quality/oa14_radiance_unc
  /quality/oa15_radiance_unc
  /quality/oa16_radiance_unc
  /quality/oa17_radiance_unc
  /quality/oa18_radiance_unc
  /quality/oa19_radiance_unc
  /quality/oa20_radiance_unc
  /quality/oa21_radiance_unc
  /quality/quality_flags
  /quality/orphans/altitude
  /quality/orphans/latitude
  /quality/orphans/longitude
  /quality/orphans/oa01_radiance_unc
  /quality/orphans/oa02_radiance_unc
  /quality/orphans/oa03_radiance_unc
  /quality/orphans/oa04_radiance_unc
  /quality/orphans/oa05_radiance_unc
  /quality/orphans/oa06_radiance_unc
  /quality/orphans/oa07_radiance_unc
  /quality/orphans/oa08_radiance_unc
  /quality/orphans/oa09_radiance_unc
  /quality/orphans/oa10_radiance_unc
  /quality/orphans/oa11_radiance_unc
  /quality/orphans/oa12_radiance_unc
  /quality/orphans/oa13_radiance_unc
  /quality/orphans/oa14_radiance_unc
  /quality/orphans/oa15_radiance_unc
  /quality/orphans/oa16_radiance_unc
  /quality/orphans/oa17_radiance_unc
  /quality/orphans/oa18_radiance_unc
  /quality/orphans/oa19_radiance_unc
  /quality/orphans/oa20_radiance_unc
  /quality/orphans/oa21_radiance_unc
  /quality/orphans/quality_flags

Simple Plotting with xarray-style

Create simple plots using xarray-style syntax, similar to the xarray-eopf approach.

Creating xarray-style plots similar to xarray-eopf notebook...
<Figure size 800x600 with 2 Axes>
✅ This is equivalent to: ds.oa01_radiance[::4, ::4].plot(robust=True) in xarray-eopf

Geographic Coordinates: Latitude and Longitude

Sentinel-3 OLCI products include latitude and longitude coordinates for each pixel. Let’s explore how to access and visualize these with GDAL eopfzarr, similar to the xarray-eopf analysis mode.

Exploring available coordinate datasets in OLCI L1 EFR...
Available coordinate datasets:
  /conditions/geometry/latitude
  /conditions/geometry/longitude
  /conditions/geometry/oaa
  /conditions/geometry/oza
  /conditions/geometry/saa
  /conditions/geometry/sza
  /conditions/image/latitude
  /conditions/image/longitude
  /conditions/instrument/relative_spectral_covariance
  /conditions/orphans/latitude
  /conditions/orphans/longitude
  /measurements/latitude
  /measurements/longitude
  /measurements/orphans/latitude
  /measurements/orphans/longitude
  /quality/latitude
  /quality/longitude
  /quality/orphans/latitude
  /quality/orphans/longitude
Loading Oa01 radiance with geographic coordinates...
Using measurements group paths: /measurements/latitude, /measurements/longitude

✓ Successfully loaded geographic coordinates!
  Data shape: (800, 800)
  Latitude range: -23.643 to -21.059
  Longitude range: 21.465 to 24.124
Demonstrating geographic plotting - xarray-eopf analysis mode equivalent:
xarray-eopf: ds.oa01_radiance[::4, ::4].plot(x='longitude', y='latitude', robust=True)
Our GDAL eopfzarr equivalent:
<Figure size 1600x1200 with 8 Axes>
✅ Successfully demonstrated geographic coordinate access with GDAL eopfzarr!
✅ Coordinates directly accessible from /measurements/latitude and /measurements/longitude

Simple geographic plotting (xarray-eopf style one-liner equivalent):
<Figure size 1400x1000 with 2 Axes>
✅ GDAL eopfzarr successfully replicates xarray-eopf analysis mode geographic plotting!
✅ Direct access to lat/lon from measurements group enables full geographic analysis

Geographic Coordinate Comparison: GDAL vs xarray-eopf

xarray-eopf analysis mode approach:

# Analysis mode automatically handles coordinates
ds = xr.open_dataset(url, engine="eopf-zarr", op_mode="analysis")
ds.oa01_radiance.plot(x='longitude', y='latitude', robust=True)

# Manual coordinate loading and geographic plotting
da = gdal_to_xarray_with_coords(olci_l1_efr_url, 'measurements/oa01_radiance', 'measurements/latitude', 'measurements/longitude')
plt.pcolormesh(da.longitude, da.latitude, da.values)