L’intégration de données SIG dans netlogo n’est pas une trivial. Je vous propose donc ici un petit pense pas bête pour passer de données SIG dans une projection hétérogène à l’intégration dans netlogo. J’en avais déjà fait un il y a quelques années, mais comme je repart de zero… autant approfondir!
Prè-requis : gdal, qgis, netlogo
découpe et reprojection de données raster
Dans mon cas, je veux travailler sur un espace carrée, je commence donc par définir l’emprise de la zone de travail avec un polygone dans Qgis.
Si vous vous intéressez a ces questions, vous savez sans doute que l’extension GIS de netlogo ne supporte pas un très grand nombre de système de projection. Il va donc falloir passer ici du lambert 93 (epsg:2154) au WGS84 (epsg:4326) ce qui nécessite un ré-échantillonnage du raster.
Nous allons utiliser gdal en ligne de commande pour effectuer la reprojection et la découpe en même temps.
gdalwarp -cutline emprise.shp -crop_to_cutline -dstalpha -s_srs epsg:2154 -t_srs epsg:4326 DTMBanyulsEPSG2154/slope10m.tif DTMBanyulsEPSG2154/small_slope.tif
Si vous ré-ouvrez a nouveau Qgis vous pouvez vérifier que tout s’est bien passé (découpe et epsg = 4326)!
Mon 2nd problème maintenant est que netlogo mange de l’asc … il faut donc traduire mon tif en asc ! Cela peut encore une fois se faire garce à gdal! (attention depuis la version 1.9 de gdal il faut force la création de grid type ESRI… par défaut gdal produit un fichier de type surfer, cela est possible avec l’option -co FORCE_CELLSIZE=TRUE)
gdal_translate -of "AAIGrid" -b 1 -co FORCE_CELLSIZE=TRUE DTMBanyulsEPSG2154/small_slope.tif DTMBanyulsEPSG2154/small_slope.asc
découpe et reprojection de données vecteur
Si on veux effectuer la même chose avec des données vectorielle on va utiliser le couteau suisse ogr2ogr qui vient avec les librairies gdal. De la même manière donc nous sommes capable de découper et reprojeter des données vecteur
ogr2ogr -clipsrc empriseL93.shp -s_srs epsg:2154 -t_srs epsg:4326 ParcellesVitiSQLITE/small_parcellesWGS84.shp ParcellesVitiSQLITE/ParcellesViti_L93.shp
Attention tout fois, vérifiez que les champs qui vous intéressent ne sont pas NULL
Import dans netlogo de données vecteur
A ce stade nous n’avons (plus) qu’ à passer dans netlogo.
Vous devrez en premier lieu charger l’extention GIS dans netlogo et definir des global à utiliser pour charger les données SIG.
Extensions [GIS] breed [vinegrowers vinegrower] globals[ parcelles ;; needed for GIS vector import ] patches-own [ ;;atributes for patches cat ;;for load data from GIS dataSet ]
Nous pouvons à partir de là créer une procédure qui va charger des données GIS.
to setupGIS ;chargement des données en RAM ;;definir le systeme de projection set parcelles gis:load-dataset "data_carto/ParcellesVitiSQLITE/small_parcellesWGS84.shp" gis:set-world-envelope gis:envelope-of parcelles ;efface la vu dans l'interface clear-drawing ;definition de la couleur pour les polygones gis:set-drawing-color blue ;definition des la couche (charger dans les gloables) a dessiner dans l'interface gis:draw parcelles 1 ;ajuste le cadre de l'environement de netlogo avec la couche shp gis:set-world-envelope (gis:envelope-of parcelles) ;affectuer des valeurs du vectordataset (champs N_CVI) aux patches dans l'atribut cat gis:apply-coverage parcelles "N_CVI" cat end
Si vous appelez la fonction setupGIS dans l’interface les données sont charger dans le viewer
Extensions [GIS] breed [vinegrowers vinegrower] globals[ parcelles ;; needed for GIS vector import ] patches-own [ ;;atributes for patches cat ;;for load data from GIS dataSet ]
Nous pouvons à partir de là créer une procédure qui va charger des données GIS.
to setupGIS ;chargement des données en RAM ;;definir le systeme de projection set parcelles gis:load-dataset "data_carto/ParcellesVitiSQLITE/small_parcellesWGS84.shp" gis:set-world-envelope gis:envelope-of parcelles ;efface la vu dans l'interface clear-drawing ;definition de la couleur pour les polygones gis:set-drawing-color blue ;definition des la couche (charger dans les gloables) a dessiner dans l'interface gis:draw parcelles 1 ;ajuste le cadre de l'environement de netlogo avec la couche shp gis:set-world-envelope (gis:envelope-of parcelles) ;affectuer des valeurs du vectordataset (champs N_CVI) aux patches dans l'atribut cat gis:apply-coverage parcelles "N_CVI" cat end
Import dans netlogo de données raster
Extensions [GIS] breed [vinegrowers vinegrower] globals[ parcelles ;; needed for GIS vector import slope ] patches-own [ ;;atributes for patches cat ;;for load data from GIS dataSet slope_here ]
Nous pouvons à partir de là créer une procédure qui va charger des données GIS.
to setupGIS ;chargement des données en RAM ;;pour charger les pentes set slope gis:load-dataset "data_carto/DTMBanyulsEPSG2154/small_slope.asc" ;;poue simplement dessiner le raster gis:paint slope white ;;pour attribuer les valeur du raster aux patches ask patches[ set slope_here gis:raster-sample slope patch pxcor pycor ] end
Ce qui nous permet d’obtenir l’effet attendu (ouf)!
A noté enfin que les valeurs vont se superposer dans l’ordre dans lequel vous les appelez dans la procédure. Ce qui veuux dire que si vous avez charger des données vecteur n premier et que vous ajouter la pente comme ici. Les polygones que nous visualisions précédement seront cacher par la pente.