Tutoriel QGIS : Calcul de l’aire des zones fermées
Objectif :
- Connaître comment calculer la surface d’un objet géographique tout en automatisant l’ajout de l’aire d’un polygone dans la table attributaire. Avec QGIS on peut calculer la surface des objets de type polygone de façon automatique.
Sommaire
Voici la démarche à suivre :
- Ajouter la couche au QGIS, puis il faut mettre la table d’attributs en mode édition.
- Ensuite, créer une nouvelle colonne qui doit contenir des données numériques (données décimales) de la surface.
- Une fois la nouvelle colonne (champ) créée, on peut utiliser la calculatrice de champs ; sélectionner le champ qui va accueillir les surfaces. Puis, cocher la case « Mise à jour d’un champ existant» et cliquer sur “surface_wg” dans la partie opérateur (voir les détails ci-dessous).
Remarque:
- La surface calculée peut être en mètres carrées, kilomètres carrées ou en hectare, selon le système de coordonnées de référence utilisé.
- Notez bien que le calcul de surface dans QGIS est basé sur la fonction $area associée à la géométrie de l’objet géographique sélectionné.
- L’unité de la surface calculée par la fonction $area dépend de la projection géographique utilisée dans QGIS.
Dans notre projet, nous avons travaillé avec le Système de Coordonnées de Référence (SCR) World Geodetic System 1984 (WGS 84) dont l’ID est le EPSG:4326, ce qui va donner des valeurs en degré carré, ensuite avec Merchich / Nord Maroc (EPSG:26191).
- Pour obtenir les surfaces en mètre carré, on doit transformer le SCR WGS 84 en WGS 84 Pseudo-Mercator par exemple ou dans un autre SCR selon votre choix.
- Sachant qu’il y a une méthode de le faire ; c’est par transformer la projection géographique des géométries « à la volée » pour le calcul des surfaces (voir le détail dans la section Conversion de SCR et calcul de la surface en hectare).
Les données à utiliser
Nous allons travailler sur un exemple d’une couche vecteur de parcs urbains de Tanger (lien de téléchargement). Notre but est de calculer la surface de chaque parc urbain ensuite la surface totale.
Dans cet exemple, on a créé un shapefile de type polygone pour représenter les parcs urbains (voir la figure ci-dessous) avec la projection WGS 84 (EPSG :4326).
Figure 1 : Parcs urbains (zones vertes urbaines) en format shapefile de type polygone visualisés dans QGIS.
Après l’ouverture de cette couche, vérifions si cette couche n’a pas de champ attributaire pour la surface, si non alors nous l’ajoutons à l’aide de la calculatrice de champ.
La table d’attributs de cette couche (parks19) comporte les champs suivants : identifiant, Nom, Commune, Année, Stade, Jeux et Sport.
Comment calculer la surface d’un polygone dans QGIS?
- Dans un premier temps, la couche vecteur doit disposer d’un champ attributaire surface de type numérique afin d’ajouter les valeurs des surfaces calculées.
- Pour pouvoir faire le calcul de l’aire des objets géographiques de notre couche vecteur, on doit la mettre sous le mode édition à partir de la table d’attributs. En cliquant sur le bouton « Activer le mode d’édition ».
- Vous allez remarquer que le bouton contenant le crayon est devenu actif.
Dans QGIS le calcul des valeurs attributaires du champ surface se réalise à l’aide de la calculatrice de champ dont on le discutera dans la section suivante.
Utilisation de la calculatrice de champ QGIS pour calculer la surface d’un polygone
C’est quoi la calculatrice de champ?
- La calculatrice de champs dans QGIS est un outil qui permet d’effectuer des calculs sur la base des valeurs attributaires ou d’utiliser des fonctions, par exemple pour calculer la surface ou la longueur des entités.
- Les résultats peuvent être écrits dans une nouvelle colonne attributaire, un champ virtuel ou mettre à jour une colonne existante.
- Les champs virtuels ne sont pas permanents et ne sont pas sauvegardés. Pour qu’un champ soit virtuel, il faut le spécifier à sa création.
- La calculatrice de champ fonctionne avec toutes les couches gérables en mode édition.
- Lorsque vous cliquez sur le bouton de la calculatrice de champ, la fenêtre s’ouvre.
- Si la couche n’est pas en mode édition, un avertissement s’affiche et l’utilisation de la calculatrice de champ basculera automatiquement la couche en édition avant d’effectuer le calcul.
- Les fonctions disponibles sont listées dans Expressions.
Donc, la calculatrice de champ permet de:
- Créer un nouveau champ de la même façon que en faisant dans la création d’une couche vecteur;
- Mettre à jour un champ existant. Nous pouvons modifier toutes ou seulement les entités géographiques sélectionnées.
- La calculatrice de champ QGIS (voir la figure ci-dessous) met à notre disposition une liste de fonctions comme:
- les fonctions de chaînes de caractères,
- les champs et valeurs,
- les dates et heures,
- les fonctions liées à la géométrie, etc.
- Le calcul de la surface de la géométrie utilise la fonction $area comme le montre la figure 3 ci-après.
- Dans notre exemple, le vecteur est en projection WGS 84 et donc les valeurs de la surface seront en degrés carrés.
Alors, comment procéder au calcul de la surface des polygones en m2 dans QGIS?
On peut distinguer deux méthodes :
Méthode 1 :
consiste à créer une colonne, par exemple « surface_wg », via la table d’attributs, utiliser le bouton « Ajouter un champ », ensuite préciser les informations suivantes et terminer par OK.
Pour ajouter une nouvelle colonne attributaire contenant la surface de chaque polygone, procédez comme suit :
- Ouvrez votre couche vectorielle en mode édition.
- Cliquez sur le bouton « Calculatrice de champs » dans la barre d’outils d’édition.
- Dans la fenêtre qui s’ouvre, entrez un nom pour la nouvelle colonne attributaire dans le champ « Nom du champ » de sortie.
- Sélectionnez le type de données approprié pour la nouvelle colonne attributaire dans le champ Type de sortie.
- Entrez l’expression suivante dans le champ Expression pour calculer la surface de chaque polygone : $area.
- Cliquez sur le bouton OK pour exécuter le calcul.
- La nouvelle colonne attributaire contenant la surface de chaque polygone sera ajoutée à votre couche.
- On obtient la table d’attributs avec le nouveau champ « surface_wg » qui est vide.
- Pour le remplir avec la valeur des surfaces, on doit utiliser la calculatrice du champ de la façon suivante :
- On remarque que le champ surface_wg est rempli par les valeurs de surface pour chaque parc de façon automatique.
Méthode 2 :
Cette méthode consiste à créer un champ directement dans la calculatrice du champ tout en couchant la case « Créer un nouveau champ » et indiquant ainsi le Nom, Type, Longueur de nouveau champ et Précision.
Si vous souhaitez enregistrer les modifications apportées à la couche, n’oubliez pas de cliquer sur le bouton « Enregistrer les modifications» dans la barre d’outils d’édition.
Conversion de SCR et calcul de la surface en hectare
- Si nous souhaitons calculer la surface des polygones dans un nouveau SCR projeté comme par exemple le Merchich / Nord Maroc (EPSG:26191) sans passer par l’enregistrement de la couche sur le disque, il est possible de transformer la projection des géométries par la calculatrice des champs.
- Pour cela, on utilise la fonction de géométrie transform qui reprojette la géométrie ($geometry) du SCR d’origine vers le SCR cible.
- D’ailleurs, la fonction $area est associée à la géométrie transformée. Finalement, pour passer des mètres carrés en hectare, on divise la surface du polygone par 10000. L’expression du calcul de surface en hectare avec la transformation de la projection des géométries est la suivante :
area(transform( $geometry ,’EPSG:4326′,’EPSG:26191′)) / 10000
- Voici les résultats de calcul des surfaces en hectare et après la transformation; la table d’attributs de la couche contenant le champ surface en hectare.
Calculer la somme des surfaces (surface totale)
- Dans la finalité de connaître la surface totale des géométries du vecteur, on peut additionner des surfaces sur QGIS.
- Plusieurs solutions sont disponibles dans QGIS, mais nous allons utiliser la manière suivante.
- Pour calculer la surface totale de tous les polygones d’une couche, nous pouvons utiliser la calculatrice de champ.
- Ouvrez la couche de polygones que vous souhaitez calculer.
- Faites un clic droit sur la couche et sélectionnez « Ouvrir la table d’attributs ».
- Cliquez sur l’onglet « Calculatrice de champ ».
- Dans le champ « Nom du champ », saisissez un nom pour le champ de surface totale, par exemple « surf_tot ».
- Dans le champ « Expression », saisissez la formule suivante : sum($area)
- Cliquez sur « Appliquer ».
Ou bien seulement introduire directement la formule ci-dessus dans l’expression comme il montre la figure suivante :
- Cette formule utilise la fonction SUM() de QGIS pour calculer la somme des valeurs d’un champ qui sera en unité du projet dans QGIS (WGS84 par défaut).
Calculer la surface avec Python
- En plus des méthodes décrites précédemment pour calculer la surface individuelle des entités, on peut utiliser Python dans QGIS pour obtenir la somme totale des surfaces de toutes les entités d’une couche.
- Ce code calcule la somme totale des surfaces de toutes les entités polygone dans la couche active et affiche la valeur dans la console.
- On peut modifier le code pour enregistrer la valeur de la surface totale dans un champ de la couche ou pour l’utiliser dans d’autres analyses.
# Importer les modules QGIS nécessaires
from qgis import core, gui
# Obtenir la couche vecteur active
layer = iface.activeLayer()
# Vérifier si la couche est de type polygone
if layer.geometryType() == QgsWkbPolygon:
# Récupérer les entités de la couche
features = layer.getFeatures()
# Initialiser la variable pour stocker la somme totale
surface_totale = 0
# Parcourir chaque entité
for feature in features:
# Obtenir la géométrie de l’entité
geometry = feature.geometry()
# Créer une instance de QgsDistanceArea
da = QgsDistanceArea()
# Calculer la surface de l’entité
surface = da.calculateArea(geometry)
# Ajouter la surface à la variable de somme totale
surface_totale += surface
# Afficher la surface totale (par exemple, dans la console ou dans un champ de la couche)
print(f’Surface totale: {surface_totale}’)
else:
# Gérer le cas où la couche n’est pas un polygone
print(‘La couche n’est pas de type polygone.’)