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

Ajout doc pour le fichier de config, possibilité de télécharger les archives

parent aba26126
......@@ -24,18 +24,18 @@ class Archive():
:param capteur: Nom du satellite utilisé (ex: Landsat, Sentinel2, ...).
:type capteur: Chaîne de caractères
:param niveau: Niveau de traitement voulu.
:param niveau: Niveau de traitement voulu.
:type niveau: Chaîne de caractères
:param emprise: Chemin vers le shapefile représentant la zone d'étude.
:type emprise: Chaîne de caractères
:param sortie: Chemin du dossier de sortie.
:type sortie: Chaîne de caractères
:param annee_debut: Année à partir de laquelle on cherche les images.
:type annee_debut: Entier
:param annee_fin: Année jusqu'à laquelle on cherche les images.
:type annee_fin: Entier
"""
......@@ -47,7 +47,7 @@ class Archive():
self._capteur = capteur
self.niveau = niveau
if bandes == "RGB" :
self.extent_img = Satellites.SATELLITE[self._capteur][niveau][:-1]
else :
......@@ -55,7 +55,7 @@ class Archive():
if self.niveau == "LEVEL2A" :
self.nuage = Satellites.SATELLITE[self._capteur]["NUAGE"]
else :
else :
self.nuage = None
self.liste_annees = []
......@@ -193,7 +193,7 @@ class Archive():
LL_max = self.utm_to_latlng(31, extent_[1], extent_[3], northernHemisphere=True)
area_coord_corner = str(LL_min[0]) + ',' + str(LL_min[1]) + ',' + str(LL_max[0]) + ',' + str(LL_max[1])
return area_coord_corner
def listing(self):
......@@ -261,7 +261,7 @@ class Archive():
self.logger.info("{0} image(s) correspondent aux critères.".format(len(self.liste_archive)))
def download_auto(self, identifiant, mdp, proxy=""):
def download_auto(self, identifiant, mdp, proxy="", extraction=True):
"""
Méthode pour télécharger les archives sur le site Theia.
......@@ -380,13 +380,20 @@ class Archive():
self.logger.debug("url : {}".format(url))
# Requête pour récupérer l'archive
reponse = requests.get(url, headers=head, proxies=proxyDict)
# Ajout de l'archive à la liste
liste_content.append(reponse.content)
del reponse
# Traitement des images (fusion, découpage selon la zone d'étude ...)
self.traitement_images(cle, liste_content)
del liste_content
if extraction :
# Ajout de l'archive à la liste
liste_content.append(reponse.content)
del reponse
else :
dossier = "{0}/{1}/Images".format(self.dossier_sortie, cle[:4])
with open("{0}/{1}".format(dossier,img[1].split("/")[-1]), "wb") as fichier:
fichier.write(reponse.content)
if extraction :
# Traitement des images (fusion, découpage selon la zone d'étude ...)
self.traitement_images(cle, liste_content)
del liste_content
# Mis à jour du fichier de sauvegarde
# Lecture du fichier de sauvegarde
......@@ -434,7 +441,7 @@ class Archive():
ennuagement = (float(nombre_pixel_non_nuage)/float(nombre_pixel_non_null)) if nombre_pixel_non_null != 0 else 0.0
self.logger.debug("Ennuagement : {}%".format(100 - round(ennuagement*100, 2)))
# Computer cloud's percentage with dist (sum of cloud) by sum of the image's extent
# return mosaic_nuage, 1.0 - (float(dist)/(np.sum(mask_spec)) if np.sum(mask_spec) != 0 else 0)
return 1.0 - ennuagement
......@@ -575,7 +582,7 @@ class Archive():
del liste_content
if len(tuiles_image) > 0 :
if len(tuiles_image) > 0 :
if len(tuiles_nuage) == 0 or self.calcul_ennuagement(tuiles_nuage) <= self.seuil_nuage:
......@@ -590,4 +597,4 @@ class Archive():
del tuiles_nuage
del tuiles_image
\ No newline at end of file
del tuiles_image
......@@ -4,7 +4,7 @@
import os
import configparser
import datetime
import glob
import glob
from osgeo import gdal
import otbApplication as otb
......@@ -12,13 +12,13 @@ import otbApplication as otb
from app import Archive
def str2bool(v):
return v.lower() in ("true")
return v.lower() in ("true")
class Processing(object):
def __init__(self):
pass
def i_download(self):
"""
Méthode pour télécharger les images sur le site Theia Land.
......@@ -30,12 +30,12 @@ class Processing(object):
self.check_download = Archive.Archive(self.capteur, self.bandes, self.niveau, self.emprise, self.zone_etude,\
self.resultats, self.annee_debut, int(self.annee_fin), self.seuil_nuage)
self.check_download.listing()
self.check_download.download_auto(self.id, self.mdp, self.proxy)
self.check_download.download_auto(self.id, self.mdp, self.proxy, extraction=self.extraction)
self.liste_dossier = dict()
for annee in os.listdir(self.resultats):
with open("{}/{}/dates.txt".format(self.resultats, annee), "w") as fichier :
with open("{}/{}/dates.txt".format(self.resultats, annee), "w") as fichier :
for image in sorted(glob.glob("{}/{}/Images/*".format(self.resultats, annee))) :
fichier.write("{}\n".format(os.path.basename(image)[:-4]))
......@@ -62,7 +62,7 @@ class Processing(object):
"""
options_vrt = gdal.ParseCommandLine('-resolution highest -separate')
otb_NDVI = otb.Registry.CreateApplication("RadiometricIndices")
otb_NDVI.SetParameterInt("channels.blue", 1)
otb_NDVI.SetParameterInt("channels.green", 2)
......@@ -71,7 +71,7 @@ class Processing(object):
otb_NDVI.SetParameterStringList("list", ["Vegetation:NDVI"])
sauvegarde = configparser.ConfigParser()
for annee in self.liste_dossier :
sauvegarde.read("{}/{}/sauvegarde.ini".format(self.resultats, annee))
......@@ -97,9 +97,9 @@ class Processing(object):
with open("{}/{}/sauvegarde.ini".format(self.resultats, annee), 'w') as configfile:
sauvegarde.write(configfile)
def i_images_processing(self):
def i_images_processing(self):
"""
Calul le ndvi, fusionnne en une seule image puis lance le module OTBPhenology
"""
self.calcul_ndvi()
self.otbPhenologie()
\ No newline at end of file
self.otbPhenologie()
[donnees]
chemin_emprise =
annee_debut =
annee_fin =
# chemin/vers/shapefile/emprise
chemin_emprise =
# chemin/vers/shapefile/zone_etude
# Si vide, zone d'étude = emprise
chemin_zone_etude =
# Année à partir de laquelle les images ont été prises
annee_debut =
# Année limite d'acquisition des images
# Si vide, l'année de fin correspond à l'année actuelle
annee_fin =
# Pourcentage maximal d'ennuagement
seuil_nuage = 5.0
[sortie]
chemin =
# chemin/dossier/resultats
chemin =
# Vrai si extraction des images des archives, faux si téléchagement de celles-ci
extraction = True
[theia]
identifiant =
mdp =
proxy =
# Identifiant Theia-land
identifiant =
# Mot de passe Theia-land
mdp =
# Proxy de connection si nécessaire
proxy =
[satellite]
capteur =
processingLevel=
bandes =
\ No newline at end of file
# Type du satellite source
# Possibilités :- SENTINEL2
# - LANDSAT8
capteur = SENTINEL2
# Niveau de traitement des images satellites
# Possibilités :- LEVEL2A (Acquisition standard)
# - LEVEL3A (Synthèse mensuelle)
processingLevel= LEVEL2A
# Bandes d'intêrets
# Possibilités :- RGB (Bandes Rouge, Verte, Bleue)
# - RGBI (Bandes Rouge, Verte, Bleue + Proche Infra-rouge)
bandes = RGB
......@@ -5,11 +5,14 @@ import sys, time
from osgeo import ogr
import configparser
import configparser
from app.Processing import Processing
import app.Constantes as Constantes
import app.Outils as Outils
def str2bool(v):
return v.lower() in (["false"])
class Telechargement(Processing):
def __init__(self, parent=None):
......@@ -17,10 +20,10 @@ class Telechargement(Processing):
Processing.__init__(self)
self.logger = Outils.Log("log", "Téléchargement")
self.get_variable()
def get_variable(self):
def get_variable(self):
"""
Récupération des variables dans le fichier de configuration
"""
......@@ -30,47 +33,55 @@ class Telechargement(Processing):
# Dossier contenant les résultats
self.resultats = "{}".format(configfile["sortie"]["chemin"])
# Capteur utilisé
self.capteur = "{}".format(configfile["satellite"]["capteur"])
self.niveau = "{}".format(configfile["satellite"]["processingLevel"])
self.bandes = "{}".format(configfile["satellite"]["bandes"])
try:
if str2bool("{}".format(configfile["sortie"]["extraction"])):
self.extraction = False
else :
self.extraction = True
except :
self.extraction = True
# Date de début et de fin de la recherche
try:
self.annee_debut = int("{}".format(configfile["donnees"]["annee_debut"]))
except Exception as e:
raise "L'année de départ est requise."
self.annee_fin = "{}".format(configfile["donnees"]["annee_fin"])
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
self.emprise = "{}".format(configfile["donnees"]["chemin_emprise"])
self.zone_etude = "{}".format(configfile["donnees"]["chemin_zone_etude"])
if not self.zone_etude :
self.zone_etude = self.emprise
# Identifiant, mot de passe et proxy pour le téléchargement des images Théia
self.id = "{}".format(configfile["theia"]["identifiant"])
self.mdp = "{}".format(configfile["theia"]["mdp"])
self.proxy = "{}".format(configfile["theia"]["proxy"])
def run(self):
"""
Fonction pour lancer le programme
"""
"""
# Début du processus
debut = time.time()
# Recherche de nouvelles images non traitées et téléchargement de celles-ci le cas échéant
self.i_download()
# Traitement des images
# Traitement des images
self.i_images_processing()
# Fin du processus
fin = time.time()
......
Markdown is supported
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