Catégorie Classe Définition
Plantation Sites sylvicoles et arboricoles
Palmier à palmiers à huile (Elaeis guineensis) Cocotiers à cocotiers (Cocos nucifera) Teck à teck (Tectona grandis) Eucalyptus à eucalyptus (Eucaliptus sp.) Bananier à bananiers (Musa sp.) Ananas à ananas (Ananas comosus) Oranger à tangelo (Citrus ×tangelo ) Papayer à papayer (Carica papaya) Manguier à manguiers (Mangifera indica)
Culture Sites horticoles et agricoles
Maraîchage à légumes et fruits (sauf arbres), irrigués
Maïs à maïs
Manioc à manioc
Haricot à haricots
Patate à patates douces
Arachide à arachide
Forêt Forêt non inféodées aux zones
humides (non inondables)
Friche (jachère) Zones agricoles laissées en jachère et colonisé par un peuplement dense arbustif et peu pénétrable
Dense Forêt dense primaire ou secondaire Fourré Type de végétation arbustif fermé,
unistrate ou avec une strate arborée très discontinue, généralement peu pénétrable, souvent morcelé, à tapis herbacé absent ou discontinu
Savane Formation herbeuse comportant une
strate herbacée supérieure d’au moins 80 cm de hauteur qui influence une strate inférieure
Boisée où arbres et arbustes forment un couvert clair et continu
Arborée où arbres et arbustes sont disséminés
Arbustive où seuls les arbustes sont présents Herbeuse sans arbres ni arbustes
Zone humide Zone inondé de manière permanente
ou temporaire
Eau permanente Zone d'eaux profondes Prairie aquatique Formation fermée constituée
principalement de graminées et cypéracées en eaux profondes
Prairie marécageuse Formation fermée constituée principalement de graminées et cypéracées en eaux peu profondes ou fréquemment inondées
Mangrove Formation ligneuse à palétuviers dans les zones de balancement de marée (eaux saumâtres)
Forêt marécageuse Formation forestière des zones inondées de manière permanente ou fréquente
Forêt ripicole Formation forestière des bords de cours d'eau, temporairement inondées
Milieu dégradé Milieux non végétalisés
Bâti Milieux construits (villages) Sol nu Sols nu dégradés ou sols nu
agricoles
Sable sec Sols recouverts de sable Piste Voies de circulation en terre
Roche Affleurements rocheux
Annexe 5 : Code pour extraire les températures moyennes dans le voisinage des villages d’après des images MODIS-LST
#Script to extract mean temperature in buffer around points
#from MODIS 8-Days LST raster and a table of date (survey) at each points #
#created on: January 2012 #By Nicolas Moiroux
#From Institut de Recherche pour le Développement # Montpellier, France
#--- ---
# Import system modules
import sys, string, os, arcpy, traceback from arcpy.sa import *
from arcpy import env
from datetime import timedelta, datetime
# Verification de Spatial analyst arcpy.CheckOutExtension("spatial")
#--- ---
#Settings
#Emplacement de la table contenant les identifiant des points (Village_abr), les codes d'enquête (NumMis) et les dates d'enquête (Date_dbt) (sans '/' final)
sDateDbt = "C:/ArcgisWork/MODIS.mdb/DateDbt"
#Emplacement des rasters MODIS (sans '/' final), Les fichier rasters doivent porter leur nom original
(MOD11A2.Aaaaajjj.h18[...]LST_Day_1km.tif) sTiffFolder = "C:/ArcgisWork/TIFF"
#Emplacement du fichier de forme contenant les point des lieux d'enquête (Villages) avec comme identifiant unique le champs 'Abrege'
sPointsShpFile = "C:/ArcgisWork/XYHameaux_REFS.shp" #Identifiant des Points
sIdPoint = "Abrege"
#Dossier dans lequel seront créés l'ensemble des fichiers pouvant être supprimer ensuite (avec '/' final)
sTempFolder = "C:/ArcgisWork/Temp/" #Table contenant les résultats finaux final_output = "C:/ArcgisWork/Results.dbf"
#definir le nombre de jour entre la période d'intérêt et l'enquête dNbJour = timedelta(days = 0)
#Liste des rayons de zone tampon (en metres) qui seront analysées lListBuffer = ["2000","1000","500"]
#--- --- ---
#FONCTIONS USED IN THE PROGRAM
#Obtenir le jour 1 du fichier MODIS (au format integer) à partir d'une date au format datetime
def DateToYday (sDate):
#Obtenir le numero du jour de début de mission dans l'année à partir d'une date au format datetime
t = dDmis.timetuple() iDmis = t.tm_yday
#obtenir le numéro du jour correspondant au jour 1 du fichier MODIS (au format integer)
iJour1 = int(round(iDmis/8)*8+1)
return iJour1
#Obtenir l'année (au format string) à partir d'une date au format datetime
def DateToStrYear (sDate):
dDmis = sDate
t = dDmis.timetuple() iYear = t.tm_year sYear = str(iYear)
return sYear
#Obtenir le numéro du fichier MODIS (format string ex: '029')
def IntToStrYday (iModisInteger):
#Ajouter les zero non significatifs devant le numéro du fichier modis (au format string) 18 -> '018'
from bisect import bisect_left
sZeroList = ["00", "0", ""] iModisBound = [10, 100, 400]
sZero = sZeroList[bisect_left(iModisBound, iModisInteger)] sModisStr = sZero + str(iModisInteger)
return sModisStr
#obtenir le chemin du raster en fonction du dossier contenant et du numéro du jour
def RasterFromYday (sNumJour,ListOfRaster,sYear):
#recherche du raster correspondant:
for raster in ListOfRaster:
#récupérer dans le chemin d'un raster modis le numero du jour 1 et le comparer à sModis
if raster[raster.rfind("/")+2:raster.rfind("/")+ 9] == sYear +
sNumJour:
#récupérer le nom du raster sRast_temp = raster #... break else: continue return sRast_temp
#vérifier l'éxistence du raster Grid ou Créer un raster au format GRID (avec 0 = NoData)
def VerifyGridOrCreate(sGridPath, sGridName, sRasterPath): if not arcpy.Exists(sGridPath + sGridName):
try:
arcpy.CopyRaster_management(sRasterPath,sGridPath + sGridName,"#","#","0","NONE","NONE","#")
return True except:
print "Error in Create GRID Raster " + sGridPath +
sGridName + " from " + sRasterPath + ""
traceback.print_exception(exc_type, exc_value, exc_traceback,limit=2, file=sys.stdout)
return False else:
#--- ---
# Open a searchcursor / pour lire la table des dates d'enquête rows = arcpy.SearchCursor(sDateDbt)
# Faire une liste des raster dans un dossier # Set the current workspace
env.workspace = sTiffFolder
# Get a list of ESRI GRIDs from the workspace rasterList = arcpy.ListRasters("*","All") env.workspace = "" tablelist="" #Compteur iNbRow = int(arcpy.GetCount_management(sDateDbt).getOutput(0)) n = 0
# Iterate through the rows in the cursor
for row in rows:
# Récupérer l'identifiant du village, de l'enquête et la date sAbr = row.Village_abr
sMiss = str(int(row.NumMis))
# retrancher la durée entre la date d'intérêt des données et la date de l'enquête
dDateDbt = row.Date_dbt - dNbJour # obtenir l'année du fichier recherché sYear = DateToStrYear(dDateDbt)
# Obtenir le jour 1 du fichier MODIS (au format integer) à partir d'une date au format datetime.datetime
iModis = DateToYday(dDateDbt)
# Obtenir le numéro du fichier MODIS (format string ex: '029') sModis = IntToStrYday(iModis)
# Obtenir le chemin du raster MODIS
sRasterPath = RasterFromYday(sModis,rasterList,sYear) # Définir le nom du GRID après conversion du raster MODIS sGridName =
sRasterPath[sRasterPath.rfind("/")+2:sRasterPath.rfind("/")+9]
# Vérification de l'éxistence du fichier contenant le Points selectionné
if not arcpy.Exists(sTempFolder + sAbr + ".shp"): try:
# Sélection du Point
arcpy.Select_analysis(sPointsShpFile, sTempFolder + sAbr
+ ".shp", '"Abrege" = \'' + sAbr + '\'') for b in lListBuffer:
try:
# Création des Buffers
arcpy.Buffer_analysis(sTempFolder + sAbr + ".shp", sTempFolder + sAbr + b + ".shp", b + " Meters")
except:
print "Error in create Buffer "+ sTempFolder +
sAbr + b + ".shp on " + sTempFolder + sAbr + ".shp"
traceback.print_exception(exc_type, exc_value, exc_traceback,limit=2, file=sys.stdout)
except:
print "Error in Select " + '"Abrege" = \'' + sAbr + '\'' + " in " + sPointsShpFile
traceback.print_exception(exc_type, exc_value, exc_traceback,limit=2, file=sys.stdout)
# vérifier l'éxistence du raster Grid ou Créer un raster au format GRID (avec 0 = NoData)
if VerifyGridOrCreate(sTempFolder, sGridName,
sTiffFolder+"/"+sRasterPath):
# calculer les statistique zonale pour chaque taille de Buffer
for b in lListBuffer:
sB = str(b)
outTable = sAbr + sMiss + sB
try:
ZonalStatisticsAsTable(sTempFolder + sAbr + sB + ".shp", sIdPoint, sTempFolder + sGridName, sTempFolder + outTable, "DATA", "MEAN")
except:
print "Error in ZonalStatisticAsTable when using " + sTempFolder + sAbr + sB + ".shp and " + sTempFolder + sGridName
#print "*** print_exception:"
#traceback.print_exception(exc_type, exc_value, exc_traceback,limit=2, file=sys.stdout)
# Vérification de la présence d'un valeure dans outTable (l'absence de valeur signifie qu'il n'y a que des NoData dans le buffer)
if int(arcpy.GetCount_management(sTempFolder +
outTable).getOutput(0)) == 0:
# supprimer la table et sortir de la boucle arcpy.Delete_management(sTempFolder + outTable)
break
# Add a field to this table to be able to know with wich raster the statistics have been calculated, of type TEXT
arcpy.AddField_management(sTempFolder + outTable, "SOURCE" , "TEXT", "", "", "10")
arcpy.AddField_management(sTempFolder + outTable, "MISS"
, "TEXT", "", "", "2")
arcpy.AddField_management(sTempFolder + outTable, "BUFFER" , "LONG")
arcpy.AddField_management(sTempFolder + outTable, "TempC"
, "DOUBLE")
arcpy.CalculateField_management(sTempFolder + outTable, "SOURCE" ,"\"" + sAbr + sMiss + sB + "\"", "PYTHON")
arcpy.CalculateField_management(sTempFolder + outTable, "MISS" ,"\"" + sMiss + "\"", "PYTHON")
arcpy.CalculateField_management(sTempFolder + outTable, "BUFFER" ,"\"" + b + "\"", "PYTHON")
arcpy.CalculateField_management(sTempFolder + outTable, "TempC","!MEAN!*0.02-273.15", "PYTHON")
#create a list of output table for the next operation in the following format: "table1;table2;table3;..."
if tablelist == "":
tablelist = sTempFolder + outTable
else:
tablelist = tablelist + ";" + sTempFolder + outTable
#Compteur n= n + 1
fProp = n/float(iNbRow)*100
#copy row of the first table of the list to a new table and create this table (final output table)
arcpy.MakeTableView_management(tablelist[0:tablelist.find(";")], "temp_table")
arcpy.CopyRows_management(tablelist[0:tablelist.find(";")],final_output,"te mp_table")
#Append all other tables rows into the final output table
arcpy.Append_management(tablelist[tablelist.find(";")+1:len(tablelist)], final_output, "NO_TEST")
Annexe 6 : Code pour extraire les NDVI moyens dans le voisinage des villages d’après des images MODIS-NDVI
#Script to extract mean NDVI in buffer around points
#from MODIS 16-Days MOD13Q1 raster and a table of date (survey) at each points
#
#created on: January 2012 #By Nicolas Moiroux
#From Institut de Recherche pour le Développement # Montpellier, France
#--- ---
# Import system modules
import sys, string, os, arcpy, traceback from arcpy.sa import *
from arcpy import env
from datetime import timedelta, datetime
# Verification de Spatial analyst arcpy.CheckOutExtension("spatial")
#--- ---
#Settings
#Emplacement de la table contenant les identifiant des points (Village_abr), les codes d'enquête (NumMis) et les dates d'enquête (Date_dbt) (sans '/' final)
sDateDbt = "C:/ArcgisWork/MODIS.mdb/DateDbt"
#Emplacement des rasters MODIS (sans '/' final), Les fichier rasters doivent porter leur nom original
(MOD11A2.Aaaaajjj.h18[...]LST_Day_1km.tif) sTiffFolder = "C:/ArcgisWork/TIFF"
#Emplacement du fichier de forme contenant les point des lieux d'enquête (Villages) avec comme identifiant unique le champs 'Abrege'
sPointsShpFile = "C:/ArcgisWork/XYHameaux_REFS.shp" #Identifiant des Points
sIdPoint = "Abrege"
#Dossier dans lequel seront créés l'ensemble des fichiers pouvant être supprimer ensuite (avec '/' final)
sTempFolder = "C:/ArcgisWork/Temp/" #Table contenant les résultats finaux
final_output = "C:/ArcgisWork/ResultsNDVI.dbf"
#definir le nombre de jour entre la période d'intérêt et l'enquête dNbJour = timedelta(days = 0)
#Liste des rayons de zone tampon (en metres) qui seront analysées lListBuffer = ["2000","1000","500"]
#--- --- ---
#FONCTIONS USED IN THE PROGRAM
#Obtenir le jour 1 du fichier MODIS (au format integer) à partir d'une date au format datetime
def DateToYday (sDate):
#Obtenir le numero du jour de début de mission dans l'année à partir d'une date au format datetime
dDmis = sDate
t = dDmis.timetuple() iDmis = t.tm_yday
#obtenir le numéro du jour correspondant au jour 1 du fichier MODIS (au format integer)
iJour1 = int(round(iDmis/16)*16+1)
return iJour1
#Obtenir l'année (au format string) à partir d'une date au format datetime
def DateToStrYear (sDate):
dDmis = sDate
t = dDmis.timetuple() iYear = t.tm_year sYear = str(iYear)
return sYear
#Obtenir le numéro du fichier MODIS (format string ex: '029')
def IntToStrYday (iModisInteger):
#Ajouter les zero non significatifs devant le numéro du fichier modis (au format string) 18 -> '018'
from bisect import bisect_left
sZeroList = ["00", "0", ""] iModisBound = [10, 100, 400]
sZero = sZeroList[bisect_left(iModisBound, iModisInteger)] sModisStr = sZero + str(iModisInteger)
return sModisStr
#obtenir le chemin du raster en fonction du dossier contenant et du numéro du jour
def RasterFromYday (sNumJour,ListOfRaster,sYear):
#recherche du raster correspondant:
for raster in ListOfRaster:
#récupérer dans le chemin d'un raster modis le numero du jour 1 et le comparer à sModis
if raster[raster.rfind("/")+2:raster.rfind("/")+ 9] == sYear +
sNumJour:
#récupérer le nom du raster sRast_temp = raster #... break else: continue return sRast_temp
#vérifier l'éxistence du raster Grid ou Créer un raster au format GRID (avec 0 = NoData)
def VerifyGridOrCreate(sGridPath, sGridName, sRasterPath): if not arcpy.Exists(sGridPath + sGridName):
try:
arcpy.CopyRaster_management(sRasterPath,sGridPath + sGridName,"#","#","-3000","NONE","NONE","#")
return True except:
print "Error in Create GRID Raster " + sGridPath + sGridName + " from " + sRasterPath + ""
traceback.print_exception(exc_type, exc_value, exc_traceback,limit=2, file=sys.stdout)
return False else:
return True
#--- ---
# Open a searchcursor / pour lire la table des dates d'enquête rows = arcpy.SearchCursor(sDateDbt)
# Faire une liste des raster dans un dossier # Set the current workspace
env.workspace = sTiffFolder
# Get a list of ESRI GRIDs from the workspace rasterList = arcpy.ListRasters("*","All") env.workspace = "" tablelist="" #Compteur iNbRow = int(arcpy.GetCount_management(sDateDbt).getOutput(0)) n = 0
# Iterate through the rows in the cursor for row in rows:
# Récupérer l'identifiant du village, de l'enquête et la date sAbr = row.Village_abr
sMiss = str(int(row.NumMis))
# retrancher la durée entre la date d'intérêt des données et la date de l'enquête
dDateDbt = row.Date_dbt - dNbJour # obtenir l'année du fichier recherché sYear = DateToStrYear(dDateDbt)
# Obtenir le jour 1 du fichier MODIS (au format integer) à partir d'une date au format datetime.datetime
iModis = DateToYday(dDateDbt)
# Obtenir le numéro du fichier MODIS (format string ex: '029') sModis = IntToStrYday(iModis)
# Obtenir le chemin du raster MODIS
sRasterPath = RasterFromYday(sModis,rasterList,sYear) # Définir le nom du GRID après conversion du raster MODIS sGridName =
sRasterPath[sRasterPath.rfind("/")+2:sRasterPath.rfind("/")+9]
# Vérification de l'éxistence du fichier contenant le Points selectionné
if not arcpy.Exists(sTempFolder + sAbr + ".shp"): try:
# Sélection du Point
arcpy.Select_analysis(sPointsShpFile, sTempFolder + sAbr + ".shp", '"Abrege" = \'' + sAbr + '\'')
for b in lListBuffer: try:
# Création des Buffers
arcpy.Buffer_analysis(sTempFolder + sAbr + ".shp", sTempFolder + sAbr + b + ".shp", b + " Meters")
except:
print "Error in create Buffer "+ sTempFolder + sAbr + b + ".shp on " + sTempFolder + sAbr + ".shp"
traceback.print_exception(exc_type, exc_value, exc_traceback,limit=2, file=sys.stdout)
except:
print "Error in Select " + '"Abrege" = \'' + sAbr + '\'' + " in " + sPointsShpFile
traceback.print_exception(exc_type, exc_value, exc_traceback,limit=2, file=sys.stdout)
# vérifier l'éxistence du raster Grid ou Créer un raster au format GRID (avec 0 = NoData)
if VerifyGridOrCreate(sTempFolder, sGridName, sTiffFolder+"/"+sRasterPath):
# calculer les statistique zonale pour chaque taille de Buffer for b in lListBuffer:
sB = str(b)
outTable = sAbr + sMiss + sB try:
ZonalStatisticsAsTable(sTempFolder + sAbr + sB + ".shp", sIdPoint, sTempFolder + sGridName, sTempFolder + outTable, "DATA", "MEAN")
except:
print "Error in ZonalStatisticAsTable when using " + sTempFolder + sAbr + sB + ".shp and " + sTempFolder + sGridName
#print "*** print_exception:"
#traceback.print_exception(exc_type, exc_value, exc_traceback,limit=2, file=sys.stdout)
# Vérification de la présence d'un valeure dans outTable (l'absence de valeur signifie qu'il n'y a que des NoData dans le buffer)
if int(arcpy.GetCount_management(sTempFolder + outTable).getOutput(0)) == 0:
# supprimer la table et sortir de la boucle arcpy.Delete_management(sTempFolder + outTable) break
# Add a field to this table to be able to know with wich raster the statistics have been calculated, of type TEXT
arcpy.AddField_management(sTempFolder + outTable, "SOURCE" , "TEXT", "", "", "10")
arcpy.AddField_management(sTempFolder + outTable, "MISS" , "TEXT", "", "", "2")
arcpy.AddField_management(sTempFolder + outTable, "BUFFER" , "LONG")
arcpy.AddField_management(sTempFolder + outTable, "NDVI" , "DOUBLE")
arcpy.CalculateField_management(sTempFolder + outTable, "SOURCE" ,"\"" + sAbr + sMiss + sB + "\"", "PYTHON")
arcpy.CalculateField_management(sTempFolder + outTable, "MISS" ,"\"" + sMiss + "\"", "PYTHON")
arcpy.CalculateField_management(sTempFolder + outTable, "BUFFER" ,"\"" + b + "\"", "PYTHON")
arcpy.CalculateField_management(sTempFolder + outTable, "NDVI","!MEAN!*0.0001", "PYTHON")
#create a list of output table for the next operation in the following format: "table1;table2;table3;..."
if tablelist == "":
tablelist = sTempFolder + outTable else:
tablelist = tablelist + ";" + sTempFolder + outTable
#Compteur n= n + 1
fProp = n/float(iNbRow)*100
#copy row of the first table of the list to a new table and create this table (final output table)
arcpy.MakeTableView_management(tablelist[0:tablelist.find(";")], "temp_table")
arcpy.CopyRows_management(tablelist[0:tablelist.find(";")],final_output,"te mp_table")
#Append all other tables rows into the final output table
arcpy.Append_management(tablelist[tablelist.find(";")+1:len(tablelist)], final_output, "NO_TEST")
Annexe 7 : Code pour extraire des cumuls de précipitations interpolées d'après des