Tâches & contributions
Durant mon stage au sein d’AxesSim, j’ai eu à réaliser les tâches suivantes :
-
La génération de maillages au format Amelet HDF
-
La gestion d’une base de données spatiales
-
Le traitement de ponts dans un modèle numérique de surface
Chacune de ces tâches sera détaillée tout en mettant en lumière la méthodologie employée ainsi que la description des outils spécifiques utilisés.
1. Génération de maillages au format Amelet HDF
Cette tâche s’incrit dans l’objectif de rendre l’outillage de developpement fourni lors du POC sur l’extraction de modèles numériques de terrain, compatible avec les outils utilisés au sein d’AxesSim.
1.1. Format Amelet HDF
Amelet HDF est un format de fichier spécifié par AxesSim dans le but de fournir une norme pour l’enregistrement et la récupération des données informatiques des simulations électromagnétiques.
La spécification Amelet HDF est conçue pour exprimer différents types de données électromagnétiques, notamment :
-
Les maillages.
-
Les données de tableau numérique.
-
Les modèles de matériaux.
-
Les réseaux et lignes de transmission.
-
Les sources électromagnétiques.
Amelet HDF est basé sur le format de fichier HDF5 développé par le groupe hdfgroup, et largement inspiré du projet Amelet. Pour en savoir plus sur la structure d’un fichier Amelet HDF, vous pouvez consulter l’annexe A ou la documentation officielle.
1.2. Maillage
Un maillage a pour objectif de simplifier la représentation d’un système par un modèle le représentant, pour des simulations numériques. Techniquement, il s’agit d’une discrétisation d’un système continu en un ensemble d’éléments géométriques élémentaires (triangles, quadrilatères, tétraèdres, hexaèdres, etc.) permettant en tout de représenter le système afin d’en effectuer des simulations numériques.
Un maillage se compose de trois éléments principaux :
- Les noeuds
-
Des points dans l’espace servant de fondation au maillage.
- Les éléments
-
Des formes géométriques reliant des noeuds voisins.
- Les groupes
-
Des ensembles d’éléments représentant des zones ou des volumes cruciaux pour la simulation.
Selon la disposition des noeuds, un maillage peut être :
- structuré
-
Les noeuds sont organisés en une grille régulière.
- non structuré
-
Les noeuds sont organisés de manière irrégulière.
- hybride
-
Le est maillage composé de plusieurs maillages structurés ou non structurés.
Selon la dimension de l’espace dans lequel on souhaite le représenter, un maillage peut être :
- linéique
-
Le maillage représente une ligne.
- surfacique
-
Le maillage représente une surface.
- volumique
-
Le maillage représente un volume.
La surface de la Terre étant continue et variable, elle ne peut être représentée numériquement que par un maillage surfacique. Cependant, pour étudier l’aspect volumique de la Terre, à savoir le sous-sol, il est indispensable d’utiliser un maillage volumique pour une représentation numérique adéquate.
Dans un maillage, il est parfois nécessaire de classifier, colorier ou regrouper des éléments (les mailles). Une maille est un élément géométrique reliant des noeuds voisins. Dans le cas d’un maillage surfacique, une maille peut-être un triangle, un quadrilatère, etc. Dans le cas d’un maillage volumique, une maille peut-être un tétraèdre, un hexaèdre, etc.
Dans l’objectif d’intégrer plus tard potentiellement toutes les caractéristiques électromagnétiques d’une zone terrestre, il est nécessaire lors de la génération d’un maillage de cette zone, de classifier les mailles ou éléments de ce maillage. Par exemple, dans un environnement réel, nous disposons de caractéristiques tels que les bâtiments, de végétations, de cours d’eau, de routes, etc. Numériquement, nous appelons ces caractéristiques des classes ou des couleurs. Ainsi en représentant la zone terrestre par un maillage, il est possible de classifier les mailles de ce maillage en fonction de leur classe ou couleur, c’est à dire selon qu’elles appartiennent à un bâtiment, une végétation, etc. Voici un exemple de maillage surfacique classifié de la zone du Donon :
La librairie psol à l’issue du POC générait des maillages surfaciques non-structurés classifiées de zones extraites à partir des données de l’IGN. Ces maillages étaient ensuite exportés au format PLY afin d’être visualisés avec un logiciel de visualisation 3D ou de génération de scènes 3D. Voici le schéma de fonctionnement :
L’utilisateur définit une zone partir de coordonnées géographiques. Ensuite, la librairie psol à partir des données de l’IGN, génère un nuage de points classifiés de la zone extraite. Ensuite, elle effectue une triangulation de Delaunay de ce nuage de points afin d’obtenir un maillage surfacique non structuré classifié. Enfin, elle exporte ce maillage au format PLY.
1.3. Du format PLY au format Amelet HDF
Chez AxesSim, le logiciel MaxSim, utilisé pour générer des scènes et effectuer la modelisation électromagnétique ne prend pas en charge le format de fichier PLY. En effet, le principal format de fichier géré par MaxSim est Amelet HDF. Les formats de fichiers suivant peuvent être importés dans MaxSim :
-
Stereo litographic (.stl).
-
I-DEAS (.unv).
-
Object file format (.off).
-
GMSH (.msh).
-
VRML (.wrl).
-
VTK (.vtk).
-
3DXML (.3dxml).
-
Comma-separated values (.csv).
-
Finite differences data (.fdd).
Toutefois MaxSim effectue une conversion automatique en Amelet HDF.
Ainsi pour pouvoir utiliser les maillages générés par la librairie psol dans MaxSim, il a fallu les convertir du format PLY au format Amelet HDF. La conversion a été effectuée en se basant sur la spécification Amelet HDF et en utilisant les outils de manipulation de fichiers Amelet HDF suivants :
- hdfview
-
Avec ce logiciel, il est possible de visualiser, créer, modifier et supprimer des données dans un fichier Amelet HDF.
- ah5
-
Il s’agit d’une librairie python développée par AxesSim et permettant de manipuler des fichiers Amelet HDF. Cette librairie est basée sur la librairie python pytables.
- pytables
-
Il s’agit d’une librairie python open source permettant de manipuler des fichiers HDF5.
Etant donné un nuage de points classifiés d’une zone extraite, et une triangulation de ce nuage de points, l’écriture d’un maillage surfacique classifié en Amelet-HDF s’effectue en utilisant l’algorithme suivant :
Pour chaque classe ou couleur disponible : - Identifier les triangles dans le maillage, dont les trois sommets sont associés à la classe ou couleur. - Les regrouper au sein d'un groupe nommé selon la classe ou couleur.
1.4. Maillage structuré
Les maillages structurés sont des maillages adaptés aux méthodes numériques qui requièrent une structure régulière comme la FDTD (Finite Difference Time Domain).
La FDTD est une méthode de calcul de différences finies dans le domaine temporel permettant de résoudre des équations différentielles dépendantes du temps, et est couramment utilisée en électromagnétisme pour la résolution des équations de Maxwell.
Les maillages structurés sont prisés par la FDTD pour les raisons suivantes :
- simplicité
-
L’utilisation d’une grille structurée rend les calculs plus simples, car les dérivées spatiales peuvent être approximées par des différences finies standards.
- stabilité
-
La méthode FDTD a des critères de stabilité tels que la condition de Courant-Friedrichs-Lewy (CFL), qui définissent la taille du pas de temps en fonction de la discrétisation spatiale. Un maillage structuré assure une discrétisation spatiale uniforme, facilitant ainsi le respect de ces critères.
- efficacité
-
Les algorithmes basées sur des grilles structurées sont généralement plus rapides et necessitent moins de mémoire que ceux basés sur des grilles non structurées. De plus, la structure régulière du maillage s’accorde bien avec les architectures de calcul parallèle.
Un des objectifs du projet PSOL étant d’utiliser la méthode FDTD pour effectuer des calculs de propagation d’ondes électromagnétiques, il est nécessaire de générer des maillages structurés surfaciques et volumiques. Il a donc fallu générer des maillages structurés surfaciques et volumiques à partir des maillages non structurés surfaciques générés par la librairie psol.
Le logiciel MaxSim permet de générer des maillages structurés surfaciques et structurés volumiques à partir de maillages non structurées surfaciques. Voici l’exemple d’un maillage structuré surfacique généré par MaxSim à partir d’un maillage non structuré surfacique :
Les maillages structurés surfaciques générés par MaxSim sont bien classifiés selon les classes ou couleurs des maillages non structurés surfaciques à partir desquels ils ont été générés. Cependant, les maillages structurés volumiques générés par MaxSim rencontraient un problème de classification. Voici l’exemple d’un maillage structuré volumique de l’exemple précédent :
Avoir des maillages structurés volumiques mal classifiés est un problème car il est nécessaire de classifier les mailles volumiques pour pouvoir bien modéliser les caractéristiques électromagnétiques d’une zone. Par exemple, si une maille volumique appartient à un bâtiment, il est nécessaire de la classifier comme telle pour pouvoir modéliser les caractéristiques électromagnétiques de ce bâtiment.
Pour résoudre ce problème il a fallu manipuler les maillages structurés surfaciques générés par MaxSim. En effet, à l’aide de MaxSim, il est possible d’exporter un maillage structuré surfacique au format Amelet HDF. En se basant sur la spécification Amelet HDF et les outils de manipulation de fichiers Amelet HDF, j’ai manuellement créé un maillage structuré volumique avec des mailles volumiques bien classifiées en utilisant l’algorithme suivant :
Pour chaque groupe de mailles surfaciques : Pour chaque maille surfacique parallèle au plan (XY) : Si la maille appartient au sol : - Créer une maille volumique en étirant la maille surfacique jusqu'à atteindre l'altitude minimale de la grille cartésienne. Sinon : - Créer une maille volumique en étirant la maille surfacique jusqu'à atteindre l'altitude mininiale de la maille surfacique du sol.
Voici un exemple de maillage structuré volumique généré manuellement :
2. Gestion d’une base de données spatiales
Les bases de données spatiales ont pour vocation de stocker, interroger et manipuler des données géographiques, associant ainsi des informatons traditionnelles à des coordonnées spatiales. Ces bases offrent un support essentiel pour la planification urbaine, la gestion environnementale, la logistique et bien d’autres secteurs.
Contrairement aux bases de données classiques qui traitent principalement des textes, des nombres ou des dates, les bases de données spatiales manipulent des entités géométriques (points, lignes, polygones) et même des volumes en trois dimensions. Ces entités peuvent représenter tout, depuis un simple lampadaire jusqu’à une grande forêt ou une rivière.
Ce qui rend les bases de données spatiales vraiment puissantes, c’est leur capacité à répondre à des requêtes spatiales. Par exemple, on pourrait demander “Quels sont les hôpitaux situés à moins de 10 km d’une école ?” ou “Quelle est la superficie totale des zones protégées dans une région donnée ?”. Ces requêtes nécessitent des calculs géométriques complexes et des algorithmes spécifiques, qui sont implémentés dans les bases de données spatiales.
De nombreux outils et logiciels ont été développés pour exploiter ces bases. PostGIS, une extension de PostgreSQL, est l’un des plus populaires et offre une panoplie de fonctions pour la manipulation de données spatiales. Mais il existe aussi d’autres systèmes comme Oracle Spatial ou Microsoft SQL Server Spatial, chacun ayant ses propres avantages et particularités.
Durant mon stage, j’ai été immergé dans l’univers fascinant des bases de données spatiales en utilisant principalement PostGIS.
2.1. PostGIS
PostGIS est une extension qui ajoute des capacités géospatiales à PostgreSQL, permettant de traiter des informations spatiales. Les principales caractéristiques de PostGIS comprennent :
- Des fonctions géospatiales étendues
-
Avec plus de 300 fonctions, PostGIS permet de réaliser une multitude d’opérations, de la simple extraction de données à des analyses spatiales complexes, telles que le calcul de distances, d’intersections, ou la détermination de zones tampons.
- La conformité aux standards
-
PostGIS est entièrement conforme aux spécifications de l’Open Geospatial Consortium (OGC), assurant la compatibilité avec une vaste gamme d’outils et de logiciels GIS.
- La performance et scalabilité
-
En héritant des capacités de performance de PostgreSQL et en combinant avec des optimisations spatiales, PostGIS peut gérer d’immenses jeux de données tout en maintenant des vitesses de requêtes impressionnates.
2.2. Du stockage de fichiers à PostGIS
Les données utilisées lors du POC provennaient des jeux de données de l’Institut national de l’Information géographique et forestière (IGN) suivants :
- RGE ALTI®
-
Elle contient des données de modèles numériques de terrain (MNT) qui représentent la surface réelle du sol, sans les bâtiments ni les végétations. Il est disponible sous forme d’images rasters, par département. Les données sont livrées sous forme de dalles de 1 km², avec une résolution de 1 mètre. Ainsi chaque département est couvert par plusieurs dalles.
- MNS Corrélés (Modèle Numérique de Surface)
-
Elle contient des données de modèles numériques de surface (MNS) qui représentent la surface réelle du sol, avec les bâtiments et les végétations. Il est disponible sous forme d’images rasters, par département. Les données sont livrées sous forme de dalles de 1 km², avec une résolution de 0.5 mètre. Ainsi chaque département est couvert par plusieurs dalles.
- BD TOPO® (Base de Données TOPOgraphiques)
-
La BD TOPO® est une base de données vectorielles qui contient des informations topographiques sur l’ensemble du territoire français. Elle est utilisée pour classer les objets géographiques en différentes catégories, telles que les routes, les bâtiments, les cours d’eau, etc. Les données sont livrées sous forme de fichiers shapefile, par département, ou sous forme de fichiers SQL pour l’ensemble du territoire français. Etant donné un département, il existe un fichier shapefile pour chaque catégorie d’objets géographiques.
Lors du POC, nous avons utilisé les données du département du Bas-Rhin. Pour BDTOPO nous avons donc utilisé les fichiers shapefile. Tous ces fichiers étaient téléchargés et stockés sur une des machines de l’université. Cependant, à l’issue du POC, une des idées d’amélioration de l’outillage était de découper les shapefiles en dalles de 1 km², pour gagner en temps d’extraction d’une zone donnée. Puisque, pour extraire une zone il fallait :
-
identifier les dalles de MNT et de MNS qui couvrent la zone
-
en extraire les données (coordonnées x, y et z des points)
-
classifier ces points selon chaque catégorie d’objets géographiques
Ces opérations étaient coûteuses en temps car il s’agissait majoritairement de lecture de fichiers. Par exemple, la lecture du shapefile de la BD TOPO® contenant tous les départements du Bas-Rhin prenait environ 7 minutes, peut importe les dimensions de la zone à extraire (même pour une zone de petite surface). C’est pourquoi il a été pensé de découper les shapefiles en dalles de 1 km², pour réduire le temps de lecture.
Au cours du stage, j’ai donc effectué cette découpe, en utilisant les librairies
Python geopandas
et rasterio
. Mais cette découpe avait un inconvénient majeur :
la taille des données avait considérablement augmenté. L’ensemble des shapefiles
du département du Bas-Rhin occupait environ 3 GB, alors que les shapefiles
découpés en dalles de 1 km² occupaient environ 81 GB.
C’est ce qui a motivé l’utilisation de PostGIS. Basé sur PostgreSQL, on peut ainsi profiter des optimisations de système de gestion de bases de données relationnelles, tout en bénéficiant des capacités géospatiales de PostGIS.
Avec PostGIS, la lecture de tous les batiments du département du Bas-Rhin est quasi instantanée.
Un autre avantage de PostGIS est l’extraction de zones ayant n’importe quelle forme polygonale, ce qui est très difficile à faire à partir de fichiers. En utilisant du WKT (Well-Known Text), et des fonctions d’union et de découpage d’un raster, on peut définir une zone sous forme de polygone et extraire les données qui s’y trouvent.
Le WKT est une représentation textuelle d’un objet géométrique. Il est
utilisé pour décrire des objets géométriques dans un format lisible par
l’homme. Par exemple, un point est représenté par POINT(0 0)
, un polygone
par POLYGON
, etc.
2.3. Travail avec PostGIS
Pour des besoins de performance, nous avons décidé de stocker les données d’élévation dans une base de données PostGIS. Pour des raisons de sécurité, la création et la configuration de la base de données ont été faites par Philippe Spinoza, l’Ingénieur systèmes, réseaux et sécurité de l’entreprise. J’ai ensuité été chargé de télécharger des données d’élévation, de les préparer pour l’insertion dans la base, d’insérer les données dans la base, d’optimiser la base pour améliorer les performances et enfin d’utiliser la base dans la librairie.
2.3.1. Téléchargement des données d’élévation
La base de données doit contenir des Modèles Numériques de Terrain (MNT), des Modèles Numériques de Surface (MNS) et des données de classification. Ces informations sont obtenues sur le site de l’Institut National de l’Information Géographique et Forestière (IGN).
- Les données de MNT et de MNS
-
Pour des raisons de stockage, nous avons décidé de nous limiter au téléchargement des données de la région de l’Alsace, soit les départements du Bas-Rhin, du Haut-Rhin et de la Moselle.
- Les données de classification
-
Elles sont obtenues à partir des jeux de données BD TOPO® de l’IGN. Nous avons choisi le format SQL, qui est le plus adapté pour l’insertion dans la base de données.
2.3.2. Préparation des données pour l’insertion dans la base
Les données sont proposées soit en format .7z, soit sous forme d’archives segmentées (.7z.001, .7z.002, etc.). Il a donc été nécessaire, une fois téléchargées de fusionner les archives segmentées, puis de les décompresser. Il a aussi fallu corriger le géoréférencement implémenté dans l’entête des fichiers shapefiles de MNS Corrélés, car il ne correspondait pas à leur description dans la documentation fournie par l’IGN.
En effet, les coordonnées géographiques du coin supérieur gauche étaient
légèrement décalées. Pour corriger ce problème, j’ai utilisé la librairie
Python rasterio
pour lire les fichiers et les réécrire avec les bonnes
coordonnées géographiques.
2.3.3. Insertion des données dans la base
A l’aide d’outils spécifiques tels que psql
, shp2pgsql
et raster2pgsql
, j’ai inséré les données
dans la base de données. Avec les données de MNT et de MNS des départements
du Bas-Rhin, du Haut-Rhin et de la Moselle ainsi que les données BDTOPO de
la france entière, la base de données occupait environ 321 GB.
2.3.4. Optimisation de la base
Pour garantir des performances optimales, j’ai régulièrement créé et ajusté des index spatiaux pour les données de MNT et MNS insérés dans la base. Ces index, spécifiques aux données spatiales, permettent d’accélérer considérablement les requêtes.
Un index spatial est une structure de données qui permet d’accélérer les requêtes spatiales sur un ensemble de données géospatiales. Contrairement aux index traditionnels qui sont conçus pour accélérer les requêtes sur des types de données simples comme les entiers et les chaînes, les index spatiaux sont conçus pour accélérer les requêtes sur des données multidimensionnelles telles que les coordonnées géographiques, les polygones, les lignes, etc. La structure d’indexation spatiale la plus connue est le R-Tree, qui est utilisé par PostGIS. Il en existe d’autres : Quad-Tree, KD-Tree, etc.
Un R-Tree décompose l’espace en une hiérarchie de boîtes englobantes (bounding boxes). Il est particulièrement adapté pour indexer des données avec des formes irrégulières comme des polygones ou des lignes.
J’ai également créé des vues matérialisés consistant à stocker le résultat d’une requête dans une table. Cela permet d’accélérer les requêtes en évitant de recalculer le résultat à chaque fois. En effet, les données BDTOPO chargés dans la base ont une couverture nationale. Pour ainsi se limiter à la région Alsace, j’ai créé une vue matérialisée qui contient uniquement les données de la région Alsace qui nous intéressent.
3. Traitement de ponts dans un modèle numérique de surface
Les ponts sont importants dans la simulation de propagation d’ondes, car ils peuvent constituer d’obstacles à la propagation d’ondes. La technique utilisée pour générer des maillages structurés volumique entraine un bouchon sous les ponts, ce qui n’est pas du tout réaliste et peut être problématique pour la simulation. Voici un exemple montrant un pont bouché dans un mailage structuré volumique.
Pour corriger ce problème, la technique qui a été pensée est de créer manuellement un trou sous le pont, c’est à dire de manipuler le maillage volumique. En se servant de la spécification Amelet HDF ainsi que des outils de manipulation d’un fichier Amelet HDF, j’ai identifié les ponts dans le maillage volumique des éléments de surface. En utilisant un filtre de sélection, j’ai pu supprimer les mailles qui se trouvent sous les ponts. Voici un exemple montrant le résultat de cette manipulation.