EOReader

A remote-sensing opensource Python library reading optical and SAR constellations, loading and stacking bands, clouds, DEM and spectral indices in a sensor-agnostic way.
https://github.com/sertit/eoreader

Category: Sustainable Development
Sub Category: Environmental Satellites

Keywords

cosmo-skymed earth-observation geopandas iceye landsat maxar planetscope pleiades radarsat rasterio remote-sensing saocom sar satellite-imagery sentinel-1 sentinel-2 sentinel-3 terrasar worldview xarray

Keywords from Contributors

archiving transforms observation measur optimize region compose meshing parallel conversion

Last synced: about 15 hours ago
JSON representation

Repository metadata

Remote-sensing opensource python library reading optical and SAR sensors, loading and stacking bands, clouds, DEM and spectral indices in a sensor-agnostic way.

README.md

pypi
Conda
Apache
DOI
stars
Conda

eoreader_logo EOReader

EOReader is a remote-sensing opensource python library reading optical
and SAR constellations, loading and stacking bands,
clouds, DEM and spectral indices in a sensor-agnostic way.

[!IMPORTANT]
💡 The goal of this library is to manage one satellite product at a time.
To handle more complicated sets of products (such as mosaics, pairs or time series), please consider using EOSets.

🛰️ Managed constellations

Optical

Sentinel-2 SAFE and Theia Sentinel-3 OLCI and SLSTR Venus Landsat 1 to 9 Harmonized Landsat-Sentinel PlanetScope, SkySat and RapidEye Pleiades and Pleiades-Neo SPOT-6/7 and 4/5 Vision-1 Maxar (WorldViews, GeoEye) SuperView-1 GEOSAT-2

SAR

Sentinel-1 COSMO-Skymed 1st and 2nd Generation TerraSAR-X, TanDEM-X and PAZ SAR RADARSAT-2 and RADARSAT-Constellation ICEYE SAOCOM Capella

🔮 Features

EOReader implements sensor-agnostic features:

EOReader works mainly with:

EOReader allow you to create internal STAC catalogs directly from raw data.

[!NOTE]
💡 EOReader handles data from the past!
Legacy formats are mostly supported and if not, they can be requested by creating an issue with the legacy_format label.
This is super useful if you need to create an internal STAC catalog with old data.

⚡️ Quickstart

Optical

EOReader allows you ta load and stack spectral bands, spectral indices, DEM and cloud bands agnostically from every handled optical constellation:

from eoreader.reader import Reader
from eoreader.bands import RED, GREEN, BLUE, NDVI, CLOUDS

# Sentinel-2 path
s2_path = "S2B_MSIL1C_20181126T022319_N0207_R103_T51PWM_20181126T050025.SAFE"

# Create the reader object and open satellite data
reader = Reader()

# The reader will recognize the constellation from its product structure
s2_prod = reader.open(s2_path)

# Load some bands and index
bands = s2_prod.load([NDVI, GREEN, CLOUDS])

# Create a stack with some bands
stack = s2_prod.stack([RED, GREEN, BLUE], stack_path="s2_rgb_stack.tif")

EOReader aligns spectral bands from every handled sensor to make any call to a band generic:
Optical Band Mapping

SAR

In the same way, you can import and stack radar bands from any handled SAR constellation, with the same pattern.

from eoreader.reader import Reader
from eoreader.bands import VV, VH, VV_DSPK, VH_DSPK

# Sentinel-1 GRD path
s1_path = "S1B_EW_GRDM_1SDH_20200422T080459_20200422T080559_021254_028559_784D.zip"

# Create the reader object and open satellite data
reader = Reader()

# The reader will recognize the constellation from its product structure
s1_prod = reader.open(s1_path)

# Load some bands and index
bands = s1_prod.load([VV, VH])

# Create a stack with some bands
stack = s1_prod.stack([VV_DSPK, VH_DSPK], stack_path="s1_stack.tif")

[!WARNING]
⚠️SNAP and SAR

SAR products need ESA SNAP
free software to be orthorectified and calibrated.
Ensure that you have the folder containing your gpt executable in your PATH.

📖 Documentation

The API documentation can be found here.

🔗 Examples

Available notebooks provided as examples:

Basics

Advanced

Experimental

🛠 Installation

Pip

You can install EOReader via pip:

pip install eoreader

EOReader mainly relies on geopandas, xarray and rasterio (through rioxarray).

Please look at the rasterio page to learn more about that.

Conda

You can install EOReader via conda:

conda config --env --set channel_priority strict
conda install -c conda-forge eoreader

📚 Context

As one of the Copernicus Emergency Management Service Rapid Mapping and Risk and Recovery Mapping operators,
SERTIT needs to deliver geoinformation (such as flood or fire delineation, landslides mapping, etc.) based on multiple EO constellations.

In rapid mapping, it is always important to have access to various sensor types, resolutions, and satellites. Indeed, SAR sensors are able to detect through clouds and during nighttime
(which is particularly useful during flood and storm events), while optical sensors benefit from of multi spectral bands to better analyze and classify the crisis information.

As every minute counts in the production of geoinformation in an emergency mode, it seemed crucial to harmonize the ground on which are built our production tools, in order to make them as
sensor-agnostic as possible.

This is why SERTIT decided to decouple the sensor handling from the extraction algorithms: the latter should be able to ingest semantic bands
(i.e. RED or VV) without worrying about how to load the specific sensor band or in what unit it is.
The assumption was made that all the spectral bands from optical sensors could be mapped between each other, in addition to the natural mapping between SAR bands.

Thus, thanks to EOReader, these tools are made independent to the constellation:
✅ the algorithm (and its developer) can focus on its core tasks (such as extraction) without taking into account the sensor characteristics
(how to load a band, which band correspond to which band number, …)
✅ new sensor addition is effortless (if existing in EOReader) and requires no algorithm modification
✅ maintenance is simplified and the code quality is significantly improved
✅ testing is also simplified as the sensor-related parts are tested in EOReader library

However, keep in mind that the support of all the constellations used in CEMS is done in the best effort mode, especially for commercial data.
Indeed, we may not have faced every product type, sensor mode or order configuration, so some details may be missing.
If this happens to you, do not hesitate to make a PR or write an issue about that!

🎤 Communication

Talks

Press Release

Articles

Blog

📝 License

EOReader is licensed under Apache License v2.0. See LICENSE file for details.

🖋️ Authors

EOReader has been created by ICube-SERTIT.

🤝 Credits

EOReader is built on top of amazing libs, without which it couldn't have been coded:

Citation (CITATION.cff)

# This CITATION.cff file was generated with cffinit.
# Visit https://bit.ly/cffinit to generate yours today!

cff-version: 1.2.0
title: EOReader
message: >-
  If you use this software, please cite it using the
  metadata from this file.
type: software
authors:
  - given-names: Remi
    family-names: Braun
    affiliation: ICube-SERTIT
  - name: "ICube-SERTIT development team"
    website: "https://github.com/orgs/sertit/people"
  - given-names: guillem
    family-names: oreno
    affiliation: PooPals Inc. @poopals
  - given-names: Emmanuel
    family-names: Ferdman
  - given-names: TabeaW
    family-names: TabeaW
    affiliation: DLR
  - given-names: Jayanth
    family-names: Siddamsetty
  - given-names: Florian
    family-names: Deboissieu
  - given-names: Arthur
    family-names: Vincent
    affiliation: CS GROUP
identifiers:
  - type: doi
    value: 10.5281/zenodo.15831875
repository-code: 'https://github.com/sertit/eoreader'
url: 'https://eoreader.readthedocs.io/stable/'
abstract: >
  EOReader is a Python library developed by ICube-SERTIT (University of Strasbourg)
  designed to open, read, and harmonize Earth Observation products (optical and radar)
  from multiple satellite constellations (Sentinel, Landsat, Pléiades, SPOT, and more).
  It provides a unified interface to access spectral bands, metadata, cloud masks,
  and other physical parameters, with a strong focus on multi-sensor interoperability.
keywords:
  - Python
  - Earth Observation
  - Remote Sensing
  - Data Harmonization
license: Apache-2.0

Owner metadata


GitHub Events

Total
Last Year

Committers metadata

Last synced: about 24 hours ago

Total Commits: 1,729
Total Committers: 16
Avg Commits per committer: 108.063
Development Distribution Score (DDS): 0.08

Commits in past year: 318
Committers in past year: 11
Avg Commits per committer in past year: 28.909
Development Distribution Score (DDS) in past year: 0.242

Name Email Commits
BRAUN REMI r****n@u****r 1591
pre-commit-ci[bot] 6****] 33
Simone Tilia 9****a 15
Arthur VINCENT a****t@c****u 15
jteulade j****e@g****m 14
Michal Parusinski p****i@u****r 12
oscarn2 o****5@g****m 8
guillemc23 g****5@g****m 8
dependabot[bot] 4****] 7
CORIAT BASTIEN b****t@u****r 7
Jayanth Siddamsetty j****y@d****e 6
Germain g****s@c****u 4
Emmanuel Ferdman e****n@g****m 3
Simone Tilia s****a@e****t 3
TabeaW 3****W 2
floriandeboissieu f****s@g****m 1

Committer domains:


Issue and Pull Request metadata

Last synced: 1 day ago

Total issues: 167
Total pull requests: 103
Average time to close issues: 3 months
Average time to close pull requests: 16 days
Total issue authors: 21
Total pull request authors: 14
Average comments per issue: 1.92
Average comments per pull request: 0.64
Merged pull request: 87
Bot issues: 0
Bot pull requests: 45

Past year issues: 46
Past year pull requests: 32
Past year average time to close issues: about 1 month
Past year average time to close pull requests: 4 days
Past year issue authors: 6
Past year pull request authors: 8
Past year average comments per issue: 0.8
Past year average comments per pull request: 0.47
Past year merged pull request: 25
Past year bot issues: 0
Past year bot pull requests: 22

More stats: https://issues.ecosyste.ms/repositories/lookup?url=https://github.com/sertit/eoreader

Top Issue Authors

  • remi-braun (110)
  • jteulade (26)
  • ArthurVincentCS (6)
  • TK12331 (4)
  • BastienKovac (3)
  • bastiencyr (2)
  • oscarn2 (2)
  • sorny92 (1)
  • jaimebayes (1)
  • ChangpeiHe (1)
  • paron2407 (1)
  • jsetty (1)
  • guillemc23 (1)
  • funny000 (1)
  • zoepapirer (1)

Top Pull Request Authors

  • pre-commit-ci[bot] (36)
  • jteulade (20)
  • remi-braun (14)
  • dependabot[bot] (9)
  • guillemc23 (8)
  • ArthurVincentCS (3)
  • jsetty (2)
  • TabeaW (2)
  • bastiencyr (2)
  • emmanuel-ferdman (2)
  • floriandeboissieu (2)
  • oscarn2 (1)
  • simone-tilia (1)
  • gsalgues (1)

Top Issue Labels

  • enhancement (53)
  • bug (34)
  • 0.22.0 (18)
  • community driven (13)
  • 0.23.0 (12)
  • new product (9)
  • 0.20.0 (7)
  • optimization (7)
  • help wanted (5)
  • wontfix (5)
  • 0.21.0 (5)
  • documentation (5)
  • legacy format (3)
  • needs detail (2)
  • upstream (2)
  • 1.0.0 (2)
  • need sample (2)
  • how to (2)
  • 0.24.0 (1)
  • installation (1)
  • waiting upstream (1)

Top Pull Request Labels

  • dependencies (9)
  • github_actions (5)

Package metadata

proxy.golang.org: github.com/sertit/eoreader

  • Homepage:
  • Documentation: https://pkg.go.dev/github.com/sertit/eoreader#section-documentation
  • Licenses: apache-2.0
  • Latest release: v0.22.4 (published 6 months ago)
  • Last Synced: 2025-12-22T14:06:54.354Z (3 days ago)
  • Versions: 36
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Rankings:
    • Dependent packages count: 5.464%
    • Average: 5.647%
    • Dependent repos count: 5.83%
pypi.org: eoreader

Remote-sensing opensource python library reading optical and SAR constellations, loading and stacking bands, clouds, DEM and spectral indices in a sensor-agnostic way.

  • Homepage:
  • Documentation: https://eoreader.readthedocs.io/latest/
  • Licenses: Apache 2.0
  • Latest release: 0.22.4 (published 6 months ago)
  • Last Synced: 2025-12-22T14:06:56.894Z (3 days ago)
  • Versions: 83
  • Dependent Packages: 3
  • Dependent Repositories: 3
  • Downloads: 4,372 Last month
  • Rankings:
    • Dependent packages count: 3.138%
    • Stargazers count: 4.353%
    • Average: 6.551%
    • Downloads: 7.564%
    • Forks count: 8.725%
    • Dependent repos count: 8.977%
  • Maintainers (1)
conda-forge.org: eoreader

Remote-sensing opensource python library reading optical and SAR sensors, loading and stacking bands, clouds, DEM and index.

  • Homepage: http://github.com/sertit/eoreader/
  • Licenses: Apache-2.0
  • Latest release: 0.17.0 (published about 3 years ago)
  • Last Synced: 2025-12-02T11:05:23.311Z (23 days ago)
  • Versions: 42
  • Dependent Packages: 0
  • Dependent Repositories: 1
  • Rankings:
    • Dependent repos count: 24.348%
    • Stargazers count: 27.626%
    • Average: 36.343%
    • Forks count: 41.808%
    • Dependent packages count: 51.589%

Dependencies

requirements-doc.txt pypi
  • cartopy ==0.19.0
  • eodag *
  • folium *
  • jupyter *
  • linkify-it-py *
  • myst-nb *
  • myst-parser *
  • pystac *
  • sphinx *
  • sphinx-book-theme *
  • sphinx-copybutton *
requirements.txt pypi
  • black *
  • cloudpathlib >=0.7.0
  • colorlog *
  • coverage *
  • dask ==2021.10.0
  • flake8 *
  • geopandas >=0.9.0
  • h5netcdf *
  • lxml *
  • matplotlib *
  • methodtools *
  • pre-commit *
  • pylint *
  • pystac *
  • pytest *
  • pytest-cov *
  • rasterio >=1.2.2
  • rioxarray >=0.4.0
  • rtree *
  • scipy *
  • sertit >=1.14.0
  • tempenv *
  • tox *
  • tqdm *
  • twine *
  • validators *
  • xarray >=0.18.0
.github/workflows/publish.yml actions
  • actions/checkout v3 composite
  • actions/setup-python v4 composite
  • pypa/gh-action-pypi-publish release/v1 composite
environment.yml conda
  • pip
  • python 3.9.*
pyproject.toml pypi
  • cloudpathlib [s3]>=0.12.1
  • dicttoxml *
  • geopandas >=0.14.4
  • h5netcdf *
  • lxml *
  • methodtools *
  • odc-geo >=0.4.6
  • pyresample *
  • rasterio >=1.3.10
  • rioxarray >=0.10.0
  • rtree *
  • scipy *
  • sertit [full]>=1.44.1
  • spyndex >=0.3.0
  • validators *
  • xarray >=2024.06.0
  • zarr *
.github/workflows/mirror_to_gitlab.yml actions
  • SvanBoxel/gitlab-mirror-and-ci-action master composite
  • actions/checkout v6 composite

Score: 17.054546593247014