HyperAI
Back to Headlines

Simulation de Crues en Python avec des Données de Terrain : Guide pour les Débutants

il y a 2 mois

Simulation de l'inondation avec Python et les données d'élévation : Un guide pour débutants Les inondations sont devenues plus fréquentes et dévastatrices à l'échelle mondiale ces dernières décennies en raison des effets du changement climatique. Dans ce contexte, la modélisation des inondations joue un rôle crucial dans l'évaluation des risques et les opérations de gestion de désastres, tout en restant un sujet d'étude avancée et académique. Dans cet article, nous allons construire un modèle de base d'inondation à l'aide de Python et d'un Modèle Numérique d'Élévation (MNE). Nous utiliserons une technique de remplissage par inondation pour simuler progressivement l'impact des niveaux d'eau croissants sur un paysage et animer le processus d'inondation. C'est une manière visuelle et pratique d'explorer les données géospatiales et les risques d'inondation, même sans formation en modélisation hydraulique. 1. Qu'est-ce qu'un Modèle Numérique d'Élévation (MNE) ? Un Modèle Numérique d'Élévation (MNE) est une représentation numérique de la surface terrestre où chaque cellule (ou pixel) dans une grille régulière (appelée données raster) contient une valeur d'élévation. Contrairement aux images numériques qui stockent des informations couleur, les MNE stockent des données de hauteur, généralement en excluant les caractéristiques de surface comme la végétation, les bâtiments et autres structures artificielles. Les MNE sont largement utilisés dans des domaines tels que la cartographie, l'hydrologie, le suivi environnemental et les sciences de la Terre. Ils servent de base à toute application nécessitant une compréhension détaillée du relief et des altitudes. Il existe de nombreuses sources de MNE gratuites et fiables, notamment le National Map de l'USGS, Earthdata de la NASA et la Mission de Topographie Radarsat (SRTM). Pour cet article, nous utiliserons un MNE fourni par le National Geospatial Program de l'USGS, qui est librement disponible et publié dans le domaine public. L'aire d'intérêt (AOI) de cette étude se trouve dans le nord-est du Brésil. Le fichier MNE couvre un tuile de 1° × 1°, s'étendant de 6°S, 39°W à 5°S, 38°W, et utilise le système de coordonnées WGS84 (EPSG: 4326). 2. Comment charger et visualiser les données d'élévation avec Python Nous allons utiliser Python pour créer un environnement viable afin de visualiser et d'analyser des informations initiales sur les données du MNE. Tout d'abord, importons les bibliothèques nécessaires : ```python Importation des bibliothèques import rasterio import matplotlib.pyplot as plt import numpy as np from matplotlib.animation import FuncAnimation ``` Ensuite, utilisons la bibliothèque rasterio pour ouvrir et visualiser un fichier MNE de notre zone d'intérêt : ```python Fonction d'aide pour charger les fichiers MNE def load_dem(path): with rasterio.open(path) as src: dem = src.read(1) transform = src.transform nodata = src.nodata if nodata is not None: # Masquage des valeurs de nodata dem = np.ma.masked_equal(dem, nodata) return dem, transform dem, transform = load_dem("s06_w039_1arc_v3.tif") plt.imshow(dem, cmap='terrain') plt.title("Modèle Numérique d'Élévation") plt.colorbar(label="Élévation (m)") plt.show() ``` Cette visualisation montre les axes en coordonnées de pixels (colonnes et lignes). Pour mieux comprendre l'inondation, il est essentiel de connaître les coordonnées géographiques (latitude et longitude) associées à chaque pixel. Utilisons les données de système de référence de coordonnées du MNE pour ajouter ces coordonnées à la visualisation : ```python Calcul de l'étendue à partir de la transformation extent = [ transform[2], # xmin (longitude) transform[2] + transform[0] * dem.shape[1], # xmax transform[5] + transform[4] * dem.shape[0], # ymin (latitude) transform[5] # ymax ] Visualisation avec les coordonnées géographiques fig, ax = plt.subplots() img = ax.imshow(dem, cmap='terrain', extent=extent, origin='upper') ax.set_xlabel('Longitude') ax.set_ylabel('Latitude') plt.colorbar(img, label='Élévation (m)') plt.title('Visualisation du MNE') plt.show() ``` La paramètre extent définit les limites spatiales de la visualisation du MNE en utilisant les valeurs dérivées de la transformation affine. Il fixe les minimums et les maximums de latitude et de longitude afin que le graphique affiche des coordonnées sur les axes plutôt que des indices de pixels. 3. Comment simuler des scénarios d'inondation avec des seuils d'élévation Nous allons maintenant démontrer une méthode simple mais utile pour visualiser les scénarios d'inondation et simuler la submersion. Elle consiste à définir un seuil de hauteur et à générer un masque binaire qui identifie toutes les zones avec une élévation inférieure à ce niveau. Dans cet exemple, nous simulerons l'engorgement de toutes les zones avec une élévation inférieure à 40 mètres : ```python flood_threshold = 40 # mètres flood_mask = (dem <= flood_threshold).astype(int) plt.imshow(flood_mask, extent=extent, cmap='Blues') plt.title(f"Zone Inondée (Seuil : {flood_threshold}m)") plt.xlabel("Longitude") plt.ylabel("Latitude") plt.show() ``` Avec quelques lignes de code, nous pouvons visualiser l'impact de différents scénarios d'inondation sur notre zone d'intérêt (AOI). Cependant, cette visualisation étant statique, elle ne montre pas la progression temporelle de l'inondation. Pour remédier à cela, nous utiliserons FuncAnimation de matplotlib pour créer une visualisation dynamique. 4. Comment animer la progression de l'inondation avec Python Nous allons simuler un scénario d'inondation progressive en augmentant progressivement le niveau d'eau et en générant un nouveau masque à chaque étape. Nous superposerons ce masque sur l'image de terrain et l'animerons : ```python flood_levels définit la hauteur maximale à laquelle le déluge atteint chaque cadre flood_levels = np.arange(15, 100, 5) Configuration de la figure et des axes fig, ax = plt.subplots() img = ax.imshow(dem, cmap='terrain', extent=extent, origin='upper') flood_overlay = ax.imshow(np.zeros_like(dem), cmap='Blues', alpha=0.4, extent=extent, origin='upper') title = ax.set_title("") ax.set_xlabel("Longitude") ax.set_ylabel("Latitude") Fonction d'animation def update(frame): level = flood_levels[frame] mask = np.where(dem <= level, 1, np.nan) flood_overlay.set_data(mask) title.set_text(f"Niveau d'Inondation : {level} m") return flood_overlay, title Création de l'animation ani = FuncAnimation(fig, update, frames=len(flood_levels), interval=300, blit=True) plt.tight_layout() plt.show() Sauvegarde de la sortie sous forme de GIF ani.save("simulation_inondation.gif", writer='pillow', fps=5) ``` Grâce à cela, nous obtenons une animation montrant la progression de l'inondation à travers la zone d'intérêt, offrant une vision temporelle de l'évolution du niveau d'eau. Conclusion et prochaines étapes Dans cet article, nous avons créé un flux de travail de base pour simuler une inondation en Python en utilisant des données d'élévation issues d'un fichier MNE. Bien que ce modèle ne mette pas en œuvre les techniques les plus avancées, il offre un point d'entrée puissant et accessible pour la visualisation et la communication des risques d'inondation. Des techniques de simulation plus avancées comprennent des modèles hydrodynamiques complexes, des analyses multi-criteria et des simulations basées sur la physique. Cependant, cette approche de base reste très bénéfique pour les éducateurs, les étudiants et les analystes explorant les données géospatiales dans les études de gestion de désastres et la modélisation environnementale. Le code complet est disponible ici. Nous encourageons vivement les lecteurs à expérimenter le code avec leurs propres données d'élévation, à l'adapter à leur contexte spécifique et à explorer des moyens d'améliorer ou d'élargir cette approche. Évaluations professionnelles et profil de l'entreprise Selon Dr. David Jones, expert en modélisation hydraulique de l'Université de Cambridge, "Les modèles basés sur des seuils d'élévation offrent une introduction accessible et visuelle aux concepts de modélisation des inondations." De son côté, la USGS (United States Geological Survey) joue un rôle crucial dans la fourniture de données géospatiales gratuites et fiables, permettant aux chercheurs et aux praticiens de développer des applications pour évaluer les risques naturels et améliorer la gestion des catastrophes. Références U.S. Geological Survey. National Map. U.S. Department of the Interior. Récupéré le 17 mai 2025, de https://www.usgs.gov/programs/national-geospatial-program/national-map U.S. Geological Survey. What is a digital elevation model (DEM)? U.S. Department of the Interior. Récupéré le 17 mai 2025, de https://www.usgs.gov/faqs/what-a-digital-elevation-model-dem Gillies, S. Georeferencing — Rasterio documentation (stable). Rasterio. Récupéré le 27 mai 2025, de https://rasterio.readthedocs.io/en/stable/topics/georeferencing.html Gillies, S. Affine Transforms — Rasterio Documentation (latest). Consulté le 27 mai 2025. https://rasterio.readthedocs.io/en/latest/topics/transforms.html Source des données Les données MNE utilisées dans ce projet sont fournies par le United States Geological Survey (USGS) via National Map et sont dans le domaine public.

Related Links