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:
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 resultsAttributes Dictionary
Attributes are passed in the
attributesparameter dictionary. All values listed below have been comprehensively tested and verified against the Copernicus Data Space OData API.Note
Processing Level Filtering
processingLevelas an attribute does not filter correctly. Instead, useproduct_typeparameter to specify:'S2MSI1C'for Level-1C (Top-of-Atmosphere reflectance)'S2MSI2A'for Level-2A (Bottom-of-Atmosphere reflectance)'S2MSI2B'for Level-2B (archived format)
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 modeINS-RAW- Instrument Raw modeINS-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 northDESCENDING- 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 downloadOFFLINE- Requires retrieval from long-term storageALL- 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 1: Basic Level-1C Search
from phidown import CopernicusDataSearcher
searcher = CopernicusDataSearcher()
# Search for Level-1C products with low cloud cover
searcher = CopernicusDataSearcher()
searcher.query_by_filter(
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',
cloud_cover_threshold=20,
top=10
)
results = searcher.execute_query()
print(f"Found {len(results)} Level-1C products with <20% cloud cover")
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 3: Specific Tile Search
from phidown import CopernicusDataSearcher
searcher = CopernicusDataSearcher()
# Search for specific tile over time
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,30]'
}
)
print(f"Found {len(results)} products for tile 32TQM")
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
Use Tile IDs: For specific areas, use tile IDs rather than large polygons for better performance.
Filter by Cloud Cover: Always set appropriate cloud cover thresholds for your application.
Choose Processing Level: Use Level-1C for general applications, Level-2A for surface analysis.
Consider Processing Baseline: Newer baselines provide better quality but may not be available for all historical data.
Optimize Temporal Range: Use appropriate date ranges to balance between data availability and search performance.
Use Relative Orbit Numbers: For consistent geometry in time series analysis.
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.