Arbeitsplatz aufräumen und R-Bibliotheken laden
rm(list=ls())
#für Datenbearbeitung
library(tidyverse)
#für die räumliche Analyse und Darstellung von Geodaten
library(sf)
#für die Kommunikation mit APIs
library(ows4R)
library(httr)
#für Erstellung von statischen und interaktiven Web-Karten
library(tmap)
library(tmaptools)
library(plotly)
Geodaten der Ortsteile abrufen
#Verbindung mit der API vom Geoportal Berlin aufbauen
wfs_ort <- "https://gdi.berlin.de/services/wfs/alkis_ortsteile"
ort_client <- WFSClient$new(wfs_ort, serviceVersion = "2.0.0")
ort_client$getFeatureTypes(pretty = TRUE)
## name title
## 1 alkis_ortsteile:ortsteile Ortsteile
#Abfrage der vorliegenden Datenformate
ort_client$ #Rede mit dem Dienst
getCapabilities()$ #Frage nach den Fähigkeiten
getOperationsMetadata()$ #Hole die Metadaten
getOperations() %>% # In den Operationen sind die Formate parametrisiert
purrr::map(function(x){x$getParameters()}) %>% #Hole diese Parameter
purrr::pluck(3, "outputFormat") #Suche das Feld 'outputFormat'
## [1] "application/gml+xml; version=3.2" "GML2"
## [3] "application/json" "geopackage"
## [5] "geopkg" "gml3"
## [7] "gml32" "gpkg"
## [9] "json" "text/xml; subtype=gml/2.1.2"
## [11] "text/xml; subtype=gml/3.1.1" "text/xml; subtype=gml/3.2"
#Geodaten zu den Ortsteile abrufen
url_ort <-parse_url(wfs_ort)
url_ort$query <- list(service = "wfs",
version = "2.0.0",
request = "GetFeature",
typenames = "alkis_ortsteile:ortsteile",
outputFormat='GML2')
request_ort <- build_url(url_ort)
ort<- read_sf(request_ort)
Geodaten des Kleingartenbestands abrufen
#Verbindung mit der API vom Geoportal Berlin aufbauen
wfs_kga <- "https://gdi.berlin.de/services/wfs/kleingarten"
kga_client <- WFSClient$new(wfs_kga, serviceVersion = "2.0.0")
kga_client$getFeatureTypes(pretty = TRUE)
## name title
## 1 kleingarten:kleingarten Kleingartenbestand Berlin
#Abfrage der vorliegenden Datenformate
kga_client$ #Rede mit dem Dienst
getCapabilities()$ #Frage nach den Fähigkeiten
getOperationsMetadata()$ #Hole die Metadaten
getOperations() %>% # In den Operationen sind die Formate parametrisiert
purrr::map(function(x){x$getParameters()}) %>% #Hole diese Parameter
purrr::pluck(3, "outputFormat") #Suche das Feld 'outputFormat'
## [1] "application/gml+xml; version=3.2" "GML2"
## [3] "application/json" "geopackage"
## [5] "geopkg" "gml3"
## [7] "gml32" "gpkg"
## [9] "json" "text/xml; subtype=gml/2.1.2"
## [11] "text/xml; subtype=gml/3.1.1" "text/xml; subtype=gml/3.2"
#Geodaten zu den Kleingärten abrufen
url_kga <-parse_url(wfs_kga)
url_kga$query <- list(service = "wfs",
version = "2.0.0",
request = "GetFeature",
typenames = "kleingarten:kleingarten",
outputFormat='GML2')
request_kga <- build_url(url_kga)
kga <- read_sf(request_kga)
Daten untersuchen
#Ortsteile untersuchen
View(ort)
head(ort)
## Simple feature collection with 6 features and 6 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 384834.8 ymin: 5814275 xmax: 408990.7 ymax: 5825412
## CRS: NA
## # A tibble: 6 × 7
## gml_id uuid sch nam gdf bezeich geom
## <chr> <chr> <chr> <chr> <dbl> <chr> <MULTIPOLYGON>
## 1 ortsteile.DEBE00YY… DEBE… 1100… Hell… 8.15e6 AX_Kom… (((404161.5 5823125, 404…
## 2 ortsteile.DEBE00YY… DEBE… 1100… Mahl… 1.30e7 AX_Kom… (((407376.3 5820918, 407…
## 3 ortsteile.DEBE00YY… DEBE… 1100… Kaul… 8.69e6 AX_Kom… (((405075.4 5820764, 405…
## 4 ortsteile.DEBE01YY… DEBE… 1100… Hans… 5.28e5 AX_Kom… (((387740.3 5820442, 387…
## 5 ortsteile.DEBE01YY… DEBE… 1100… Gesu… 6.13e6 AX_Kom… (((390734.5 5825360, 390…
## 6 ortsteile.DEBE01YY… DEBE… 1100… Wedd… 9.25e6 AX_Kom… (((388622.1 5824819, 388…
#Kleingärten untersuchen
View(kga)
head(kga)
## Simple feature collection with 6 features and 9 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 379678.4 ymin: 5825249 xmax: 389715.2 ymax: 5830703
## CRS: NA
## # A tibble: 6 × 10
## gml_id ogr_fid anlagennummer objektname strasse flaechengroesse
## <chr> <int> <chr> <chr> <chr> <dbl>
## 1 kleingarten.1 1 12001 Am Brocken II Wittest… 9271
## 2 kleingarten.2 2 12203 Schönholz II Klemkes… 6698
## 3 kleingarten.3 3 12056 Schweinekopf Großkop… 9531
## 4 kleingarten.4 4 12028 Frohsinn I Beneken… 39736
## 5 kleingarten.5 5 12017 Frühauf/Marderweg Am Nord… 3139
## 6 kleingarten.6 6 12075 Waldessaum Wesselb… 149159
## # ℹ 4 more variables: parzellenanzahl <int>, landoderbezirk <int>,
## # zwischenpaechter <chr>, geom <MULTIPOLYGON>
Koordinatensystem zuweisen, da beide Datensätze noch keins besitzen
ort <- st_set_crs(ort, 25833)
kga <- st_set_crs(kga, 25833)
Ortsteil Biesdorf auswählen mittels Piping
Biesdorf <- ort |>
select(c(nam, geom)) |>
subset(nam=='Biesdorf')
Räumliche Verschneidung der Kleingärten mit Biesdorf mittels Piping
KGA_gesamt <- kga |>
subset(st_intersects(kga, Biesdorf, sparse=FALSE))
Erste Visualisierung der Kleingärten in Biesdorf zur Überprüfung
tmap_mode("view") #Interaktive Karte
## ℹ tmap modes "plot" - "view"
## ℹ toggle with `tmap::ttm()`
tm_shape(Biesdorf) + #Geometrie des Ortsteil
tm_lines() + #Linie ohne Füllfarbe
tm_shape(KGA_gesamt) + #Geometrie der Kleingärten
tm_polygons(fill="objektname") #nach Objektname befülltes Polygon
Grenzüberschreitende Kleingärten auswählen und anzeigen
KGA_grenze <- kga |>
subset(st_overlaps(kga, Biesdorf, sparse=FALSE))
View(KGA_grenze)
Finales Objekt der Kleingärten in Biesdorf erstellen. Bei den grenzüberschreitenden Kleingärten werden nur Anlagen mit Zwischenpächter „BV Hellersdorf“ berücksichtigt.
KGA_aus <- KGA_grenze[!KGA_grenze$zwischenpaechter=='BV Hellersdorf',]
KGA <- setdiff(KGA_gesamt, KGA_aus)
Inhalte der Spalte “landoderbezirk” anpassen für die Verständlichkeit
KGA$landoderbezirk[KGA$landoderbezirk==1] <- 'Land'
KGA$landoderbezirk[KGA$landoderbezirk==0] <- 'Bezirk'
Klassifizierung der Anlagengröße in der neuen Spalte “groessenklasse” für die Legende
KGA$groessenklasse <- cut(
KGA$flaechengroesse,
breaks = c(0, 7500, 15000, Inf),
labels = c(
"Klein (< 7.500)",
"Mittel (7.500–15.000)",
"Groß (> 15.000)"),
include.lowest = TRUE
)
Erklärungen der Parameter zur Optimierung der Karte:
tm_shape(Biesdorf) -> Geometrie des Ortsteil
tm_lines col, lwd -> Strichfarbe und -breite des
Ortsteil
tm_shape(KGA) -> Geometrie der Kleingärten
tm_polygons col, lwd -> Strichfarbe und -breite der
Kleingärten
tm_polygons fill, fill.scale -> Füllfarbe der
Kleingärten nach Spalte “groessenklasse”
fill.legend -> Legende erzeugen mit Titel
hover -> Hover-Funktionalität hinzufügen, welche den
Namen der Anlage zeigt
popup.vars -> Relevante Attribute auswählen und
Pop-Up-Namen anpassen
tm_options -> Hintergundkarten hinzufügen und
Transparenz angeben
tm_title_in -> Titel hinzufügen
tm_credits -> Quellenangaben hinzufügen
tmap_mode("view")
## ℹ tmap modes "plot" - "view"
tm_shape(Biesdorf) +
tm_lines(col = "#525252", lwd = 2) +
tm_shape(KGA) +
tm_polygons(col = "#004529", lwd = 1,
fill = "groessenklasse",
fill.scale = tm_scale_categorical(values = c("#d9f0a3", "#78c679", "#238443")),
fill.legend = tm_legend(title = "Anlagengröße in m²"),
hover ='objektname',
popup.vars = c('Straße'='strasse',
'Flächengröße (m²)'='flaechengroesse',
'Parzellenanzahl'='parzellenanzahl',
'Zwischenpächter'='zwischenpaechter',
'Eigentum'='landoderbezirk',
'Anlagennummer'='anlagennummer')) +
tm_options(basemap.server = c("Esri.WorldTopoMap", "OpenStreetMap.DE"), basemaps.alpha = c(0.7, 0.7)) +
tm_title_in("Kleingärten in Biesdorf") +
tm_credits('Ⓒ2026 K. Borchert, Daten aus Geoportal Berlin')