eoio.readers.landsat.metadata.ls_mtd_xml module#
eoio.readers.landsat.metadata.ls_prod_mtd - reader for Landsat product metadata (MTL XML).
This module provides a Landsat product metadata reader analogous to the Sentinel-2 S2ProdXMLReader. It defines a single LSProdXMLReader class built on the generic XMLReader and a LS_PROD_MTD_METADATA_PATHS mapping of commonly used fields.
It targets Collection 2 Level-1 MTL XML files structured as in the attached example: <LANDSAT_METADATA_FILE>
<PRODUCT_CONTENTS>…</PRODUCT_CONTENTS> <IMAGE_ATTRIBUTES>…</IMAGE_ATTRIBUTES> <PROJECTION_ATTRIBUTES>…</PROJECTION_ATTRIBUTES> <LEVEL1_PROCESSING_RECORD>…</LEVEL1_PROCESSING_RECORD> <LEVEL1_MIN_MAX_RADIANCE>…</LEVEL1_MIN_MAX_RADIANCE> <LEVEL1_MIN_MAX_REFLECTANCE>…</LEVEL1_MIN_MAX_REFLECTANCE> <LEVEL1_MIN_MAX_PIXEL_VALUE>…</LEVEL1_MIN_MAX_PIXEL_VALUE> <LEVEL1_RADIOMETRIC_RESCALING>…</LEVEL1_RADIOMETRIC_RESCALING> <LEVEL1_THERMAL_CONSTANTS>…</LEVEL1_THERMAL_CONSTANTS> <LEVEL1_PROJECTION_PARAMETERS>…</LEVEL1_PROJECTION_PARAMETERS>
</LANDSAT_METADATA_FILE>
- class eoio.readers.landsat.metadata.ls_mtd_xml.LSL1ProdXMLReader(path: Path)[source]#
Bases:
XMLReaderLandsat Collection-2 Level-1 product metadata reader.
This class provides semantic accessors for commonly used fields in the Landsat product metadata XML (MTL.xml). It builds on the generic
XMLReaderto return domain-appropriate Python objects.- find_acquisition_date() date[source]#
Return the acquisition date (DATE_ACQUIRED).
- Returns:
Acquisition date as a datetime.date object.
- find_acquisition_datetime() datetime[source]#
Return the scene center sensing time as a timezone-aware datetime (UTC).
Combines DATE_ACQUIRED (YYYY-MM-DD) and SCENE_CENTER_TIME (HH:MM:SS[.fffffff]Z).
- Returns:
Acquisition datetime as a datetime.datetime object (UTC).
- find_bounds()[source]#
Return the product footprint as a Shapely polygon in lon/lat order.
Uses PROJECTION_ATTRIBUTES corner lat/lon (PRODUCT) coordinates: UL, UR, LR, LL. The polygon is ordered UL -> UR -> LR -> LL -> UL and validated.
- find_projection_parameters() dict[source]#
Return Level-1 projection parameters (map projection, grid sizes, orientation, resampling option).
- get_radiometric_rescaling() dict[source]#
Extract all radiometric rescaling parameters for bands B1..B11.
Returns a dict mapping band name (‘B1’..’B11’) to: - radiance_mult, radiance_add (all bands) - reflectance_mult, reflectance_add (B1..B9 only)
- get_thermal_constants() dict[source]#
Extract thermal constants (K1, K2) for thermal bands B10, B11. Returns dict: {“B10”: {“k1”: …, “k2”: …}, “B11”: {“k1”: …, “k2”: …}}
- metadata_paths: dict[str, str] = {'cloud_cover': './/IMAGE_ATTRIBUTES/CLOUD_COVER', 'cloud_cover_land': './/IMAGE_ATTRIBUTES/CLOUD_COVER_LAND', 'collection_category': './/PRODUCT_CONTENTS/COLLECTION_CATEGORY', 'collection_number': './/PRODUCT_CONTENTS/COLLECTION_NUMBER', 'corner_ll_lat_product': './/PROJECTION_ATTRIBUTES/CORNER_LL_LAT_PRODUCT', 'corner_ll_lon_product': './/PROJECTION_ATTRIBUTES/CORNER_LL_LON_PRODUCT', 'corner_lr_lat_product': './/PROJECTION_ATTRIBUTES/CORNER_LR_LAT_PRODUCT', 'corner_lr_lon_product': './/PROJECTION_ATTRIBUTES/CORNER_LR_LON_PRODUCT', 'corner_ul_lat_product': './/PROJECTION_ATTRIBUTES/CORNER_UL_LAT_PRODUCT', 'corner_ul_lon_product': './/PROJECTION_ATTRIBUTES/CORNER_UL_LON_PRODUCT', 'corner_ur_lat_product': './/PROJECTION_ATTRIBUTES/CORNER_UR_LAT_PRODUCT', 'corner_ur_lon_product': './/PROJECTION_ATTRIBUTES/CORNER_UR_LON_PRODUCT', 'date_acquired': './/IMAGE_ATTRIBUTES/DATE_ACQUIRED', 'date_product_generated': './/LEVEL1_PROCESSING_RECORD/DATE_PRODUCT_GENERATED', 'datum': './/PROJECTION_ATTRIBUTES/DATUM', 'earth_sun_distance': './/IMAGE_ATTRIBUTES/EARTH_SUN_DISTANCE', 'ellipsoid': './/PROJECTION_ATTRIBUTES/ELLIPSOID', 'grid_cell_size_panchromatic': './/PROJECTION_ATTRIBUTES/GRID_CELL_SIZE_PANCHROMATIC', 'grid_cell_size_reflective': './/PROJECTION_ATTRIBUTES/GRID_CELL_SIZE_REFLECTIVE', 'grid_cell_size_thermal': './/PROJECTION_ATTRIBUTES/GRID_CELL_SIZE_THERMAL', 'image_quality_oli': './/IMAGE_ATTRIBUTES/IMAGE_QUALITY_OLI', 'image_quality_tirs': './/IMAGE_ATTRIBUTES/IMAGE_QUALITY_TIRS', 'k1_constant_band_10': './/LEVEL1_THERMAL_CONSTANTS/K1_CONSTANT_BAND_10', 'k1_constant_band_11': './/LEVEL1_THERMAL_CONSTANTS/K1_CONSTANT_BAND_11', 'k2_constant_band_10': './/LEVEL1_THERMAL_CONSTANTS/K2_CONSTANT_BAND_10', 'k2_constant_band_11': './/LEVEL1_THERMAL_CONSTANTS/K2_CONSTANT_BAND_11', 'landsat_product_id': './/PRODUCT_CONTENTS/LANDSAT_PRODUCT_ID', 'map_projection': './/PROJECTION_ATTRIBUTES/MAP_PROJECTION', 'orientation': './/PROJECTION_ATTRIBUTES/ORIENTATION', 'output_format': './/PRODUCT_CONTENTS/OUTPUT_FORMAT', 'processing_level': './/PRODUCT_CONTENTS/PROCESSING_LEVEL', 'processing_software_version': './/LEVEL1_PROCESSING_RECORD/PROCESSING_SOFTWARE_VERSION', 'proj_params_datum': './/LEVEL1_PROJECTION_PARAMETERS/DATUM', 'proj_params_ellipsoid': './/LEVEL1_PROJECTION_PARAMETERS/ELLIPSOID', 'proj_params_grid_cell_size_panchromatic': './/LEVEL1_PROJECTION_PARAMETERS/GRID_CELL_SIZE_PANCHROMATIC', 'proj_params_grid_cell_size_reflective': './/LEVEL1_PROJECTION_PARAMETERS/GRID_CELL_SIZE_REFLECTIVE', 'proj_params_grid_cell_size_thermal': './/LEVEL1_PROJECTION_PARAMETERS/GRID_CELL_SIZE_THERMAL', 'proj_params_map_projection': './/LEVEL1_PROJECTION_PARAMETERS/MAP_PROJECTION', 'proj_params_orientation': './/LEVEL1_PROJECTION_PARAMETERS/ORIENTATION', 'proj_params_resampling_option': './/LEVEL1_PROJECTION_PARAMETERS/RESAMPLING_OPTION', 'proj_params_utm_zone': './/LEVEL1_PROJECTION_PARAMETERS/UTM_ZONE', 'radiance_add_band_1': './/LEVEL1_RADIOMETRIC_RESCALING/RADIANCE_ADD_BAND_1', 'radiance_add_band_10': './/LEVEL1_RADIOMETRIC_RESCALING/RADIANCE_ADD_BAND_10', 'radiance_add_band_11': './/LEVEL1_RADIOMETRIC_RESCALING/RADIANCE_ADD_BAND_11', 'radiance_add_band_2': './/LEVEL1_RADIOMETRIC_RESCALING/RADIANCE_ADD_BAND_2', 'radiance_add_band_3': './/LEVEL1_RADIOMETRIC_RESCALING/RADIANCE_ADD_BAND_3', 'radiance_add_band_4': './/LEVEL1_RADIOMETRIC_RESCALING/RADIANCE_ADD_BAND_4', 'radiance_add_band_5': './/LEVEL1_RADIOMETRIC_RESCALING/RADIANCE_ADD_BAND_5', 'radiance_add_band_6': './/LEVEL1_RADIOMETRIC_RESCALING/RADIANCE_ADD_BAND_6', 'radiance_add_band_7': './/LEVEL1_RADIOMETRIC_RESCALING/RADIANCE_ADD_BAND_7', 'radiance_add_band_8': './/LEVEL1_RADIOMETRIC_RESCALING/RADIANCE_ADD_BAND_8', 'radiance_add_band_9': './/LEVEL1_RADIOMETRIC_RESCALING/RADIANCE_ADD_BAND_9', 'radiance_mult_band_1': './/LEVEL1_RADIOMETRIC_RESCALING/RADIANCE_MULT_BAND_1', 'radiance_mult_band_10': './/LEVEL1_RADIOMETRIC_RESCALING/RADIANCE_MULT_BAND_10', 'radiance_mult_band_11': './/LEVEL1_RADIOMETRIC_RESCALING/RADIANCE_MULT_BAND_11', 'radiance_mult_band_2': './/LEVEL1_RADIOMETRIC_RESCALING/RADIANCE_MULT_BAND_2', 'radiance_mult_band_3': './/LEVEL1_RADIOMETRIC_RESCALING/RADIANCE_MULT_BAND_3', 'radiance_mult_band_4': './/LEVEL1_RADIOMETRIC_RESCALING/RADIANCE_MULT_BAND_4', 'radiance_mult_band_5': './/LEVEL1_RADIOMETRIC_RESCALING/RADIANCE_MULT_BAND_5', 'radiance_mult_band_6': './/LEVEL1_RADIOMETRIC_RESCALING/RADIANCE_MULT_BAND_6', 'radiance_mult_band_7': './/LEVEL1_RADIOMETRIC_RESCALING/RADIANCE_MULT_BAND_7', 'radiance_mult_band_8': './/LEVEL1_RADIOMETRIC_RESCALING/RADIANCE_MULT_BAND_8', 'radiance_mult_band_9': './/LEVEL1_RADIOMETRIC_RESCALING/RADIANCE_MULT_BAND_9', 'reflectance_add_band_1': './/LEVEL1_RADIOMETRIC_RESCALING/REFLECTANCE_ADD_BAND_1', 'reflectance_add_band_2': './/LEVEL1_RADIOMETRIC_RESCALING/REFLECTANCE_ADD_BAND_2', 'reflectance_add_band_3': './/LEVEL1_RADIOMETRIC_RESCALING/REFLECTANCE_ADD_BAND_3', 'reflectance_add_band_4': './/LEVEL1_RADIOMETRIC_RESCALING/REFLECTANCE_ADD_BAND_4', 'reflectance_add_band_5': './/LEVEL1_RADIOMETRIC_RESCALING/REFLECTANCE_ADD_BAND_5', 'reflectance_add_band_6': './/LEVEL1_RADIOMETRIC_RESCALING/REFLECTANCE_ADD_BAND_6', 'reflectance_add_band_7': './/LEVEL1_RADIOMETRIC_RESCALING/REFLECTANCE_ADD_BAND_7', 'reflectance_add_band_8': './/LEVEL1_RADIOMETRIC_RESCALING/REFLECTANCE_ADD_BAND_8', 'reflectance_add_band_9': './/LEVEL1_RADIOMETRIC_RESCALING/REFLECTANCE_ADD_BAND_9', 'reflectance_mult_band_1': './/LEVEL1_RADIOMETRIC_RESCALING/REFLECTANCE_MULT_BAND_1', 'reflectance_mult_band_2': './/LEVEL1_RADIOMETRIC_RESCALING/REFLECTANCE_MULT_BAND_2', 'reflectance_mult_band_3': './/LEVEL1_RADIOMETRIC_RESCALING/REFLECTANCE_MULT_BAND_3', 'reflectance_mult_band_4': './/LEVEL1_RADIOMETRIC_RESCALING/REFLECTANCE_MULT_BAND_4', 'reflectance_mult_band_5': './/LEVEL1_RADIOMETRIC_RESCALING/REFLECTANCE_MULT_BAND_5', 'reflectance_mult_band_6': './/LEVEL1_RADIOMETRIC_RESCALING/REFLECTANCE_MULT_BAND_6', 'reflectance_mult_band_7': './/LEVEL1_RADIOMETRIC_RESCALING/REFLECTANCE_MULT_BAND_7', 'reflectance_mult_band_8': './/LEVEL1_RADIOMETRIC_RESCALING/REFLECTANCE_MULT_BAND_8', 'reflectance_mult_band_9': './/LEVEL1_RADIOMETRIC_RESCALING/REFLECTANCE_MULT_BAND_9', 'scene_center_time': './/IMAGE_ATTRIBUTES/SCENE_CENTER_TIME', 'sensor_id': './/IMAGE_ATTRIBUTES/SENSOR_ID', 'spacecraft_id': './/IMAGE_ATTRIBUTES/SPACECRAFT_ID', 'sun_azimuth': './/IMAGE_ATTRIBUTES/SUN_AZIMUTH', 'sun_elevation': './/IMAGE_ATTRIBUTES/SUN_ELEVATION', 'utm_zone': './/PROJECTION_ATTRIBUTES/UTM_ZONE', 'wrs_path': './/IMAGE_ATTRIBUTES/WRS_PATH', 'wrs_row': './/IMAGE_ATTRIBUTES/WRS_ROW'}#
Mapping from metadata keys to XPath expressions. Intended to be overridden by subclasses.