# Zurich latitude longitude: 47.36667, 8.55
map = folium.Map(location=[47.36667, 8.55], zoom_start = 13, tiles = "cartodbpositron")
Übung Visualisierung Zeckenstiche
In dieser Übung wollen wir mit unseren originalen und simulierten Zeckenstichen aus dem Block Programmieren eine interaktive Karte erstellen. Zudem werdet ihr weitere Tools und Tipps erhalten, wie ihr euren Code aufwerten und zum Schluss als HTML darstellen könnt.
Übung 1: Vorbereitung
Bitte ladet zuerst die Übungsdaten hier runter und entpackt diese.
Kreiert eine neue Python-Environment und installiert die für diese Übung benötigten Packages via Terminal gemäss Conda Environment erstellen
conda create --name geopython3 conda activate geopython3 conda install -c conda-forge geopandas folium matplotlib mapclassify jupiterlab quarto
Startet nun Positron via Terminal gemäss Conda Environment erstellen
Kreiert ein neues Quarto-File (New > New File… > Quarto Document) und speichert es in eurem Arbeitsordner ab.
Aufbau eines Quarto Dokumentes
Ein Quarto Dokument hat grob drei Elemente: (1) Den Header bzw. die Metadaten, (2) die Code Chunks und (3) die Textbereiche
Der Header wird beim Erstellen des Dokumentes bereits erstellt. Beim
format
könnt ihr definieren, wie am Ende eurer Dokument gerendert werden soll. Möglich sind u.a. HTML, PDF und MS Word. Wir belassen für heute das vordefinierte Formathtml
, weitere Anpassungen folgen weiter unten.--- title: "Untitled" format: html ---
Der Code wird in sogenannten Code Chunks geschrieben. Eine neue Zelle fügt ihr ein, indem ihr
Ctrl+Shift+I
drückt. Falls in der eckigen Klammer nicht python stehen sollte, müsst ihr das in diesem Fall anpassen.Zwischen die Code Chunks könnt ihr euren Text schreiben. Die Basics, wie ihr euren Text formatieren könnt, findet ihr hier
Ein Auschnitt des Quarto Dokumentes für die Übungen von Programmieren I hat z.B. so ausgesehen:
Packages und Daten laden
Importiert nun als erstes die zwei Packages geopandas
und folium
. Schreibt den Code in einer Code Cell.
Ladet zudem die drei Datensätze wald.gpkg
, zeckenstiche_original.gpkg
und zeckenstiche_simuliert.gpkg
mit der read_file
Funktion von Geopandas.
Übung 2: Base Map
Nun können wir unsere Karte bauen. Zuerst müssen wir eine Basiskarte erstellen, zu welcher wir dann die weiteren Layer hinzufügen können. Dazu nutzen wir nun Folium. Als Mittelpunkt der Karte wählen wir die WGS84 Koordinaten der Stadt Zürich (Zurich latitude: 47.36667, longitude: 8.55) aus.
Ihr könnt mit den Tiles und dem Zoom Level experimentieren. Information zu den Tiles findet ihr hier.
Übung 3: Wald Layer hinzufügen
Nun wollen wir die Waldflächen als unseren ersten Layer hinzufügen. Ihr habt die .explore() Funktion bereits kennengelernt. Sie verfügt über diverse interessante Attribute, welche wir nun benutzen wollen.
Da unser Wald-Datensatz aus zwei Zeilen mit Wald und Nicht-Wald besteht, müssen wir die Waldflächen zuerst noch rausfiltern.
Folium kann nur das weltweite CRS WGS84 (EPSG:4326) verarbeiten und da der Geodataframe Wald das Schweizer CRS CH1903+ / LV95 (EPSG:2056) verwendet, müssen wir dieses mittels to_crs()
transformieren, bevor wir ihn visualisieren können.
Tipp: Wenn ihr am Schluss des Commands ein ; hinzufügt, wird kein Output generiert. Somit wird nicht für jeden Layer den wir hinzufügen, eine Karte erstellt.
# Wald zur Karte hinzufügen
= wald[wald["Wald_text"] == "ja"] # Selektieren nur den Wald
is_wald 4326).explore(
is_wald.to_crs(= map, # Fügt diesen Layer der Map map hinzu
m = "green", # Der Layer wird grün dargestellt
color = False, # Es werden keine Daten angezeigt, wenn man über ein Objekt hovered.
tooltip = False, # Das Objekt wird nicht hervorgehoben, wenn man darüber hovered.
highlight = "Wald" # Der Name des Layers
name ; )
Übung 4: Original und simulierter Zeckenstich Layer hinzufügen
Nun wollen wir neben dem Wald Layer (Polygon) den originalen Zeckenstiche Layer (Punkte) hinzufügen. Kopiere dazu den unteren Code.
# Original Zeckenstiche zur Karte hinzufügen
4326).explore(
zeckenstiche_original_gpd.to_crs(= map, # Fügt diesen Layer der Map map hinzu
m = "red", # Der Layer wird rot dargestellt
color = dict(radius = 1, fill = True), # Optionen für das Aussehen der Punkte
marker_kwds = "ID", # Beim Hovern über das Objekt wird die ID dargestellt
tooltip = "Original Zeckenstiche" # Der Name des Layers
name ; )
Nun wollen wir die simulierten Zeckenstiche darstellen. Als Vorlage könnt ihr den Code von oben kopieren. Erweitere die Funktion explore
um folgende Logik:
- Gerne würden wir die Spalte “Radius” mit der Farbvariation viridis visualisieren. Nutze hierfür die Attribute
column
undcmap
. - Zudem soll die Legende des Layers dargestellt werden. Zudem wollen wir keine Colorbar als Legende haben. Nutze dafür die Optionen der Legende
legend_kwds = dict(colorbar = False)
. - In den Tooltips sollen neben der ID noch der Radius und der Run dargestellt werden.
- Nenne den Layer “Simulation Zeckenstiche”.
Weitere Informationen zur explore
Funktion findet ihr hier.
Übung 5: Layer Control hinzufügen
Zum Abschluss wollen wir noch ein Layer Control
hinzufügen, damit wir die verschiedenen Layer ein- und ausblenden können. Schaut dafür im User Guide von Folium und sucht nach der Layer Control Funktion und versucht diese eurer map
hinzuzufügen. Zum Schluss kannst du die map
aufrufen, damit diese Dargestellt wird. Das finale Produkt sollte wie folgt aussehen: