Calculer des moyennes locales sur des polygones de Voronoï avec Qgis

Les cartes de Voronoï sont construites à partir d’une série de polygones formés autour de l’emplacement de chaque point d’échantillonnage.

Les polygones de Voronoï sont créés de sorte que chaque emplacement dans un polygone soit plus proche du point d’échantillonnage présent dans ce polygone que de tout autre point d’échantillonnage.

Dans l’article  sur l’analyse exploratoire des données, nous avons vu comment utiliser Geostatistical Analyst d’ArcGis pour construire et analyser les polygones de Voronoï.

Dans cet article nous verrons comment obtenir les mêmes résultats avec QGis.

La principale différence entre les deux logiciels (ArcGis et QGis) réside sur le fait que dans Geostatistical Analyst l’outil calcule les polygones de Voronoï et propose leur affichage avec des statistiques locales. Le résultat est une carte thématique où les polygones sont affichés avec un dégradé de couleurs en fonction de la valeur local de la statistique choisie.

Par exemple, si on choisit l’option « moyenne », la couleur affectée à chaque polygone sera fonction de la moyenne d’une colonne (« Attribute »)

Dans QGis, les outils de Voronoï se limitent au calcul des polygones. Il n’existe pas d’options permettant de calculer en même temps des statistiques locales. Chaque polygone aura comme attributs les attributs du point le concernant, mais pour calculer les statistiques locales il faudra du travail supplémentaire.

Il est possible de le faire de différentes manières. Nous allons suivre ici une des procédures possibles, en utilisant une requête SQL.

Cette procédure consiste en:

  • Calculer les polygones de Voronoï avec les outils de traitement de QGis
  • Importer le résultat dans une base de données (Sqlite ou Postgres)
  • Ajouter un champ pour contenir la statistique locale souhaitée
  • Exécuter une requête SQL qui remplit ce champ
  • Afficher la couche avec une thématique définie sur ce champ

Calculer les polygones de Voronoï avec les outils de traitement de QGis

NOTA: la démarche est la même que ce soit avec la version 2.18 ou la 3.2 de QAGis

Vous avez deux outils qui vous permettent de calculer les polygones de Voronoï dans les traitements de QGis:

Un des outils appartient au groupe « Géométrie vectorielle », l’autre fait partie des géotraitements de GRASS.

Vous pouvez les utiliser indifféremment, mais pour ma part je préfère celui de GRASS.

Enregistrez le résultat sous forme de fichier shape. Ceci vous permettra de charger plus facilement le fichier dans votre base de données.

Importer le résultat dans une base de données (Sqlite ou Postgres)

Pour pouvoir utiliser les commandes spatiales sur votre couche nous allons la charger dans une base de données permettant ce type d’opérations. Vous pouvez toujours créer et charger le shape dans une base Sqlite, fournie avec QGis. Ou vous pouvez, si vous avez installé Postgresql sur votre machine, utiliser une base de données Postgresql/Postgis.

Pour l’importation, vous suivrez la même démarche quelle qu’elle soit la base de données choisie.

Nota: Pour créer une base de données Sqlite, vous allez dans le panneau Explorateur de QGis, cliquez droit sur Spatialite, puis sur Create Database

Pour importer votre fichier shape avec les polygones de Voronoï, vous allez utiliser le Gestionnaire de base de données:

  • Allez dans le menu Bases de données-> DB Manager pour ouvrir la fenêtre du gestionnaire de bases de données.

  • Connectez vous à la base de données choisie

  • Cliquez sur l’outil Importer une couche/un fichier

Pointez sur votre fichier shape et donnez un nom à la table que vous souhaitez créer. Cliquez sur OK.

Vous aurez un message vous indiquant que l’import c’est bien terminé.

Ajouter un champ pour contenir la statistique locale souhaitée

Tout en restant dans le gestionnaire de bases de données, sélectionnez sur la fenêtre « Providers » la table que vous venez de créer, puis dans le menu du gestionnaire allez sur Table->Edit Table

Cliquez sur le bouton Ajouter une colonne et renseignez les caractéristiques du champ que vous souhaitez calculer.

Dans notre exemple nous allons calculer la moyenne du chaque polygone et de ses voisins immédiats.

Exécuter une requête SQL qui remplit ce champ

Avant de voir la syntaxe de la requête, voyons ce que nous voulons calculer;

Pour chaque polygone on souhaite trouver les polygones qui ont un côté commun avec lui, puis calculer la moyenne d’un attribut pour cet ensemble (la valeur du polygone central plus les valeurs des polygones adjacents).

Pour une base Postgesql/postgis, la requête est la suivante

update voronoi vor
set moyenne= (SELECT sum(a.parapen)::real/count(a.parapen)::real
FROM voronoi as a
JOIN voronoi as b
ON st_intersects((st_buffer(a.geom,0.00001)),b.geom)
where b.id =vor.id)

voronoi est le nom de la table, parapen est le nom de l’attribut dont nous souhaitons la moyenne locale et geom est le nom du champ géométrie de la table.

Remarquez les opérateurs ::real , indispensables pour que le résultat (la moyenne) soit un nombre réel. Ici comme l’attribut parapen est un champ entier, par défaut le résultat est un entier sans partie décimale.

Si vous utilisez une base Sqlite, la syntaxe devra être adaptée, car ce n’est pas le même SQL que postgres ( ::real doit être remplacé par la commande cast):

update voronoi
set moyenne=(
SELECT sum(cast(a.parapen as real))/count(a.parapen)
FROM voronoi as a
JOIN voronoi as b
ON st_intersects((st_buffer(a.geom,0.00001)),b.geom)
where b.id =voronoi.id);

En ouvrant la table vous pourrez constater que le champ Moyenne est maintenant rempli.

Afficher la couche avec une thématique définie sur ce champ

Si vous avez choisi l’option Charger en tant que nouvelle couche, vous devriez voir la nouvelle couche calculée sur votre fenêtre cartographique

Il ne vous reste qu’à ouvrir la fenêtre de propriétés de la couche et définir la symbologie que vous souhaitez pour représenter le champ Moyenne

Bien sûr, pour chaque type de statistique locale souhaitée, la requête sql devra être modifiée en conséquence.

Si cet article vous a intéressé et que vous pensez qu'il pourrait bénéficier à d'autres personnes, n'hésitez pas à le partager sur vos réseaux sociaux en utilisant les boutons ci-dessous. Votre partage est apprécié !

5 thoughts on “Calculer des moyennes locales sur des polygones de Voronoï avec Qgis

  1. Bonjour,

    Pour tout ce qui est géo-traitement, je préfère travailler directement avec PostGIS. Cela veut dire qu’il faut quelques connaissances en SQL mais dans le présent tutos il faut avoir cette compétence pour l’ajout du champ statistique. PostGIS propose la fonction de calcul des polygones ST_VoronoiPolygons (cf. https://postgis.net/docs/ST_VoronoiPolygons.html.

    Autre avantage, il est possible de créer une vue (create view) « branchée » sur les données sources et affichable sous QGis. Ainsi, toutes modifications des données sources seront immédiatement répercutées sur l’affichage via la vue.

  2. Salut je travail sur un bassin versant, je doit identifié routes les bas-fonds qui se trouvent sur le bassin versant par l’image SRTM mais je n’arrive pas a le faire j’ai besoin votre aidé

Répondre à Lamine Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *