Logo / Wappen
[Platzhalter]

Hinweis – Prototyp in Entwicklung: Dieses Dokument ist ein High-Fidelity-Mockup und befindet sich noch in der Entwicklung. Einige Inhalte sind bewusst als Platzhalter (Lorem ipsum) gesetzt. Die Code-Chunks der einzelnen Abschnitte können über den Button „Code” oben rechts eingeblendet werden. Parameter wie Flächengröße bei der Symbolisierung der Karte oder Eigentumsstruktur bei dem Balkendiagramm können nach Bedarf beliebig für andere Parameter ausgetauscht werden. Die hier verwendeten Angaben sind als Vorschläge zu verstehen.

Einleitung

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Dieses Mockup visualisiert die Kleingartenanlagen (KGA) im Berliner Ortsteil Westend (Bezirk Charlottenburg-Wilmersdorf). Die Daten stammen aus den WFS-Diensten des Geoportals Berlin (GDI-Berlin) und werden direkt über eine OGC-Schnittstelle abgerufen.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.


Datenabruf

Die Geodaten werden direkt von den WFS-Diensten der GDI Berlin bezogen. Für den Ortsteil Westend im Bezirk Charlottenburg-Wilmersdorf wird der Dienst alkis_ortsteile verwendet, da Westend kein eigenständiger Berliner Bezirk ist.

# WFS-URLs
wfs_ortsteile <- "https://gdi.berlin.de/services/wfs/alkis_ortsteile"
wfs_kga       <- "https://gdi.berlin.de/services/wfs/kleingarten"

# Ortsteile abrufen
url_ot <- parse_url(wfs_ortsteile)
url_ot$query <- list(
  service      = "wfs",
  version      = "2.0.0",
  request      = "GetFeature",
  typenames    = "alkis_ortsteile:ortsteile",
  outputFormat = "GML2"
)
ber_OT <- read_sf(build_url(url_ot))
ber_OT <- st_set_crs(ber_OT, 25833)

# Westend isolieren
Westend <- ber_OT |>
  select(nam, geom) |>
  subset(nam == "Westend")

# 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"
)
be_KGA <- read_sf(build_url(url_kga))
be_KGA <- st_set_crs(be_KGA, 25833)
be_KGA$zwischenpaechter <- as.factor(be_KGA$zwischenpaechter)
be_KGA[, c("gml_id", "ogr_fid", "anlagennummer")] <- NULL

Datenverarbeitung

# Verschneidung: Kleingärten innerhalb Westend
KGA <- st_intersection(be_KGA, Westend)
KGA[, "nam"] <- NULL

# Randanlagen mit fremdem Zwischenpächter ausschließen
KGA_Grenze <- be_KGA |>
  subset(st_overlaps(be_KGA, Westend, sparse = FALSE))

KGA_Aus <- KGA_Grenze[
  !KGA_Grenze$zwischenpaechter %in% c("BV Charlottenburg", "BLW"),
]

KGA_WE <- setdiff(KGA, KGA_Aus)

# Spaltennamen anpassen
colnames(KGA_WE) <- c("Name", "Straße", "Größe", "Parzellenanzahl",
                       "Eigentum", "Zwischenpächter", "geom")

# Eigentum codieren
KGA_WE$Eigentum[KGA_WE$Eigentum == 1] <- "Land"
KGA_WE$Eigentum[KGA_WE$Eigentum == 0] <- "Bezirk"

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Die Verschneidung erfolgt mit st_intersection(), um auch randlich überlappende Anlagen flächengenau zuzuschneiden. Anlagen, deren Zwischenpächter nicht dem Bezirksverband Charlottenburg oder der Bahn-Landwirtschaft (BLW) zuzuordnen sind, werden als Randfälle ausgeschlossen.


Interaktive Karte

tmap_mode("view")

# Zusatzspalten für Darstellung
KGA_WE$Groesse_ha <- round(as.numeric(KGA_WE$Größe) / 10000, 2)

KGA_WE$Groessenklasse <- cut(
  as.numeric(KGA_WE$Größe),
  breaks = c(0, 10000, 50000, 100000, Inf),
  labels = c("< 1 ha", "1–5 ha", "5–10 ha", "> 10 ha"),
  include.lowest = TRUE
)

KGA_WE$Parzellenanzahl[is.na(KGA_WE$Parzellenanzahl)] <- "keine Angabe"
KGA_WE$Zwischenpächter[is.na(KGA_WE$Zwischenpächter)] <- "keine Angabe"
KGA_WE$Eigentum[is.na(KGA_WE$Eigentum)] <- "keine Angabe"

tm_shape(KGA_WE) +
  tm_polygons(
    fill         = "Groessenklasse",
    fill.scale   = tm_scale_categorical(
      values = c("< 1 ha"   = "#b8e4b8",
                 "1–5 ha"   = "#5dab5d",
                 "5–10 ha"  = "#2d7a2d",
                 "> 10 ha"  = "#1a4d1a")
    ),
    fill.legend  = tm_legend(title = "Flächengröße"),
    fill_alpha   = 0.75,
    col          = "#2d7a2d",
    lwd          = 1.2,
    hover        = "Name",
    popup.vars   = c(
      "Name"              = "Name",
      "Straße"            = "Straße",
      "Flächengröße (m²)" = "Größe",
      "Flächengröße (ha)" = "Groesse_ha",
      "Größenklasse"      = "Groessenklasse",
      "Parzellenanzahl"   = "Parzellenanzahl",
      "Zwischenpächter"   = "Zwischenpächter",
      "Eigentum"          = "Eigentum"
    )
  ) +
  tm_shape(Westend) +
  tm_lines(
    col = "#004282",
    lwd = 2.5
  ) +
  tm_options(
    basemap.server = c(
      "Esri.WorldTopoMap",
      "OpenStreetMap.DE",
      "Esri.WorldImagery"
    ),
    basemaps.alpha = c(1, 1, 1)
  ) +
  tm_title_in(
    "Kleingartenanlagen in Berlin-Westend",
    size       = 1.2,
    color      = "#004282",
    fontface   = "bold",
    bg         = TRUE,
    bg.color   = "white",
    bg.alpha   = 0.8,
    padding    = 0.45,
    position   = tm_pos_in("left", "top")
  ) +
  tm_scalebar(position = tm_pos_in("right", "bottom")) +
  tm_credits(
    "© 2026 Paul Stolpmann | Daten: Geoportal Berlin, WFS Kleingarten & ALKIS Bezirke",
    size = 0.7,
    position = tm_pos_in("left", "bottom")
  )

Eigentumsstruktur

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Das folgende Diagramm zeigt die Verteilung der Kleingartengesamtfläche nach Eigentumsstruktur (Land Berlin vs. Bezirk) auf Basis der amtlichen WFS-Sachdaten.

eigentum_df <- KGA_WE |>
  as.data.frame() |>
  filter(Eigentum != "keine Angabe") |>
  group_by(Eigentum) |>
  summarise(
    Flaeche_ha = sum(as.numeric(Größe), na.rm = TRUE) / 10000,
    Anlagen    = n(),
    .groups    = "drop"
  )

ggplot(eigentum_df, aes(x = Eigentum, y = Flaeche_ha, fill = Eigentum)) +
  geom_bar(stat = "identity", width = 0.5,
           color = "#333333", linewidth = 0.3, show.legend = FALSE) +
  geom_text(
    aes(label = paste0(round(Flaeche_ha, 1), " ha\n(", Anlagen, " KGA)")),
    vjust = -0.35, size = 3.2, fontface = "bold", lineheight = 0.9
  ) +
  scale_fill_manual(values = c("Land" = "#2d7a2d", "Bezirk" = "#5dab5d")) +
  scale_y_continuous(expand = expansion(mult = c(0, 0.22))) +
  labs(
    x     = NULL,
    y     = "Fläche (ha)",
    title = "Kleingartenfläche nach Eigentumsstruktur"
  ) +
  theme_classic(base_size = 11) +
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5, color = "#333333"),
    axis.text  = element_text(color = "#444444"),
    axis.line  = element_line(color = "#cccccc")
  )


Top-5 größte Anlagen

## Top-5 größte Anlagen

KGA_WE |>
  st_drop_geometry() |>
  arrange(desc(as.numeric(Größe))) |>
  select(Name, Straße, Größe, Groesse_ha, Parzellenanzahl) |>
  head(5) |>
  knitr::kable(
    col.names = c("Name", "Straße", "Fläche (m²)", "Fläche (ha)", "Parzellen")
  )
Name Straße Fläche (m²) Fläche (ha) Parzellen
Bismarcksruh - KGA Spandauer Damm 68405 6.84 151
Westend - KGA Spandauer Damm 58897 5.89 144
Spreeblick - KGA Wiesendamm 55454 5.55 131
Wochenend I und II - KGA Spandauer Damm 50295 5.03 146
Golfplatz - KGA Spandauer Damm 43973 4.40 90

Übersicht der Anlagen

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Die nachfolgende Tabelle gibt einen Überblick über alle im Ortsteil Westend verorteten Kleingartenanlagen mit den wichtigsten Sachdaten.

DT::datatable(
  KGA_WE |>
    st_drop_geometry() |>
    select(Name, Straße, Größe, Groesse_ha, Parzellenanzahl,
           Groessenklasse, Eigentum, `Zwischenpächter`),
  filter = "top",
  options = list(
    pageLength = 8,
    autoWidth = TRUE,
    language = list(url = "//cdn.datatables.net/plug-ins/1.10.11/i18n/German.json")
  )
)

Metadaten

Name Paul Stolpmann
Matrikelnummer 110129
Datum 2026-06-04
Modul Interaktive Geomediengestaltung
Aufgabe High-Fidelity-Mockup Kleingartenanlagen
Ortsteil Berlin-Westend (Charlottenburg-Wilmersdorf)
Datenquelle GDI Berlin – WFS alkis_ortsteile, kleingarten
Koordinatensystem EPSG:25833 (UTM 33N)

Umsetzung in R mit sf, tidyverse, tmap, DT und httr. Vielen Dank an das R Core Team und den Entwicklern der Pakete und Hintergrunddaten, die dies ermöglicht haben.