Commit aba26126 authored by Commandre Benjamin's avatar Commandre Benjamin
Browse files

Utilisation des bandes 'FRE' pour Sentinel2, ajout d'un seuil d'ennuagement,...

Utilisation des bandes 'FRE' pour Sentinel2, ajout d'un seuil d'ennuagement, utilisation de la fonction 'Warp' au lieu de 'Translate'
No related merge requests found
Showing with 19 additions and 29 deletions
+19 -29
...@@ -509,14 +509,12 @@ class Archive(): ...@@ -509,14 +509,12 @@ class Archive():
tuiles_nuage = [] tuiles_nuage = []
# Options Gdal pour la fusion des bandes # Options Gdal pour la fusion des bandes
options_vrt = gdal.ParseCommandLine('-resolution highest -srcnodata -10000 -vrtnodata NaN -separate') options_vrt = gdal.ParseCommandLine('-resolution highest -srcnodata -10000 -vrtnodata NaN -separate')
options_translate = gdal.ParseCommandLine('-of Mem -ot Float32 -a_nodata NaN')
self.logger.info("Extraction des images") self.logger.info("Extraction des images")
# Pour chaque archive # Pour chaque archive
for idx, content in enumerate(liste_content) : for idx, content in enumerate(liste_content) :
# Lecture de l'archive # Lecture de l'archive
tzip = zipfile.ZipFile(io.BytesIO(content)) tzip = zipfile.ZipFile(io.BytesIO(content))
...@@ -546,6 +544,8 @@ class Archive(): ...@@ -546,6 +544,8 @@ class Archive():
image = Outils.clip(vrt, self.zone_etude) image = Outils.clip(vrt, self.zone_etude)
_, aire = self.calcul_aire(image) _, aire = self.calcul_aire(image)
del image
if aire > 0.0 : if aire > 0.0 :
tuiles_image.append(vrt) tuiles_image.append(vrt)
...@@ -579,18 +579,15 @@ class Archive(): ...@@ -579,18 +579,15 @@ class Archive():
if len(tuiles_nuage) == 0 or self.calcul_ennuagement(tuiles_nuage) <= self.seuil_nuage: if len(tuiles_nuage) == 0 or self.calcul_ennuagement(tuiles_nuage) <= self.seuil_nuage:
# On effectue une mosaïque des images qu'on découpe selon l'emprise.
image = Outils.clip(tuiles_image, self.emprise)
self.logger.info("Sauvegarde des images") self.logger.info("Sauvegarde des images")
dossier = "{0}/{1}/Images".format(self.dossier_sortie, date[:4]) dossier = "{0}/{1}/Images".format(self.dossier_sortie, date[:4])
self.logger.debug("Dossier image : {0}".format(dossier)) self.logger.debug("Dossier image : {0}".format(dossier))
self.ecriture_geotiff(image, "{0}/{1}.tif".format(dossier,date)) # On effectue une mosaïque des images qu'on découpe selon l'emprise.
Outils.clip(tuiles_image, self.emprise, form="GTiff", dst="{0}/{1}.tif".format(dossier,date))
del tuiles_nuage del tuiles_nuage
del tuiles_image del tuiles_image
del image \ No newline at end of file
\ No newline at end of file
...@@ -97,7 +97,7 @@ def limitation_temporelle(secondes): ...@@ -97,7 +97,7 @@ def limitation_temporelle(secondes):
# except TimeoutException: # except TimeoutException:
# pass # pass
def clip(image, cut, form="Mem", dst="", type=gdal.GDT_Float32, nodata="NaN"): def clip(image, cut, form="Mem", dst="", type_sortie=gdal.GDT_Float32, nodata="NaN"):
""" """
Découpe une image selon un shapefile donné. Si le type de l'image en sortie Découpe une image selon un shapefile donné. Si le type de l'image en sortie
n'est pas spécifié, l'image sera retournée en pointeur mémoire et ne sera pas sauvegardée. n'est pas spécifié, l'image sera retournée en pointeur mémoire et ne sera pas sauvegardée.
...@@ -114,8 +114,8 @@ def clip(image, cut, form="Mem", dst="", type=gdal.GDT_Float32, nodata="NaN"): ...@@ -114,8 +114,8 @@ def clip(image, cut, form="Mem", dst="", type=gdal.GDT_Float32, nodata="NaN"):
:param dst: Chemin de l'image en sortie. :param dst: Chemin de l'image en sortie.
:type dst: Chaîne de caractères :type dst: Chaîne de caractères
""" """
option_clip = gdal.WarpOptions(cropToCutline=True,\ option_clip = gdal.WarpOptions(cropToCutline=True,\
cutlineDSName=cut, outputType=type , format=form, dstNodata=nodata) cutlineDSName=cut, outputType=type_sortie , format=form, dstNodata=nodata)
return gdal.Warp(dst, image, options=option_clip) return gdal.Warp(dst, image, options=option_clip)
\ No newline at end of file
...@@ -61,7 +61,7 @@ class Processing(object): ...@@ -61,7 +61,7 @@ class Processing(object):
Méthode effectuant le calcul du NDVI via le module OTB : 'RadiometricIndices' Méthode effectuant le calcul du NDVI via le module OTB : 'RadiometricIndices'
""" """
options_vrt = gdal.BuildVRTOptions(separate=True) options_vrt = gdal.ParseCommandLine('-resolution highest -separate')
otb_NDVI = otb.Registry.CreateApplication("RadiometricIndices") otb_NDVI = otb.Registry.CreateApplication("RadiometricIndices")
otb_NDVI.SetParameterInt("channels.blue", 1) otb_NDVI.SetParameterInt("channels.blue", 1)
...@@ -84,13 +84,14 @@ class Processing(object): ...@@ -84,13 +84,14 @@ class Processing(object):
chemin_ndvi = "{}/ndvi_{}".format(dossier_NDVI, os.path.basename(img)) chemin_ndvi = "{}/ndvi_{}".format(dossier_NDVI, os.path.basename(img))
if not str2bool(sauvegarde[os.path.basename(img)[:-4]]["NDVI"]) : if not str2bool(sauvegarde[os.path.basename(img)[:-4]]["NDVI"]):
otb_NDVI.SetParameterString("in", img) otb_NDVI.SetParameterString("in", img)
otb_NDVI.SetParameterString("out", chemin_ndvi) otb_NDVI.SetParameterString("out", chemin_ndvi)
otb_NDVI.ExecuteAndWriteOutput() otb_NDVI.ExecuteAndWriteOutput()
sauvegarde[os.path.basename(img)[:-4]]["NDVI"] = "True" sauvegarde[os.path.basename(img)[:-4]]["NDVI"] = "True"
vrt = gdal.BuildVRT("", self.liste_dossier[annee], options=options_vrt) liste_ndvi = sorted([x for x in glob.glob("{}/*".format(dossier_NDVI)) if x.endswith(".tif") and "stack" not in x])
vrt = gdal.BuildVRT("", liste_ndvi, options=options_vrt)
gdal.Translate("{}/{}/NDVI/stack_ndvi.tif".format(self.resultats, annee), vrt) gdal.Translate("{}/{}/NDVI/stack_ndvi.tif".format(self.resultats, annee), vrt)
with open("{}/{}/sauvegarde.ini".format(self.resultats, annee), 'w') as configfile: with open("{}/{}/sauvegarde.ini".format(self.resultats, annee), 'w') as configfile:
...@@ -100,5 +101,5 @@ class Processing(object): ...@@ -100,5 +101,5 @@ class Processing(object):
""" """
Calul le ndvi, fusionnne en une seule image puis lance le module OTBPhenology Calul le ndvi, fusionnne en une seule image puis lance le module OTBPhenology
""" """
# self.calcul_ndvi() self.calcul_ndvi()
# self.otbPhenologie() self.otbPhenologie()
\ No newline at end of file \ No newline at end of file
...@@ -14,7 +14,7 @@ SATELLITE["SENTINEL2"]["resto"] = "resto2" ...@@ -14,7 +14,7 @@ SATELLITE["SENTINEL2"]["resto"] = "resto2"
SATELLITE["SENTINEL2"]["token_type"] = "text" SATELLITE["SENTINEL2"]["token_type"] = "text"
SATELLITE["SENTINEL2"]["R"] = 2 SATELLITE["SENTINEL2"]["R"] = 2
SATELLITE["SENTINEL2"]["PIR"] = 3 SATELLITE["SENTINEL2"]["PIR"] = 3
SATELLITE["SENTINEL2"]["LEVEL2A"] = ['_SRE_B2.tif', '_SRE_B3.tif', '_SRE_B4.tif', '_SRE_B8.tif'] SATELLITE["SENTINEL2"]["LEVEL2A"] = ['_FRE_B2.tif', '_FRE_B3.tif', '_FRE_B4.tif', '_FRE_B8.tif']
SATELLITE["SENTINEL2"]["NUAGE"] = ['_CLM_R1.tif'] SATELLITE["SENTINEL2"]["NUAGE"] = ['_CLM_R1.tif']
SATELLITE["SENTINEL2"]["LEVEL3A"] = ['_FRC_B2.tif', '_FRC_B3.tif', '_FRC_B4.tif', '_FRC_B8.tif'] SATELLITE["SENTINEL2"]["LEVEL3A"] = ['_FRC_B2.tif', '_FRC_B3.tif', '_FRC_B4.tif', '_FRC_B8.tif']
......
...@@ -43,7 +43,7 @@ class Telechargement(Processing): ...@@ -43,7 +43,7 @@ class Telechargement(Processing):
raise "L'année de départ est requise." raise "L'année de départ est requise."
self.annee_fin = "{}".format(configfile["donnees"]["annee_fin"]) self.annee_fin = "{}".format(configfile["donnees"]["annee_fin"])
self.seuil_nuage = float("{}".format(configfile["donnees"]["seuil_nuage"]))/100.0 self.seuil_nuage = float("{}".format(configfile["donnees"]["seuil_nuage"]))/100.0 if "{}".format(configfile["donnees"]["seuil_nuage"]) else 0.0
# Emprise et zone de l'étude # Emprise et zone de l'étude
self.emprise = "{}".format(configfile["donnees"]["chemin_emprise"]) self.emprise = "{}".format(configfile["donnees"]["chemin_emprise"])
...@@ -62,7 +62,7 @@ class Telechargement(Processing): ...@@ -62,7 +62,7 @@ class Telechargement(Processing):
""" """
Fonction pour lancer le programme Fonction pour lancer le programme
""" """
Début du processus # Début du processus
debut = time.time() debut = time.time()
# Recherche de nouvelles images non traitées et téléchargement de celles-ci le cas échéant # Recherche de nouvelles images non traitées et téléchargement de celles-ci le cas échéant
...@@ -81,12 +81,4 @@ class Telechargement(Processing): ...@@ -81,12 +81,4 @@ class Telechargement(Processing):
if __name__ == "__main__": if __name__ == "__main__":
app = Telechargement() app = Telechargement()
sys.exit(app.run())
SUCCESS = False
while not SUCCESS :
try:
sys.exit(app.run())
SUCCESS = True
except Exception as e:
pass
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment