Parmi de nombreuses améliorations, la version 3.32 introduit la fonctionnalité tant attendue de traitement natif des nuages de points dans QGIS, permettant à QGIS Desktop de devenir un puissant utilitaire de traitement des données LiDAR.

Avant de publier un tutoriel sur les nouvelles fonctionnalités, j’ai rassemblé l’information un peu dispersée sur l’architecture et les choix qui ont été fait par les développeurs. C’est toujours plus intéressant de patienter devant une barre d’avancement quand on sait ce qui est en train de se faire…

Les points vecteur classiques et les nuages de points

En raison des progrès récents de la technologie LiDAR et de la photogrammétrie, il est de plus en plus nécessaire d’obtenir et de stocker des données de nuages de points. Bien que les données des nuages de points soient vectorielles, leur taille est généralement beaucoup plus importante que celle des couches vectorielles standard. Alors que les ensembles de données vectorielles typiques sont constitués de milliers ou de millions d’entités, les nuages de points peuvent contenir des millions, des milliards, voire des trillions de points. Par conséquent, une approche distincte est nécessaire dans une plateforme SIG pour visualiser, analyser et stocker efficacement les données de nuages de points, compte tenu du volume considérable de points impliqués.

Dans le monde des SIG open source, il existe des outils fantastiques pour travailler avec des nuages de points. PDAL (« Point Data Abstraction Library ») est devenu un outil important qui prend en charge de nombreux formats de données d’entrée et propose également de nombreux algorithmes pour le traitement des nuages de points. Pour la visualisation sur le web, la bibliothèque JavaScript Potree est le choix le plus courant. Pour visualiser les nuages de points dans une application de bureau, les utilisateurs ouvrent généralement CloudCompare, qui est livré avec une variété d’outils intégrés.

L’intégration d’une visionneuse de nuages de points dans un SIG apporte une valeur ajoutée considérable aux utilisateurs, par rapport à une visionneuse de nuages de points spécialisée et dédiée :

  • Les données des nuages de points peuvent être visualisées, comparées et analysées avec d’autres types de données spatiales (y compris les couches vectorielles, matricielles et de grille).
  • Interface utilisateur et flux de travail familiers
  • Intégration avec des outils analytiques pour créer rapidement des ensembles de données dérivées.

La principale difficulté liée à l’utilisation des données de nuages de points provient du nombre considérable de points contenus dans les ensembles de données : nous devons traiter des millions, voire des milliards de points pour des zones géographiques relativement petites, alors que des études à l’échelle d’un pays peuvent impliquer des trillions de points. Avec une telle quantité de données, il n’est pas possible de convertir simplement le jeu de données en couches vectorielles « ordinaires » – les outils SIG typiques et les formats de données tels que GeoPackage ou Shapefile ne sont pas optimisés pour de telles quantités de données, et toute opération prendrait beaucoup de temps.

Les nouvelles couches « Nuages de points »

Depuis la version 3.26, un nouveau type de couche cartographique a été introduite dans QGIS : la couche de nuage de points, qui est utilisée pour toutes les données de nuage de points. Comme mentionné ci-dessus,il n’était pas possible de réutiliser le type de couche vectorielle existant (avec des géométries de points) car il n’est pas conçu pour prendre en charge de si grandes quantités de points.

Pour l’accès aux données basées sur des fichiers, il a été décidé d’utiliser PDAL (« point data abstraction library »). Cette bibliothèque suit l’approche adoptée par la bibliothèque GDAL : elle fournit une interface commune pour lire, écrire ou traiter des données de nuages de points et divers pilotes (« lecteurs » et « écrivains » dans la terminologie PDAL) prennent en charge les spécificités des différents formats. En outre, PDAL propose un concept de pipelines permettant de combiner divers algorithmes de traitement.

La deuxième chose à prendre en compte était la manière d’afficher efficacement les données. Passer en revue tous les points d’un ensemble de données et les dessiner ne fonctionnerait tout simplement pas bien et prendrait trop de temps. Ce serait également un gaspillage – en cas de zoom arrière, seule une petite quantité de points doit être affichée. Un deuxième cas à considérer était que lorsqu’un utilisateur zoome beaucoup, on devrait être en mesure de rendre uniquement les points situés dans la zone d’intérêt plutôt que de lire les points situés en dehors de la vue courante. Il fallait donc un moyen d’interroger rapidement les points dans ces différentes situations. Ce besoin est généralement résolu par l’utilisation de structures de données de partitionnement de l’espace (telles que les octrees) qui divisent hiérarchiquement l’espace en volumes plus petits. Une caractéristique importante est que non seulement les feuilles, mais aussi les nœuds internes contiennent des données : grâce à cela, il est possible non seulement d’ interroger rapidement des points dans une petite zone d’intérêt, mais aussi d’obtenir de plus petites portions de points à différents niveaux de zoom.

L’indexation des nuages de points

Les données des nuages de points dans les formats couramment utilisés tels que LAS sont des ensembles assez simples de points qui ne sont associés à aucune structure de données d’indexation, et l’ordre des points peut être arbitraire. Par conséquent, il faut construire une telle structure de données d’indexation lors de l’ouverture de ces fichiers afin de pouvoir les restituer – c’est ce que font également d’autres visualiseurs (tels que CloudCompare). Dans le cadre de l’indexation, il faut réorganiser les points afin de pouvoir y accéder rapidement lors du rendu. Une fois l’indexation terminée, nous avons une structure de données arborescente où chaque nœud contient un sous-ensemble du nuage de points – ce nuage de points indexé peut être stocké sur le disque ou conservé en mémoire.

Vue cartographique 2D/3D

Plus important encore, les utilisateurs peuvent visualiser les données du nuage de points sur une carte en 2D ou en 3D. L’avantage supplémentaire d’une intégration complète avec QGIS est que d’autres données (vectorielles ou matricielles) peuvent être superposées aux données du nuage de points.

Pour permettre un rendu rapide en 2D et 3D même dans le cas de grands ensembles de données, QGIS est en mesure de rendre des sous-ensembles de données grâce à l’index hiérarchique (généré lorsque les données sont chargées pour la première fois dans QGIS). Lorsque l’utilisateur effectue un zoom arrière, QGIS ne dessine qu’une petite quantité de points, et dès que l’utilisateur effectue un zoom avant, QGIS dessine des quantités de plus en plus importantes de points (tout en réduisant l’étendue de la carte).

Rendu 2D

L’ensemble du processus de rendu est piloté par la classe QgsPointCloudLayerRenderer (où le gros du travail est effectué dans un thread de travail, comme c’est le cas avec d’autres moteurs de rendu de couches). Pour l’instant, on détermine l’erreur géométrique acceptable (c’est-à-dire l’espacement acceptable entre les points) en fonction de l’échelle de la carte – par exemple, à l’échelle 1:1.000.000, un espacement de 1 km entre les points peut convenir, mais à l’échelle 1:1.000, un espacement beaucoup plus faible, par exemple de 1 mètre, est nécessaire. Ce paramètre est exposé aux utilisateurs pour qu’ils puissent le contrôler en tant que paramètre de « filtrage dynamique », au cas où l’utilisateur souhaiterait remplacer le paramètre par défaut (par exemple, pour un rendu de meilleure qualité ou un temps de rendu plus rapide).

nuages de points:propriétés de la couche: erreur maximum
Fenêtre « Propriétés de la couche » d’un nuage de points,onglet symbologie

Ensuite, on parcoure la hiérarchie d’index et on récupère les nœuds recoupant l’étendue de la vue cartographique et présentant une erreur géométrique acceptable. Enfin, on récupère les données du nuage de points de ces nœuds – soit dans le cache de la couche (s’ils sont déjà en mémoire), soit dans les nœuds d’index, et on dessine les points un par un.

Dans le travail réalisé jusqu’à présent, il a été prévue une seule implémentation du moteur de rendu. Elle dessine des points de taille fixe, la couleur des points est déterminée par l’un des attributs choisis par l’utilisateur (par exemple, l’élévation, la classification, le numéro de retour) et la rampe de couleur choisie. En outre, certaines options de filtrage de base sont prises en charge (par exemple, uniquement le dernier retour, uniquement une ou plusieurs valeurs particulières de la classification, uniquement une plage particulière d’élévations).

À l’avenir, d’autres rendus pourront être ajoutés, comme l’affichage d’une surface interpolée (calculée à la volée à partir de données ponctuelles), d’un ombrage ou de contours.

Rendu 3D

À la base, le rendu des nuages de points en 3D suit les mêmes principes que le rendu en 2D : à l’aide de l’index hiérarchique, on détermine quels nœuds doivent être affichés, sur la base desquels les données ponctuelles sont chargées et affichées dans la scène 3D. Une partie de l’infrastructure nécessaire était déjà en place : Les vues 3D de QGIS prennent en charge le rendu « par morceaux » du terrain depuis le début (au fur et à mesure que l’utilisateur se rapproche du terrain, des élévations plus détaillées et des textures de carte sont rendues). Comme le mécanisme est assez générique et a été étendu aux données des couches vectorielles dans le passé, il l’a été également pour les nuages de points. Par le passé, il était limité par le fait qu’il s’attendait toujours à une hiérarchie quadripartite, mais cela a été mis à jour pour permettre des hiérarchies arborescentes de type octree.

Les options de style pour les vues 3D sont similaires aux options de rendu 2D : configuration de la taille des points, coloration basée sur un attribut unique et quelques options simples de filtrage des données.

Il a été possible aussi d’ajouter également l’effet d’éclairage eye-dome qui améliore la perception de la profondeur.

Identification des points

L’outil d’identification des cartes en 2D et en 3D a été mis à jour afin de renvoyer des informations complètes sur les points identifiés. En plus de leurs coordonnées XYZ, il renvoi également la valeur des autres attributs de chaque point (tels que la classification et d’autres attributs).

Les nouveautés de la version 3.32

Le fournisseur de traitement natif pour les nuages de points¶

Un nouveau fournisseur de traitement natif a été intégré pour les algorithmes de nuages de points : le fournisseur utilise l’outil de ligne de commande pdal_wrench et prend actuellement en charge les algorithmes suivants :

Nouveaux traitements de la toolbox pour la gestion des nuages de points

  • Information : fournit des métadonnées de base sur le nuage de points (nombre de points, étendue, crs, etc.).
  • Convertir le format : convertir le nuage de points dans un format différent, par exemple de las à laz.
  • Reprojeter : reprojeter le nuage de points vers un CRS différent
  • Fixer la projection : fixer (assigner) le CRS d’un fichier de nuage de points
  • Clip : clipper un nuage de points en découpant un ou plusieurs polygones
  • Merge : fusionner plusieurs nuages de points dans un seul fichier
  • Tile : créer des tuiles à partir des données d’entrée
  • Thin : créer une version amincie du nuage de points
  • Boundary : exporte une couche vectorielle contenant les limites du nuage de points
  • Densité : exporte un fichier matriciel dans lequel chaque cellule contient le nombre de points qui se trouvent dans la zone de cette cellule.
  • Export to raster : exporte les données du nuage de points vers une grille matricielle 2D
  • Exportation vers vecteur : exporter les données d’un nuage de points vers une couche vectorielle avec des points 3D
  • Export to raster (TIN) : exporter les données d’un nuage de points vers une grille matricielle 2D en utilisant une triangulation de points.
  • Filtrer : extraire un sous-ensemble du nuage de points à l’aide d’expressions PDAL

Comme pdal_wrench nécessite PDAL >= 2.5.0, le nouveau fournisseur de traitement ne sera disponible que si la version de PDAL requise est satisfaite.

Il y a plusieurs raisons d’utiliser pdal_wrench plutôt que d’utiliser l’API PDAL et de construire des pipelines :

  • facilité d’utilisation : pdal_wrench fournit un ensemble d’algorithmes prêts à l’emploi et cache la complexité de la création du pipeline à l’utilisateur, ce qui facilite grandement l’utilisation des données LiDAR par les personnes non initiées à la technologie.
  • l’exécution en parallèle : PDAL exécute les pipelines dans un seul thread, tandis que pdal_wrench prend en charge le traitement multithread soit sur une base spatiale ou par fichier.
  • support des nuages de points virtuels : ceci est similaire au raster virtuel (VRT) de GDAL – un fichier unique référence plusieurs autres fichiers et les représente comme une seule donnée.

Constructeur d’expression de nuages de points pour Processing framework¶

Un nouveau widget de construction d’expression de nuage de points est disponible dans l’interface graphique pour créer des filtres pour les nuages de points d’une manière conviviale et cohérente avec les interfaces existantes de construction d’expression de QGIS.

assistant d'expressions pour la prise en compte des nuages de points

Ajout du filtrage par rectangle et par expression aux algorithmes PDAL¶

Ajout de l’option permettant de filtrer le nuage de points d’entrée par rectangle (étendue) et par expression dans les algorithmes PDAL suivants :

  • limite
  • clip
  • densité
  • export vers raster (variantes normales et TIN)
  • exportation vers un vecteur
  • fusionner
  • thin

Cela permet de ne traiter qu’un sous-ensemble de points du ou des fichiers d’entrée, sans avoir à effectuer une étape de filtrage intermédiaire ou à générer des fichiers temporaires.

Pour ceux qui n’ont besoin que d’un filtrage, il existe également un algorithme de filtrage séparé capable de filtrer soit par étendue, soit par expression, soit par leur combinaison.

filtrage au niveau des traitements pour les nuages de points

Nuages de points virtuels (VPC)¶

Un nouveau fournisseur de données est disponible pour les fichiers de nuages de points virtuels (VPC) créés par l’utilitaire pdal_wrench et l’outil Build virtual point cloud (VPC) dans le nouveau fournisseur Native point cloud Processing.

Le fichier VPC est traité comme une couche unique dans QGIS et peut contenir un grand nombre de fichiers de nuages de points dont les index sont chargés lorsque le canevas est suffisamment agrandi. Les fichiers individuels contenus dans le fichier virtuel sont affichés sous forme d’emprises tant que leur étendue est inférieure à la largeur de la fenêtre cartographique. Dès que le zoom est suffisant et que l’emprise d’un fichier individuel dépasse la largeur de la fenêtre cartographique, ce sont les points du fichier qui sont affichés.

Un nuage de points virtuel est un fichier conteneur JSON avec une extension .vpc, faisant référence à d’autres fichiers/URL qui contiennent les données réelles du nuage de points. Il s’agit d’un concept similaire à celui des rasters virtuels (VRT) dans GDAL.

fonctionnement du rendu d'un VPC dans la fenêtre cartographique

Bug
A la date de rédaction de cet article (juillet 2023) un bug a été trouvé dans la gestion de QGis des rendus issus de pdal_wrench. Pour l’instant, tout fonctionne si les fichiers utilisés pour le VPC sont des fichiers copc. Dans le cas contraire, QGis n’affiche pas les points quand le zoom est suffisant.

Afficher des nuages de points virtuels (VPC) dans des vues 3D¶

Les nuages de points virtuels peuvent être rendus dans des vues 3D. Pour la gestion des performances, un seuil de sous-indice est spécifié de sorte que la vue ne rende les points du nuage de points que lorsque cela est approprié et rende plutôt l’emprise d’un sous-indice particulier lorsque le critère de seuil n’est pas respecté.

fonctionnement du rendu d'un VPC dans  une vue 3D

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é !

Laisser un commentaire

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