{"id":13680238,"url":"https://github.com/sertit/eoreader","last_synced_at":"2026-01-02T16:17:13.101Z","repository":{"id":37463902,"uuid":"362003355","full_name":"sertit/eoreader","owner":"sertit","description":"Remote-sensing opensource python library reading optical and SAR sensors, loading and stacking bands, clouds, DEM and spectral indices in a sensor-agnostic way.","archived":false,"fork":false,"pushed_at":"2025-10-15T09:38:14.000Z","size":67874,"stargazers_count":319,"open_issues_count":52,"forks_count":33,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-10-19T12:23:24.869Z","etag":null,"topics":["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"],"latest_commit_sha":null,"homepage":"https://eoreader.readthedocs.io/stable/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sertit.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-04-27T06:23:09.000Z","updated_at":"2025-10-15T09:38:10.000Z","dependencies_parsed_at":"2025-01-02T04:34:57.121Z","dependency_job_id":"d3937bdc-8192-430a-bd65-a18f9283c2a1","html_url":"https://github.com/sertit/eoreader","commit_stats":{"total_commits":1421,"total_committers":9,"mean_commits":"157.88888888888889","dds":0.04292751583391974,"last_synced_commit":"7716220c37893d1903c376ba4b290fc3713e7389"},"previous_names":[],"tags_count":104,"template":false,"template_full_name":null,"purl":"pkg:github/sertit/eoreader","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sertit%2Feoreader","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sertit%2Feoreader/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sertit%2Feoreader/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sertit%2Feoreader/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sertit","download_url":"https://codeload.github.com/sertit/eoreader/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sertit%2Feoreader/sbom","scorecard":{"id":45668,"data":{"date":"2025-08-04","repo":{"name":"github.com/sertit/eoreader","commit":"8500aa50c2b9598031aa28a3c4f22a5af30b5f67"},"scorecard":{"version":"v5.2.1-28-gc1d103a9","commit":"c1d103a9bb9f635ec7260bf9aa0699466fa4be0e"},"score":3.9,"checks":[{"name":"Maintained","score":10,"reason":"30 commit(s) and 21 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/mirror_to_gitlab.yml:1","Warn: no topLevel permission defined: .github/workflows/publish.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":1,"reason":"Found 2/20 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#code-review"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#binary-artifacts"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#license"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#signed-releases"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#fuzzing"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/publish.yml:10"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#packaging"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 12 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"16 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2021-871 / PYSEC-2021-872 / GHSA-hwqr-f3v9-hwxr","Warn: Project is vulnerable to: GHSA-29gw-9793-fvw7","Warn: Project is vulnerable to: PYSEC-2015-24 / GHSA-4vwq-x64q-j4cj","Warn: Project is vulnerable to: PYSEC-2017-46 / GHSA-66gw-5xpf-gfp5","Warn: Project is vulnerable to: PYSEC-2015-25 / GHSA-92mr-v722-f48m","Warn: Project is vulnerable to: PYSEC-2022-12 / GHSA-pq7m-3gw7-gq5x","Warn: Project is vulnerable to: PYSEC-2017-47","Warn: Project is vulnerable to: GHSA-55x5-fj6c-h6m8","Warn: Project is vulnerable to: PYSEC-2014-9 / GHSA-57qw-cc2g-pv5p","Warn: Project is vulnerable to: PYSEC-2021-19 / GHSA-jq4v-f5q6-mjqq","Warn: Project is vulnerable to: GHSA-pgww-xf46-h92r","Warn: Project is vulnerable to: PYSEC-2022-230 / GHSA-wrxv-2j5q-m38w","Warn: Project is vulnerable to: PYSEC-2018-12 / GHSA-xp26-p53h-6h2p","Warn: Project is vulnerable to: PYSEC-2019-156 / GHSA-xp76-357g-9wqq","Warn: Project is vulnerable to: PYSEC-2023-102","Warn: Project is vulnerable to: PYSEC-2023-114"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#vulnerabilities"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/mirror_to_gitlab.yml:9: update your workflow using https://app.stepsecurity.io/secureworkflow/sertit/eoreader/mirror_to_gitlab.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/mirror_to_gitlab.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/sertit/eoreader/mirror_to_gitlab.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/sertit/eoreader/publish.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/sertit/eoreader/publish.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish.yml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/sertit/eoreader/publish.yml/main?enable=pin","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   3 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#pinned-dependencies"}}]},"last_synced_at":"2025-08-14T22:41:51.794Z","repository_id":37463902,"created_at":"2025-08-14T22:41:51.794Z","updated_at":"2025-08-14T22:41:51.794Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280299527,"owners_count":26306930,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-21T02:00:06.614Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"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"],"created_at":"2024-08-02T13:01:14.621Z","updated_at":"2026-01-02T16:17:13.094Z","avatar_url":"https://github.com/sertit.png","language":"Python","readme":"[![pypi](https://img.shields.io/pypi/v/eoreader.svg)](https://pypi.python.org/pypi/eoreader)\n[![Conda](https://img.shields.io/conda/vn/conda-forge/eoreader.svg)](https://anaconda.org/conda-forge/eoreader)\n[![Apache](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/sertit/eoreader/blob/master/LICENSE)\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5082050.svg)](https://doi.org/10.5281/zenodo.5082050)\n[![stars](https://img.shields.io/github/stars/sertit/eoreader?style=social)](https://github.com/sertit/eoreader)\n[![Conda](https://img.shields.io/conda/dn/conda-forge/eoreader.svg)](https://anaconda.org/conda-forge/eoreader)\n\n# ![eoreader_logo](https://eoreader.readthedocs.io/latest/_static/favicon.png) EOReader\n\n**EOReader** is a remote-sensing opensource python library reading [optical](https://eoreader.readthedocs.io/latest/optical.html)\nand [SAR](https://eoreader.readthedocs.io/latest/sar.html) constellations, loading and stacking bands,\nclouds, DEM and spectral indices in a sensor-agnostic way.\n\n\u003e [!IMPORTANT] \n\u003e 💡 The goal of this library is to manage one satellite product at a time.  \n\u003e To handle more complicated sets of products (such as mosaics, pairs or time series), please consider using [`EOSets`](https://github.com/sertit/eosets).\n\n## 🛰️ Managed constellations\n\n### Optical\n[![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](https://zupimages.net/up/25/44/vh66.png)](https://eoreader.readthedocs.io/latest/optical.html)\n\n### SAR\n[![Sentinel-1 COSMO-Skymed 1st and 2nd Generation TerraSAR-X, TanDEM-X and PAZ SAR RADARSAT-2 and RADARSAT-Constellation ICEYE SAOCOM Capella](https://i.postimg.cc/GhPpwwL7/sar-sensors.png)](https://eoreader.readthedocs.io/latest/sar.html)\n\n## 🔮 Features\n\nEOReader implements **sensor-agnostic** features:\n\n- [`load`](https://eoreader.readthedocs.io/latest/api/eoreader.products.product.Product.html#eoreader.products.product.Product.load): Load many band types:\n    - satellite bands ([optical](https://eoreader.readthedocs.io/latest/optical.html#satellite-bands) or [SAR](https://eoreader.readthedocs.io/latest/sar.html#sar-bands))\n    - [index](https://eoreader.readthedocs.io/latest/optical.html#available-index)\n    - [cloud bands](https://eoreader.readthedocs.io/latest/optical.html#cloud-bands)\n    - [DEM bands](https://eoreader.readthedocs.io/latest/optical.html#dem-bands)\n- [`stack`](https://eoreader.readthedocs.io/latest/api/eoreader.products.product.Product.html#eoreader.products.product.Product.stack): Stack all these type of bands\n\nEOReader works mainly with:\n- [`xarrays.DataArray`](http://xarray.pydata.org/en/stable/generated/xarray.DataArray.html#xarray.DataArray) and [`xarrays.Dataset`](http://xarray.pydata.org/en/stable/generated/xarray.Dataset.html#xarray.Dataset) for raster data\n- [`geopandas.GeoDataFrames`](https://geopandas.org/docs/user_guide/data_structures.html#geodataframe) for vector data (extents, footprints...)\n\nEOReader allow you to create internal STAC catalogs directly from raw data.\n\n\u003e [!NOTE] \n\u003e 💡 EOReader handles data from the past!  \n\u003e Legacy formats are mostly supported and if not, they can be requested by creating an issue with the `legacy_format` label.  \n\u003e This is super useful if you need to create an internal STAC catalog with old data.\n\n## ⚡️ Quickstart\n\n### Optical\nEOReader allows you ta load and stack spectral bands, spectral indices, DEM and cloud bands agnostically from every handled optical constellation:\n\n```python\nfrom eoreader.reader import Reader\nfrom eoreader.bands import RED, GREEN, BLUE, NDVI, CLOUDS\n\n# Sentinel-2 path\ns2_path = \"S2B_MSIL1C_20181126T022319_N0207_R103_T51PWM_20181126T050025.SAFE\"\n\n# Create the reader object and open satellite data\nreader = Reader()\n\n# The reader will recognize the constellation from its product structure\ns2_prod = reader.open(s2_path)\n\n# Load some bands and index\nbands = s2_prod.load([NDVI, GREEN, CLOUDS])\n\n# Create a stack with some bands\nstack = s2_prod.stack([RED, GREEN, BLUE], stack_path=\"s2_rgb_stack.tif\")\n```\n\nEOReader aligns spectral bands from every handled sensor to make any call to a band generic:  \n[![Optical Band Mapping](https://zupimages.net/up/25/44/i20v.png)](https://eoreader.readthedocs.io/latest/optical_band_mapping.html)\n\n### SAR\nIn the same way, you can import and stack radar bands from any handled SAR constellation, with the same pattern.\n\n```python\nfrom eoreader.reader import Reader\nfrom eoreader.bands import VV, VH, VV_DSPK, VH_DSPK\n\n# Sentinel-1 GRD path\ns1_path = \"S1B_EW_GRDM_1SDH_20200422T080459_20200422T080559_021254_028559_784D.zip\"\n\n# Create the reader object and open satellite data\nreader = Reader()\n\n# The reader will recognize the constellation from its product structure\ns1_prod = reader.open(s1_path)\n\n# Load some bands and index\nbands = s1_prod.load([VV, VH])\n\n# Create a stack with some bands\nstack = s1_prod.stack([VV_DSPK, VH_DSPK], stack_path=\"s1_stack.tif\")\n```\n\n\u003e [!WARNING] \n\u003e ⚠️**SNAP and SAR**\n\u003e\n\u003e SAR products need [`ESA SNAP`](https://senbox.atlassian.net/wiki/spaces/SNAP/pages/70503590/Creating+a+GPF+Graph)\n\u003e free software to be orthorectified and calibrated.\n\u003e Ensure that you have the folder containing your `gpt` executable in your `PATH`.\n\n## 📖 Documentation\n\nThe API documentation can be found [here](https://eoreader.readthedocs.io/latest/).\n\n## 🔗 Examples\n\nAvailable notebooks provided as examples:\n\n- [Why EOReader?](https://eoreader.readthedocs.io/latest/notebooks/why_eoreader.html)\n\n### Basics \n- [Basic tutorial](https://eoreader.readthedocs.io/latest/notebooks/base.html)\n- [Optical data](https://eoreader.readthedocs.io/latest/notebooks/optical.html)\n- [SAR data](https://eoreader.readthedocs.io/latest/notebooks/SAR.html)\n- [VHR data](https://eoreader.readthedocs.io/latest/notebooks/VHR.html)\n- [Remove clouds](https://eoreader.readthedocs.io/latest/notebooks/remove_clouds.html)\n\n\n### Advanced \n- [Sentinel-3 data](https://eoreader.readthedocs.io/latest/notebooks/sentinel-3.html)\n- [Water detection on multiple products](https://eoreader.readthedocs.io/latest/notebooks/water_detection.html)\n- [Windowed Reading](https://eoreader.readthedocs.io/latest/notebooks/windowed_reading.html)\n- [DEM](https://eoreader.readthedocs.io/latest/notebooks/dem.html)\n- [Custom stacks](https://eoreader.readthedocs.io/latest/notebooks/custom.html)\n- [Methods to clean optical bands](https://eoreader.readthedocs.io/latest/notebooks/optical_cleaning_methods.html)\n- [AWS storage](https://eoreader.readthedocs.io/latest/notebooks/aws.html)\n- [S3 Compatible Storage](https://eoreader.readthedocs.io/latest/notebooks/s3_compatible_storage.html)\n\n### Experimental\n- [Dask](https://eoreader.readthedocs.io/latest/notebooks/dask.html)\n- [STAC](https://eoreader.readthedocs.io/latest/notebooks/stac.html)\n\n## 🛠 Installation\n\n### Pip\n\nYou can install EOReader via pip:\n\n`pip install eoreader`\n\nEOReader mainly relies on `geopandas`, `xarray` and `rasterio` (through `rioxarray`).\n\nPlease look at the [rasterio page](https://rasterio.readthedocs.io/en/latest/installation.html) to learn more about that.\n\n### Conda\n\nYou can install EOReader via conda:\n\n```\nconda config --env --set channel_priority strict\nconda install -c conda-forge eoreader\n```\n\n## 📚 Context\n\nAs one of the [Copernicus Emergency Management Service](https://emergency.copernicus.eu/) Rapid Mapping and Risk and Recovery Mapping operators, \n[SERTIT](https://sertit.unistra.fr/) needs to deliver geoinformation (such as flood or fire delineation, landslides mapping, etc.) based on multiple EO constellations.\n\nIn 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 \n(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.\n\nAs 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\nsensor-agnostic as possible.\n\nThis is why SERTIT decided to decouple the sensor handling from the extraction algorithms: the latter should be able to ingest semantic bands \n(i.e. `RED` or `VV`) without worrying about how to load the specific sensor band or in what unit it is.  \nThe 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.\n\nThus, thanks to **EOReader**, these tools are made independent to the constellation:  \n✅ the algorithm (and its developer) can focus on its core tasks (such as extraction) without taking into account the sensor characteristics \n(how to load a band, which band correspond to which band number, …)  \n✅ new sensor addition is effortless (if existing in **EOReader**) and requires no algorithm modification  \n✅ maintenance is simplified and the code quality is significantly improved  \n✅ testing is also simplified as the sensor-related parts are tested in EOReader library  \n\nHowever, keep in mind that the support of all the constellations used in CEMS is done in the best effort mode, especially for commercial data.\nIndeed, we may not have faced every product type, sensor mode or order configuration, so some details may be missing.\nIf this happens to you, do not hesitate to make a PR or write an issue about that!\n\n## 🎤 Communication\n### Talks\n\n- [GeoPython 2022](https://submit.geopython.net/geopython-2022/talk/FQPN3Q/) [ [PDF](https://seafile.unistra.fr/f/be2b461af970465b903e/) ] [ [YouTube](https://www.youtube.com/watch?v=mKxOiRULOJA\u0026t=14303s) ]\n- Mentioned in **[Live+]SIG 2022 by ESRI France** (in French):\n  `Enrichir ArcgisPro grâce à des processus personnalisés d'observation de la Terre`\n  [ [PDF](https://seafile.unistra.fr/f/9502a14f142041468837/) ]\n- Mentioned in GeoPython 2023 - `FLORIA, a custom python pipeline for urban flood extraction from SAR multi-sensors, supported by U-Net convolutional network.`\n- Mentioned in EGU 2023 - [`Cutting-edge developments in rapid mapping`](https://doi.org/10.5194/egusphere-egu23-14143) \n- [FOSS4G 2023](https://talks.osgeo.org/foss4g-2023/talk/XJH7JE/) [ [PDF](https://seafile.unistra.fr/f/f727dc62cdfe471f9b33/) ] [ [YouTube](https://www.youtube.com/watch?v=3ZfPQrTypmQ) ]\n\n### Press Release\n\n- [ESA Success Story](https://earth.esa.int/eogateway/news/new-open-source-python-library-improves-rapid-mapping-services)\n- Used to extract water for assessing agriculture impacts after the Kakhovka Dam Collapse (cross-post from [NASA Harvest](https://nasaharvest.org/index.php/news/navigating-kakhovka-dam-collapse-nasa-harvest-consortium-assesses-agriculture-impacts) and [Planet](https://www.planet.com/pulse/navigating-the-kakhovka-dam-collapse-nasa-harvest-consortium-assesses-agriculture-impacts-with-satellite-imagery/))\n\n### Articles\n\n- [Maxant, J. Braun, R. Caspard, M. Clandillon, S. ExtractEO, a Pipeline for Disaster Extent Mapping in the Context of Emergency Management. Remote Sens. 2022, 14, 5253. (Technical Note)](https://doi.org/10.3390/rs14205253)\n\n### Blog\n\n- [Introduction to EOReader](https://sertit.unistra.fr/en/news/introduction-to-eoreader/)\n- [EOReader: Remote sensing open-source python library](https://sertit.unistra.fr/en/news/eoreader/)\n- [The collapse of the Kakhovka dam seen from satellite imagery](https://sertit.unistra.fr/en/news/the-collapse-of-the-kakhovka-dam-seen-from-satellite-imagery/)\n\n## 📝 License\n\n**EOReader** is licensed under Apache License v2.0. See LICENSE file for details.\n\n## 🖋️ Authors\n\n**EOReader** has been created by [ICube-SERTIT](https://sertit.unistra.fr/).\n\n## 🤝 Credits\n\n**EOReader** is built on top of amazing libs, without which it couldn't have been coded:\n\n- [`geopandas`](https://geopandas.org/)\n- [`rasterio`](https://rasterio.readthedocs.io/en/latest/)\n- [`xarray`](http://xarray.pydata.org/en/stable/)\n- [`rioxarray`](https://corteva.github.io/rioxarray/stable/)\n- [`awesome-spectral-indices` and `spyndex`](https://awesome-ee-spectral-indices.readthedocs.io/en/latest/index.html)\n","funding_links":[],"categories":["Python","`Python` processing of optical imagery (non deep learning)","Tools","Radar Related GitHub Repos","Sustainable Development"],"sub_categories":["Processing imagery - post processing","Processing","Software and Utilities","Environmental Satellites"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsertit%2Feoreader","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsertit%2Feoreader","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsertit%2Feoreader/lists"}