sind weltweit häufiger und verheerender geworden, mit den Auswirkungen des Klimawandels in den letzten Jahrzehnten. In diesem Zusammenhang spielt die Hochwassermodellierung eine wichtige Rolle bei der Risikobewertung und im Bereich der Katastrophenreaktion und bleibt gleichzeitig einen Schwerpunkt der fortschrittlichen Forschung und akademischen Studien.
In diesem Artikel werden wir mit Python und einem digitalen Höhenmodell (DEM) ein grundlegendes Hochwasserüberschwemmungsmodell erstellen. Wir werden eine Hochwasserfülltechnik verwenden, um schrittweise zu simulieren, wie sich steigender Wasserspiegel auf eine Landschaft auswirkt und den Überschwemmungsprozess animiert. Es ist eine visuelle und praktische Möglichkeit, Geodaten und Hochwasserrisiken zu untersuchen, auch ohne Hintergrund in der hydraulischen Modellierung.
Was du lernen wirst
1. Was ist ein digitales Höhenmodell (DEM)
A Digital Elevation Mannequin (DEM) ist eine numerische Darstellung der Erdoberfläche, wobei jede Zelle (oder Pixel) in einem regulären Gitter (bekannt als Rasterdaten) einen Höhenwert enthält. Im Gegensatz zu digitalen Bildern, die Farbinformationen speichern, speichern DEMS-Höhendaten, die normalerweise Oberflächenmerkmale wie Vegetation, Gebäude und andere künstliche Strukturen ausschließen.
DEMs werden üblicherweise in Bereichen wie Kartierung, Hydrologie, Umweltüberwachung und Erdwissenschaften verwendet. Sie dienen als grundlegender Datensatz für jede Anwendung, die ein detailliertes Verständnis von Gelände und Erhebung erfordert.
Viele Quellen bieten kostenlose und zuverlässige DEM -Daten an, einschließlich der USGS Nationale KarteAnwesend NASA Earthdataund die Shuttle Radar Topography Mission (SRTM).
In diesem Artikel werden wir einen DEM verwenden, der von dem bereitgestellt wird USGS Nationwide Geospatial Programdie frei verfügbar und in die Öffentlichkeit freigelassen ist.
HINWEIS: Die von USGS bereitgestellten Daten haben eine räumliche Auflösung von 1 Bogen Sekunde (ca. 30 Meter am Äquator).
Das Interessengebiet (AOI) in dieser Studie befindet sich im Nordosten Brasiliens. Die DEM -Datei deckt eine 1 ° × 1 ° Fliese ab, die sich von 6 ° S, 39 ° W bis 5 ° S, 38 ° W erstreckt, und verwendet das WGS84 -Koordinatensystem (EPSG: 4326), wie unten dargestellt.

2. So laden und visualisieren Sie Höhendaten mit Python
Jetzt werden wir Python verwenden, um eine praktikable Umgebung festzulegen, um einige erste Informationen zu DEM -Daten zu visualisieren und zu analysieren. Importieren wir zunächst die erforderlichen Bibliotheken.
# import libraries
import rasterio
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.animation import FuncAnimation
rasterio
: Liest und schreibt Geospatial Raster -Daten wie Dems.
matplotlib.pyplot
: Erstellt statische und interaktive Visualisierungen.
numpy
: Griff numerische Operationen und Array-basierte Daten.
FuncAnimation
: Generiert Animationen durch Aktualisierung von Plots Body nach Body.
Als nächstes verwenden wir die rasterio
Bibliothek zum Öffnen und Visualisieren einer DEM -Datei der AOI.
# Helper operate to load DEM Information
def load_dem(path):
with rasterio.open(path) as src:
dem = src.learn(1)
rework = src.rework
nodata = src.nodata
if nodata just isn't None:
# Masks no-data values
dem = np.ma.masked_equal(dem, nodata)
return dem, rework
Die obige Funktion liest die Höhendaten und prüft, ob die Datei „No-Information-Werte“ enthält. No-Information-Werte werden verwendet, um Bereiche ohne gültige Höhendaten darzustellen (z. B. Außenabdeckung oder beschädigte Pixel). Wenn ein No-Information-Wert vorhanden ist, ersetzt die Funktion diese Pixel durch np.nan
erleichtert es, sie in späteren Analysen und Visualisierungen zu behandeln oder zu ignorieren.
Visualisieren von DEM -Daten
dem = load_dem("s06_w039_1arc_v3.tif")
plt.imshow(dem, cmap='terrain')
plt.title("Digital Elevation Mannequin")
plt.colorbar(label="Elevation (m)")
plt.present()

- Verwendung geografischer Koordinaten in der Visualisierung
Wie wir sehen können, befinden sich die Achsen in Pixelkoordinaten (Spalten und Zeilen). Um die Überschwemmung der Hochwasser besser zu verstehen, ist es wichtig, die geografischen Koordinaten (Breitengrad und Länge) zu kennen, die mit jedem Pixel des Bildes verbunden sind.
Um dies zu erreichen, verwenden wir die Koordinaten -Referenzsystemdaten der DEM -Datei. Wie bereits erwähnt, verwendet der DEM, den wir verwenden, das WGS84 -Koordinatensystem (EPSG: 4326).
Wir können die Helferfunktion anpassen, um Dem -Dateien wie folgt zu laden:
def load_dem(path):
with rasterio.open(path) as src:
dem = src.learn(1)
rework = src.rework
nodata = src.nodata
if nodata just isn't None:
# Masks nodata values
dem = np.ma.masked_equal(dem, nodata)
return dem, rework
Die Funktion ruft die ab verwandeln Daten aus dem DEM, ein affines Objekt, das Pixelpositionen (Zeile, Spalte) auf geografische Koordinaten (Breitengrad und Längengrad) bildet.
Um die geografischen Koordinaten auf den Achsen des Grundstücks darzustellen extent
Parameter aus dem imshow()
Funktion.
dem, rework = load_dem("s06_w039_1arc_v3.tif")
# Compute extent from rework
extent = (
rework(2), # xmin (longitude)
rework(2) + rework(0) * dem.form(1), # xmax
rework(5) + rework(4) * dem.form(0), # ymin (latitude)
rework(5) # ymax
)
# Plot with utilizing geographic coordinates
fig, ax = plt.subplots()
img = ax.imshow(dem, cmap='terrain', extent=extent, origin='higher')
ax.set_xlabel('Longitude')
ax.set_ylabel('Latitude')
plt.colorbar(img, label='Elevation (m)')
plt.title('DEM Visualization')
plt.present()
Der extent
Der Parameter wird verwendet, um die räumlichen Grenzen des DEM -Diagramms unter Verwendung von Werten zu definieren, die vom Raster abgeleitet wurden rework
Effine -Objekt. Es setzt die minimale und maximale Länge (xmin
Anwesend xmax
) und Breitengrad (ymin
Anwesend ymax
) Damit das Diagramm Koordinaten auf den Achsen anstelle von Pixelindizes zeigt.
Schließlich haben wir die folgenden Ergebnisse:

3.. Wie man Hochwasserszenarien mit Höhenschwellen simuliert
Jetzt werden wir eine einfache, aber nützliche Methode zur Visualisierung von Hochwasserszenarien und zur Simulation der Überschwemmung demonstrieren. Es besteht darin, eine Höhenschwelle zu definieren und eine binäre Maske zu erzeugen, die alle Bereiche mit einer Höhe unterhalb dieses Niveaus identifiziert.
In diesem Beispiel simulieren wir Überschwemmung über alle Gebiete mit Höhen unter 40 Metern.
flood_threshold = 40 # meters
flood_mask = (dem <= flood_threshold).astype(int)
plt.imshow(flood_mask, extent=extent, cmap='Blues')
plt.title(f"Flooded Space (Threshold: {flood_threshold}m)")
plt.xlabel("Longitude")
plt.ylabel("Latitude")
plt.present()

Mit nur wenigen Codezeilen können wir die Auswirkungen verschiedener Hochwasserszenarien auf das Interessengebiet (AOI) visualisieren. Da diese Visualisierung jedoch statisch ist, zeigt sie nicht, wie die Flut im Laufe der Zeit fortschreitet. Um damit umzugehen, werden wir Matplotlibs verwenden FuncAnimation
Erstellen einer dynamischen Visualisierung.
4. Wie man den Hochwasser -Fortschritt mit Python animiert
Wir werden jetzt ein progressives Hochwasserszenario simulieren, indem wir den Wasserstand inkrementell erhöhen und bei jedem Schritt eine neue Maske erzeugen. Wir werden diese Maske auf dem Geländebild überlagern und sie animieren.
# flood_levels defines how excessive the flood rises per body
flood_levels = np.arange(15, 100, 5)
# Arrange determine and axes
fig, ax = plt.subplots()
img = ax.imshow(dem, cmap='terrain', extent=extent, origin='higher')
flood_overlay = ax.imshow(np.zeros_like(dem), cmap='Blues', alpha=0.4, extent=extent, origin='higher')
title = ax.set_title("")
ax.set_xlabel("Longitude")
ax.set_ylabel("Latitude")
# Animation operate
def replace(body):
stage = flood_levels(body)
masks = np.the place(dem <= stage, 1, np.nan)
flood_overlay.set_data(masks)
title.set_text(f"Flood Degree: {stage} m")
return flood_overlay, title
# Create animation
ani = FuncAnimation(fig, replace, frames=len(flood_levels), interval=300, blit=True)
plt.tight_layout()
plt.present()
# save the output as a gif
ani.save("flood_simulation.gif", author='pillow', fps=5)

Wenn Sie daran interessiert sind, Animationen mit Python zu erstellen Tutorial ist ein großartiger Ort zum Begin.
Schlussfolgerung und nächste Schritte
In diesem Artikel haben wir einen grundlegenden Workflow erstellt, um eine Hochwassersimulation in Python mithilfe von Höhendaten aus einer DEM -Datei durchzuführen. Dieses Modell implementiert natürlich nicht die fortschrittlichsten Techniken zu diesem Thema. Diese Höhenschwellenmethode bietet noch eine leistungsstarke und zugängliche Einstiegspunkte.
Erweiterte Simulationstechniken umfassen:
- Konnektivitätsbasierte Hochwasserausbreitung
- Strömungsrichtung und Akkumulation
- Zeitbasierte Flussmodellierung
Trotzdem kann dieser praktische Ansatz für Pädagogen, Studenten und Analysten von großem Nutzen sein, die erforschen Geospatial -Daten In Katastrophenreaktionsstudien und Umweltmodellierung.
Der komplette Code ist verfügbar Hier.
Ich ermutige die Leser nachdrücklich, mit dem Code mit ihren eigenen Höhendaten zu experimentieren, ihn an ihren spezifischen Kontext anzupassen und Wege zu untersuchen, um den Ansatz zu verbessern oder zu erweitern.
Referenzen
(1) US Geological Survey. Nationale Karte. US -Innenministerium. Abgerufen am 17. Mai 2025, von https://www.usgs.gov/applications/national-geospatial-program/national-map
(2) US Geological Survey. Was ist ein digitales Höhenmodell (DEM)? US -Innenministerium. Abgerufen am 17. Mai 2025, von https://www.usgs.gov/faqs/what-a-digital-levation-model-dem
(3) Gillies, S. Georeferenzierung – Rasterio -Dokumentation (stabil). Rasterio. Abgerufen am 27. Mai 2025, von https://rasterio.readthedocs.io/en/steady/subjects/georeferencing.html
(4) Gillies, Sean. Affine Transformations – Rasterio -Dokumentation (neuestes). Zugriff 27. Mai 2025. https://rasterio.readthedocs.io/en/newest/subjects/transforms.html.
Datenquelle: DEM -Daten, die in diesem Projekt verwendet werden, werden von der USGS -Umfrage (USGS) über die nationale Karte bereitgestellt und sind öffentlich zugänglich.