def main(): """ Tests de la classe et de ses méthodes. """ # secteur3 b1 = r'data/CU_LC08.001_SRB1_doy2020133_aid0001.tif' b2 = r'data/CU_LC08.001_SRB2_doy2020133_aid0001.tif' b3 = r'data/CU_LC08.001_SRB3_doy2020133_aid0001.tif' b4 = r'data/CU_LC08.001_SRB4_doy2020133_aid0001.tif' b5 = r'data/CU_LC08.001_SRB5_doy2020133_aid0001.tif' b6 = r'data/CU_LC08.001_SRB6_doy2020133_aid0001.tif' b7 = r'data/CU_LC08.001_SRB7_doy2020133_aid0001.tif' qa = r'data/CU_LC08.001_PIXELQA_doy2020133_aid0001.tif' landsat = Landsat(b1, b2, b3, b4, b5, b6, b7, qa, "appeears") lst = r'data/MOD11A1.006_LST_Day_1km_doy2020133_aid0001.tif' qa = r'data/MOD11A1.006_QC_Day_doy2020133_aid0001.tif' modis = Modis(lst, qa) # reprojection de l'image MODIS de départ en UTM18 modis.reprojectModisSystem('EPSG:32618', '-9999.0', '1000.0', 'average') mnt = r'data/ASTGTM_NC.003_ASTER_GDEM_DEM_doy2000061_aid0001.tif' qa = r'data/ASTGTM_NUMNC.003_ASTER_GDEM_NUM_doy2000061_aid0001.tif' aster = Aster(mnt, qa) secteur3 = Secteur(modis, landsat, aster) secteur3.prepareData(train_model=True) rfr = ReductionEchelle(secteur3) # tests de combinaisons de prédicteurs #predictors = ['NDVI', 'NDWI', 'NDBI', 'MNDWI', 'SAVI', 'Albedo', 'BSI', 'UI', 'EVI', 'IBI', 'MNT'] #predictors = ['MNT', 'B7', 'B6', 'B1', 'B2', 'BSI', 'MNDWI'] ## Not bad! predictors = ['NDVI', 'MNT'] #predictors = ['MNT', 'Albedo', 'MNDWI', 'BSI', 'B1', 'B2'] #predictors = ['NDVI', 'NDWI', 'MNT'] rfr.applyDownscaling(predictors, outputFile=r'data3/MODIS_predit_100m.tif', residualCorrection=True, outputFile_withResidualCorrection= r'data/MODIS_predit_100m_avec_residus.tif')
def main(): """ Tests de la classe et de ses méthodes. """ # secteur1 b1 = r'27juin2019/CU_LC08.001_SRB1_doy2019178_aid0001.tif' b2 = r'27juin2019/CU_LC08.001_SRB2_doy2019178_aid0001.tif' b3 = r'27juin2019/CU_LC08.001_SRB3_doy2019178_aid0001.tif' b4 = r'27juin2019/CU_LC08.001_SRB4_doy2019178_aid0001.tif' b5 = r'27juin2019/CU_LC08.001_SRB5_doy2019178_aid0001.tif' b6 = r'27juin2019/CU_LC08.001_SRB6_doy2019178_aid0001.tif' b7 = r'27juin2019/CU_LC08.001_SRB7_doy2019178_aid0001.tif' qa = r'27juin2019/CU_LC08.001_PIXELQA_doy2019178_aid0001.tif' landsat = Landsat(b1, b2, b3, b4, b5, b6, b7, qa) lst = r'27juin2019/MOD11A1.006_LST_Day_1km_doy2019178_aid0001.tif' qa = r'27juin2019/MOD11A1.006_QC_Day_doy2019178_aid0001.tif' # test) modis = Modis(lst, qa) mnt = r'data/ASTGTM_NC.003_ASTER_GDEM_DEM_doy2000061_aid0001.tif' qa = r'data/ASTGTM_NUMNC.003_ASTER_GDEM_NUM_doy2000061_aid0001.tif' # aussi un test (ne semble pas valide) aster = Aster(mnt, qa) rfr = Secteur(modis, landsat, aster) rfr.prepareData() predictors = ['NDVI', 'NDWI', 'NDBI', 'B1'] df = rfr.getDf(predictors) print(df) print(df.drop('LST', axis=1)) print(df['LST']) a = df['LST'] print(a.ravel())
# load landsat image (bands 1-7 + qa) # secteur3 b1 = r'secteur3/landsat8/CU_LC08.001_SRB1_doy2020133_aid0001.tif' b2 = r'secteur3/landsat8/CU_LC08.001_SRB2_doy2020133_aid0001.tif' b3 = r'secteur3/landsat8/CU_LC08.001_SRB3_doy2020133_aid0001.tif' b4 = r'secteur3/landsat8/CU_LC08.001_SRB4_doy2020133_aid0001.tif' b5 = r'secteur3/landsat8/CU_LC08.001_SRB5_doy2020133_aid0001.tif' b6 = r'secteur3/landsat8/CU_LC08.001_SRB6_doy2020133_aid0001.tif' b7 = r'secteur3/landsat8/CU_LC08.001_SRB7_doy2020133_aid0001.tif' qa = r'secteur3/landsat8/CU_LC08.001_PIXELQA_doy2020133_aid0001.tif' landsat = Landsat(b1, b2, b3, b4, b5, b6, b7, qa) lst = r'secteur3/modis/MOD11A1.006_LST_Day_1km_doy2020133_aid0001.tif' qa = r'secteur3/modis/MOD11A1.006_QC_Day_doy2020133_aid0001.tif' modis = Modis(lst, qa) # reprojection de l'image MODIS de départ en UTM18 modis.reprojectModisSystem('EPSG:32618', '-9999.0', '1000.0', 'average') # subdivise en pixels de 100m modis.subdividePixel(10, "file", modis.lst.split(".")[0] + '_subdivided_100m.tif') mnt = r'secteur3/aster/ASTGTM_NC.003_ASTER_GDEM_DEM_doy2000061_aid0001.tif' qa = r'secteur3/aster/ASTGTM_NUMNC.003_ASTER_GDEM_NUM_doy2000061_aid0001.tif' aster = Aster(mnt, qa) #secteur3 = Secteur(modis, landsat, aster) # on devrait peut-être faire un constructeur pour secteur qui ne # nécessite pas ASTER (vu que c'est pas nécessaire du tout ici)
def downscale(): """ Permet d'effectuer la réduction d'échelle. Même principe que l'exécution à partir du fichier main pour le programme principal. On utilise MOD11_L2 et des images Landsat 8 provenant de EarthData qui ont été acquises à des heures très rapproches la même journée pour s'assurer d'avoir des températures de surface assez similaires (comparables). *** Il faut au préalable découper l'image MOD11_L2 pour qu'elle soit plus petite ou de même taille que les images Landsat et Aster afin que le découpage/alignement/rééchantillonnage de Landsat et Aster par rapport à l'image de référence Modis s'effectue correctement. Ce découpage peut être fait facilement dans QGIS selon l'étendue d'un shapefile ou une zone entrée manuellement. *** """ # 19 mai 2020 # données Landsat b1 = r'data/LC08_L1TP_014028_20200706_20200721_01_T1_B1.TIF' b2 = r'data/LC08_L1TP_014028_20200706_20200721_01_T1_B2.TIF' b3 = r'data/LC08_L1TP_014028_20200706_20200721_01_T1_B3.TIF' b4 = r'data/LC08_L1TP_014028_20200706_20200721_01_T1_B4.TIF' b5 = r'data/LC08_L1TP_014028_20200706_20200721_01_T1_B5.TIF' b6 = r'data/LC08_L1TP_014028_20200706_20200721_01_T1_B6.TIF' b7 = r'data/LC08_L1TP_014028_20200706_20200721_01_T1_B7.TIF' qa = r'data/LC08_L1TP_014028_20200706_20200721_01_T1_BQA.TIF' #src = "appeears" src = "earthdata" landsat = Landsat(b1, b2, b3, b4, b5, b6, b7, qa, src) # données Modis lst = r'data/MOD11_L2.clipped_test2.tif' # image Modis découpée qa = r'data/MOD11A1.006_QC_Day_doy2020133_aid0001.tif' # bande inutile pour la validation externe modis = Modis(lst, qa) # reprojection de l'image MODIS de départ en UTM18 modis.reprojectModisSystem('EPSG:32618', 'np.nan', '1000.0', 'average') # données Aster mnt = r'data/ASTGTM_NC.003_ASTER_GDEM_DEM_doy2000061_aid0001.tif' qa = r'data/ASTGTM_NUMNC.003_ASTER_GDEM_NUM_doy2000061_aid0001.tif' aster = Aster(mnt, qa) # construction de l'objet Secteur secteur3 = Secteur(modis, landsat, aster) secteur3.prepareData(train_model=True) # construction de l'objet ReductionEchelle à partir du secteur rfr = ReductionEchelle(secteur3) # prédicteurs # choix de prédicteurs sous forme de liste # options possibles : 'NDVI', 'NDWI', 'NDBI', 'MNDWI', 'SAVI', 'Albedo', 'BSI', 'UI', 'EVI', 'IBI', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'MNT', 'Pente', 'Orientation' predictors = ['NDWI', 'NDWI', 'NDBI'] # réduction d'échelle rfr.applyDownscaling( predictors, outputFile=r'data/MODIS_predit_100m.tif', residualCorrection=True, outputFile_withResidualCorrection= r'data/MODIS_predit_100m_avec_residus.tif', targetResolution=100) # validation externe seulement possible à 100m
def main(): """ Tests de la classe et de ses méthodes. ****** Exécuter ce fichier pour effectuer le downscaling ****** """ # secteur1 """ b1 = r'secteur/CU_LC08.001_SRB1_doy2020229_aid0001.tif' b2 = r'secteur/CU_LC08.001_SRB2_doy2020229_aid0001.tif' b3 = r'secteur/CU_LC08.001_SRB3_doy2020229_aid0001.tif' b4 = r'secteur/CU_LC08.001_SRB4_doy2020229_aid0001.tif' b5 = r'secteur/CU_LC08.001_SRB5_doy2020229_aid0001.tif' b6 = r'secteur/CU_LC08.001_SRB6_doy2020229_aid0001.tif' b7 = r'secteur/CU_LC08.001_SRB7_doy2020229_aid0001.tif' qa = r'secteur/CU_LC08.001_PIXELQA_doy2020229_aid0001.tif' landsat = Landsat(b1, b2, b3, b4, b5, b6, b7, qa) lst = r'secteur/MOD11A1.006_LST_Day_1km_doy2020221_aid0001.tif' qa = r'secteur/MOD11A1.006_QC_Day_doy2020229_aid0001.tif' # pas la bonne image, mais juste pour un test, vu que je # trouve pas la bonne image (QA n'est pas utilisé dans le # test) modis = Modis(lst, qa) mnt = r'secteur/ASTGTM_NC.003_ASTER_GDEM_DEM_doy2000061_aid0001.tif' qa = r'secteur/ASTGTM_NUMNC.003_ASTER_GDEM_NUM_doy2000061_aid0001.tif' # aussi un test (ne semble pas valide) aster = Aster(mnt, qa) secteur1 = Secteur(modis, landsat, aster) secteur1.prepareData() rfr = ReductionEchelle(secteur1) rfr.applyDownscaling() """ # *********** TEST FONCTIONNEL ************** # secteur3 b1 = r'secteur3/landsat8/CU_LC08.001_SRB1_doy2020133_aid0001.tif' b2 = r'secteur3/landsat8/CU_LC08.001_SRB2_doy2020133_aid0001.tif' b3 = r'secteur3/landsat8/CU_LC08.001_SRB3_doy2020133_aid0001.tif' b4 = r'secteur3/landsat8/CU_LC08.001_SRB4_doy2020133_aid0001.tif' b5 = r'secteur3/landsat8/CU_LC08.001_SRB5_doy2020133_aid0001.tif' b6 = r'secteur3/landsat8/CU_LC08.001_SRB6_doy2020133_aid0001.tif' b7 = r'secteur3/landsat8/CU_LC08.001_SRB7_doy2020133_aid0001.tif' qa = r'secteur3/landsat8/CU_LC08.001_PIXELQA_doy2020133_aid0001.tif' landsat = Landsat(b1, b2, b3, b4, b5, b6, b7, qa) lst = r'secteur3/modis/MOD11A1.006_LST_Day_1km_doy2020133_aid0001.tif' qa = r'secteur3/modis/MOD11A1.006_QC_Day_doy2020133_aid0001.tif' modis = Modis(lst, qa) # reprojection de l'image MODIS de départ en UTM18 modis.reprojectModisSystem('EPSG:32618', '-9999.0', '1000.0', 'average') mnt = r'secteur3/aster/ASTGTM_NC.003_ASTER_GDEM_DEM_doy2000061_aid0001.tif' qa = r'secteur3/aster/ASTGTM_NUMNC.003_ASTER_GDEM_NUM_doy2000061_aid0001.tif' aster = Aster(mnt, qa) secteur3 = Secteur(modis, landsat, aster) secteur3.prepareData(train_model=True) rfr = ReductionEchelle(secteur3) # options fournies: #predictors = ['NDVI', 'NDWI', 'NDBI', 'MNDWI', 'SAVI', 'Albedo', 'BSI', 'UI', 'EVI', 'IBI', 'B1', 'B2', 'B3', # 'B4', 'B5', 'B6', 'B7', 'MNT', 'Pente'] #predictors = ['NDVI', 'NDWI', 'NDBI', 'MNDWI', 'SAVI', 'Albedo', 'BSI', 'UI', 'EVI', 'IBI', 'MNT'] #predictors = ['MNT', 'B7', 'B6', 'B1', 'B2', 'BSI', 'MNDWI'] ## Not bad! predictors = ['NDVI', 'MNT'] #predictors = ['MNT', 'Albedo', 'MNDWI', 'BSI', 'B1', 'B2'] #predictors = ['NDVI', 'NDWI', 'MNT'] rfr.applyDownscaling(predictors, outputFile=r'secteur3/MODIS_predit_100m.tif', residualCorrection=True, outputFile_withResidualCorrection= r'secteur3/MODIS_predit_100m_avec_residus.tif')
def main(): ####################################################################### ###################### paramètres du programme ######################## ####################################################################### # Instructions : # - Les données doivent tous être directement dans le même dossiers # - Modifier seulement les paramètres dans l'entête de la fonction main() # données Landsat b1 = r'data/CU_LC08.001_SRB1_doy2020133_aid0001.tif' b2 = r'data/CU_LC08.001_SRB2_doy2020133_aid0001.tif' b3 = r'data/CU_LC08.001_SRB3_doy2020133_aid0001.tif' b4 = r'data/CU_LC08.001_SRB4_doy2020133_aid0001.tif' b5 = r'data/CU_LC08.001_SRB5_doy2020133_aid0001.tif' b6 = r'data/CU_LC08.001_SRB6_doy2020133_aid0001.tif' b7 = r'data/CU_LC08.001_SRB7_doy2020133_aid0001.tif' qa = r'data/CU_LC08.001_PIXELQA_doy2020133_aid0001.tif' # source de données #options possibles : "appeears", "earthdata" src = "appeears" # données Modis lst = r'data/MOD11A1.006_LST_Day_1km_doy2020133_aid0001.tif' qc = r'data/MOD11A1.006_QC_Day_doy2020133_aid0001.tif' # données Aster dem = r'data/ASTGTM_NC.003_ASTER_GDEM_DEM_doy2000061_aid0001.tif' num = r'data/ASTGTM_NUMNC.003_ASTER_GDEM_NUM_doy2000061_aid0001.tif' # predicteurs sous forme de liste # options possibles : 'NDVI', 'NDWI', 'NDBI', 'MNDWI', 'SAVI', 'Albedo', 'BSI', 'UI', 'EVI', 'IBI', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'MNT', 'Pente' predictors = ['NDWI', 'Pente', 'Orientation'] # paramètre pour la résolution à laquelle on veut effectuer la réduction d'échelle # options possibles : 30, 100 target_resolution = 100 # paramètre pour la résolution à laquelle on veut effectuer la réduction d'échelle # options possibles : 30, 100 target_resolution = 30 # paramètre pour l'application des résidus residualCorrection = True # paramètre pour la suppresion des fichiers temporaire supprimer_les_fichiers_temporaires = True ####################################################################### ######################### fin des paramètres ########################## ####################################################################### # ne plus modifié landsat = Landsat(b1, b2, b3, b4, b5, b6, b7, qa, src) modis = Modis(lst, qc) aster = Aster(dem, num) # reprojection de l'image MODIS de départ en UTM18 modis.reprojectModisSystem('EPSG:32618', '-9999.0', '1000.0', 'average') secteur = Secteur(modis, landsat, aster) secteur.prepareData(train_model=True) rfr = ReductionEchelle(secteur) rfr.applyDownscaling(predictors, outputFile=r'data/MODIS_predit_30m.tif', residualCorrection=residualCorrection, outputFile_withResidualCorrection= r'data/MODIS_predit_30m_avec_residus.tif', targetResolution=target_resolution) if supprimer_les_fichiers_temporaires: delete_temp()
from modis import Modis if __name__ == "__main__": Modis.run()