Package: eoreader
EOReaderEOReaderis a remote-sensing opensource python library readingopticalandSARconstellations, loading and stacking bands,
clouds, DEM and spectral indices in a sensor-agnostic way.Managed optical constellationsManaged SAR constellationsFeaturesEOReader implementssensor-agnosticfeatures:load: Load many band types:satellite bands (opticalorSAR)indexcloud bandsDEM bandsstack: Stack all these type of bandsEOReader works mainly with:xarrays.DataArrayandxarrays.Datasetfor raster datageopandas.GeoDataFramesfor vector data (extents, footprints...)Python QuickstartOpticalEOReader allows you ta load and stack spectral bands, spetrcal indices, DEM and cloud bands agnostically from every handled optical constellation:fromeoreader.readerimportReaderfromeoreader.bandsimport*# Sentinel-2 paths2_path="S2B_MSIL1C_20181126T022319_N0207_R103_T51PWM_20181126T050025.SAFE"# Create the reader object and open satellite datareader=Reader()# The reader will recognize the constellation from its product structures2_prod=reader.open(s2_path)# Load some bands and indexbands=s2_prod.load([NDVI,GREEN,CLOUDS])# Create a stack with some bandsstack=s2_prod.stack([RED,GREEN,BLUE],stack_path="s2_rgb_stack.tif")EOReader aligns spectral bands from every handled sensor in order to make any call to a band generic:SARIn the same way, you can import and stack radar band from any handled SAR constellation, with the same pattern.fromeoreader.readerimportReaderfromeoreader.bandsimport*# Sentinel-1 GRD paths1_path="S1B_EW_GRDM_1SDH_20200422T080459_20200422T080559_021254_028559_784D.zip"# Create the reader object and open satellite datareader=Reader()# The reader will recognize the constellation from its product structures1_prod=reader.open(s1_path)# Load some bands and indexbands=s1_prod.load([VV,VH])# Create a stack with some bandsstack=s1_prod.stack([VV_DSPK,VH_DSPK],stack_path="s1_stack.tif")⚠️SNAP and SARSAR products needESA 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).DocumentationThe API documentation can be foundhere.ExamplesAvailable notebooks provided as examples:Why EOReader?Basic tutorialOptical dataSAR dataVHR dataRemove cloudsSentinel-3 dataWater detection on multiple productsWindowed ReadingDEMCustom stacksMethods to clean optical bandsAWS storageS3 Compatible StorageDaskSTACInstallationPipYou can install EOReader via pip:pip install eoreaderEOReader mainly relies ongeopandasandrasterio(throughrioxarray).On Windows and with pip, you may face installation issues due to GDAL.
The well known workaround of installing fromGohlke's wheelsalso applies here.
Please look at therasterio pageto learn more about that.CondaYou can install EOReader via conda:conda config --env --set channel_priority strict
conda install -c conda-forge eoreaderContextAs one of theCopernicus Emergency Management ServiceRapid Mapping and Risk and Recovery Mapping operators,SERTITneeds 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.REDorVV) 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 toEOReader, 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 inEOReader) 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 libraryHowever, 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 !TalksGeoPython 2022[PDF] [YouTube]Mentionned 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 mappingFOSS4G 2023[PDF] [YouTube]Press ReleaseESA Success StoryUsed to extract water for assessing agriculture impacts after the Kakhovka Dam Collapse (cross-post fromNASA HarvestandPlanet)ArticlesMaxant, 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)BlogIntroduction to EOReaderEOReader: Remote sensing open-source python libraryThe collapse of the Kakhovka dam seen from satellite imageryLicenseEOReaderis licensed under Apache License v2.0. See LICENSE file for details.AuthorsEOReaderhas been created byICube-SERTIT.
Follow us onTwitter.CreditsEOReaderis built on top of amazing libs, without which it couldn't have been coded:geopandasrasterioxarrayrioxarrayawesome-spectral-indicesandspyndex