Ce cours a pour objectif d’utiliser un modèle de ruissellement superficiel en interaction avec les pratiques agricoles.
Il s’adresse à des étudiants ayant déjà de bonnes connaissances de l’environnement de travail et souhaitant connaître la programmation orientée-objet.
Les données nécessaires à la réalisation du TP sont disponibles à l’adresse suivante:
https://www.dropbox.com/sh/etdt52r7acgtw1h/AAB90YgOALXo8FCJEJZSTEBRa?dl=0
La mise en place de la directive cadre sur l’eau en 2000 a permis d’établir le cadre pour une politique globale communautaire dans le domaine de l’eau.
Cette directive vise à prévenir et réduire la pollution de l’eau, promouvoir son utilisation durable, protéger l’environnement, améliorer l’état des écosystèmes aquatiques et atténuer les effets des inondations et des sécheresses.
L’usage des produits phytosanitaires a provoqué une pollution des eaux superficielles et souterraines à des teneurs variables, qu’il a fallu endiguer par la mise en place de bonnes pratiques agricoles de réduction du risque de pollution des eaux.
Parmis ces bonnes pratiques agricoles (ou BPA), définies en application de la directive européenne 91/676/CEE, il existe des mesures d’aménagement du territoire pour réduire le risque de pollution des eaux, telles que la mise en place de dispositifs enherbés.
En effet, ce principe de phytoremédiation a comme principaux avantages:
Parmi les éléments du paysage susceptibles d’être touchés par la directive cadre sur l’eau, les fossés agricoles sont de bons cas d’études car soumis a des pratiques agricoles variées (fauche, curage, herbicides, ou absence de pratiques) et permettent, en région méditerranéenne principalement, le drainage des eaux de pluie dans les bassins versants agricoles.
L’objectif général de ce TP est d’estimer l’impact de l’organisation spatiale des pratiques agricoles à l’échelle d’un bassin versant sur la pollution de l’eau à l’exutoire du bassin.
Il portera sur un terrain d’étude principalement agricole, avec une dominante viticole, drainé par un réseau dense de fossés agricoles. Il fera appel à un système multi-agents pour simuler les comportements individuels d’un ensemble d’agriculteurs. Les flux d’eaux seront également considérés comme des agents dans le système, afin de conserver la mémoire des charges polluantes.
La première étape consiste à définir le répertoire de travail dans lequel les données seront rangées:
Ici sont chargées l’ensemble des fonctions du package géomatique permettant de réaliser toutes les opérations:
library("spatstat")
library("raster")
library("maptools")
library("rgdal")
library("randomForest")
Si certains packages ne sont pas installés, utiliser la commande:
Fenêtre RStudio
Nous allons également définir le dossier dans lequel se trouvent les données, en utilisant la commande:
Fenêtre RStudio
Avant de commencer le projet, il est nécessaire de définir le système de projection de travail, ainsi que l’étendue de la zone d’étude. Celle-ci doit être enregistrée sous différents formats afin d’être lue par les librairies de .
proj=CRS("+init=epsg:2154") # projection du projet (lambert 93/RGF93)
etendue=readShapePoly(paste("datas/BV_Roujan RGF93",sep="")) #lecture du fichier shape
projection(etendue)<-proj # attribution de la projection RGF 93 au fichier buffer
etendueWin=as.owin(etendue) # transformation de l'etendue polygonale en format owin
etendueWinPSP=as.psp(etendueWin) ; marks(etendueWinPSP)=1 # transformation de l'etendue polygonale en format owin
Récupération du modèle numérique de terrain MNT qui renseigne l’altitude en tout point de l’espace:
MNT=readGDAL(paste("datas/MNT La Peyne RGF93",sep="")) #lecture du MNT (modele numerique de terrain)
datas/MNT La Peyne RGF93 has GDAL driver GTiff
and has 3000 rows and 3000 columns
projection(MNT)=proj # attribution de la projection RGF 93 au MNT
MNT=raster(MNT) # transformation en format raster (lisible par package raster)
names(MNT)="MNT" # attribution du nom du raster
MNT=crop(MNT,etendue) # decoupage du MNT pour qu'il corresponde a l'etendue rectangulaire du buffer
Récupération du fichier shapefile qui renseigne l’architecture et l’occupation du sol:
ocsol_1962=readShapePoly(paste("datas/parcellaire_1962",sep=""))
ocsol_2009=readShapePoly(paste("datas/parcellaire_2009",sep=""))
projection(ocsol_1962)=proj # Attribution de la projection RGF 93
projection(ocsol_2009)=proj # Attribution de la projection RGF 93
L’import des fichiers shapefiles transforme automatiquement toutes les variables numériques en facteur, ce qui pose problème par la suite. Il faut donc les reconvertir en variables numériques:
ocsol_1962$OCC_SOL=as.integer(as.character(ocsol_1962$OCC_SOL))
ocsol_2009$OCC_SOL=as.integer(as.character(ocsol_2009$OCC_SOL))
On applique une grille des mêmes résolution et emprise que le MNT sur l’occupation du sol (rasterisation):
ocsolRast_1962 = rasterize(x = ocsol_1962, y = MNT,field = "OCC_SOL", progress = "text")
ocsolRast_2009 = rasterize(x = ocsol_2009, y = MNT,field = "OCC_SOL", progress = "text")
Ensuite on établit la liste des occupations du sol potentielles ainsi que leur code couleur:
Correspondance=data.frame(ID=1:10,Cover=c("Route et chemins","Bois","Friche","Zone naturelle indeterminee","Vigne gobelet","Vigne palissee","Autre culture","Vigne indeterminee","Bati","Autre"),Couleur=c(rgb(167,130,116,maxColorValue=255),rgb(59,122,56,maxColorValue=255),rgb(130,222,145,maxColorValue=255),rgb(191,236,204,maxColorValue=255),rgb(255,0,255,maxColorValue=255),rgb(255,170,255,maxColorValue=255),rgb(219,181,44,maxColorValue=255),rgb(125,111,44,maxColorValue=255),rgb(170,170,170,maxColorValue=255),rgb(237,225,209,maxColorValue=255)))
Recuperation et rasterisation des lineaires de fosses:
fosses<-readShapeLines(paste("datas/fosses_Roujan RGF93",sep=""))
projection(fosses)<-proj
fossesRast<-rasterize(fosses, MNT, field="Id",progress="text",background=0)
Calcul des distances à chaque élément du paysage:
# Distance a l'exutoire
tmp=(fossesRast==466|fossesRast==4522)
tmp[tmp[]==0]=NA
Distance_Exutoire=raster::distance(tmp)
# Distance aux routes
tmp=(ocsolRast_2009==1)
tmp[tmp[]==0]=NA
Distance_Routes=raster::distance(tmp)
# Distance aux vignes
tmp=(ocsolRast_2009==7)
tmp[tmp[]==0]=NA
Distance_Vignes=raster::distance(tmp)
Incrustation des fossés dans le modèle numérique de terrain. On considère la profondeur moyenne des fossés aux alentours de 2 mètres:
mntIncrust=MNT-((fossesRast>0)*2)
Calcul de l’ombrage:
hillShade=hillShade(terrain(mntIncrust,"slope"),terrain(mntIncrust,"aspect"))
par(mfcol=c(1,2))
plot(ocsolRast_2009,col=as.character(Correspondance$Couleur),axes=F,main="Occupation du sol",legend=F)
plot(fosses,add=T,col="blue",lwd=3)
plot(hillShade,col=grey(1:100/100),axes=F,main="Ombrage",legend=F)
plot of chunk unnamed-chunk-12
par(mfcol=c(1,3))
plot(Distance_Exutoire,legend=F,axes=F,col=grey(100:1/100),main="Distance a l'exutoire")
plot(Distance_Vignes,legend=F,axes=F,col=grey(100:1/100),main="Distance aux vignes")
plot(Distance_Routes,legend=F,axes=F,col=grey(100:1/100),main="Distance aux routes")
plot of chunk unnamed-chunk-13
writeRaster(mntIncrust,paste("datas/mnt",sep=""),format="ascii",overwrite=T)
class : RasterLayer
dimensions : 213, 267, 56871 (nrow, ncol, ncell)
resolution : 5, 5 (x, y)
extent : 725300, 726635, 6264840, 6265905 (xmin, xmax, ymin, ymax)
coord. ref. : NA
data source : /home/vinatier/Documents/A-SCIENTIFIQUE/ENSEIGNEMENTS/2014-UE Simulation paysagere/TP_Pratiques_Ruissellement/datas/mnt.asc
names : mnt
writeRaster(Distance_Exutoire,paste("datas/Distance_Exutoire",sep=""),format="ascii",overwrite=T)
class : RasterLayer
dimensions : 213, 267, 56871 (nrow, ncol, ncell)
resolution : 5, 5 (x, y)
extent : 725300, 726635, 6264840, 6265905 (xmin, xmax, ymin, ymax)
coord. ref. : NA
data source : /home/vinatier/Documents/A-SCIENTIFIQUE/ENSEIGNEMENTS/2014-UE Simulation paysagere/TP_Pratiques_Ruissellement/datas/Distance_Exutoire.asc
names : Distance_Exutoire
writeRaster(Distance_Vignes,paste("datas/Distance_Vignes",sep=""),format="ascii",overwrite=T)
class : RasterLayer
dimensions : 213, 267, 56871 (nrow, ncol, ncell)
resolution : 5, 5 (x, y)
extent : 725300, 726635, 6264840, 6265905 (xmin, xmax, ymin, ymax)
coord. ref. : NA
data source : /home/vinatier/Documents/A-SCIENTIFIQUE/ENSEIGNEMENTS/2014-UE Simulation paysagere/TP_Pratiques_Ruissellement/datas/Distance_Vignes.asc
names : Distance_Vignes
writeRaster(Distance_Routes,paste("datas/Distance_Routes",sep=""),format="ascii",overwrite=T)
class : RasterLayer
dimensions : 213, 267, 56871 (nrow, ncol, ncell)
resolution : 5, 5 (x, y)
extent : 725300, 726635, 6264840, 6265905 (xmin, xmax, ymin, ymax)
coord. ref. : NA
data source : /home/vinatier/Documents/A-SCIENTIFIQUE/ENSEIGNEMENTS/2014-UE Simulation paysagere/TP_Pratiques_Ruissellement/datas/Distance_Routes.asc
names : Distance_Routes
writeRaster(hillShade,paste("datas/hillShade",sep=""),format="ascii",overwrite=T)
class : RasterLayer
dimensions : 213, 267, 56871 (nrow, ncol, ncell)
resolution : 5, 5 (x, y)
extent : 725300, 726635, 6264840, 6265905 (xmin, xmax, ymin, ymax)
coord. ref. : NA
data source : /home/vinatier/Documents/A-SCIENTIFIQUE/ENSEIGNEMENTS/2014-UE Simulation paysagere/TP_Pratiques_Ruissellement/datas/hillShade.asc
names : hillShade
Logo et les tortues. Ce langage a été créé en 1967 par W. Feurzeig et S. Papert avec un objectif éducatif.
NetLogo est un environnement de programmation pour la modélisation/simulation de phénomènes collectifs naturels. Il est bien adapté à la modélisation de systèmes complexes composés de centaines, de milliers d’agents agissant en parallèle. Il offre la possibilité de jouer avec de nombreuses simulations en sociologie, biologie, médecine, physique, chimie, mathématiques, informatique, économie et psychologie sociale, et également de créer ses propres modèles.
Le monde de Netlogo est constitué d’Agents, qui peuvent suivre des instructions. Les activités des différents agents s’exécutent simultanément. Il y a 3 types d’agents : tortues, patches et observateur.
Les Tortues sont les agents qui se déplacent dans le monde. Le Monde est en 2D ou 3D, divisé selon une grille (torique ou non) de patchs. Un Patch est une portion de sol sur laquelle les tortues peuvent se situer et se déplacer. L’Observateur regarde de l’extérieur le monde des tortues et des patchs (n’est pas situé dans le monde).
Interface graphique
Description
Onglet de code
```Sous linux, ouvrir un terminal,
se placer dans le dossier du programme NetLogo via les commandes ls et cd
taper: sh netlogo.sh
Récupérer le modèle Hydrologie.nlogo dans le dossier datas ```
Sous windows, double cliquer sur le fichier Hydrologie.nlogo
Ensuite, modifier le chemin d’accès vers les données (boutons HDD et set-directory) pour qu’il pointe sur le dossier de votre ordinateur.
Le modèle est organisé en deux modules, l’un figurant les flux d’eau et l’autre les agriculteurs.
Diagramme
L’onglet de code est structuré en cinq parties:
Description des différents agents, patches et leurs variables associées
Initialisation du modèle, des agents et chargement des cartes
Ordre temporel des actions
Calcul des procédures et fonctions associées aux agents
Visualisation des cartes et des paramètres des agents
L’interface graphique se compose de deux types de boutons, de gauche à droite de la carte: Côté Gauche Les boutons permettent l’initialisation du modèle et la modification de certains paramètres d’importance. Ils vont conditionner les simulations effectuées. Côté Droit Les boutons servent à illustrer les valeurs de certaines variables du modèle, telles que l’occupation du sol, l’élevation, etc..
Interface graphique: Modèle de ruissellement
Au début de la simulation, on simule de la pluie de manière aléatoire dans le temps et l’espace. Les gouttes de pluie se dispersent ensuite dans la zone par ruissellement superficiel.
Simulation de la pluie aléatoire
Les agriculteurs sont répartis aléatoirement dans la zone, avec deux types de pratiques différentes.
Distribution des agriculteurs sur la zone
Chaque agriculteur applique sa pratique dans un rayon définissant sa zone d’action, pouvant être modifié. Les fossés en vert et en rouge correspondent à des pratiques d’enherbement et l’application de herbicides, respectivement.
Aperçu des deux types de pratiques agricoles dans les fossés
Au cours de la simulation, les agriculteurs appliquent leur pratique au bout de 30 jours de simulation. A partir de cette instant, les gouttes d’eau vont se charger ou se décharger en herbicides au fur et à mesure qu’elles traversent des zones polluées par les herbicides ou enherbées. Les graphiques sous la carte indiquent le niveau de pollution de l’eau, sur toute la zone (à gauche) ou uniquement à l’exutoire du bassin versant (à droite).
Niveau de pollution de l’eau
D’autres cartes ont été chargées dans le modèle, telles que l’élévation et la distance à une occupation du sol donnée.
Cartes d’élévation
Cartes de distance à une occupation du sol donnée
Lancer le modèle sans modifier les paramètres initiaux et observer le niveau de pollution au bout de 50, 100 et 150 pas de temps. Comparer les résultats avec vos voisins.
Pourquoi y a t-il des différences?
Lancer différentes simulations en jouant sur les boutons suivants:
Paramètre | Description |
---|---|
rain-rate | L’importance des pluies. |
pluie | La concentration spatiale de la pluie. |
agriculteurs-nb | Le nombre d’agriculteurs. |
Prop-polluteur | La proportion d’agriculteurs utilisant des herbicides par rapport aux agriculteurs bio. |
radius-agriculteur | Le rayon d’action des agriculteurs. |
jours_avant_traitement | Le nombre de jours avant le traitement des fossés par les agriculteurs. |
Le comportement du modèle semble-t-il réaliste? Lister au moins quatre points soulignant le caractère irréaliste du modèle.
Selon vous, pour une proportion d’agriculteurs donnée, quelle serait la meilleure répartition des agriculteurs sur la zone pour minimiser la pollution à l’exutoire du bassin versant?
Déterminer, par la simulation, la réponse du niveau de pollution à l’exutoire selon la répartition des agriculteurs face à un gradient donné. Le gradient peut être la distance au vignoble, aux routes ou à l’exutoire. Etablir les abaques de cette réponse pour les trois gradients donnés. Optimiser la répartition spatiale des agriculteurs en fonction de ces abaques, et tester ensuite cette répartition avec le modèle.
On considère que deux structures de prescription doivent s’installer sur la zone: l’une préconise l’enherbement tandis que l’autre l’usage d’herbicides sur la zone. Elles possèdent toutes les deux le même rayon d’action, de l’ordre de 500 mètres. Où doivent se situer ces deux structures pour un minimum de pollution à l’exutoire?