Spatial Joins

In dieser Aufgabe wollen wir für jeden Zeckenstich ermitteln, ob er sich im Wald befindet oder nicht. Den Wald-Layer kennt ihr bereits aus dem Block “Datenqualität und Unsicherheit” und wir haben ihn in Geodatenformate kurz angeschaut. Nutzen wir hier nochmal die Gelegenheit, um den Wald und die Zeckenstiche (siehe Tabelle 1) als Geodaten einzulesen und in einem grossen Plot zu visualisieren.

import geopandas as gpd

zeckenstiche_gpd = gpd.read_file("data/zeckenstiche.gpkg")
wald = gpd.read_file("data/wald.gpkg")

minx, miny, maxx, maxy = zeckenstiche_gpd.geometry.total_bounds  # holt die x und y min bzw. max werte und speichert diese in 4 variabeln

from matplotlib.colors import ListedColormap

base = wald.plot(column = "Wald_text", legend = True, cmap = ListedColormap(["green","lightgrey"]))
zeckenstiche_gpd.plot(color = "Red", ax = base)

base.set_xlim(minx - 10, maxx + 10) 
base.set_ylim(miny - 5, maxy + 5)

Wie funktioniert ein Spatial Join?

In Input: GIS in Python habt ihr euch mit den GIS-Funktionalitäten von geopandas vertraut gemacht. Eine ganz zentrale Funktion in GIS sind die sogenannten “Spatial Joins”. Dabei werden Attribute von einem Geodatensatz auf einen anderen Geodatensatz aufgrund einer räumlichen Beziehung der beiden Datensätze übertragen. Konkret für unsere Zeckenstiche bedeutet dies: Jedem Zeckenstich sollte die Eigenschaft “Wald: ja” / “Wald: nein” aus `wald zugewiesen werden. Am einfachsten lässt sich dies in einer Darstellung erklären:

Abbildung 47.1: “Spatial Join” zwischen zeckenstiche und wald. In diesem Spatial Join wurde die Geometrie von zeckenstiche übernommen, das heisst das Resultat des Joins ist ein Punkt-Layer.

In Python wird ein Spatial Join zwischen zeckenstiche und wald wie folgt durchgeführt (wichtig ist dabei auch die Reihenfolge der Argumente: left_df bestimmt den Geometrietyp des Outputs):

gpd.sjoin(left_df = zeckenstiche_gpd, right_df = wald)
ID accuracy x y geometry index_right Shape_Area Wald_text
0 2550 439.128951 2681116 1250648 POINT (2681116 1250648) 0 2.380876e+08 nein
1 10437 301.748542 2681092 1250672 POINT (2681092 1250672) 0 2.380876e+08 nein
2 9174 301.748542 2681128 1250683 POINT (2681128 1250683) 0 2.380876e+08 nein
3 8773 301.748542 2681111 1250683 POINT (2681111 1250683) 0 2.380876e+08 nein
4 2764 301.748529 2681131 1250692 POINT (2681131 1250692) 0 2.380876e+08 nein
5 2513 301.748529 2681171 1250711 POINT (2681171 1250711) 1 7.963237e+07 ja
6 9185 301.748542 2681107 1250712 POINT (2681107 1250712) 1 7.963237e+07 ja
7 28521 301.748542 2681124 1250720 POINT (2681124 1250720) 1 7.963237e+07 ja
8 26745 301.748542 2681117 1250725 POINT (2681117 1250725) 1 7.963237e+07 ja
9 27391 301.748542 2681138 1250725 POINT (2681138 1250725) 1 7.963237e+07 ja