EOX GitLab Instance

Skip to content
Snippets Groups Projects
Commit a6385847 authored by Fabian Schindler's avatar Fabian Schindler
Browse files

Adding Level-1C for Sentinel-2 scheme

parent bbaffdfc
No related branches found
No related tags found
1 merge request!61Staging to master 1.3.0
......@@ -38,36 +38,78 @@ def parse_footprint(value):
class Sentinel2RegistrationScheme(RegistrationScheme):
name = 'sentinel-2-l2a'
MTD_MSIL2A_SCHEMA = {
'begin_time': Parameter('/n1:Level-2A_User_Product/n1:General_Info/Product_Info/PRODUCT_START_TIME/text()', False, parse_datetime),
'end_time': Parameter('/n1:Level-2A_User_Product/n1:General_Info/Product_Info/PRODUCT_STOP_TIME/text()', False, parse_datetime),
'identifier': Parameter('/n1:Level-2A_User_Product/n1:General_Info/Product_Info/PRODUCT_URI/text()'),
'footprint': Parameter('/n1:Level-2A_User_Product/n1:Geometric_Info/Product_Footprint/Product_Footprint/Global_Footprint/EXT_POS_LIST/text()', False, parse_footprint),
'level': Parameter('/n1:Level-2A_User_Product/n1:General_Info/Product_Info/PROCESSING_LEVEL/text()'),
'type': Parameter('/n1:Level-2A_User_Product/n1:General_Info/Product_Info/PRODUCT_TYPE/text()'),
'generation_time': Parameter('/n1:Level-2A_User_Product/n1:General_Info/Product_Info/GENERATION_TIME/text()', False, parse_datetime),
'cloud_cover': Parameter('/n1:Level-2A_User_Product/n1:Quality_Indicators_Info/Cloud_Coverage_Assessment/text()'),
'image_file_paths': Parameter('/n1:Level-2A_User_Product/n1:General_Info/Product_Info/Product_Organisation/Granule_List/Granule/IMAGE_FILE/text()', True),
MTD_SCHEMAS = {
'MSIL1C': {
'begin_time': Parameter('/n1:Level-1C_User_Product/n1:General_Info/Product_Info/PRODUCT_START_TIME/text()', False, parse_datetime),
'end_time': Parameter('/n1:Level-1C_User_Product/n1:General_Info/Product_Info/PRODUCT_STOP_TIME/text()', False, parse_datetime),
'identifier': Parameter('/n1:Level-1C_User_Product/n1:General_Info/Product_Info/PRODUCT_URI/text()'),
'footprint': Parameter('/n1:Level-1C_User_Product/n1:Geometric_Info/Product_Footprint/Product_Footprint/Global_Footprint/EXT_POS_LIST/text()', False, parse_footprint),
'level': Parameter('/n1:Level-1C_User_Product/n1:General_Info/Product_Info/PROCESSING_LEVEL/text()'),
'type': Parameter('/n1:Level-1C_User_Product/n1:General_Info/Product_Info/PRODUCT_TYPE/text()'),
'generation_time': Parameter('/n1:Level-1C_User_Product/n1:General_Info/Product_Info/GENERATION_TIME/text()', False, parse_datetime),
'cloud_cover': Parameter('/n1:Level-1C_User_Product/n1:Quality_Indicators_Info/Cloud_Coverage_Assessment/text()'),
'image_file_paths': Parameter('/n1:Level-1C_User_Product/n1:General_Info/Product_Info/Product_Organisation/Granule_List/Granule/IMAGE_FILE/text()', True),
},
'MSIL2A': {
'begin_time': Parameter('/n1:Level-2A_User_Product/n1:General_Info/Product_Info/PRODUCT_START_TIME/text()', False, parse_datetime),
'end_time': Parameter('/n1:Level-2A_User_Product/n1:General_Info/Product_Info/PRODUCT_STOP_TIME/text()', False, parse_datetime),
'identifier': Parameter('/n1:Level-2A_User_Product/n1:General_Info/Product_Info/PRODUCT_URI/text()'),
'footprint': Parameter('/n1:Level-2A_User_Product/n1:Geometric_Info/Product_Footprint/Product_Footprint/Global_Footprint/EXT_POS_LIST/text()', False, parse_footprint),
'level': Parameter('/n1:Level-2A_User_Product/n1:General_Info/Product_Info/PROCESSING_LEVEL/text()'),
'type': Parameter('/n1:Level-2A_User_Product/n1:General_Info/Product_Info/PRODUCT_TYPE/text()'),
'generation_time': Parameter('/n1:Level-2A_User_Product/n1:General_Info/Product_Info/GENERATION_TIME/text()', False, parse_datetime),
'cloud_cover': Parameter('/n1:Level-2A_User_Product/n1:Quality_Indicators_Info/Cloud_Coverage_Assessment/text()'),
'image_file_paths': Parameter('/n1:Level-2A_User_Product/n1:General_Info/Product_Info/Product_Organisation/Granule_List/Granule/IMAGE_FILE/text()', True),
},
}
MTD_TL_SCHEMA = {
'mask_file_paths': Parameter('/n1:Level-2A_Tile_ID/n1:Quality_Indicators_Info/Pixel_Level_QI/MASK_FILENAME/text()', True),
MTD_TL_SCHEMAS = {
'MSIL1C': {
'mask_file_paths': Parameter('/n1:Level-2A_Tile_ID/n1:Quality_Indicators_Info/Pixel_Level_QI/MASK_FILENAME/text()', True),
},
'MSIL2A': {
'mask_file_paths': Parameter('/n1:Level-2A_Tile_ID/n1:Quality_Indicators_Info/Pixel_Level_QI/MASK_FILENAME/text()', True),
},
}
MTD_MSIL2A_NAMESPACES = {
'n1': "https://psd-14.sentinel2.eo.esa.int/PSD/User_Product_Level-2A.xsd"
MTD_NAMESPACES = {
'MSIL1C': {
'n1': "https://psd-14.sentinel2.eo.esa.int/PSD/User_Product_Level-1C.xsd"
},
'MSIL2A': {
'n1': "https://psd-14.sentinel2.eo.esa.int/PSD/User_Product_Level-2A.xsd"
},
}
MTD_TL_NAMESPACES = {
'n1': 'https://psd-14.sentinel2.eo.esa.int/PSD/S2_PDI_Level-2A_Tile_Metadata.xsd'
'MSIL1C': {
'n1': 'https://psd-14.sentinel2.eo.esa.int/PSD/S2_PDI_Level-1C_Tile_Metadata.xsd'
},
'MSIL2A': {
'n1': 'https://psd-14.sentinel2.eo.esa.int/PSD/S2_PDI_Level-2A_Tile_Metadata.xsd'
},
}
def get_context(self, source: Source, path: str) -> List[Context]:
metadata_file = join(path, 'MTD_MSIL2A.xml')
try:
metadata_file = join(path, 'MTD_MSIL2A.xml')
mtd_schema = MTD_SCHEMAS['MSIL2A']
mtd_namespaces = MTD_NAMESPACES['MSIL2A']
mtd_tl_schema = MTD_TL_SCHEMAS['MSIL2A']
mtd_tl_namespaces = MTD_TL_NAMESPACES['MSIL2A']
except:
metadata_file = join(path, 'MTD_MSIL1C.xml')
mtd_schema = MTD_SCHEMAS['MSIL1C']
mtd_namespaces = MTD_NAMESPACES['MSIL1C']
mtd_tl_schema = MTD_TL_SCHEMAS['MSIL1C']
mtd_tl_namespaces = MTD_TL_NAMESPACES['MSIL1C']
tree = read_xml(source, metadata_file)
# get product metadata
metadata = parse_metadata_schema(tree, self.MTD_MSIL2A_SCHEMA, self.MTD_MSIL2A_NAMESPACES)
metadata = parse_metadata_schema(tree, mtd_schema, mtd_namespaces)
band_re = re.compile(r'.*([A-Z0-9]{3}_[0-9]{2}m)$')
raster_files = {
......@@ -79,7 +121,7 @@ class Sentinel2RegistrationScheme(RegistrationScheme):
mtd_files = source.list_files(join(path, 'GRANULE'), '*/MTD_TL.xml')
logger.info(f'{mtd_files}')
tl_tree = read_xml(source, mtd_files[0])
tile_metadata = parse_metadata_schema(tl_tree, self.MTD_TL_SCHEMA, self.MTD_TL_NAMESPACES)
tile_metadata = parse_metadata_schema(tl_tree, mtd_tl_schema, mtd_tl_namespaces)
mask_type_re = re.compile(r'.*/MSK_([A-Z]*)_([A-Z0-9]{3}).[a-z0-9]+$')
mask_files = {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment