Sentinel-2 Reference Guide

This reference guide provides detailed information about Sentinel-2 MSI data parameters and options available through the Copernicus Data Space Ecosystem.

Overview

Sentinel-2 is a constellation of two polar-orbiting satellites (Sentinel-2A and Sentinel-2B) carrying a Multi-Spectral Instrument (MSI). The mission provides high-resolution optical imagery for land monitoring, emergency response, and climate change studies.

Key Features: - Multi-Spectral Instrument (MSI) with 13 spectral bands - 10m, 20m, and 60m spatial resolution depending on spectral band - 290 km swath width - 5-day revisit time (constellation) - Global coverage with systematic acquisitions over land and coastal areas

Search Parameters

Parameter Types

When searching for Sentinel-2 data, parameters are passed in two ways:

  1. Direct Parameters: Passed directly to the search() method - collection_name - Mission/collection identifier - product_type - Product type (S2MSI1C, S2MSI2A, etc.) - orbit_direction - Orbit direction (ASCENDING/DESCENDING) - aoi_wkt - Area of interest in WKT format - start_date / end_date - Temporal range - top - Maximum number of results

  2. Attributes Dictionary

    Attributes are passed in the attributes parameter dictionary. All values listed below have been comprehensively tested and verified against the Copernicus Data Space OData API.

    Note

    Processing Level Filtering

    processingLevel as an attribute does not filter correctly. Instead, use product_type parameter to specify:

    • 'S2MSI1C' for Level-1C (Top-of-Atmosphere reflectance)

    • 'S2MSI2A' for Level-2A (Bottom-of-Atmosphere reflectance)

    • 'S2MSI2B' for Level-2B (archived format)

  3. Method Parameters

    These parameters are passed directly to query_by_filter(), not in the attributes dictionary:

    • cloud_cover_threshold - Maximum cloud cover percentage (0-100, uses < comparison)

    • orbit_direction - Orbit direction ('ASCENDING' or 'DESCENDING')

    • product_type - Product level ('S2MSI1C', 'S2MSI2A', 'S2MSI2B')

Basic Parameters

Collection Name

Use 'SENTINEL-2' as the collection name.

results = searcher.search(collection_name='SENTINEL-2')

Geographic Parameters

Geometry

Region of Interest defined in Well Known Text (WKT) format with coordinates in decimal degrees (EPSG:4326).

# Polygon example
aoi_wkt = 'POLYGON((12.4 41.9, 12.5 41.9, 12.5 42.0, 12.4 42.0, 12.4 41.9))'
results = searcher.search(
    collection_name='SENTINEL-2',
    aoi_wkt=aoi_wkt
)

Tile Identifier

Sentinel-2 data is organized in tiles following the Military Grid Reference System (MGRS). Tile IDs follow the pattern: UTM zone (2 digits) + latitude band (1 letter) + square identifier (2 letters).

# Search for specific tile
results = searcher.search(
    collection_name='SENTINEL-2',
    attributes={'tileId': '32TQM'}
)

Product Parameters

Product Types

Sentinel-2 offers various product types:

# Search for Level-1C products
results = searcher.search(
    collection_name='SENTINEL-2',
    product_type='S2MSI1C'
)

Processing Level

Available processing levels:

  • S2MSI1C - Level-1C (Top-of-Atmosphere reflectance)

  • S2MSI2A - Level-2A (Bottom-of-Atmosphere reflectance)

# Search for Level-2A products
results = searcher.search(
    collection_name='SENTINEL-2',
    attributes={'processingLevel': 'S2MSI2A'}
)

Platform Serial Identifier

Sentinel-2 constellation satellites:

  • A - Sentinel-2A (launched 2015)

  • B - Sentinel-2B (launched 2017)

# Search for Sentinel-2A data only
results = searcher.search(
    collection_name='SENTINEL-2',
    attributes={'platformSerialIdentifier': 'A'}
)

Instrument Short Name

  • MSI - Multi-Spectral Instrument (main optical instrument)

# Search for MSI instrument data
results = searcher.search(
    collection_name='SENTINEL-2',
    attributes={'instrumentShortName': 'MSI'}
)

Sensor Mode

Sentinel-2 sensor modes:

  • INS-NOBS - Instrument Normal Observation mode

  • INS-RAW - Instrument Raw mode

  • INS-VIC - Instrument Vicarious Calibration mode

# Search for normal observation mode
results = searcher.search(
    collection_name='SENTINEL-2',
    attributes={'sensorMode': 'INS-NOBS'}
)

Cloud Cover

Cloud Cover Percentage

Filter products by cloud cover percentage (0-100%) using the cloud_cover_threshold parameter (not in attributes dict).

# Search for products with less than 20% cloud cover
searcher = CopernicusDataSearcher()
searcher.query_by_filter(
    collection_name='SENTINEL-2',
    product_type='S2MSI1C',
    start_date='2016-01-01',
    end_date='2016-12-31',
    cloud_cover_threshold=20,
    top=10
)
results = searcher.execute_query()

# Note: cloud_cover_threshold uses 'less than' comparison (<)
# Use cloud_cover_threshold=20 to get products with cloudCover < 20

Orbit Parameters

Orbit Direction

  • ASCENDING - Satellite moving from south to north

  • DESCENDING - Satellite moving from north to south

results = searcher.search(
    collection_name='SENTINEL-2',
    orbit_direction='DESCENDING'
)

Orbit Number

Absolute orbit number (integer value or range).

# Single orbit
results = searcher.search(
    collection_name='SENTINEL-2',
    attributes={'orbitNumber': '12345'}
)

# Orbit range
results = searcher.search(
    collection_name='SENTINEL-2',
    attributes={'orbitNumber': '[12345,12350]'}
)

Relative Orbit Number

Relative orbit number (1-143 for Sentinel-2), representing the orbit within a repeat cycle.

# Search for relative orbit 51
results = searcher.search(
    collection_name='SENTINEL-2',
    attributes={'relativeOrbitNumber': '51'}
)

Quality and Processing

Processing Baseline

Processing baseline version (affects product quality and algorithms used).

# Search for specific processing baseline
results = searcher.search(
    collection_name='SENTINEL-2',
    attributes={'processingBaseline': '04.00'}
)

# Search for baseline range
results = searcher.search(
    collection_name='SENTINEL-2',
    attributes={'processingBaseline': '[04.00,05.00]'}
)

Status

Product availability status:

  • ONLINE - Immediately available for download

  • OFFLINE - Requires retrieval from long-term storage

  • ALL - Both online and offline products

# Search for immediately available products
results = searcher.search(
    collection_name='SENTINEL-2',
    attributes={'status': 'ONLINE'}
)

Mission Take ID

Mission take identifier for specific acquisition sessions.

# Search for specific mission take
results = searcher.search(
    collection_name='SENTINEL-2',
    attributes={'missionTakeId': 'GS2A_20230601T101030_000123_N04.00'}
)

Practical Examples

Example 2: Level-2A Surface Reflectance

from phidown import CopernicusDataSearcher

searcher = CopernicusDataSearcher()

# Search for atmospherically corrected Level-2A products
results = searcher.search(
    collection_name='SENTINEL-2',
    product_type='S2MSI2A',
    aoi_wkt='POLYGON((12.4 41.9, 12.5 41.9, 12.5 42.0, 12.4 42.0, 12.4 41.9))',
    start_date='2023-06-01',
    end_date='2023-06-30',
    attributes={
        'cloudCover': '[0,10]',
        'processingLevel': 'S2MSI2A'
    }
)

print(f"Found {len(results)} Level-2A products")

Example 4: Time Series Analysis

from phidown import CopernicusDataSearcher
import pandas as pd

searcher = CopernicusDataSearcher()

# Search for consistent time series data
results = searcher.search(
    collection_name='SENTINEL-2',
    product_type='S2MSI1C',
    start_date='2023-01-01',
    end_date='2023-12-31',
    attributes={
        'tileId': '32TQM',
        'cloudCover': '[0,20]',
        'relativeOrbitNumber': '51'
    }
)

# Group by date to analyze temporal coverage
results['Date'] = pd.to_datetime(results['ContentDate']).dt.date
temporal_coverage = results.groupby('Date').size()

print(f"Found {len(results)} products over {len(temporal_coverage)} unique dates")

Example 5: Multi-Platform Comparison

from phidown import CopernicusDataSearcher

searcher = CopernicusDataSearcher()

# Compare data from both Sentinel-2A and Sentinel-2B
s2a_results = searcher.search(
    collection_name='SENTINEL-2',
    product_type='S2MSI1C',
    aoi_wkt='POLYGON((12.4 41.9, 12.5 41.9, 12.5 42.0, 12.4 42.0, 12.4 41.9))',
    start_date='2023-06-01',
    end_date='2023-06-30',
    attributes={
        'platform': 'S2A',
        'cloudCover': '[0,15]'
    }
)

s2b_results = searcher.search(
    collection_name='SENTINEL-2',
    product_type='S2MSI1C',
    aoi_wkt='POLYGON((12.4 41.9, 12.5 41.9, 12.5 42.0, 12.4 42.0, 12.4 41.9))',
    start_date='2023-06-01',
    end_date='2023-06-30',
    attributes={
        'platform': 'S2B',
        'cloudCover': '[0,15]'
    }
)

print(f"Sentinel-2A: {len(s2a_results)} products")
print(f"Sentinel-2B: {len(s2b_results)} products")

Example 6: Processing Baseline Filtering

from phidown import CopernicusDataSearcher

searcher = CopernicusDataSearcher()

# Search for products with latest processing baseline
results = searcher.search(
    collection_name='SENTINEL-2',
    product_type='S2MSI2A',
    aoi_wkt='POLYGON((12.4 41.9, 12.5 41.9, 12.5 42.0, 12.4 42.0, 12.4 41.9))',
    start_date='2023-06-01',
    end_date='2023-06-30',
    attributes={
        'processingBaseline': '[04.00,05.00]',
        'cloudCover': '[0,25]'
    }
)

print(f"Found {len(results)} products with processing baseline 4.00-5.00")

Search Optimization Tips

  1. Use Tile IDs: For specific areas, use tile IDs rather than large polygons for better performance.

  2. Filter by Cloud Cover: Always set appropriate cloud cover thresholds for your application.

  3. Choose Processing Level: Use Level-1C for general applications, Level-2A for surface analysis.

  4. Consider Processing Baseline: Newer baselines provide better quality but may not be available for all historical data.

  5. Optimize Temporal Range: Use appropriate date ranges to balance between data availability and search performance.

  6. Use Relative Orbit Numbers: For consistent geometry in time series analysis.

  7. Check Product Status: Use attributes={'status': 'ONLINE'} for immediate download needs.

Common Use Cases

Land Applications: - Vegetation monitoring: Level-2A, low cloud cover - Crop mapping: Level-1C or Level-2A, growing season - Land cover classification: Level-2A, multi-temporal - Deforestation monitoring: Level-1C, specific tiles

Water Applications: - Water quality monitoring: Level-2A, clear conditions - Coastal monitoring: Level-1C, coastal tiles - Lake/reservoir monitoring: Level-2A, specific areas

Urban Applications: - Urban expansion monitoring: Level-1C, consistent orbit - Infrastructure monitoring: Level-1C, high spatial resolution bands - Heat island studies: Level-2A, thermal considerations

Agricultural Applications: - Crop health monitoring: Level-2A, vegetation indices - Yield prediction: Level-1C/2A, time series - Irrigation mapping: Level-2A, SWIR bands

Environmental Applications: - Wildfire monitoring: Level-1C, near real-time - Drought monitoring: Level-2A, vegetation stress - Biodiversity studies: Level-2A, habitat mapping

Technical Specifications

Spectral Bands: - Band 1 (Coastal aerosol): 443 nm, 60m - Band 2 (Blue): 490 nm, 10m - Band 3 (Green): 560 nm, 10m - Band 4 (Red): 665 nm, 10m - Band 5 (Vegetation Red Edge): 705 nm, 20m - Band 6 (Vegetation Red Edge): 740 nm, 20m - Band 7 (Vegetation Red Edge): 783 nm, 20m - Band 8 (NIR): 842 nm, 10m - Band 8A (Vegetation Red Edge): 865 nm, 20m - Band 9 (Water vapour): 945 nm, 60m - Band 10 (SWIR – Cirrus): 1375 nm, 60m - Band 11 (SWIR): 1610 nm, 20m - Band 12 (SWIR): 2190 nm, 20m

Orbital Characteristics: - Altitude: 786 km - Inclination: 98.62° - Repeat cycle: 10 days (single satellite) - Revisit time: 5 days (constellation) - Swath width: 290 km

Radiometric Performance: - Radiometric resolution: 12 bits - Signal-to-noise ratio: >100 for most bands - Radiometric accuracy: <3% (reflectance)

For more detailed information about Sentinel-2 specifications and applications, refer to the official ESA Sentinel-2 documentation.