Working with Sentinel-3 in Julia SentinelDataSource.jl package
Direct access to analysis-ready data cubes

Table of Contents¶
Run this notebook interactively with all dependencies pre-installed
Introduction¶
SentinelDataSource.jl is a Julia package that extends DimensionalData to load EOPF Zarr data. This backend enables seamless access to ESA EOPF data products stored in the Zarr format, presenting them as analysis-ready data structures.
This notebook demonstrates how to use the SentinelDataSource package to explore and analyze EOPF Zarr datasets. It highlights the key features currently supported.
🐙 GitHub: JuliaGeo SentinelDataSource
❗ Issue Tracker: Submit or view issues
Install the SentinelDataSource package¶
The SentinelDataSource package can be installed as any Julia package via the internal package manager.
] add https://github.com/JuliaGeo/SentinelDataSource.jl.gitImport Package¶
The SentinelDataSource package is the library to open EOPF datasets. This is integrated into the DimensionalData ecosystem and the JuliaGeo ecosystem.
using SentinelDataSource
using YAXArraysMain Features of the SentinelDataSource package¶
The SentinelDataSource package will at the moment open the EOPF datasets in Native Mode and will return a DimTree of the data.
Open the Product in Native Mode¶
Sentinel-3 data¶
We begin with a simple example by accessing a Sentinel-3 product in native mode. To obtain the product URL, you can use the STAC Browser to locate a tile and retrieve the URL from the “EOPF Product” asset.
path = "https://objects.eodc.eu:443/e05ab01a9d56408d82ac32d69a5aae2a:202603-s03olcefr-eu/13/products/cpm_v262/S3B_OL_1_EFR____20260313T100048_20260313T100348_20260314T100820_0180_117_350_2160_ESA_O_NT_004.zarr""https://objects.eodc.eu:443/e05ab01a9d56408d82ac32d69a5aae2a:202603-s03olcefr-eu/13/products/cpm_v262/S3B_OL_1_EFR____20260313T100048_20260313T100348_20260314T100820_0180_117_350_2160_ESA_O_NT_004.zarr"We can use SentinelDataSource.open_datatree to open the EOPF Zarr product as an DimensionalData.DimTree.
dts3 = SentinelDataSource.open_tree(path)┌ DimTree ┐
├ branches ┤
:measurements dims: columns, rows size: 4865×4091 layers: :oa05_radiance, :altitude, :time_stamp, :oa10_radiance, :oa15_radiance, :oa06_radiance, :oa01_radiance, :oa07_radiance, :oa18_radiance, :oa19_radiance, :oa02_radiance, :oa21_radiance, :oa08_radiance, :oa14_radiance, :oa20_radiance, :oa16_radiance, :oa17_radiance, :oa03_radiance, :latitude, :oa13_radiance, :oa12_radiance, :oa09_radiance, :longitude, :oa11_radiance, :oa04_radiance
└─ :orphans dims: removed_pixels, rows size: 150×4091 layers: :oa10_radiance, :altitude, :oa15_radiance, :oa05_radiance, :oa06_radiance, :oa01_radiance, :oa07_radiance, :oa18_radiance, :oa19_radiance, :oa02_radiance, :oa21_radiance, :oa08_radiance, :oa14_radiance, :oa20_radiance, :oa16_radiance, :oa17_radiance, :oa03_radiance, :oa13_radiance, :latitude, :oa12_radiance, :longitude, :oa09_radiance, :oa11_radiance, :oa04_radiance
:conditions
├─ :instrument dims: bands2, bands, detectors size: 21×21×3700 layers: :relative_spectral_covariance, :fwhm, :lambda0, :solar_flux
├─ :image dims: columns, rows size: 4865×4091 layers: :altitude, :time_stamp, :latitude, :detector_index, :longitude, :frame_offset
├─ :geometry dims: columns, rows size: 77×4091 layers: :latitude, :sza, :oza, :longitude, :oaa, :saa
├─ :meteorology dims: columns, rows, wind_vector, pressure_level size: 77×4091×2×25 layers: :latitude, :horizontal_wind, :total_columnar_water_vapour, :longitude, :humidity, :sea_level_pressure, :atmospheric_temperature_profile, :total_ozone
└─ :orphans dims: removed_pixels, rows size: 150×4091 layers: :altitude, :latitude, :sza, :detector_index, :nb_removed_pixels, :longitude, :frame_offset
:quality dims: columns, rows size: 4865×4091 layers: :altitude, :oa12_radiance_unc, :time_stamp, :oa16_radiance_unc, :oa03_radiance_unc, :oa04_radiance_unc, :oa17_radiance_unc, :oa07_radiance_unc, :oa13_radiance_unc, :oa19_radiance_unc, :oa02_radiance_unc, :oa09_radiance_unc, :quality_flags, :oa01_radiance_unc, :oa15_radiance_unc, :oa21_radiance_unc, :oa06_radiance_unc, :oa14_radiance_unc, :oa10_radiance_unc, :latitude, :oa20_radiance_unc, :oa11_radiance_unc, :longitude, :oa08_radiance_unc, :oa18_radiance_unc, :oa05_radiance_unc
└─ :orphans dims: removed_pixels, rows, dim_1, dim_0 size: 150×4091×150×4091 layers: :altitude, :oa12_radiance_unc, :oa16_radiance_unc, :oa03_radiance_unc, :oa04_radiance_unc, :oa17_radiance_unc, :oa07_radiance_unc, :oa13_radiance_unc, :oa02_radiance_unc, :oa19_radiance_unc, :oa09_radiance_unc, :oa01_radiance_unc, :quality_flags, :oa15_radiance_unc, :oa21_radiance_unc, :oa06_radiance_unc, :oa14_radiance_unc, :oa10_radiance_unc, :latitude, :oa20_radiance_unc, :oa11_radiance_unc, :longitude, :oa08_radiance_unc, :oa18_radiance_unc, :oa05_radiance_unc
└─────────┘As an example, we plot the 60 meters red band to view the image.
using CairoMakie
data = dts3.measurements[:oa04_radiance][begin:4:end, begin:4:end]
fig, ax, h = image(data)
Conclusion¶
This notebook presents the current development state of the SentinelDataSource.jl package, which enables seamless access to EOPF Zarr products in the familiar DimensionalData ecosystem. The key takeaways are summarized below:
EOPF products are opened without modification using DimensionalData
DimTreeand structures.These DimTree objects can be queried with the selectors as other DimensionalData objects.
Future Development Steps¶
Incorporate user feedback—please test the plugin and submit issues here: https://
github .com /JuliaGeo /SentinelDataSource .jl /issues
