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

No related merge requests found
Showing with 103 additions and 52 deletions
+103 -52
......@@ -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()
......
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