• Aucun résultat trouvé

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