spatial_extent = {'west': 8.721771, 'south': 53.025027, 'east': 8.904419, 'north': 53.114965}Oberflächentemperatur (Land Surface Temperature)
In diesem Notebook lernst du, wie du mit der Bibliothek cdec die Landoberflächentemperatur (Land Surface Temperature, kurz LST) für einen bestimmten Ort und Zeitraum herunterladen, auf einer Karte darstellen und anschließend als Rasterdatensatz untersuchen kannst.
Die Landoberflächentemperatur beschreibt die Temperatur der Erdoberfläche, die von einem Satellitensensor erfasst wird. Sie ist nicht mit der Lufttemperatur gleichzusetzen. Mit ihr lassen sich beispielsweise Wärmeinseln in Städten, aufgeheizte versiegelte Flächen oder Temperaturunterschiede zwischen Vegetation und bebauten Gebieten untersuchen.
1 Räumliche Ausdehnung festlegen
Zunächst wird festgelegt, für welches Gebiet die Landoberflächentemperatur 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 Messungen aus den Monaten Juni bis August 2024 berücksichtigt.
Für den gewählten Zeitraum wird später ein zeitlicher Mittelwert berechnet. Dadurch entsteht ein einzelnes Raster, das die durchschnittliche Landoberflächentemperatur dieses Zeitraums zeigt.
temporal_extent = ["2024-06-01", "2024-08-31"]3 Oberflächentemperatur 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 Temperaturwerten auch räumliche Informationen gespeichert werden.
Anschließend wird die Bibliothek cdec importiert. Mit der Funktion download_lst() wird die mittlere Landoberflächentemperatur 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.
Standardmäßig wird die Datei als Cloud Optimized GeoTIFF (COG) gespeichert. Nach erfolgreicher Ausführung befindet sich das Temperatur-Raster unter dem zuvor angegebenen Dateipfad.
file_path = "data/lst.tif"import cdec
cdec.download_lst(
file_path,
spatial_extent=spatial_extent,
temporal_extent=temporal_extent,
)Authenticated using device code flow.
PosixPath('/Users/soeren/PycharmProjects/cdec/snippets/data_access/notebooks/data/lst.tif')
4 Rasterdaten auf einer Karte anzeigen
Das heruntergeladene Temperatur-Raster 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. Die Farbskala coolwarm stellt niedrigere Temperaturen in kühlen und höhere Temperaturen in warmen Farbtönen dar.
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="Landoberflächentemperatur",
colormap="coolwarm",
)
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 Temperaturwerte 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: 1
Data type: ('float32',)
Shape: (11, 21)
Coordinate Reference System: EPSG:4326
7 Pixelwerte auslesen und umrechnen
Mit src.read() werden die eigentlichen Rasterdaten aus der Datei gelesen. Die Sentinel-3-Daten enthalten die Temperaturwerte in Kelvin.
Für eine leichter verständliche Darstellung werden die Werte anschließend in Grad Celsius umgerechnet. Dazu wird von jedem Pixelwert 273.15 subtrahiert. Da die Landoberflächentemperatur als einzelnes Rasterband gespeichert wird, enthält das Array genau eine Ebene mit Temperaturwerten.
data_kelvin = src.read()
data_celsius = data_kelvin - 273.15
data_celsiusarray([[[ 8.074982 , 7.851593 , 7.9270325, 8.816559 , 9.512482 ,
9.435028 , 9.177307 , 8.500214 , 8.3081665, 8.57077 ,
8.404327 , 7.615387 , 6.9169617, 7.2128906, 7.980011 ,
8.326935 , 8.009796 , 7.8954773, 8.299713 , 7.8964233,
7.5393677],
[ 9.091766 , 8.641205 , 8.224274 , 8.318176 , 8.927429 ,
9.586975 , 9.767029 , 9.751007 , 9.832428 , 9.409058 ,
8.780731 , 7.8406982, 7.289154 , 7.8069153, 8.485687 ,
8.413666 , 8.496368 , 8.741913 , 8.617828 , 8.312561 ,
7.4725037],
[ 9.838654 , 9.946411 , 9.695221 , 9.40921 , 9.141083 ,
9.525177 , 9.853638 , 10.398987 , 10.273895 , 10.211945 ,
9.622925 , 8.391235 , 7.8151245, 8.291107 , 8.620514 ,
8.164673 , 8.118286 , 7.9770813, 8.112488 , 8.307068 ,
7.726074 ],
[ 9.352814 , 9.798981 , 9.993927 , 10.058197 , 9.550079 ,
9.609741 , 9.588623 , 9.847778 , 9.953003 , 10.412567 ,
10.194946 , 9.250336 , 8.971863 , 8.832275 , 8.811249 ,
8.053314 , 8.113586 , 8.355469 , 8.3437805, 8.320892 ,
8.085022 ],
[ 8.809021 , 8.882233 , 9.054352 , 9.159119 , 9.66687 ,
9.791138 , 10.115723 , 9.942322 , 10.094543 , 9.966705 ,
9.668091 , 9.742218 , 9.575623 , 9.45578 , 9.362061 ,
8.716248 , 9.026794 , 9.116211 , 8.836517 , 8.568146 ,
8.308289 ],
[ 8.916534 , 8.859863 , 8.451508 , 8.5381775, 9.355774 ,
10.017334 , 10.288391 , 10.489838 , 10.189789 , 10.056488 ,
9.13028 , 8.466095 , 8.400635 , 8.803925 , 9.2013855,
9.138428 , 9.659515 , 9.657257 , 9.524384 , 9.142273 ,
9.188843 ],
[ 9.180328 , 9.145325 , 9.306274 , 8.755646 , 9.050079 ,
9.625763 , 10.080811 , 10.4375 , 10.134277 , 9.932312 ,
9.383423 , 8.574493 , 7.875061 , 7.8230896, 7.98584 ,
8.185089 , 8.443268 , 9.078308 , 9.575592 , 10.102509 ,
10.309631 ],
[ 9.3246765, 9.321655 , 9.361084 , 8.974731 , 8.984802 ,
9.22699 , 9.594818 , 9.962097 , 10.003723 , 10.011322 ,
9.939636 , 9.903442 , 9.58606 , 9.251953 , 9.222412 ,
9.061584 , 8.462952 , 8.56485 , 9.258942 , 9.4263 ,
9.528076 ],
[ 9.324036 , 9.137329 , 9.17569 , 8.807007 , 8.588837 ,
8.80304 , 8.884766 , 9.182892 , 9.401184 , 9.125458 ,
9.177826 , 9.945618 , 10.108368 , 9.944733 , 9.454498 ,
9.374634 , 8.216217 , 8.44223 , 8.994568 , 9.325989 ,
9.091888 ],
[ 9.180725 , 8.994385 , 8.943665 , 8.827698 , 8.85614 ,
8.742706 , 8.862854 , 8.777954 , 9.015991 , 9.66629 ,
9.656921 , 9.76239 , 9.722107 , 9.8463745, 9.346893 ,
8.909668 , 7.687134 , 7.5498657, 8.098206 , 8.96814 ,
9.181824 ],
[ 8.615082 , 8.497101 , 8.238892 , 8.758362 , 9.18927 ,
9.260071 , 9.376465 , 9.355255 , 9.225189 , 8.99707 ,
9.145996 , 9.200989 , 9.024536 , 8.933624 , 8.593231 ,
8.639618 , 9.16156 , 8.551392 , 7.702179 , 8.246277 ,
8.802155 ]]], dtype=float32)
8 Rasterdaten visualisieren
Zum Abschluss werden die umgerechneten Temperaturwerte direkt im Notebook dargestellt.
Die Funktion imshow() aus plotly.express erzeugt aus dem ersten Rasterband eine grafische Darstellung. Die Farbskala thermal macht räumliche Temperaturunterschiede sichtbar; die Farblegende zeigt die Werte in Grad Celsius.
