Evaluierung der Verteilung und Erreichbarkeit der Naherholungsgebiete der Stadt Freiburg

Philipp Eisnecker

Einleitung

Neben den aktiven gesundheitlichen Folgen beeinflusst das Coronavirus SARS-CoV-2, welches sich zur Zeit auf der ganzen Welt verbreitet, auch unsere Mobilität ungemein. Die Debatte um soziale Gleichheit bei dem Thema Blau-Grüne Infrastruktur könnte dadurch einmal mehr in den Mittelpunkt geraten. Es handelt sich dabei um die Erreichbarkeit von Naherholungsgebieten, wie (u.a.) Seen, Flüssen oder Wälder, welche so verteilt sein sollten, dass sie von allen sozialen Schichten, bzw. allen Stadtteilen, ähnlich gut nutzbar sind. Vor allem in Lockdown-Zeiten sind sie ein wichtiger Bestandteil im Leben vieler Bürger, da sie für Ausgleich und Ruhe sorgen. In einigen Ländern, wie z.B. Frankreich, gibt es Regeln, welche einem untersagen, sich weiter als eine bestimmte Distanz von seinem Haus zu entfernen. In diesem Projekt soll herausgefunden werden, ob in Freiburg (Baden-Württemberg) die Erreichbarkeit der Naherholungsgebiete für alle Bürger gewährleistet ist. Es wird die These aufgestellt, dass nicht alle Stadtteile, und somit nicht alle soziale Schichten, einen vergleichbaren Zugang zu solchen Anlagen haben und dadurch im Falle einer weiteren Bewegungseinschränkung erheblich im Nachteil sind. Dazu werden verschiedene Daten (Wald, Wiese, Seen, Flüsse, Parks) aus OpenStreetMap, sowie die Stadtgrenze und die einzelnen Bezirke Freiburgs, geladen. Die Shapefiles der Naherholungsgebiete werden verarbeitet um ein einzelenes shape (Multipolygon) zu erhalten. Ein Grid wurde erstellt und über das Wohngebiet Freiburgs gelegt. Durch dieses Grid konnte die Entfernung jedes einzelnen Punktes auf diesem Grid zum nächsten Naherholungsgebiet bestimmt werden. Der Entfernungsdatensatz konnte weiter bearbeitet werden, um Informationen zu den einzelnen Stadtteilen zu bekommen.

Laden des Freiburg-Shapefiles

Das Shapefile der Stadt Freiburg wurde von folgender Homepage bereitgestellt: “https://fritz.freiburg.de/Informationsportal/”. Ein Shapefile beinhaltet, vereinfacht gesagt, die Umrisse oder den Verlauf eines Objektes (Haus, See, Stadtgrenze, Landesgrenze, etc.) aus der Vogelperspektive. In diesem Fall wollen wir die Stadtgrenze von Freiburg als Umriss haben. Im Datensatz befinden sich zudem die einzelnen Stadtteile, welches eine Spezifizierung der Daten einfacher macht. Aufgrund der großen dezentralen Ausbreitung von Freiburg, wird hier nur auf die Stadtteile eingegangen, welche ein zusammenhängendes Stadtbild ergeben, d.h. die Stadtteile um die Altstadt herum. Dies erleichtert auch die Auswertung, da die Streckung der Stadtteile die Auflösung erheblich beeinträchtigen würde. Wichtig ist zudem, das Coordinate-Reference-System (CRS) der Stadt Freiburg auf 4326 zu transformieren, da alle folgenden Daten automatisch in diesem CRS geladen werden und so kompatibel sind. Bei einem CRS ist es wichtig, dass es die Region, in welcher man mit Geodaten arbeitet, möglichst real darstellt, d.h. keine Nord-Süd- oder Ost-West-Verzerrung stattfindet.

Im obigen Shapefile kann man die Umrisse der relevanten Stadtviertel erkennen. Im späteren Verlauf werden diese zu einem einzigen Geometrie zusammengefügt, sodass nur noch der äußere Rand als Abgrenzung dient.

Laden der Basemap

Der Hintergund für die finale Darstellung wird mit get_stamenmap geladen. Hierfür werden Daten für die bounding box (BB) benötigt. Die BB von Freiburg wird generiert und an allen Seiten manuel ein wenig erweitert, um das passende Ausmaß zu finden. Wichtig ist, dass die Zahlen nicht zu viele Nachkommastellen haben, da die Funktion sonst Probleme bekommt. Anschließend wird das Freiburg Shapefile zu einem einzigen shape vereint.

Laden der Naherholungsbebiet-Datensätze am Beispiel der Gewässerdaten

Als nächster Schritt werden die Geodaten der Naherholungsgebiete in und um Freiburg geladen. Diese Datensätze werden von OpenStreetMap bereitgestellt, einer frei zugänglichen, kostenlosen Ansammlung von Geodaten. Im folgenden wird auf die genauer auf die Vorgehensweise zum Erhalt der Gewässerdaten eingegangen. Bei allen anderen Typen von Naherholungsgebieten erfolgen ähnliche Schritte, welche allerdings zum Verständnis nicht notwendigerweise erklärt werden müssen. Die Auswahlkriterien zur Umstrukturierung und Selektierung der einzelnen Daten unterscheiden sich natürlich von Typ zu Typ. Allerdings basieren diese nur auf subjektiver Meinung und nicht auf einem objektiven Auswahlverfahren. Wichtig beim Einladen der Daten ist, sowohl die Polygone, als auch die Multipolygone, zu “bereinigen” und anschließend in ein Multipolygon umzuwandeln. Ein Multipolygon erlaubt es, ein nicht zusammenhängendes Gebiet, als ein einziges shape zu verwenden. Ein Grund, ein shape zu entfernen, war die Fläche. Ich habe mich für eine minimale Größe von 10000 m2 entschieden, da nicht jeder Teich ein Naherholungsgebiet darstellt. Dies kann natürlich je nach Bedarf angepasst werden. Die Dreisam stellt einen besonderen Fall dar. Auch sie wird als Naherholungsgebiet angesehen. Zuerst habe ich sie als Multilinestring über einen Fluss-Datensatz eingelesen. Später ergibt es allerdings Probleme, da es beim bescheiden und übereinanderlegen von Shapefiles einfacher ist, wenn die Dreisam ein Mutltipolygon ist und nicht nur ein einfacher “Strich”. Im See-Datensatz ist sie als Multipolygon, also als Fläche und nicht als “Strich”, aufgelistet und wird von mir verwendet.

Der nachfolgende Code beschreibt den Download der Daten, die Umstrukturierung und den Befehl, die Geodaten grafisch darzustellen.

fr_lake <- opq(bbox = myLocation, timeout = 300) %>%
  add_osm_feature(key = "natural", value= "water") 

fr_lake_sf <- osmdata_sf(fr_lake)

#get all the lakes multipolygons
fr_lake_sf1 <- fr_lake_sf$osm_multipolygons
fr_lake_sf1 <- fr_lake_sf1[fr_lake_sf1$name != "",]#take out lakes without a name
lakes_final1 <- fr_lake_sf1[as.numeric(st_area(fr_lake_sf1))>10000,]
lakes_final1 <- st_union(lakes_final1)
#dreisam hier als multipolygon -> wichtig für später!!!

#get all the lakes polygons
fr_lake_sf2 <- fr_lake_sf$osm_polygons
fr_lake_sf2 <- fr_lake_sf2[which(fr_lake_sf2$name !=""),]
fr_lake_sf2$area <- as.numeric(st_area(fr_lake_sf2))
lakes_final2 <- fr_lake_sf2[fr_lake_sf2$area>10000,]
lakes_final2 <- st_union(lakes_final2)

fr_lakes_shape_final <- st_union(lakes_final1,lakes_final2, quiet = TRUE)
## although coordinates are longitude/latitude, st_union assumes that they are planar
plot(fr_lakes_shape_final, col="blue")

Laden des Wohngebiets in Freiburg

Um die Distanzen zum nächsten Naherholungsgebiet zu berechnen, müssen wir ein Rastergrid erstellen, welche die Form Freiburgs hat. Allerdings macht es nur Sinn, die Fläche zu beurteilen, welche auch primär als Wohnraum genutzt wird. Es wird zunächst der Wohnraum im kompletten Freiburger Gebiet eingeladen und anschließend mit dem Befehl st_intersection auf das zu begutachtende Gebiet gekürzt.

## Warning: attribute variables are assumed to be spatially constant throughout all
## geometries

Erstellen des Rasters

Um später die Abstände zu dem nächsten Naherholungsgebiet zu berechnen, muss zunächst entschieden werden, von was der Abstand gemessen wird. Ich habe mich dazu entschieden, ein Raster (oder Zellennetz) zu erstellen. Hier wird ein Punktnetz über Freiburg gelegt, bei dem alle Punkte seitlich den gleichen Abstand zueinander haben. Aufgrund der Rechenleistung wird nur eine Auflösung von 50x50m pro Punkt verwendet. Im Falle einer sehr hohen Kapazität, könnte auch z.B. ein Punkt pro Quadratmeter verwendet werden. Da das EPSG 4326 in Grad und nicht in Metern rechnet, muss das Freiburg-Shapefile in ein CRS transformiert werden, welches als Einheit Meter hat und für Süddeutschland geeignet ist. Nur mit Metern als Einheit kann die Funktion st_distance später verwendet werden. Auch muss die Form als “center”, also runder Punkt/Kreis, angegeben werden, da nur so die Entfernung gemessen werden kann. Bei anderen Formen hat das Programm Probleme.

freiburg <- st_transform(fr_res_cropped, 32632)#transform eposg to one with unit meter, for calculating distance
plot(freiburg$geometry,col="brown")

grid <- st_make_grid(freiburg, cellsize = 50, what = "centers")
plot(grid)

Zurechtschneiden des Haupt-Multipolygon

Die Funktion st_difference berechnet den Abstand eines jeden Punktes im Raster zum nächsten Punkt auf einem “string”. Wir müssen dazu also zuerst das Stadtgebiet Freiburg so gestalten, dass alle Naherholungsgebiete als neue “Stadtgrenze” angesehen werden und anschließend das überbleibende Multipolygon in ein Multilinestring transformieren. Der Abstand der Rasterpunkte zum diesem Multilinestring ist das Ziel. Zu beachten ist die Reihenfolge der Shapefiles bei st_difference. Ansonsten wird ungewollt das benötigte Gebiet herausgeschnitten. Zusätlich muss immer das CRS beachtet werde, damit beide einheitlich sind.

Beispiel für “cropping” mit Stadtgrenze- und Park-Shapefile

fr_border_crop <- st_difference(fr_border_crop,fr_park_shape_final)
## although coordinates are longitude/latitude, st_difference assumes that they are planar
plot(fr_border_crop,col="orange")

Berechnung der Distanz

Nachdem die Distanz jedes einzelnen Rasterpunktes berechnet wurde, werden alle Daten in einen Dataframe umgewandelt. Die Funktion st_coordinates ermöglicht uns, die Koordinaten der Rasterpunkte zu erhalten. Anschließend plotten wir den Dataframe, allerdings noch im CRS 32632. Als nächsten Schritt transformieren wir die Daten in ein simple feature Format und ändern das CRS, sodass alle Daten wieder im CRS 4326 sind.

Auswertung

Erste Betrachtung der Distanz-Daten

Im Histogram ist zu erkennen, dass es, mit der Entfernung zu einem Naherholungsgebiet, eine Abnahme der Wohnfläche in Freiburg gibt. Das heißt aber auch, dass viele Bürger relativ nah an solchen Gebieten wohnen, es aber auch eine Minderheit gibt, welche weiter weg wohnt. Zusätzlich muss man anmerken, dass Wohngebiet nicht gleich Einwohner bedeutet. Hier geht es nur um die Wohnfläche, nicht darum, wie viele Leute tatsächlich dort wohnen.

hist(dist_sf$dist, main="Histogram of distance to closest recreational area", xlab="Distance in km (with median in red and mean in turquoise)", col="grey")
abline(v=median(dist_sf$dist),col="red", lwd=2)
abline(v=mean(dist_sf$dist),col="turquoise", lwd=2)

mean(dist_sf$dist)
## [1] 0.5206377
median(dist_sf$dist)
## [1] 0.3243442

Betrachtet man den Durchschnitt, so sieht man, dass die Wohnfläche durchschnittlich 0,26 km von Naherholungsgebieten entfernt ist. Der Median liegt bei 0,21 km. D.h., mehr als die Hälfte der Wohnfläche ist unterdurschnittlich weit entfernt, was eine Benachteiligung einer Minderheit der Wohnfläche vermuten lässt.

Erste graphische Darstellung auf Basemap

Es lassen sich bereits jetzt einige Hotspots erkennen. Zur besseren Einordnung werden die Grenzen der Freiburger Stadtteile mitgeplottet.

district_line <-st_cast(districts_final,"MULTILINESTRING", quiet = TRUE)


ggmap(myMap)+
  geom_sf(data=dist_sf,inherit.aes = FALSE,aes(col = dist),size=0.1)+scale_color_gradient(
  low = "green",
  high = "red",
  space = "Lab",
  na.value = "grey50",
  guide = "colourbar")+
  geom_sf(data=district_line$geometry,inherit.aes = FALSE)
## Coordinate system already present. Adding new coordinate system, which will replace the existing one.

Analyse der einzelnen Stadtteile

Um zu berechnen, welche Stadtteile am meisten betroffen sind, werden für jeden Stadtteil die Distanzen der Raterpunkte extrahiert und gemittelt. Anschließend werden sie in einen Dataframe übertragen und der Größe nach geordnet.

#head(districts_ordered)

Brühl, St. Georgen und Haslach haben die Wohnfläche, welche im Durchschnitt am weitesten von einem Naherholungsgebiet entfernt ist. Brühl ist v.a. ein Industriegebiet, was als Erklärung dafür dienen kann. St. Georgen überrascht, da es als Familienstadtteil bekannt ist und am Rande Freiburgs liegt. Haslach liegt zentral und hat nicht den Ruf eine einkommensstarke Bevölkerung zu haben. Dies sind allerdings nur Spekulationen, auf die später etwas mehr eingegangen wird.

#head(districts_ordered_2)

Anhand der Standardabweichung lässt sich erkennen, wie einheitlich die Daten pro Stadtteil sind. Auffällig hier ist, das St. Georgen wieder oben mit dabei ist. Es muss also einige sehr entfernte Flächen und einige sehr nahe Flächen geben.

Erstellen der finalen Karte

Es werden hier Shapefiles der Stadtteile erstellt, welche den höchsten Durchschnitt bezüglich der Entfernung haben. Anschließend werden diese zusätzlich auf die vorherig erstellte Map geplottet. Man hat also eine Hintergrundkarte, das Raster mit den Entfernungsdaten, die Stadtteilgrenzen, sowie die drei Stadtteile mit dem höchsten Durchschnitt.

## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)):
## Zeichensatzfamilie in der Windows Zeichensatzdatenbank nicht gefunden
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## Zeichensatzfamilie in der Windows Zeichensatzdatenbank nicht gefunden

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## Zeichensatzfamilie in der Windows Zeichensatzdatenbank nicht gefunden

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## Zeichensatzfamilie in der Windows Zeichensatzdatenbank nicht gefunden

Auf der Karte sieht man die Grenzen der Stadtteile in schwarz, sowie die Grenzen der drei am schlechtesten bewerteten Stadtteile in rot. Man kann zusätzlich an der heatmap erkennen, dass vor allem im Freiburger Westen die Entfernungen größer sind. Die Nähe zum Schwarzwald bietet dem Osten einen entscheidenden Vorteil, obwohl die meisten größeren Gewässer am Westrand Freiburgs sind. Brühl lässt sich dadurch erklären, dass es sowohl weit weg vom Schwarzwald ist, als auch vom Industriegebiet im Westen benachteiligt wird. In Haslach gibt es ein Gebiet im Osten, welches die schlechte Bewertung verursacht. Auch die Unterwiehre ist hiervon betroffen, allerdings sind die Werte der Oberwiehre so gut, dass es im Durchschnitt nicht ins Gewicht fällt. St. Georgen hat im Süden sehr gute Werte. Hier ist der Schönberg, welcher durch seine Wälder viel Raum zur Erholung bietet. Der Norden ist allerdings etwas benachteiligt. Hier schließen Felder an die Dtadtgrenze an, welche in diesem Projekt nicht als Naherholungsgebiet gewertet werden. In folgendem Paper aus dem Jahr 2010 (“https://www.freiburg.de/pb/site/Freiburg/get/documents/freiburg/daten/statistik/statistik_veroeffentlichungen_buergerumfrage_2010-NIEDRIG.pdf”) werden die Bürger u.a. nach ihrer Zufriedenheit im Wohnbezirk gefragt. Brühl landet hier auf dem letzten Platz, auch Haslach ist im unteren Drittel zu finden. St. Georgen Süd ist weit oben anzutreffen, während St. Georgen Nord im unteren Mittelfeld ist. Die Erreichbarkeit von Naherholungsgebieten mag vielleicht nicht der Hauptgrund sein, und für eine spezifischere Analyse müssten mehrere potentielle Ursache mit einbezogen werden, aber die Daten stimmen mit den Werten aus diesem Projekt überein.

Schwächen der Auswertung

Zum einen muss man den OSM-Daten vertrauen, da man keine Möglichkeit hat zu kontrollieren, ob wirklich alle Shapefiles der Wirklichkeit entsprechen. Man kann die wichtigsten Datenpunkte überprüfen, dafür ist aber eine gute Ortskenntniss Vorraussetzung. Des weiteren ist die Karte ohne Einbeziehung der tatsächlichen Bevölkerungsverteilung entstanden. Sie representiert lediglich die Wohnfläche, aber nicht, wie viele Leute tatsächlich auf dem Gebiet leben und somit jeweils betroffen sind.

Fazit

Insgesamt kann man sagen, dass nicht alle Wohngebiete den gleichen Zugang zu Naherholungsgebieten haben. Manche weisen eine Distanz von bis zu knapp einem Kilometer auf. Sollte es eine Ausgangsbeschränkung durch Corona geben, so könnten manche Wohngebiete komplett ausgeschlossen werden. Dies hängt natürlich von den einzelnen Auflagen ab. Auch ohne den Coronavirus muss gesagt werden, dass es einige Bezirke gibt, auf die mehr eingegangen werden muss. Es ist wahrscheinlich nicht sinnvoll ein Industriegebiet umzubauen, um die wenigen Bewohner zufrieden zu stellen. Allerdings sind Haslach und St. Georgen primär Wohngebiete, in denen eine Verbesserung der Situation durchaus wünschenswert wäre.

Previous
Next