Hint

You can run this notebook in a live session with Binder.

Post-process#

While eodag ‘s main goal is to offer an easy way to search and download EO products, it doesn’t want to be a dead-end to the users who would like to post-process the products they have downloaded.

Products file path#

The download methods all return the local path of each product downloaded. Theses paths can be fed into another program for further processing. See for instance the tutorial that makes use of SNAP to detect ships on Sentinel 1 images.

Note

The file paths returned (strings) are in the file URI format (e.g. file:///tmp on Linux). You may need in some occasions to remove the file:// prefix.

Sentinel: SAFE Format#

Sentinel products are generally distributed in the SAFE format. AWS-based providers however offers Sentinel products in a “scattered” way, each file being able to be downloaded individually. eodag downloads these multiple files and automatically builds a SAFE product out of them. Image processing softwares such as SNAP work well with products in the SAFE format.

Data access with eodag-cube#

At some point eodag had some capabilities to directly post-process a product, i.e. to access its data. These capabilities, which relied on xarray and rasterio, have been ported to the Python package eodag-cube to avoid the heavy dependencies associated with rasterio and GDAL in particular. Installing this package is enough to benefit from its capabilities.

eodag-cube extends the EOProduct class with a to_xarray() method which returns product readable content in a XarrayDict (dictionary of xarray.Dataset). A ffspec file refering to the data can also be obtained using the get_file_obj() method.

Usage#

In this example, a search is made to get Sentinel 2 Level-1C products from Creodias S3.

Warning

eodag-cube needs to be installed to run correcly the following code.

[1]:
# Set the credentials with environment variables
import os
os.environ["EODAG__CREODIAS_S3__AUTH__CREDENTIALS__AWS_ACCESS_KEY_ID"] = "PLEASE_CHANGE_ME"
os.environ["EODAG__CREODIAS_S3__AUTH__CREDENTIALS__AWS_SECRET_ACCESS_KEY"] = "PLEASE_CHANGE_ME"

from eodag import EODataAccessGateway

dag = EODataAccessGateway()

# Define the search criteria and search for products
search_criteria = {
    "provider": "creodias_s3",
    "productType": "S2_MSI_L1C",
    "start": "2023-06-01",
    "end": "2023-06-30",
    "geom": {"lonmin": 1.306, "latmin": 43.527, "lonmax": 1.551, "latmax": 43.662},
    "cloudCover": 1  # Cloud cover < 1
}

products = dag.search(**search_criteria)
product = products[0]
product
[1]:
EOProduct
provider: 'creodias_s3',
product_type: 'S2_MSI_L1C',
properties["id"]: 'S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918',
properties["startTimeFromAscendingNode"]: '2023-06-24T10:46:21.024000Z',
properties["completionTimeFromAscendingNode"]: '2023-06-24T10:46:21.024000Z',
properties: (33){
abstract: 'The Level-1C product is composed of 100x100 km2 tiles (ortho-images in UTM/WGS84 projection). It results from using a Digital Elevation Model (DEM) to project the image in cartographic geometry. Per-pixel radiometric measurements are provided in Top Of Atmosphere (TOA) reflectances along with the parameters to transform them into radiances. Level-1C products are resampled with a constant Ground Sampling Distance (GSD) of 10, 20 and 60 meters depending on the native resolution of the different spectral bands. In Level-1C products, pixel coordinates refer to the upper left corner of the pixel. Level-1C products will additionally include Cloud Masks and ECMWF data (total column of ozone, total column of water vapour and mean sea level pressure). SAFE formatted product, see https://sentinel.esa.int/web/sentinel/user-guides/sentinel-2-msi/data-formats ',
instrument: 'MSI',
platform: 'SENTINEL-2',
platformSerialIdentifier: 'A',
processingLevel: 'S2MSI1C',
keywords: 'MSI,SENTINEL,SENTINEL2,S2,S2A,S2B,L1,L1C,SAFE',
sensorType: 'OPTICAL',
license: 'other',
missionStartDate: '2015-06-23T00:00:00Z',
title: 'S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE',
_id: 'S2_MSI_L1C',
productType: 'S2MSI1C',
uid: 'd21f949d-5310-4aa7-b3c6-92c3a643b82b',
publicationDate: '2023-06-24T19:02:06.775853Z',
orbitNumber: 41804,
cloudCover: 0.0,
modificationDate: '2023-07-12T07:52:35.425572Z',
sensorMode: 'INS-NOBS',
startTimeFromAscendingNode: '2023-06-24T10:46:21.024000Z',
completionTimeFromAscendingNode: '2023-06-24T10:46:21.024000Z',
id: 'S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918',
quicklook: 'https://datahub.creodias.eu/odata/v1/Assets(2b623cc0-26cd-4afc-9c33-ffaef94ebab5)/$value',
tileIdentifier: '31TCJ',
storageStatus: 'ONLINE',
thumbnail: 'https://datahub.creodias.eu/odata/v1/Assets(2b623cc0-26cd-4afc-9c33-ffaef94ebab5)/$value',
productIdentifier: '/eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE',
downloadLink: 'https://zipper.creodias.eu/odata/v1/Products(d21f949d-5310-4aa7-b3c6-92c3a643b82b)/$value',
origin: 'ESA',
productGroupId: 'GS2A_20230624T104621_041804_N05.09',
processorVersion: 5.09,
relativeOrbitNumber: 51,
beginningDateTime: '2023-06-24T10:46:21.024000Z',
endingDateTime: '2023-06-24T10:46:21.024000Z',
}
assets: (62)
'AUX_CAMSFO':  { 'roles': '['auxiliary']',  'title': 'AUX_CAMSFO',  ... } {
title: 'AUX_CAMSFO',
roles: ['auxiliary' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/AUX_DATA/AUX_CAMSFO',
}
'AUX_ECMWFT':  { 'roles': '['auxiliary']',  'title': 'AUX_ECMWFT',  ... } {
title: 'AUX_ECMWFT',
roles: ['auxiliary' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/AUX_DATA/AUX_ECMWFT',
}
'B01':  { 'roles': '['data']',  'type': 'image/jp2',  'title': 'T31TCJ_20230624T104621_B01.jp2',  ... } {
title: 'T31TCJ_20230624T104621_B01.jp2',
roles: ['data' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/IMG_DATA/T31TCJ_20230624T104621_B01.jp2',
type: 'image/jp2',
}
'B02':  { 'roles': '['data']',  'type': 'image/jp2',  'title': 'T31TCJ_20230624T104621_B02.jp2',  ... } {
title: 'T31TCJ_20230624T104621_B02.jp2',
roles: ['data' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/IMG_DATA/T31TCJ_20230624T104621_B02.jp2',
type: 'image/jp2',
}
'B03':  { 'roles': '['data']',  'type': 'image/jp2',  'title': 'T31TCJ_20230624T104621_B03.jp2',  ... } {
title: 'T31TCJ_20230624T104621_B03.jp2',
roles: ['data' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/IMG_DATA/T31TCJ_20230624T104621_B03.jp2',
type: 'image/jp2',
}
'B04':  { 'roles': '['data']',  'type': 'image/jp2',  'title': 'T31TCJ_20230624T104621_B04.jp2',  ... } {
title: 'T31TCJ_20230624T104621_B04.jp2',
roles: ['data' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/IMG_DATA/T31TCJ_20230624T104621_B04.jp2',
type: 'image/jp2',
}
'B05':  { 'roles': '['data']',  'type': 'image/jp2',  'title': 'T31TCJ_20230624T104621_B05.jp2',  ... } {
title: 'T31TCJ_20230624T104621_B05.jp2',
roles: ['data' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/IMG_DATA/T31TCJ_20230624T104621_B05.jp2',
type: 'image/jp2',
}
'B06':  { 'roles': '['data']',  'type': 'image/jp2',  'title': 'T31TCJ_20230624T104621_B06.jp2',  ... } {
title: 'T31TCJ_20230624T104621_B06.jp2',
roles: ['data' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/IMG_DATA/T31TCJ_20230624T104621_B06.jp2',
type: 'image/jp2',
}
'B07':  { 'roles': '['data']',  'type': 'image/jp2',  'title': 'T31TCJ_20230624T104621_B07.jp2',  ... } {
title: 'T31TCJ_20230624T104621_B07.jp2',
roles: ['data' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/IMG_DATA/T31TCJ_20230624T104621_B07.jp2',
type: 'image/jp2',
}
'B08':  { 'roles': '['data']',  'type': 'image/jp2',  'title': 'T31TCJ_20230624T104621_B08.jp2',  ... } {
title: 'T31TCJ_20230624T104621_B08.jp2',
roles: ['data' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/IMG_DATA/T31TCJ_20230624T104621_B08.jp2',
type: 'image/jp2',
}
'B09':  { 'roles': '['data']',  'type': 'image/jp2',  'title': 'T31TCJ_20230624T104621_B09.jp2',  ... } {
title: 'T31TCJ_20230624T104621_B09.jp2',
roles: ['data' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/IMG_DATA/T31TCJ_20230624T104621_B09.jp2',
type: 'image/jp2',
}
'B10':  { 'roles': '['data']',  'type': 'image/jp2',  'title': 'T31TCJ_20230624T104621_B10.jp2',  ... } {
title: 'T31TCJ_20230624T104621_B10.jp2',
roles: ['data' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/IMG_DATA/T31TCJ_20230624T104621_B10.jp2',
type: 'image/jp2',
}
'B11':  { 'roles': '['data']',  'type': 'image/jp2',  'title': 'T31TCJ_20230624T104621_B11.jp2',  ... } {
title: 'T31TCJ_20230624T104621_B11.jp2',
roles: ['data' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/IMG_DATA/T31TCJ_20230624T104621_B11.jp2',
type: 'image/jp2',
}
'B12':  { 'roles': '['data']',  'type': 'image/jp2',  'title': 'T31TCJ_20230624T104621_B12.jp2',  ... } {
title: 'T31TCJ_20230624T104621_B12.jp2',
roles: ['data' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/IMG_DATA/T31TCJ_20230624T104621_B12.jp2',
type: 'image/jp2',
}
'B8A':  { 'roles': '['data']',  'type': 'image/jp2',  'title': 'T31TCJ_20230624T104621_B8A.jp2',  ... } {
title: 'T31TCJ_20230624T104621_B8A.jp2',
roles: ['data' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/IMG_DATA/T31TCJ_20230624T104621_B8A.jp2',
type: 'image/jp2',
}
'FORMAT_CORRECTNESS.xml':  { 'roles': '['metadata']',  'type': 'application/xml',  'title': 'FORMAT_CORRECTNESS.xml',  ... } {
title: 'FORMAT_CORRECTNESS.xml',
roles: ['metadata' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/DATASTRIP/DS_2APS_20230624T160918_S20230624T105846/QI_DATA/FORMAT_CORRECTNESS.xml',
type: 'application/xml',
}
'GENERAL_QUALITY.xml':  { 'roles': '['metadata']',  'type': 'application/xml',  'title': 'GENERAL_QUALITY.xml',  ... } {
title: 'GENERAL_QUALITY.xml',
roles: ['metadata' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/DATASTRIP/DS_2APS_20230624T160918_S20230624T105846/QI_DATA/GENERAL_QUALITY.xml',
type: 'application/xml',
}
'GEOMETRIC_QUALITY.xml':  { 'roles': '['metadata']',  'type': 'application/xml',  'title': 'GEOMETRIC_QUALITY.xml',  ... } {
title: 'GEOMETRIC_QUALITY.xml',
roles: ['metadata' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/DATASTRIP/DS_2APS_20230624T160918_S20230624T105846/QI_DATA/GEOMETRIC_QUALITY.xml',
type: 'application/xml',
}
'INSPIRE.xml':  { 'roles': '['metadata']',  'type': 'application/xml',  'title': 'INSPIRE.xml',  ... } {
title: 'INSPIRE.xml',
roles: ['metadata' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/INSPIRE.xml',
type: 'application/xml',
}
'MSK_CLASSI_B00':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_CLASSI_B00.jp2',  ... } {
title: 'MSK_CLASSI_B00.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_CLASSI_B00.jp2',
type: 'image/jp2',
}
'MSK_DETFOO_B01':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_DETFOO_B01.jp2',  ... } {
title: 'MSK_DETFOO_B01.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_DETFOO_B01.jp2',
type: 'image/jp2',
}
'MSK_DETFOO_B02':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_DETFOO_B02.jp2',  ... } {
title: 'MSK_DETFOO_B02.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_DETFOO_B02.jp2',
type: 'image/jp2',
}
'MSK_DETFOO_B03':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_DETFOO_B03.jp2',  ... } {
title: 'MSK_DETFOO_B03.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_DETFOO_B03.jp2',
type: 'image/jp2',
}
'MSK_DETFOO_B04':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_DETFOO_B04.jp2',  ... } {
title: 'MSK_DETFOO_B04.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_DETFOO_B04.jp2',
type: 'image/jp2',
}
'MSK_DETFOO_B05':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_DETFOO_B05.jp2',  ... } {
title: 'MSK_DETFOO_B05.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_DETFOO_B05.jp2',
type: 'image/jp2',
}
'MSK_DETFOO_B06':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_DETFOO_B06.jp2',  ... } {
title: 'MSK_DETFOO_B06.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_DETFOO_B06.jp2',
type: 'image/jp2',
}
'MSK_DETFOO_B07':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_DETFOO_B07.jp2',  ... } {
title: 'MSK_DETFOO_B07.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_DETFOO_B07.jp2',
type: 'image/jp2',
}
'MSK_DETFOO_B08':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_DETFOO_B08.jp2',  ... } {
title: 'MSK_DETFOO_B08.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_DETFOO_B08.jp2',
type: 'image/jp2',
}
'MSK_DETFOO_B09':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_DETFOO_B09.jp2',  ... } {
title: 'MSK_DETFOO_B09.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_DETFOO_B09.jp2',
type: 'image/jp2',
}
'MSK_DETFOO_B10':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_DETFOO_B10.jp2',  ... } {
title: 'MSK_DETFOO_B10.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_DETFOO_B10.jp2',
type: 'image/jp2',
}
'MSK_DETFOO_B11':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_DETFOO_B11.jp2',  ... } {
title: 'MSK_DETFOO_B11.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_DETFOO_B11.jp2',
type: 'image/jp2',
}
'MSK_DETFOO_B12':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_DETFOO_B12.jp2',  ... } {
title: 'MSK_DETFOO_B12.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_DETFOO_B12.jp2',
type: 'image/jp2',
}
'MSK_DETFOO_B8A':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_DETFOO_B8A.jp2',  ... } {
title: 'MSK_DETFOO_B8A.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_DETFOO_B8A.jp2',
type: 'image/jp2',
}
'MSK_QUALIT_B01':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_QUALIT_B01.jp2',  ... } {
title: 'MSK_QUALIT_B01.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_QUALIT_B01.jp2',
type: 'image/jp2',
}
'MSK_QUALIT_B02':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_QUALIT_B02.jp2',  ... } {
title: 'MSK_QUALIT_B02.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_QUALIT_B02.jp2',
type: 'image/jp2',
}
'MSK_QUALIT_B03':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_QUALIT_B03.jp2',  ... } {
title: 'MSK_QUALIT_B03.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_QUALIT_B03.jp2',
type: 'image/jp2',
}
'MSK_QUALIT_B04':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_QUALIT_B04.jp2',  ... } {
title: 'MSK_QUALIT_B04.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_QUALIT_B04.jp2',
type: 'image/jp2',
}
'MSK_QUALIT_B05':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_QUALIT_B05.jp2',  ... } {
title: 'MSK_QUALIT_B05.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_QUALIT_B05.jp2',
type: 'image/jp2',
}
'MSK_QUALIT_B06':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_QUALIT_B06.jp2',  ... } {
title: 'MSK_QUALIT_B06.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_QUALIT_B06.jp2',
type: 'image/jp2',
}
'MSK_QUALIT_B07':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_QUALIT_B07.jp2',  ... } {
title: 'MSK_QUALIT_B07.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_QUALIT_B07.jp2',
type: 'image/jp2',
}
'MSK_QUALIT_B08':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_QUALIT_B08.jp2',  ... } {
title: 'MSK_QUALIT_B08.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_QUALIT_B08.jp2',
type: 'image/jp2',
}
'MSK_QUALIT_B09':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_QUALIT_B09.jp2',  ... } {
title: 'MSK_QUALIT_B09.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_QUALIT_B09.jp2',
type: 'image/jp2',
}
'MSK_QUALIT_B10':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_QUALIT_B10.jp2',  ... } {
title: 'MSK_QUALIT_B10.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_QUALIT_B10.jp2',
type: 'image/jp2',
}
'MSK_QUALIT_B11':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_QUALIT_B11.jp2',  ... } {
title: 'MSK_QUALIT_B11.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_QUALIT_B11.jp2',
type: 'image/jp2',
}
'MSK_QUALIT_B12':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_QUALIT_B12.jp2',  ... } {
title: 'MSK_QUALIT_B12.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_QUALIT_B12.jp2',
type: 'image/jp2',
}
'MSK_QUALIT_B8A':  { 'roles': '['data-mask']',  'type': 'image/jp2',  'title': 'MSK_QUALIT_B8A.jp2',  ... } {
title: 'MSK_QUALIT_B8A.jp2',
roles: ['data-mask' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/MSK_QUALIT_B8A.jp2',
type: 'image/jp2',
}
'MTD_DS.xml':  { 'roles': '['metadata']',  'type': 'application/xml',  'title': 'MTD_DS.xml',  ... } {
title: 'MTD_DS.xml',
roles: ['metadata' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/DATASTRIP/DS_2APS_20230624T160918_S20230624T105846/MTD_DS.xml',
type: 'application/xml',
}
'MTD_MSIL1C.xml':  { 'roles': '['metadata']',  'type': 'application/xml',  'title': 'MTD_MSIL1C.xml',  ... } {
title: 'MTD_MSIL1C.xml',
roles: ['metadata' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/MTD_MSIL1C.xml',
type: 'application/xml',
}
'MTD_TL.xml':  { 'roles': '['metadata']',  'type': 'application/xml',  'title': 'MTD_TL.xml',  ... } {
title: 'MTD_TL.xml',
roles: ['metadata' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/MTD_TL.xml',
type: 'application/xml',
}
'PVI':  { 'roles': '['data']',  'type': 'image/jp2',  'title': 'T31TCJ_20230624T104621_PVI.jp2',  ... } {
title: 'T31TCJ_20230624T104621_PVI.jp2',
roles: ['data' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/QI_DATA/T31TCJ_20230624T104621_PVI.jp2',
type: 'image/jp2',
}
'RADIOMETRIC_QUALITY.xml':  { 'roles': '['metadata']',  'type': 'application/xml',  'title': 'RADIOMETRIC_QUALITY.xml',  ... } {
title: 'RADIOMETRIC_QUALITY.xml',
roles: ['metadata' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/DATASTRIP/DS_2APS_20230624T160918_S20230624T105846/QI_DATA/RADIOMETRIC_QUALITY.xml',
type: 'application/xml',
}
'S2_User_Product_Level-1C_Metadata.xsd':  { 'roles': '['metadata']',  'type': 'text/xml',  'title': 'S2_User_Product_Level-1C_Metadata.xsd',  ... } {
title: 'S2_User_Product_Level-1C_Metadata.xsd',
roles: ['metadata' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/rep_info/S2_User_Product_Level-1C_Metadata.xsd',
type: 'text/xml',
}
'SENSOR_QUALITY.xml':  { 'roles': '['metadata']',  'type': 'application/xml',  'title': 'SENSOR_QUALITY.xml',  ... } {
title: 'SENSOR_QUALITY.xml',
roles: ['metadata' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/DATASTRIP/DS_2APS_20230624T160918_S20230624T105846/QI_DATA/SENSOR_QUALITY.xml',
type: 'application/xml',
}
'TCI':  { 'roles': '['visual']',  'type': 'image/jp2',  'title': 'T31TCJ_20230624T104621_TCI.jp2',  ... } {
title: 'T31TCJ_20230624T104621_TCI.jp2',
roles: ['visual' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/GRANULE/L1C_T31TCJ_A041804_20230624T105846/IMG_DATA/T31TCJ_20230624T104621_TCI.jp2',
type: 'image/jp2',
}
'UserProduct_index.html':  { 'roles': '['auxiliary']',  'type': 'text/html',  'title': 'UserProduct_index.html',  ... } {
title: 'UserProduct_index.html',
roles: ['auxiliary' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/HTML/UserProduct_index.html',
type: 'text/html',
}
'UserProduct_index.xsl':  { 'roles': '['auxiliary']',  'type': 'application/xslt+xml',  'title': 'UserProduct_index.xsl',  ... } {
title: 'UserProduct_index.xsl',
roles: ['auxiliary' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/HTML/UserProduct_index.xsl',
type: 'application/xslt+xml',
}
'banner_1.png':  { 'roles': '['auxiliary']',  'type': 'image/png',  'title': 'banner_1.png',  ... } {
title: 'banner_1.png',
roles: ['auxiliary' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/HTML/banner_1.png',
type: 'image/png',
}
'banner_2.png':  { 'roles': '['auxiliary']',  'type': 'image/png',  'title': 'banner_2.png',  ... } {
title: 'banner_2.png',
roles: ['auxiliary' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/HTML/banner_2.png',
type: 'image/png',
}
'banner_3.png':  { 'roles': '['auxiliary']',  'type': 'image/png',  'title': 'banner_3.png',  ... } {
title: 'banner_3.png',
roles: ['auxiliary' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/HTML/banner_3.png',
type: 'image/png',
}
'manifest.safe':  { 'roles': '['metadata']',  'title': 'manifest.safe',  ... } {
title: 'manifest.safe',
roles: ['metadata' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/manifest.safe',
}
'ql.jpg':  { 'roles': '['overview']',  'type': 'image/jpeg',  'title': 'S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918-ql.jpg',  ... } {
title: 'S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918-ql.jpg',
roles: ['overview' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918-ql.jpg',
type: 'image/jpeg',
}
'star_bg.jpg':  { 'roles': '['auxiliary']',  'type': 'image/jpeg',  'title': 'star_bg.jpg',  ... } {
title: 'star_bg.jpg',
roles: ['auxiliary' ],
href: 's3://eodata/Sentinel-2/MSI/L1C/2023/06/24/S2A_MSIL1C_20230624T104621_N0509_R051_T31TCJ_20230624T160918.SAFE/HTML/star_bg.jpg',
type: 'image/jpeg',
}
geometry
thumbnail

The example below shows how to calculate the NDVI from the downloaded product over Toulouse.

[2]:
toulouse_bbox=[1.435, 43.587, 1.458, 43.602]

When dealing with rasterio xarray engine, the to_xarray() method uses Rasterio’s GDAL/AWS environment to open the data.

As data is lazy loaded, the environment is still needed to read its whole content.

It can be retrieved using EOProduct.rio_env() method.

[3]:
with product.rio_env():
    VIR = product.assets["B04"].to_xarray().rio.clip_box(*toulouse_bbox, crs="EPSG:4326").rio.reproject(dst_crs="EPSG:4326")
    NIR = product.assets["B08"].to_xarray().rio.clip_box(*toulouse_bbox, crs="EPSG:4326").rio.reproject(dst_crs="EPSG:4326")

NDVI = (NIR - VIR) / (NIR + VIR)
NDVI
[3]:
<xarray.Dataset> Size: 126kB
Dimensions:      (x: 216, y: 142, band: 1)
Coordinates:
  * x            (x) float64 2kB 1.435 1.435 1.435 1.435 ... 1.458 1.458 1.458
  * y            (y) float64 1kB 43.6 43.6 43.6 43.6 ... 43.59 43.59 43.59 43.59
  * band         (band) int64 8B 1
    spatial_ref  int64 8B 0
Data variables:
    band_data    (band, y, x) float32 123kB nan nan nan nan ... nan nan nan nan

The plot methods of xarray.DataArray can be used to quickly plot the NDVI.

[4]:
NDVI.band_data.plot(cmap="RdYlGn", center=False)
[4]:
<matplotlib.collections.QuadMesh at 0x7ba233f6ebd0>
../../_images/notebooks_api_user_guide_9_post_process_17_1.png
[ ]: