spatial_extent = {'west': 8.721771, 'south': 53.025027, 'east': 8.904419, 'north': 53.114965}Echtfarb-Satellitenbild (True Color Image)
In diesem Notebook lernst du, wie du mit der Bibliothek cdec ein Echtfarb-Satellitenbild (True Color Image kurz TCI) für einen bestimmten Ort und Zeitraum herunterladen, auf einer Karte darstellen und anschließend als Rasterdatensatz untersuchen kannst.
Ein Echtfarbbild stellt die Erdoberfläche ähnlich dar, wie sie mit dem menschlichen Auge wahrgenommen wird. Dadurch lassen sich beispielsweise Siedlungsflächen, Gewässer, Vegetation oder Wolken leicht erkennen.
1 Räumliche Ausdehnung festlegen
Zunächst wird festgelegt, für welches Gebiet das Satellitenbild heruntergeladen werden soll.
Die räumliche Ausdehnung wird durch eine sogenannte Bounding Box beschrieben. Sie besteht aus vier Koordinaten, die die Grenzen des Untersuchungsgebiets angeben:
west: westliche Grenzesouth: südliche Grenzeeast: östliche Grenzenorth: nördliche Grenze
In diesem Beispiel wird ein Gebiet rund um Bremen ausgewählt.
2 Zeitliche Ausdehnung festlegen
Neben dem Ort muss angegeben werden, aus welchem Zeitraum die Satellitendaten stammen sollen.
Dazu werden ein Start- und ein Enddatum festgelegt. Hier werden Aufnahmen aus dem Juni 2024 berücksichtigt.
Die zeitliche Eingrenzung ist besonders wichtig, da für ein Gebiet viele Satellitenaufnahmen zu unterschiedlichen Zeitpunkten verfügbar sein können.
temporal_extent = ["2024-06-01", "2024-06-30"]3 Echtfarbbild herunterladen
Als Nächstes wird festgelegt, wo die heruntergeladene Rasterdatei gespeichert werden soll.
Der Dateipfad wird in der Variable file_path gespeichert. Die Endung .tif kennzeichnet eine GeoTIFF-Datei. In einer solchen Rasterdatei können neben den eigentlichen Bilddaten auch räumliche Informationen gespeichert werden.
Anschließend wird die Bibliothek cdec importiert. Mit der Funktion download_tci() wird ein passendes Echtfarbbild für das zuvor definierte Gebiet und den ausgewählten Zeitraum heruntergeladen.
Dabei werden mehrere Angaben übergeben:
file_pathlegt den Speicherort der Datei fest.spatial_extentbestimmt das Untersuchungsgebiet.temporal_extentbestimmt den betrachteten Zeitraum.max_cloud_cover=10begrenzt die zulässige Wolkenbedeckung bei der Auswahl einer Satellitenaufnahme.
Nach erfolgreicher Ausführung befindet sich das Satellitenbild unter dem zuvor angegebenen Dateipfad.
file_path = "data/tci.tif"import cdec
cdec.download_tci(
file_path,
spatial_extent=spatial_extent,
temporal_extent=temporal_extent,
max_cloud_cover=10
)Authenticated using refresh token.
PosixPath('/Users/soeren/PycharmProjects/cdec/how-to/notebooks/data/tci.tif')
4 Rasterdaten auf einer Karte anzeigen
Das heruntergeladene Satellitenbild kann nun auf einer interaktiven Karte dargestellt werden.
Dazu wird zunächst mit Map() eine Karte erzeugt. Über center wird der Mittelpunkt der Karte festgelegt, während zoom die anfängliche Zoomstufe bestimmt.
Mit add_cog() wird anschließend die zuvor heruntergeladene Rasterdatei als neue Ebene zur Karte hinzugefügt. Der Parameter name legt fest, unter welchem Namen die Ebene in der Karte angezeigt wird.
Durch die Ausgabe von m wird die interaktive Karte im Notebook dargestellt.
from geolibre import Map
m = Map(
center=(8.81, 53.07),
zoom=11
)
layer_id = m.add_cog(
file_path,
name="Echtfarbbild",
)
m5 Rasterdaten mit Rasterio einlesen
Neben der Darstellung auf einer Karte können die eigentlichen Rasterdaten auch direkt mit Python untersucht werden.
Dafür wird die Bibliothek rasterio importiert. Mit rio.open() wird die heruntergeladene GeoTIFF-Datei geöffnet. Das resultierende Rasterobjekt wird in der Variable src gespeichert.
Über dieses Objekt können sowohl die Bilddaten als auch verschiedene Metadaten des Rasterdatensatzes abgerufen werden.
import rasterio as rio
src = rio.open(file_path)6 Eigenschaften des Rasterdatensatzes untersuchen
Bevor die eigentlichen Pixelwerte betrachtet werden, lohnt sich ein Blick auf einige grundlegende Eigenschaften des Rasterdatensatzes.
Ausgegeben werden:
src.count: Anzahl der enthaltenen Rasterbändersrc.dtypes: Datentypen der gespeicherten Pixelwertesrc.shape: Höhe und Breite des Rasterssrc.crs: verwendetes Koordinatenreferenzsystem (Coordinate Reference System)
Diese Informationen helfen dabei, den Aufbau eines Rasterdatensatzes besser zu verstehen und sind für die weitere Verarbeitung von Geodaten wichtig.
print(f"Number of bands: {src.count}")
print(f"Data type: {src.dtypes}")
print(f"Shape: {src.shape}")
print(f"Coordinate Reference System: {src.crs}")Number of bands: 3
Data type: ('uint8', 'uint8', 'uint8')
Shape: (1005, 1228)
Coordinate Reference System: EPSG:32632
7 Pixelwerte auslesen
Mit src.read() werden die eigentlichen Rasterdaten aus der Datei gelesen und in der Variable data gespeichert.
Das Ergebnis ist ein mehrdimensionales Array. Es enthält für jedes Rasterband die zugehörigen Pixelwerte des Satellitenbildes.
Durch die Ausgabe von data können Aufbau und Werte des Arrays direkt untersucht werden.
data = src.read()
dataarray([[[201, 195, 187, ..., 115, 98, 85],
[181, 183, 175, ..., 119, 88, 84],
[151, 160, 155, ..., 83, 89, 87],
...,
[113, 118, 106, ..., 198, 194, 192],
[114, 113, 95, ..., 206, 198, 193],
[114, 106, 96, ..., 217, 209, 204]],
[[189, 188, 183, ..., 109, 107, 108],
[158, 170, 161, ..., 117, 108, 109],
[128, 142, 144, ..., 103, 107, 111],
...,
[116, 118, 124, ..., 193, 183, 180],
[117, 121, 126, ..., 204, 197, 190],
[117, 124, 127, ..., 216, 205, 199]],
[[157, 169, 165, ..., 79, 83, 70],
[119, 135, 142, ..., 83, 80, 72],
[109, 117, 123, ..., 67, 79, 74],
...,
[ 92, 95, 94, ..., 190, 169, 166],
[ 95, 94, 90, ..., 203, 192, 184],
[ 98, 89, 87, ..., 213, 205, 200]]],
shape=(3, 1005, 1228), dtype=uint8)
8 Rasterdaten visualisieren
Zum Abschluss werden die eingelesenen Rasterdaten direkt im Notebook dargestellt.
Die Funktion show() aus rasterio.plot erzeugt aus den Rasterwerten eine grafische Darstellung. Dadurch lässt sich überprüfen, wie die eingelesenen Daten aussehen, bevor weitere Verarbeitungsschritte durchgeführt werden.

