Optical data#

You will find an optical tutorial here.

Implemented optical constellation#

optical_sensors

The product resolution is the one given in Data Access Portfolio (2014-2022, section 6.2). The Data Access Portfolio Document presents the offer of the datasets and data access services that are made available to the Copernicus Users in response to their Earth Observation data requirements. However, especially for SAR data, the default pixel size of GRD bands is different from the product resolution!

Constellations

Class

Use archive

Sentinel-2

S2Product

Sentinel-2 on AWS cloud

S2CloudProduct

-

Sentinel-2 Theia

S2TheiaProduct

Sentinel-3 SLSTR

S3SlstrProduct

Sentinel-3 OLCI

S3OlciProduct

Landsat 8/9 OLI-TIRS

LandsatProduct

Landsat 7 ETM

LandsatProduct

COL1*: ❌, COL2: ✅

Landsat 4/5 TM

LandsatProduct

COL1*: ❌, COL2: ✅

Landsat 1-5 MSS

LandsatProduct

COL1*: ❌, COL2: ✅

Harmonized Landsat-Sentinel

HlsProduct

PlanetScope

PlaProduct

✅(❌ if multiple subdatasets)

SkySat

SkyProduct

✅(❌ if multiple subdatasets)

RapidEye

ReProduct

✅(❌ if multiple subdatasets)

Pleiades-Neo

PneoProduct

Pleiades

PldProduct

Vision-1

Vis1Product

SPOT 4/5

Spot45Product

SPOT 6/7

Spot67Product

Maxar**

MaxarProduct

SuperView-1

Sv1Product

GEOSAT-2

Gs2Product

* Archived Landsat Collection-1 are not managed because of the tar.gz format, which is too slow to process. It is better to work on the extracted product. Landsat-9 Collection-1 products don’t exist.

** *Maxar satellites: Worldview Legion, 2, 3, 4 and GeoEye-1 (but WorldView-1, QuickBird should work, but they don’t have been tested).

Warning

Satellites products that cannot be used as archived have to be extracted before use.

Constellations

Product Types

Default Pixel Size

Sentinel-2

L1C & L2A & L2Ap

10 m

Sentinel-2 on AWS Cloud

L2A (for now)

10 m

Sentinel-2 Theia

L2A

10 m

Sentinel-3 SLSTR

RBT

300 m

Sentinel-3 OLCI

EFR

500 m

Landsat 8/9 OLI-TIRS

Level 1 & 2

30 m

Landsat 7 ETM

Level 1 & 2

30 m

Landsat 4/5 TM

Level 1 & 2

30 m

Landsat 1-5 MSS

Level 1

60 m

Harmonized Landsat-Sentinel

L30 & S30

30 m

PlanetScope

L3A & L3B

3 m

SkySat

(Collect Product) ortho_*

0.5 m

RapidEye

L3A

5 m

Pleiades-Neo

SEN**, PRJ, ORT & MOS

0.3 m (PAN), 1.2 m (MS)

Pleiades

SEN**, PRJ, ORT & MOS

0.5 m (PAN), 2 m (MS)

Vision-1

PRJ & ORTP

0.9 m (PAN), 3.5 m (MS)

SPOT 4/5

L1A, L1B, L2A

10 m (PAN), 20 m (MS)

SPOT 6/7

SEN**, PRJ, ORT & MOS

1.5 m (PAN), 6 m (MS)

Maxar*

Standard & Ortho

0.3 to 0.5 m (PAN), 1.2 to 2.0 m (MS)

SuperView-1

L1B & L2A

0.5 m (PAN), 2 m (MS)

GEOSAT-2

L1B & L1C & L1D & L1S

0.4 m (PAN), 2 m (MS) for L1D data

* *Maxar satellites: Worldview Legion 2, 3, 4 and GeoEye-1 (but WorldView-1, QuickBird should work, but they don’t have been tested).

** ⚠ DIMAP SEN products are orthorectified using RPCs and not the rigorous sensor model. Shift can occur. Please refer to this issue.

Note

Note that for the rest of this documentation:

  • HLS.S30 and Sentinel-2 data are equivalent (with the only difference of a 30 m gsd).

  • HLS.L30 and Landsat-OLI-TIRS data are equivalent.

The goal of EOReader is to implement every constellation that can be used in the Copernicus Emergency Management Service. The constellations that can be used during CEMS activations are (as of 09/2021):
cems_constellations

Optical bands#

The following bands are available in EOReader but may not be available for all constellations.

Warning

EOReader loads bands in UTM. VHR bands can be orthorectified but EOReader needs a DEM for that. Be sure to position the environment variable EOREADER_DEM_PATH to the DEM you want.

Satellite bands#

Note

Optical bands are always loaded in reflectance, except for brilliance temperature bands that are left as is.

However, the user can ask for bands “as is” by using the TO_REFLECTANCE keyword with the load and stack functions. It will give the bands in the provider format (either DN, radiance or reflactance in uint16…). See the optical notebook to see how to implement it.

These bands will be cleaned according to the user’s needs. By default, only the pixels outside the detectors footprints are set to nodata. Methods to clean optical bands are best described in the notebook about the optical cleaning methods.

Band names#

These bands are mainly based on Sentinel-2 bands. The names are the ones from Sentinel-2, even if sometimes it can be confusing (especially for Coastal Aerosol and SWIR Cirrus bands).

Some additions to the Sentinel-2 bands have been made (YELLOW, PAN…):

  • CA: Coastal Aerosol

  • BLUE

  • GREEN_1: First Green band of PlanetScope 8 bands, mapped to the fifth band of Sentinel-3 OLCI

  • GREEN

  • YELLOW

  • RED

  • VRE_1: Vegetation Red Edge 1

  • VRE_2: Vegetation Red Edge 2

  • VRE_3: Vegetation Red Edge 3

  • NIR: Near Infrared

  • NARROW_NIR: Spectrally resolved Narrow Near Infrared (band 8A for Sentinel-2, same as NIR for other sensors)

  • WV: Water vapour

  • SWIR_CIRRUS: Cirrus band

  • SWIR_1: Short Wave Infrared 1

  • SWIR_2 Short Wave Infrared 2

  • PAN: Panchromatic

  • TIR_1: Thermal Infrared 1

  • TIR_2: Thermal Infrared 2

Note

Note that bands that are not mapped can still be used (i.e. for Sentinel-3 OLCI and SLSTR). They will be called by their true name (i.e. F1 or Oa05). However, the mapped band will have to be called with their mapped name, i.e. BLUE rather than Oa04 for Sentinel-3 OLCI. But the bands that are not present in the bands.__init__ file won’t be recognized.

Optical band mapping between constellations#

Thermal bands are not represented in this plot. Here is the table of the mapping:

Bands names (alias)

Thermal IR (TIR_1)

Thermal IR (TIR_2)

Sentinel-3 SLSTR

8 (1km)

9 (1km)

Landsat OLI-TIRS (8-9)

10 (100m)

11 (100m)

Landsat ETM (7)

6 (60m)

6 (60m)

Landsat TM (5-4)

6 (120m)

6 (120m)

Landsat MSS (only Landsat-3)

8 (240m)

8 (240m)

Not all bands of these constellations are mapped in EOReader. However, they can still be used by using directly their name (i.e. F1 or Oa05)*

Sentinel-2 L2A specific bands#

EOReader can now load (since v0.22.0) Sentinel-2 L2A specific bands (quality assurance bands) as any other band:

  • Aerosol optical thickness (AOT)

  • Scene average water vapour (WVP)

  • Scene classification layer (SCL)

Cloud bands#

Maximum 5 cloud bands are available, according to the files provided in the data. All the bands are rasterized and orthorectified if needed (for Sentinel-2 or 3 data for example), ready to be stacked.

The only difference with the other bands is that the cloud bands are provided in uint8 and have a nodata equal to 255.

  • RAW_CLOUDS: Raw Cloud file as provided (the only changes are the orthorectification and rasterization). Can provide other flags, or cloud probability.

  • CLOUDS: Cloud presence (1) or absence (0). If clouds are provided in probabilities, their presence is determined according to Landsat definition (proba> 67%)

  • CIRRUS: Cirrus presence (1) or absence (0). If clouds are provided in probabilities, their presence is determined according to Landsat definition (proba> 67%)

  • SHADOWS: Shadows presence (1) or absence (0). If clouds are provided in probabilities, their presence is determined according to Landsat definition (proba> 67%)

  • ALL_CLOUDS: Cloud OR Cirrus OR Shadows presence (1) or absence (0).
    Do not take into account missing bands (i.e. for Landsat MSS constellation, ALL_CLOUDS == CLOUDS)

Sensors

Cloud files

Clouds Bands

Sentinel-2

RAW_CLOUDS, CLOUDS, CIRRUS, ALL_CLOUDS

Sentinel-2 Theia

RAW_CLOUDS, CLOUDS, SHADOWS, CIRRUS, ALL_CLOUDS

Sentinel-3 OLCI

Sentinel-3 SLSTR

RAW_CLOUDS, CLOUDS, CIRRUS, ALL_CLOUDS

Landsat 8/9

RAW_CLOUDS, CLOUDS, SHADOWS, CIRRUS, ALL_CLOUDS

Landsat 7

RAW_CLOUDS, CLOUDS, SHADOWS, ALL_CLOUDS

Landsat 4/5 TM

RAW_CLOUDS, CLOUDS, SHADOWS, ALL_CLOUDS

Landsat 1-5 MSS

RAW_CLOUDS, CLOUDS, ALL_CLOUDS

Harmonized Landsat-Sentinel

RAW_CLOUDS, CLOUDS, SHADOWS, CIRRUS, ALL_CLOUDS

PlanetScope

RAW_CLOUDS, CLOUDS, SHADOWS, CIRRUS, ALL_CLOUDS

SkySat

RAW_CLOUDS, CLOUDS, SHADOWS, CIRRUS, ALL_CLOUDS

RapidEye

RAW_CLOUDS, CLOUDS, ALL_CLOUDS

Pleiades

RAW_CLOUDS, CLOUDS, ALL_CLOUDS

Pleiades-Neo

RAW_CLOUDS, CLOUDS, ALL_CLOUDS

SPOT-4/5

SPOT-6/7

RAW_CLOUDS, CLOUDS, ALL_CLOUDS

Vision-1

Maxar (GeoEye-1, WorldViews)

SuperView-1

GEOSAT-2

DEM bands#

Optical constellations can all load DEM, SLOPE and HILLSHADE bands. The SLOPE band is given in degrees. Please post an issue if you need this band in percent.

Use the environment variable EOREADER_DEM_PATH to position your worldwide DEM. You can use both a local path e.g. /mnt/dataserver/dems/srtm_30_v4/index.vrt or \\dataserver\DEMS\srtm_30_v4\index.vrt or a URL pointing to a web resources hosted on a S3 compatible storage e.g. https://s3.storage.com/dem-bucket/srtm_cog.tif (not available on Windows for now).

Available spectral indices#

EOReader uses (from version 0.18.0) the indices described in the awesome spectral indices (ASI) project.

⚠ You may need to install the last spyndex directly from GitHub latest version to have all available indices: pip uninstall spyndex && pip install -U --no-deps git+https://github.com/awesome-spectral-indices/spyndex.git

In addition to all these indices, EOReader kept the following indices for legacy purposes:

Spectral Indices

ASI equivalent

Formulas (with ASI syntax)

Name

NDMI21 (or NDMI2100)

(N - S2) / (N + S2)

Normalized Difference Moisture Index (with 2100 nm)

NDRE2

(N - RE2) / (N + RE2)

Normalized Difference Red-Edge Index with RE2

NDRE3

(N - RE3) / (N + RE3)

Normalized Difference Red-Edge Index with RE1

CI32

(RE3 / RE2) - 1

Chlorophyll Index RedEdge RE3/RE2

CI21

(RE2 / RE1) - 1

Chlorophyll Index RedEdge RE2/RE1

SBI

(R**2 + N**2)**0.5

Soil Brightness Index

SCI

3*G - R - 100

Soil Cuirass Index

SRSWIR

S1/S2

Simple Ratio SWIR16/SWIR21 Clay Minerals

TCBRI

0.3037 *B + 0.2793 * G + 0.4743 * R + 0.5585 * N + 0.5082 * S1 + 0.1863 * S2

Tasseled Cap Brightness

TCGRE

0.2848 *B + 0.2435 * G + 0.5436 * R + 0.7243 * N + 0.0840 * S1 + 0.1800 * S2

Tasseled Cap Greenness

TCWET

0.1509 *B + 0.1973 * G + 0.3279 * R + 0.3406 * N + 0.7112 * S1 + 0.4572 * S2

Tasseled Cap Wetness

WV_VI

(WV - R) / (WV + R)

WorldView Vegetation Index

WV_WI

(WV - A) / (WV + A)

WorldView Water Index

Note

WorldView-1 is not concerned by spectral indices as it only has a panchromatic band

Some indices are parametric (see the list here). To add any parameter you can pass it to your load or stack functions:

>>> prod.load("WDRVI", alpha=1)

Masks#

Since v0.22.0, EOReader can load masks directly in the load function. However, the band masks are not exposed directly into eoreader.bands, but through their enums. They can also be called by their string representation.

# HLS FMASK mask, called through the enum
>>> from eoreader.bands import HlsMaskBandNames
>>> prod.load(HlsMaskBandNames.FMASK)

For Sentinel-2 et Sentinel-2 Theia data, some masks are band-specific and should be called with the associated_bands keywords. This leads to a side effect that can be disorienting: these masks should be retrieved from the dataset with an unusual key ({band}_{associated_band}).

>>> # Sentinel-2 Theia, called with mask strings
>>> masks = prod.load(["DFP", "EDG", "SAT", "MG2", "IAB", "IAB"], associated_bands={"SAT": "RED", "DFP": ["GREEN", "RED"]})

>>> # Show all variables
>>> masks.data_vars
Data variables:
    DFP_GREEN                 (band, y, x) 
    DFP_RED                   (band, y, x)
    S2TheiaMaskBandNames.EDG  (band, y, x)
    SAT_RED                   (band, y, x)
    S2TheiaMaskBandNames.MG2  (band, y, x)
    S2TheiaMaskBandNames.IAB  (band, y, x)

# Open saturation mask for green band
>>> masks["DFP_GREEN"]
<xarray.DataArray 'DFP_GREEN' (band: 1, y: 10980, x: 10980)> Size: 482MB
dask.array<where, shape=(1, 10980, 10980), dtype=float32, chunksize=(1, 1024, 1024), chunktype=numpy.ndarray>
Coordinates:
  * x            (x) float64 88kB 5e+05 5e+05 5e+05 ... 6.098e+05 6.098e+05
  * y            (y) float64 88kB 5.5e+06 5.5e+06 5.5e+06 ... 5.39e+06 5.39e+06
    spatial_ref  int64 8B 0
  * band         (band) int64 8B 1
Attributes:
    ...

See the different MaskBandNames enums to discover all the available masks and how to call them. ⚠ This feature is experimental.

Documentary Sources#

Copernicus#

Landsat#

Sentinel-2#

Harmonize Landsat-Sentinel#

Sentinel-2 Theia#

Sentinel-3#

PlanetScope, SkySat and RapidEye#

Vision-1#

DIMAP V1: SPOT-4/5#

DIMAP V2: Pleiades, SPOT-6/7#

Maxar (ex Digital Globe)#

SuperView-1#

GeoSat-2 (ex Deimos-2)#

Instruments#

Most instruments can be found on OSCAR or on ESA Earth Online.

Band mapping#

You can find a magnificent band comparison chart on the Imagico blog.

Index#

Documentation last accessed on 12/03/2025