Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Commandre Benjamin
TELIS
Commits
e3abb29a
Commit
e3abb29a
authored
Jun 06, 2019
by
Commandre Benjamin
Browse files
Ajout doc pour le fichier de config, possibilité de télécharger les archives
parent
aba26126
Changes
4
Hide whitespace changes
Inline
Side-by-side
app/Archive.py
View file @
e3abb29a
...
...
@@ -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
app/Processing.py
View file @
e3abb29a
...
...
@@ -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
()
config.ini
View file @
e3abb29a
[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
main.py
View file @
e3abb29a
...
...
@@ -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
()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment