Create a Sentinel-2 Item¶
Install the package, then run this complete example with synthetic metadata:
from datetime import datetime, timezone
import pystac
from pystac.extensions.sentinel2 import Sentinel2Extension
acquisition_datetime = datetime(2023, 2, 1, tzinfo=timezone.utc)
item = pystac.Item(
id="example-sentinel-2",
geometry=None,
bbox=None,
datetime=acquisition_datetime,
properties={},
)
sentinel2 = Sentinel2Extension.ext(item, add_if_missing=True)
sentinel2.apply(
tile_id="S2B_OPER_MSI_L2A_TL_SGS__20230201T120000_A030000_T32TQM_N05.09",
datatake_id="GS2B_20230201T103029_030000_N05.09",
datatake_type="INS-NOBS",
reflectance_conversion_factor=1.032,
)
serialized = item.to_dict()
assert Sentinel2Extension.get_schema_uri() in serialized["stac_extensions"]
assert serialized["properties"]["s2:datatake_type"] == "INS-NOBS"
restored = Sentinel2Extension.ext(pystac.Item.from_dict(serialized))
assert restored.tile_id == sentinel2.tile_id
assert restored.reflectance_conversion_factor == sentinel2.reflectance_conversion_factor
At least one of tile_id, datatake_id, product_uri, datastrip_id, datatake_type, or reflectance_conversion_factor is required for schema validation. Calling apply() without arguments clears all supported fields, so the resulting empty extension fails validation.
to_dict() serializes without running JSON Schema validation. With the pystac[validation] extra installed and schemas accessible, validate the complete Item:
item.validate()
See validation boundaries for details.