manuel:programmation
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
manuel:programmation [//04/03/2023 11:42//] – saraiva | manuel:programmation [//25/09/2023 23:40//] (Version actuelle) – [Programmation et SIG : Synopsis] joliveau | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ===== Programmation et SIG : Synopsis | + | ===== Programmation et SIG : un aperçu |
- | **Synthèse - Programmation et SIG** | + | ==== Synthèse - Programmation et SIG ==== |
L' | L' | ||
Ligne 14: | Ligne 14: | ||
Voici quelques exemples de comment utiliser la programmation et l’automatisation dans le monde de SIG. | Voici quelques exemples de comment utiliser la programmation et l’automatisation dans le monde de SIG. | ||
- | **Model Builder** | + | ==== Model Builder |
Pour accéder au ModelBuilder il faut cliquer sur l’onglet « Analysis » et chercher dans l’espace « Geoprocessing » son icon. Une fois cliqué sur l’icon, un nouvel onglet apparaitra. | Pour accéder au ModelBuilder il faut cliquer sur l’onglet « Analysis » et chercher dans l’espace « Geoprocessing » son icon. Une fois cliqué sur l’icon, un nouvel onglet apparaitra. | ||
Ligne 43: | Ligne 43: | ||
- Iterate Workspaces est Itérer les espaces de travail. | - Iterate Workspaces est Itérer les espaces de travail. | ||
- | Comme Itérateurs on a beaucoup d’options et c’est possible d’utiliser des itérations plus connues comme For et While mais aussi des itérations liées aux entités du monde SIG. Il est possible de réaliser une itération par rapport à table attributaire, | + | Comme Itérateurs on a beaucoup d’options et il est possible d’utiliser des itérations plus connues comme For et While mais aussi des itérations liées aux entités du monde SIG. Il est possible de réaliser une itération par rapport à table attributaire, |
{{ : | {{ : | ||
Ligne 49: | Ligne 49: | ||
On peut aussi réaliser des itérations par rapport aux champs d’une couche présents dans l’espace Contenu avec l’itérateur « Iterate Fields », ça permet de les filtrer par type (Texte, Réel, Court, Long, étc) et aussi de les sélectionner par nom. À travers l’itérateur « Iterate Fields Values », on peut aller plus loin et réaliser des itérations à propos des valeurs de chaque champ. | On peut aussi réaliser des itérations par rapport aux champs d’une couche présents dans l’espace Contenu avec l’itérateur « Iterate Fields », ça permet de les filtrer par type (Texte, Réel, Court, Long, étc) et aussi de les sélectionner par nom. À travers l’itérateur « Iterate Fields Values », on peut aller plus loin et réaliser des itérations à propos des valeurs de chaque champ. | ||
- | L’itérateur « Iterate Multivalue » est capable d’itérer des plusieurs classes d’entités dedans différents fichiers geodatabase. Cet itérateur va parcourir chaque classe d’entité et réaliser une action sur elle. Dans l’image suivante on peut voir que chaque classe d’entité (InputFC1, InputFC2, InputFC3) sera projeter | + | L’itérateur « Iterate Multivalue » est capable d’itérer des plusieurs classes d’entités dedans différents fichiers geodatabase. Cet itérateur va parcourir chaque classe d’entité et réaliser une action sur elle. Dans l’image suivante on peut voir que chaque classe d’entité (InputFC1, InputFC2, InputFC3) sera projetée |
{{ : | {{ : | ||
Ligne 62: | Ligne 62: | ||
- « *Grand » - on filtre tous les entités qui finissent par « Grand », sans considérer l’extension du fichier. | - « *Grand » - on filtre tous les entités qui finissent par « Grand », sans considérer l’extension du fichier. | ||
- | Dans l’image suivante on peut trouver un exemple | + | Dans l’image suivante on peut trouver un exemple |
{{ : | {{ : | ||
Source : ([[https:// | Source : ([[https:// | ||
- | L’itérateur « Iterate Files » permet de travailler avec des fichiers | + | L’itérateur « Iterate Files » permet de travailler avec des fichiers |
{{ : | {{ : | ||
Ligne 81: | Ligne 81: | ||
- Pour consulter tous les outils possibles sur ModelBuilder : https:// | - Pour consulter tous les outils possibles sur ModelBuilder : https:// | ||
- | **GeoPandas** | + | ==== GeoPandas |
La première chose à faire avant d’utiliser les commandes de la librairie GeoPandas est l’installation et pour la faire il faut savoir quelle plateforme IDE vous utilisez (Jupyter Notebook, Google Colab, Anaconda, etc). Dans tout le cas la page de documentation de GeoPandas fourni des consignes comment faire son installation : https:// | La première chose à faire avant d’utiliser les commandes de la librairie GeoPandas est l’installation et pour la faire il faut savoir quelle plateforme IDE vous utilisez (Jupyter Notebook, Google Colab, Anaconda, etc). Dans tout le cas la page de documentation de GeoPandas fourni des consignes comment faire son installation : https:// | ||
- | {{ : | + | {{ : |
Ensuite on peut installer geopandas. Les librairies mapclassify et folium seront utile pour la visualisation des couches avec un fond de carte. | Ensuite on peut installer geopandas. Les librairies mapclassify et folium seront utile pour la visualisation des couches avec un fond de carte. | ||
- | {{ : | + | {{ : |
- | Une fois installé, il faut importer cette librairie en écrivant « import geopandas ». Ensuite on peut finalement commencer à utiliser les commandes du GeoPandas. Cette librairie permet de travailler avec les fichiers du type GeoPackage, GeoJSON et Shapefile et tous les autres types contenant une table attributaire et une geometrie. Dans l’image on voit qu’autres librairies ont étés installés, c’est normal parce qu’on aura besoin pour la séquence du tutoriel. | + | Une fois installé, il faut importer cette librairie en écrivant « import geopandas ». Ensuite on peut finalement commencer à utiliser les commandes du GeoPandas. Cette librairie permet de travailler avec les fichiers du type GeoPackage, GeoJSON et Shapefile et tous les autres types contenant une table attributaire et une geometrie. Dans l’image on voit que d’autres librairies ont étés installés, c’est normal parce qu’on aura besoin pour la séquence du tutoriel. |
- | {{ : | + | {{ : |
- | Pour lire des fichiers il faut utiliser la commande « geopandas.read_file() » et ajouter | + | Pour lire des fichiers il faut utiliser la commande « geopandas.read_file() » et y ajouter |
- | {{ : | + | {{ : |
GeoPandas permet aussi de visualiser les données, on doit utiliser la commande plot(). En donnant le nom d’une colonne, on peut avoir une symbologie par valeur unique et on a aussi la possibilité de montrer la légende, comme dans l’image ci-dessous : | GeoPandas permet aussi de visualiser les données, on doit utiliser la commande plot(). En donnant le nom d’une colonne, on peut avoir une symbologie par valeur unique et on a aussi la possibilité de montrer la légende, comme dans l’image ci-dessous : | ||
- | {{ : | + | {{ : |
On peut aussi utiliser un fond de carte, mais on doit utiliser la commande .explore(). Cependant, il faut installer et importer les librairies folium, matplotlib et mapclassify, | On peut aussi utiliser un fond de carte, mais on doit utiliser la commande .explore(). Cependant, il faut installer et importer les librairies folium, matplotlib et mapclassify, | ||
- | {{ : | + | {{ : |
- | La commande to_file() sert à deux possibilités, | + | La commande to_file() sert à deux possibilités, |
- | {{ : | + | {{ : |
En plus de lire, écrire et convertir des fichiers, la librairie GeoPandas contient plusieurs fonctions géospatiales. Voici une liste de fonctions géospatiales : .area, .boundary(), | En plus de lire, écrire et convertir des fichiers, la librairie GeoPandas contient plusieurs fonctions géospatiales. Voici une liste de fonctions géospatiales : .area, .boundary(), | ||
Ligne 115: | Ligne 115: | ||
La fonction to_crs() permet de convertir le système des coordonnées du fichier. S’on ne connait pas le système de coordonnées de la couche, on peut utiliser la commande .crs et on aura tous les informations par rapport à ces paramètres, | La fonction to_crs() permet de convertir le système des coordonnées du fichier. S’on ne connait pas le système de coordonnées de la couche, on peut utiliser la commande .crs et on aura tous les informations par rapport à ces paramètres, | ||
- | {{ : | + | {{ : |
Ensuite, on peut convertir de WGS84 à Lambert 93 avec .to_crs() en donnant le code EPSG correct. On peut stocker la couche nouvelle dans une autre variable. | Ensuite, on peut convertir de WGS84 à Lambert 93 avec .to_crs() en donnant le code EPSG correct. On peut stocker la couche nouvelle dans une autre variable. | ||
- | {{ : | + | {{ : |
- | Comme GeoPandas est une sous-classe de Pandas on peut utiliser | + | Comme GeoPandas est une sous-classe de Pandas on peut utiliser |
- | {{ : | + | {{ : |
On peut faire aussi des filtres avec des champs du type string et sélectionner seulement les départements avec «-» dans son nom. La fonction « .str » sert à convertir les valeurs de la colonne « NOM_M » en type STRING ou Texte en français. | On peut faire aussi des filtres avec des champs du type string et sélectionner seulement les départements avec «-» dans son nom. La fonction « .str » sert à convertir les valeurs de la colonne « NOM_M » en type STRING ou Texte en français. | ||
+ | {{ : | ||
- | D’autres fonctions et commandes sont possible avec la librairie GeoPandas et on peut les trouver sur son page de Documentation (Lien : https:// | + | D’autres fonctions et commandes sont possible avec la librairie GeoPandas et on peut les trouver sur son page de Documentation (Lien : https:// |
- | **GDAL/OGR** | + | ==== GDAL/ |
- | A travers la librairie GDAL/OGR on peut travailler avec des fichiers vectoriels. Il faut utiliser OGR. Avant de commencer il faut dire que la librairie OGR n’est pas si « user friendly » que GeoPandas et elle travaille | + | A travers la librairie GDAL/OGR on peut travailler avec des fichiers vectoriels. Il faut utiliser OGR. Avant de commencer il faut dire que la librairie OGR n’est pas si « user friendly » que GeoPandas et elle travaille |
L’importation est assez simple. | L’importation est assez simple. | ||
+ | |||
+ | {{ : | ||
- | Après l’importation on peut lire des fichiers vectoriel à partir de la fonction « ogr.Open(chemin du fichier). On peut stocker l’ouverture dans une variable.Ainsi comme GeoPandas, OGR est capable de travailler avec beaucoup type de fichier vectoriel, la liste de tous les fichiers est trouvée dans le lien suivant https:// | + | Après l’importation on peut lire des fichiers vectoriel à partir de la fonction « ogr.Open(chemin du fichier). On peut stocker l’ouverture dans une variable. Ainsi comme GeoPandas, OGR est capable de travailler avec beaucoup type de fichier vectoriel, la liste de tous les fichiers est trouvée dans le lien suivant https:// |
+ | |||
+ | {{ : | ||
Pour commencer à travailler plus à fond avec cette librairie, et c’est pour cette raison qu’elle est un peu plus difficile que GeoPandas, il faut définir ce qui est une « layer ». Pour faire ça il faut utiliser la fonction « .GetLayer() ». | Pour commencer à travailler plus à fond avec cette librairie, et c’est pour cette raison qu’elle est un peu plus difficile que GeoPandas, il faut définir ce qui est une « layer ». Pour faire ça il faut utiliser la fonction « .GetLayer() ». | ||
+ | |||
+ | {{ : | ||
- | A partir de « layer » on peut avoir des informations par rapport au fichier vectoriel, comme par exemple | + | A partir de « layer » on peut avoir des informations par rapport au fichier vectoriel, comme le système des coordonnées. En utilisant la fonction « .GetSpatialRef() » on obtient le système des coordonnées et en appliquant |
+ | |||
+ | {{ : | ||
On peut aussi extraire la géométrie du fichier vectoriel à travers de « layer ». Cependant il faut une étape avant, c’est la création de la « feature » de « layer », on utilise la fonction « GetFeature() ». Ensuite on utilise la fonction « GetGeometryRef() » et la fonction « ExportToWkt() » pour avoir la géométrie. On stocke la géométrie dans la variable « geom ». | On peut aussi extraire la géométrie du fichier vectoriel à travers de « layer ». Cependant il faut une étape avant, c’est la création de la « feature » de « layer », on utilise la fonction « GetFeature() ». Ensuite on utilise la fonction « GetGeometryRef() » et la fonction « ExportToWkt() » pour avoir la géométrie. On stocke la géométrie dans la variable « geom ». | ||
+ | |||
+ | {{ : | ||
Avec la géométrie, | Avec la géométrie, | ||
+ | |||
+ | {{ : | ||
- | La surface est déterminé | + | La surface est déterminée |
+ | |||
+ | {{ : | ||
On peut aussi réaliser des buffers avec la géométrie en utilisant l’outil « .Buffer() ». | On peut aussi réaliser des buffers avec la géométrie en utilisant l’outil « .Buffer() ». | ||
+ | |||
+ | {{ : | ||
- | Il y a plusieurs outils dans la librairie OGR, cependant elle demande un niveau très haut de connaissance. Pour avoir acquérir plus de connaissance par rapport au module osgeo.ogr | + | Il y a plusieurs outils dans la librairie OGR, cependant elle demande un niveau très haut de connaissance. Pour avoir acquérir plus de connaissance par rapport au module osgeo.ogr |
La librairie GDAL/OGR permet de travailler non seulement avec des fichiers vectoriels mais aussi des fichiers rasters. Pour les fichiers rasters on utilise GDAL. Pour l’utiliser il faut l’importer et aussi la librairie matplotlib pour visualiser les fichiers. | La librairie GDAL/OGR permet de travailler non seulement avec des fichiers vectoriels mais aussi des fichiers rasters. Pour les fichiers rasters on utilise GDAL. Pour l’utiliser il faut l’importer et aussi la librairie matplotlib pour visualiser les fichiers. | ||
+ | |||
+ | {{ : | ||
Pour ouvrir un fichier raster il faut utiliser la fonction « gdal.open() » et la donner le chemin du fichier raster. GDAL est capable de lire plusieurs types de fichiers raster, la liste contenant les types est trouvé dans le lien suivant https:// | Pour ouvrir un fichier raster il faut utiliser la fonction « gdal.open() » et la donner le chemin du fichier raster. GDAL est capable de lire plusieurs types de fichiers raster, la liste contenant les types est trouvé dans le lien suivant https:// | ||
+ | |||
+ | {{ : | ||
On peut obtenir des information du raster à partir de la fonction « .GetGeoTransform() ». Elle nous fournit comme résultat contenant comme premier et quatrième élément, respectivement, | On peut obtenir des information du raster à partir de la fonction « .GetGeoTransform() ». Elle nous fournit comme résultat contenant comme premier et quatrième élément, respectivement, | ||
+ | |||
+ | {{ : | ||
Le système des coordonnées du fichier raster peut être obtenu avec l’utilisation de la fonction « .GetProjection() ». Le résultat contient plusieurs informations comme le nom, le code EPSG, l’unité, etc. | Le système des coordonnées du fichier raster peut être obtenu avec l’utilisation de la fonction « .GetProjection() ». Le résultat contient plusieurs informations comme le nom, le code EPSG, l’unité, etc. | ||
+ | |||
+ | {{ : | ||
Avec GDAL, on peut réaliser aussi des analyses en utilisant un MNT comme Slope, Hillshade et Aspect. Pour le faire il faut travailler avec l’outil « osgeo.gdal.DEMProcessing(destName, | Avec GDAL, on peut réaliser aussi des analyses en utilisant un MNT comme Slope, Hillshade et Aspect. Pour le faire il faut travailler avec l’outil « osgeo.gdal.DEMProcessing(destName, | ||
Ligne 165: | Ligne 190: | ||
Pour le slope il faut écrire « osgeo.gdal.DEMProcessing(' | Pour le slope il faut écrire « osgeo.gdal.DEMProcessing(' | ||
+ | |||
+ | {{ : | ||
Pour le hillshade, le méthode est similaire et il faut écrire « osgeo.gdal.DEMProcessing(' | Pour le hillshade, le méthode est similaire et il faut écrire « osgeo.gdal.DEMProcessing(' | ||
+ | |||
+ | {{ : | ||
Pour l’aspect, on fait pareillement et on écrit « osgeo.gdal.DEMProcessing(' | Pour l’aspect, on fait pareillement et on écrit « osgeo.gdal.DEMProcessing(' | ||
+ | |||
+ | {{ : | ||
Une fois crées les fichiers des analyses comme slope, hillshade ou aspect, on peut les ouvrir sur QGIS ou ArcGIS PRO. Cependant il faut fermer tous les fenêtres Jupyter Notebook, puisque les fichiers ne sont plus connectés à la plateforme python. | Une fois crées les fichiers des analyses comme slope, hillshade ou aspect, on peut les ouvrir sur QGIS ou ArcGIS PRO. Cependant il faut fermer tous les fenêtres Jupyter Notebook, puisque les fichiers ne sont plus connectés à la plateforme python. | ||
- | La librairie GDAL/OGR contient plusieurs fonctions qui peuvent être utilisé avec fichier vectoriels et rasters, et pour les découvrir il faut consulter la page de documentation sur le lien suivant https:// | ||
- | **Rasterio** | + | La librairie GDAL/OGR contient plusieurs fonctions qui peuvent être utilisé avec fichier vectoriels et rasters, et pour les découvrir il faut consulter la page de documentation sur le lien suivant https:// |
- | Comme pour la librairie GeoPandas, il faut installer la librairie Rasterio. Pour en faire on doit écrire seulement « !pip install rasterio -q ». Pour quelques problèmes d’installation qui peuvent apparaître, | + | ==== Rasterio ==== |
+ | |||
+ | Comme pour la librairie GeoPandas, il faut installer la librairie Rasterio. Pour en faire on doit écrire seulement « !pip install rasterio -q ». Pour quelques problèmes d’installation qui peuvent apparaître, | ||
+ | |||
+ | {{ : | ||
Ensuite, on installe la librairie à travers la commande import, comme dans l’image suivante. On importe aussi la fonction plot de Rasterio pour nous aider dans la visualisation des rasters. | Ensuite, on installe la librairie à travers la commande import, comme dans l’image suivante. On importe aussi la fonction plot de Rasterio pour nous aider dans la visualisation des rasters. | ||
+ | |||
+ | {{ : | ||
- | Après l’installation et l’importation, | + | Après l’installation et l’importation, |
+ | |||
+ | {{ : | ||
Pour savoir les propriétés du raster, la fonction « .meta » est la solution. A travers d’elle on a accès aux informations metadata du fichier comme : driver (format du raster), dtype (type de espace du raster), nodata (présence de nodata), width (largeur du raster), height (hauteur du raster), count (nombre de bands), crs (info par rapport au système des coordonnées), | Pour savoir les propriétés du raster, la fonction « .meta » est la solution. A travers d’elle on a accès aux informations metadata du fichier comme : driver (format du raster), dtype (type de espace du raster), nodata (présence de nodata), width (largeur du raster), height (hauteur du raster), count (nombre de bands), crs (info par rapport au système des coordonnées), | ||
+ | |||
+ | {{ : | ||
La visualisation de l’image fonctionne en utilisant la fonction « plot.show(variable qui stock l’ouverture) ». On peut visualiser l’image dans une graphe qui utilise les coordonnées longitude et latitude comme axis x et y, respectivement. | La visualisation de l’image fonctionne en utilisant la fonction « plot.show(variable qui stock l’ouverture) ». On peut visualiser l’image dans une graphe qui utilise les coordonnées longitude et latitude comme axis x et y, respectivement. | ||
+ | |||
+ | {{ : | ||
- | Comme exemple d’application on va voir comment réaliser une extraction par masque. Pour ce but il faut réaliser trois étapes avant. La premiere | + | Comme exemple d’application on va voir comment réaliser une extraction par masque. Pour ce but il faut réaliser trois étapes avant. La première |
+ | |||
+ | {{ : | ||
- | On utilise geopandas.read_file() pour ajouter la couche de la ville de Lyon. Cette couche est en format *.shp. On va convertir le format en exportant sous le format *.geojson et ensuite on va stocker la couche résultante dans la variable « couper » parce c’est elle qui servira comme masque. Ensuite il faut qu’on extraie les coordonnées du fichier geojson, on utilise la fonction json.loads() et on défine que les coordonnées sont dedans « features » et « geometry » dans la structure du fichier geojson. Les coordonnées seront stockées dans la variable coords. | + | On utilise geopandas.read_file() pour ajouter la couche de la ville de Lyon. Cette couche est en format *.shp. On va convertir le format en exportant sous le format *.geojson et ensuite on va stocker la couche résultante dans la variable « couper » parce c’est elle qui servira comme masque. Ensuite il faut qu’on extraie les coordonnées du fichier geojson, on utilise la fonction json.loads() et on défine que les coordonnées sont dedans « features » et « geometry » dans la structure du fichier geojson. Les coordonnées seront stockées dans la variable |
+ | |||
+ | {{ : | ||
+ | |||
+ | {{ : | ||
Comme on peut voir dans l’image suivante les coordonnées ont été bien stockées dans la variable « coords ». Cependant, il faut remarquer qu’elles sont encore dans une structure du format json. | Comme on peut voir dans l’image suivante les coordonnées ont été bien stockées dans la variable « coords ». Cependant, il faut remarquer qu’elles sont encore dans une structure du format json. | ||
+ | |||
+ | {{ : | ||
Avec toutes les préparations finies, on peut finalement appliquer la fonction « mask » de rasterio. Il faut qu’on donne comme arguments la variable qui stocke le raster (image), la variable contenant les coordonnées (coords) et qu’on écrire « crops = True » (cet arguments permet de couper l’image). On va stocker le resultat dans deux variables : masque_img qui va stocker l’image coupé et masque_transform qui va strocker les information par rapport à transform (une information de metadata). | Avec toutes les préparations finies, on peut finalement appliquer la fonction « mask » de rasterio. Il faut qu’on donne comme arguments la variable qui stocke le raster (image), la variable contenant les coordonnées (coords) et qu’on écrire « crops = True » (cet arguments permet de couper l’image). On va stocker le resultat dans deux variables : masque_img qui va stocker l’image coupé et masque_transform qui va strocker les information par rapport à transform (une information de metadata). | ||
Ensuite, on va mettre à jour les informations de metadata qu’on a copié dans la variable « masque_meta ». Pour finir, on enregistre le fichier resultant, comme on a donné seulement le nom du fichier, il sera enregistré dans le même chemin du fichier Jupyter Notebook. Le « w » sert à définir qu’il s’agit d’une création de fichier et il vient de la mot anglais « write ». | Ensuite, on va mettre à jour les informations de metadata qu’on a copié dans la variable « masque_meta ». Pour finir, on enregistre le fichier resultant, comme on a donné seulement le nom du fichier, il sera enregistré dans le même chemin du fichier Jupyter Notebook. Le « w » sert à définir qu’il s’agit d’une création de fichier et il vient de la mot anglais « write ». | ||
+ | |||
+ | {{ : | ||
On ouvre le fichier avec la fonction « rasterio.open() » et ensuite on utilise « plot » pour visualiser le résultat final. | On ouvre le fichier avec la fonction « rasterio.open() » et ensuite on utilise « plot » pour visualiser le résultat final. | ||
+ | |||
+ | {{ : | ||
On vérifie aussi les informations metadata à travers la commande « .meta ». On peut voir que les informations ont été bien mis à jour. | On vérifie aussi les informations metadata à travers la commande « .meta ». On peut voir que les informations ont été bien mis à jour. | ||
+ | |||
+ | {{ : | ||
- | La librairie Rasterio permet de réaliser diverses fonctions et ainsi comme la librairie GeoPandas, elle a une page de documentation contenant tous ses fonctions et aussi l’explication des arguments nécessaires. Le lien de la page est le suivant https:// | + | La librairie Rasterio permet de réaliser diverses fonctions et ainsi comme la librairie GeoPandas, elle a une page de documentation contenant tous ses fonctions et aussi l’explication des arguments nécessaires. Le lien de la page est le suivant https:// |
Matheus Gimenez Saraiva - 2022/2023 | Matheus Gimenez Saraiva - 2022/2023 | ||
manuel/programmation.1677926521.txt.gz · Dernière modification : //04/03/2023 11:42// de saraiva