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 :

DSM donon
Figure 1. Donon visualisé sous Paraview

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 :

psol poc
Figure 2. fonctionnement de la librairie psol en sortie du POC

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 :

vigie classif
Figure 3. Maillage structuré surfacique classifié de la Vigie

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 :

vigie mal classif
Figure 4. Maillage structuré volumique mal classifié de la Vigie

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 :

algorithmes 2
Figure 5. Maillage structuré volumique bien classifié du parc d’innovation les Algorithmes

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.

pont vigie bouche
Figure 6. Pont la Vigie qui est bouché dans le maillage 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.

pont vigie non bouche
Figure 7. Pont la Vigie qui n’est plus bouché dans le maillage volumique