import geopandas as gpd
= gpd.read_file("data/zeckenstiche.gpkg")
zeckenstiche_gpd = gpd.read_file("data/wald.gpkg")
wald
= zeckenstiche_gpd.geometry.total_bounds # holt die x und y min bzw. max werte und speichert diese in 4 variabeln
minx, miny, maxx, maxy
from matplotlib.colors import ListedColormap
= wald.plot(column = "Wald_text", legend = True, cmap = ListedColormap(["green","lightgrey"]))
base = "Red", ax = base)
zeckenstiche_gpd.plot(color
- 10, maxx + 10)
base.set_xlim(minx - 5, maxy + 5) base.set_ylim(miny
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.
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:
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):
= zeckenstiche_gpd, right_df = wald) gpd.sjoin(left_df
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 |