eoreader
Remote-sensing opensource python library reading optical and SAR sensors, loading and stacking bands, clouds, DEM and spectral indices in a sensor-agnostic way.
Science Score: 59.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
✓DOI references
Found 7 DOI reference(s) in README -
✓Academic publication links
Links to: zenodo.org -
✓Committers with academic emails
1 of 13 committers (7.7%) from academic institutions -
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (7.6%) to scientific vocabulary
Keywords
Keywords from Contributors
Repository
Remote-sensing opensource python library reading optical and SAR sensors, loading and stacking bands, clouds, DEM and spectral indices in a sensor-agnostic way.
Basic Info
- Host: GitHub
- Owner: sertit
- License: apache-2.0
- Language: Python
- Default Branch: main
- Homepage: https://eoreader.readthedocs.io/stable/
- Size: 64.6 MB
Statistics
- Stars: 316
- Watchers: 5
- Forks: 32
- Open Issues: 43
- Releases: 60
Topics
Metadata Files
README.md
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 usingEOSets.
🛰️ Managed constellations
Optical
SAR
🔮 Features
EOReader implements sensor-agnostic features:
load: Load many band types:- satellite bands (optical or SAR)
- index
- cloud bands
- DEM bands
stack: Stack all these type of bands
EOReader works mainly with:
- xarrays.DataArray and xarrays.Dataset for raster data
- geopandas.GeoDataFrames for vector data (extents, footprints...)
EOReader allow you to create internal STAC catalogs directly from raw data.
[!NOTE] 💡 EOReader handles data from the past!
Legacy format are mostly supported and if not, they can be requested by creating an issue with thelegacy_formatlabel.
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, spetrcal indices, DEM and cloud bands agnostically from every handled optical constellation:
```python from eoreader.reader import Reader from eoreader.bands import RED, GREEN, BLUE, NDVI, CLOUDS
Sentinel-2 path
s2path = "S2BMSIL1C20181126T022319N0207R103T51PWM_20181126T050025.SAFE"
Create the reader object and open satellite data
reader = Reader()
The reader will recognize the constellation from its product structure
s2prod = reader.open(s2path)
Load some bands and index
bands = s2_prod.load([NDVI, GREEN, CLOUDS])
Create a stack with some bands
stack = s2prod.stack([RED, GREEN, BLUE], stackpath="s2rgbstack.tif") ```
EOReader aligns spectral bands from every handled sensor in order to make any call to a band generic:

SAR
In the same way, you can import and stack radar band from any handled SAR constellation, with the same pattern.
```python from eoreader.reader import Reader from eoreader.bands import VV, VH, VVDSPK, VHDSPK
Sentinel-1 GRD path
s1path = "S1BEWGRDM1SDH20200422T08045920200422T080559021254028559_784D.zip"
Create the reader object and open satellite data
reader = Reader()
The reader will recognize the constellation from its product structure
s1prod = reader.open(s1path)
Load some bands and index
bands = s1_prod.load([VV, VH])
Create a stack with some bands
stack = s1prod.stack([VVDSPK, VHDSPK], stackpath="s1_stack.tif") ```
[!WARNING] ⚠️SNAP and SAR
SAR products need
ESA SNAPfree software to be orthorectified and calibrated. Ensure that you have the folder containing yourgptexecutable in yourPATH. If you are using SNAP 8.0, be sure to have your software up-to-date (SNAP version >= 8.0).
📖 Documentation
The API documentation can be found here.
🔗 Examples
Available notebooks provided as examples:
Basics
Advanced
- Sentinel-3 data
- Water detection on multiple products
- Windowed Reading
- DEM
- Custom stacks
- Methods to clean optical bands
- AWS storage
- S3 Compatible Storage
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
- GeoPython 2022 [ PDF ] [ YouTube ]
- Mentioned in [Live+]SIG 2022 by ESRI France (in French):
Enrichir ArcgisPro grâce à des processus personnalisés d'observation de la Terre[ PDF ] - Mentioned in GeoPython 2023 -
FLORIA, a custom python pipeline for urban flood extraction from SAR multi-sensors, supported by U-Net convolutional network. - Mentioned in EGU 2023 -
Cutting-edge developments in rapid mapping - FOSS4G 2023 [ PDF ] [ YouTube ]
Press Release
- ESA Success Story
- Used to extract water for assessing agriculture impacts after the Kakhovka Dam Collapse (cross-post from NASA Harvest and Planet)
Articles
Blog
- Introduction to EOReader
- EOReader: Remote sensing open-source python library
- The collapse of the Kakhovka dam seen from satellite imagery
📝 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:
Owner
- Name: ICube-SERTIT
- Login: sertit
- Kind: organization
- Location: Strasbourg, France
- Website: https://sertit.unistra.fr/
- Repositories: 3
- Profile: https://github.com/sertit
ICube-SERTIT's repository
GitHub Events
Total
- Create event: 15
- Issues event: 55
- Release event: 10
- Watch event: 37
- Delete event: 4
- Issue comment event: 78
- Push event: 178
- Pull request review comment event: 4
- Pull request review event: 8
- Pull request event: 38
- Fork event: 10
Last Year
- Create event: 15
- Issues event: 55
- Release event: 10
- Watch event: 37
- Delete event: 4
- Issue comment event: 78
- Push event: 179
- Pull request review comment event: 4
- Pull request review event: 8
- Pull request event: 38
- Fork event: 10
Committers
Last synced: 6 months ago
Top Committers
| Name | Commits | |
|---|---|---|
| BRAUN REMI | r****n@u****r | 1,522 |
| pre-commit-ci[bot] | 6****]@u****m | 28 |
| jteulade | j****e@g****m | 14 |
| Michal Parusinski | p****i@u****r | 12 |
| Arthur VINCENT | a****t@c****u | 10 |
| guillemc23 | g****5@g****m | 8 |
| CORIAT BASTIEN | b****t@u****r | 7 |
| Jayanth Siddamsetty | j****y@d****e | 6 |
| dependabot[bot] | 4****]@u****m | 5 |
| Emmanuel Ferdman | e****n@g****m | 3 |
| TabeaW | 3****W@u****m | 2 |
| Rémi Braun | 6****n@u****m | 1 |
| floriandeboissieu | f****s@g****m | 1 |
Committer Domains (Top 20 + Academic)
Issues and Pull Requests
Last synced: 6 months ago
All Time
- Total issues: 155
- Total pull requests: 93
- Average time to close issues: 3 months
- Average time to close pull requests: 18 days
- Total issue authors: 21
- Total pull request authors: 11
- Average comments per issue: 1.98
- Average comments per pull request: 0.65
- Merged pull requests: 78
- Bot issues: 0
- Bot pull requests: 39
Past Year
- Issues: 44
- Pull requests: 36
- Average time to close issues: 12 days
- Average time to close pull requests: 2 days
- Issue authors: 6
- Pull request authors: 6
- Average comments per issue: 0.73
- Average comments per pull request: 0.75
- Merged pull requests: 30
- Bot issues: 0
- Bot pull requests: 22
Top Authors
Issue Authors
- remi-braun (104)
- jteulade (21)
- ArthurVincentCS (5)
- TK12331 (4)
- BastienKovac (3)
- bastiencyr (2)
- oscarn2 (2)
- sorny92 (1)
- jaimebayes (1)
- ChangpeiHe (1)
- paron2407 (1)
- jsetty (1)
- guillemc23 (1)
- funny000 (1)
- zoepapirer (1)
Pull Request Authors
- pre-commit-ci[bot] (32)
- jteulade (20)
- remi-braun (14)
- guillemc23 (8)
- dependabot[bot] (7)
- ArthurVincentCS (2)
- jsetty (2)
- TabeaW (2)
- bastiencyr (2)
- emmanuel-ferdman (2)
- floriandeboissieu (2)
Top Labels
Issue Labels
Pull Request Labels
Packages
- Total packages: 3
-
Total downloads:
- pypi 4,742 last-month
-
Total dependent packages: 3
(may contain duplicates) -
Total dependent repositories: 4
(may contain duplicates) - Total versions: 161
- Total maintainers: 1
proxy.golang.org: github.com/sertit/eoreader
- Documentation: https://pkg.go.dev/github.com/sertit/eoreader#section-documentation
- License: apache-2.0
-
Latest release: v0.22.4
published 8 months ago
Rankings
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.
- Documentation: https://eoreader.readthedocs.io/latest/
- License: Apache 2.0
-
Latest release: 0.22.4
published 8 months ago
Rankings
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/
- License: Apache-2.0
-
Latest release: 0.17.0
published over 3 years ago
Rankings
Dependencies
- cartopy ==0.19.0
- eodag *
- folium *
- jupyter *
- linkify-it-py *
- myst-nb *
- myst-parser *
- pystac *
- sphinx *
- sphinx-book-theme *
- sphinx-copybutton *
- 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
- actions/checkout v3 composite
- actions/setup-python v4 composite
- pypa/gh-action-pypi-publish release/v1 composite
- SvanBoxel/gitlab-mirror-and-ci-action master composite
- actions/checkout v3 composite
- pip
- python 3.9.*
- 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 *

