Datenquellen

Amtliche Flächenstatistik

Im Rahmen der Flächenstatistik können von der Landesebene bis hinunter auf die Gemeindeebene die Flächennutzungsarten mit den dazugehörigen Flächengrößen ausgewiesen werden. Es wird die tatsächliche Nutzung der Flächen erhoben. Die Statistik basiert auf dem Amtlichen Liegenschaftskataster-Informationssystem (ALKIS). Digital ausgemessenen Flächen wird hier eine Nutzungsart zugeordnet, wie Wohnbaufläche, gewerblich genutzte Fläche oder Fläche gemischter Nutzung.

  • Berichtszeitraum/-zeitpunkt: 31. Dezember des Erhebungsjahres
  • Periodizität: Jährlich

Eine Umstellung der Erhebungsmethodik brachte eine erhöhte Genauigkeit, aber auch einen Bruch in der Vergleichbarkeit mit früheren Jahren mit sich. Aus diesem Grund haben wir als Untersuchungszeitraum für die Datenauswertung die Entwicklung von Ende 2014 bis Ende 2016 gewählt.

Fortschreibung des Bevölkerungsstandes

Veröffentlicht durch das Bayerische Landesamts für Statistik

Gewerbeflächenpotential

Anbieter und Kommunen stellen im IHK-Portal potenzielle Gewerbeflächen ein. Das geschieht allerdings auf freiwilliger Basis: Die Auflistung erhebt also keinen Anspruch auf Vollständigkeit. Bei besonders begehrten Flächen bedienen sich Gemeinden möglicherweise dieses Instruments nicht. Zu beachten ist aber auch, dass ebenso Konversionsflächen verzeichnet sind. Das können zum Beispiel ehemalige Flächen der Bundeswehr sein, für die eine gewerbliche Nachnutzung erwünscht ist.

Einlesen der Daten

population <- read_csv2("./input/12411-001.csv",
  col_names = FALSE, col_types = cols(.default = col_character()),
  comment = "#",
  skip = 5,
  locale = locale(encoding = "ISO-8859-14", decimal_mark = ",", grouping_mark = "."),
  na = c("", ".", "/")
)

employees <- read_csv2("./input/13111-001.csv",
  col_names = FALSE, col_types = cols(.default = col_character()),
  comment = "#",
  skip = 8,
  locale = locale(encoding = "ISO-8859-14", decimal_mark = ",", grouping_mark = "."),
  na = c("", ".", "/")
)

colnames(population) <- c("id", "name", 2011:2016)
population[population == "-"] <- 0
population <- population %>%
  filter(name != "Gemeindefreie Gebiete")

colnames(employees) <- c("id", "name", 2011:2016)
employees[employees == "-"] <- 0
employees <- employees %>%
  filter(name != "Gemeindefreie Gebiete")

area14_ALKIS <- import_area("33111-001r", 2014)
area15_ALKIS <- import_area("33111-001r", 2015)
area16_ALKIS <- import_area("33111-001r", 2016)

area15_ADV <- import_area("33111-101r", 2015)
area14_ADV <- import_area("33111-101r", 2014)
area13_ADV <- import_area("33111-101r", 2013)
area12_ADV <- import_area("33111-101r", 2012)
area11_ADV <- import_area("33111-101r", 2011)

area_ALKIS <- area14_ALKIS %>%
  union(area15_ALKIS) %>% 
  union(area16_ALKIS)
area_ADV <- area11_ADV %>%
  union(area12_ADV) %>%
  union(area13_ADV) %>%
  union(area14_ADV) %>%
  union(area15_ADV)


potential <- 10430.5
potential_immediate <- 7799.5

Säubern der Daten

population <- population %>%
  gather(`2011`, `2012`, `2013`, `2014`, `2015`, `2016`, key = "year", value = "population")

population$year <- parse_integer(population$year)
population$population <- parse_integer(population$population)

employees <- employees %>%
  gather(`2011`, `2012`, `2013`, `2014`, `2015`, `2016`, key = "year", value = "employees")

employees$year <- parse_integer(employees$year)
employees$employees <- parse_integer(employees$employees)

Transformieren der Daten

start_year <- 2011
mid_year <- 2014

population <- population %>%
  mutate(magnitude = cut(population, c(0, 1000, 5000, 10000, 20000, 100000, Inf), labels = c("dorf (<1k)", "markt (<5k)", "kleinstadt-kl (<10k)", "kleinstadt-gr (<20k)", "mittelstadt (<100k)", "großstadt (>100k)"))) %>%
  mutate(municipality = str_length(id) >= 5 & gregexpr("\\(Lkr\\)", name) < 0) %>%
  mutate(bezirk = str_sub(id, 1, 3))

population1 <- population %>%
  filter(year == start_year) %>%
  select(id, name, municipality, bezirk, population)

population2 <- population %>%
  filter(year == mid_year) %>%
  select(id, population)

population3 <- population %>%
  filter(year == 2016) %>%
  select(id, population, magnitude)
  
growth_population <- population1 %>% inner_join(population2, by = "id") %>%
  mutate(population_abs1 = population.y - population.x) %>%
  mutate(population_rel1 = population_abs1 / population.x * 100) %>%
  inner_join(population3, by = "id") %>%
  mutate(population_abs2 = population - population.y) %>%
  mutate(population_rel2 = population_abs2 / population.y * 100) %>%
  mutate(population_abs = population_abs1 + population_abs2) %>%
  mutate(population_rel = population_abs / population.x * 100)

employees2 <- employees %>%
  filter(year == mid_year) %>%
  select(id, employees)

employees3 <- employees %>%
  filter(year == 2016) %>%
  select(id, employees)

growth_employees <- employees2 %>% inner_join(employees3, by = "id") %>%
  mutate(employees_abs2 = employees.y - employees.x) %>%
  mutate(employees_rel2 = employees_abs2 / employees.x * 100)

area_ADV <- area_ADV %>%
  mutate(SuV = catWohnen + `catGewerbe, Industrie` + `catsonstige Gebäude- und Freifläche` + `catBetriebsfläche (ohne Abbauland)` + catGrünanlage + `catsonstige Erholungsfläche` + catFriedhof + `catStraße, Weg, Platz` + `catsonstige Verkehrsfläche`)

area_ALKIS <- area_ALKIS %>% 
  mutate(gewerbeflaeche = cat12100 + cat12200) %>%
  mutate(cat12000 = gewerbeflaeche + cat12300 + cat12400) %>%
  mutate(cat18000 = cat18100 + cat18200 + cat18300 + cat18400) %>%
  mutate(cat31000 = cat31100 + cat31200 + cat31300 + cat31400 + cat31500) %>%
  mutate(cat10000 = cat11000 + cat12000 + cat13000 + cat14000 + cat15000 + cat16000 + cat17000 + cat18000 + cat19000) %>%
  mutate(cat20000 = cat21000 + cat22000 + cat23000 + cat24000 + cat25000 + cat26000) %>%
  mutate(cat30000 = cat31000 + cat32000 + cat33000 + cat34000 + cat35000 + cat36000 + cat37000) %>%
  mutate(cat40000 = cat41000 + cat42000 + cat43000) %>%
  mutate(SuV = cat10000 - cat14000 - cat15000 + cat20000)

area15_diff <- area15_ALKIS %>% 
  inner_join(area15_ADV, by = c("id", "name", "year")) %>%
  mutate(diff_rel = (cat11000 - catWohnen) / catWohnen * 100) %>%
  mutate(diff_abs = cat11000 - catWohnen) %>%
  select(id, name, cat11000, catWohnen, diff_rel, diff_abs)

growth_area_ALKIS <- (area_ALKIS %>% filter(year == mid_year) %>% select(-name, -year)) %>%
  inner_join(area_ALKIS %>% filter(year == 2016) %>% select(-name, -year), by = "id") %>%
  calc_delta(cat10000) %>%
  calc_delta(cat11000) %>%
  calc_delta(gewerbeflaeche) %>%
  calc_delta(cat12100) %>%
  calc_delta(cat12200) %>%
  calc_delta(cat12300) %>%
  calc_delta(cat12400) %>%
  calc_delta(cat13000) %>%
  calc_delta(cat14000) %>%
  calc_delta(cat15000) %>%
  calc_delta(cat16000) %>%
  calc_delta(cat17000) %>%
  calc_delta(cat18000) %>%
  calc_delta(cat19000) %>%
  calc_delta(cat20000) %>%
  calc_delta(cat21000) %>%
  calc_delta(cat22000) %>%
  calc_delta(cat23000) %>%
  calc_delta(cat24000) %>%
  calc_delta(cat25000) %>%
  calc_delta(cat26000) %>%
  # calc_delta(verkehrsflaeche)
  calc_delta(cat30000) %>%
  calc_delta(cat31000) %>%
  calc_delta(cat31100) %>%
  calc_delta(cat31200) %>%
  calc_delta(cat31300) %>%
  calc_delta(cat31400) %>%
  calc_delta(cat31500) %>%
  calc_delta(cat32000) %>%
  calc_delta(cat33000) %>%
  calc_delta(cat34000) %>%
  calc_delta(cat35000) %>%
  calc_delta(cat36000) %>%
  calc_delta(cat37000) %>%
  calc_delta(cat40000) %>%
  calc_delta(SuV)
  

growth_area_ADV <- (area_ADV %>% filter(year == start_year) %>% select(-name, -year)) %>%
  inner_join(area_ADV %>% filter(year == mid_year) %>% select(-name, -year), by = "id") %>%
  calc_delta(catWohnen)

growth_area <- growth_area_ALKIS %>% 
  inner_join(growth_area_ADV, by = c("id")) %>% 
  inner_join(area15_diff %>% select(id, diff_abs)) %>%
  mutate(wohnbauflaeche_abs = catWohnen_abs + cat11000_abs) %>%
  mutate(wohnbauflaeche_rel_a1 = wohnbauflaeche_abs / (catWohnen.x + diff_abs) * 100) %>%
  mutate(wohnbauflaeche_rel_a2 = wohnbauflaeche_abs / (catWohnen.x) * 100)

growth <- growth_population %>%
  inner_join(growth_employees) %>%
  inner_join(growth_area)

growth_mun <- growth %>%
  arrange(population) %>%
  filter(municipality) %>%
  mutate(lkr_id = str_sub(id, 1, 5)) %>%
  inner_join(population1 %>% rename(lkr_name = name) %>% select(id, lkr_name), by = c("lkr_id" = "id"))

growth_counties <- growth %>%
  filter(str_length(id) == 5)

Detaillierte Analyse

Flächenverbrauch

Die Hauptkomponenten des Flächenverbrauchs sind Wohnbaufläche, gewerblich genutzte Fläche, Fläche gemischter Nutzung und Straßenfläche. Abgebildet ist deren Zuwachs (in ha) in Bayern von 2014 bis 2016: Die Wohnbaufläche ist also in den letzten beiden Jahren mehr als doppelt so stark gewachsen wie gewerblich genutzte Fläche.

values <- growth_area %>% filter(id == "09") %>% select(Wohnbaufläche = cat11000_abs, Gewerbefläche = gewerbeflaeche_abs, Gemischt = cat16000_abs, Straßen = cat21000_abs)
midpoints <- barplot(as.matrix(values))
text(midpoints, as.vector(values), as.integer(as.vector(values)), adj = c(0.5,2), col = "white")

write_csv(
  growth_area %>%
    filter(id == "09") %>%
    select(id, Wohnbaufläche = cat11000_abs, Gewerbefläche = gewerbeflaeche_abs, Gemischt = cat16000_abs, Straßen = cat21000_abs),
  "output/growth_SuV.csv")

Wohnbaufläche

Scatterplot aller Landkreise + Kreisfreie Städte: Wir sehen, dass in den Landkreisen die Wohnbaufläche in den letzten beiden Jahren stärker gewachsen ist (relativ in %) als in den kreisfreien Städten, während die Bevölkerung hier schneller gewachsen (relativ in %). Es gibt keinen positiven Zusammenhang zwischen dem Bevölkerungswachstum und dem Zuwachs an Wohnbaufläche.

ggplotly(
  ggplot(data = growth_counties %>% mutate(Gebiet = ifelse(municipality, "Kreisfreie Stadt", "Landkreis"), Wohnbaufläche = cat11000_rel, Bevölkerung = population_rel2), mapping = aes(y = Wohnbaufläche, x = Bevölkerung)) +
    geom_point(mapping = aes(text = name, color = Gebiet), shape = 1),
    # geom_smooth(method = "lm"),
  tooltip = c("all")
)
write_csv(
  growth_counties %>%
    inner_join (population1 %>% select(id, district = name), by = c("bezirk" = "id")) %>%
    select(id, name, district, population, Wohnbaufläche = cat11000_rel, Bevölkerung = population_rel2, Wohnbaufläche_ha = cat11000_rel, Bevölkerung_ha = population_rel2, municipality) %>%
    mutate(municipality = ifelse(municipality, "Kreisfreie Stadt", "Landkreis")), "output/growth_counties.csv")

Die Wohnbaufläche ist nicht nur der Haupttreiber des Flächenverbrauchs, sie nimmt auch unterschiedlich stark zu:

Aggregiert man Landkreise und kreisfreie Städte so fällt auf: Der Flächenverbrauch (relativ in Prozent) war von 2014 bis 2016 in den Landkreisen beinahe 3x so groß wie in den kreisfreien Städten, während die Bevölkerung (relativ in Prozent) deutlich weniger als in den kreisfreien Städten wächst:

growth_counties %>%
  mutate(landkreis = !municipality) %>%
  group_by(landkreis) %>%
  summarise(
    Bevölkerung = (sum(population_abs2)) / sum(population.y) * 100,
    # population_abs2 = (sum(population_abs2)),
    Wohnbaufläche = (sum(cat11000_abs)) / sum(cat11000.x) * 100
    # cat11000_abs = (sum(cat11000_abs))
  ) %>%
  mutate(name = ifelse(landkreis, "Landkreise", "Kreisfr. Städte")) %>%
  select(name, Bevölkerung, Wohnbaufläche)
name Bevölkerung Wohnbaufläche
Kreisfr. Städte 2.548867 0.6035619
Landkreise 1.608778 1.7426557

Eine andere mögliche Unterteilung zwischen Stadt und Land ist in Gemeinden mit mehr und weniger als 10000 Einwohnern:

growth_mun %>% filter(population > 10000) %>%
  summarise(
    name = "<10000",
    Bevölkerung = (sum(population_abs2)) / sum(population.y) * 100,
    Wohnbaufläche = (sum(cat11000_abs)) / sum(cat11000.x) * 100
  ) %>% 
  mutate(name = ">10000") %>% union(
    growth_mun %>% filter(population < 10000) %>%
      summarise(
        name = "<10000",
        Bevölkerung = (sum(population_abs2)) / sum(population.y) * 100,
        Wohnbaufläche = (sum(cat11000_abs)) / sum(cat11000.x) * 100
      )
  ) 
name Bevölkerung Wohnbaufläche
<10000 1.239528 1.9618050
>10000 2.401315 0.9959194

Zum Vergleich das relative Wachstum bayernweit in Prozent von 2014 bis 2016:

growth_state <- growth %>% filter(id == "09") %>% select(id, name, population_rel, wohnbauflaeche_rel_a1)
population_rel_state <- (growth_state %>% select(population_rel))[[1]]
wohnbauflaeche_rel_state <- (growth_state %>% select(wohnbauflaeche_rel_a1))[[1]]

growth_state1 <- growth %>% filter(id == "09") %>% select(id, name, population_rel1, catWohnen_rel)
population_rel_state1 <- (growth_state1 %>% select(population_rel1))[[1]]
catWohnen_rel_state1 <- (growth_state1 %>% select(catWohnen_rel))[[1]]

growth_state2 <- growth %>% filter(id == "09") %>% select(name, Bevölkerung = population_rel2, Wohnbaufläche = cat11000_rel)
population_rel_state2 <- (growth_state2 %>% select(Bevölkerung))[[1]]
cat11000_rel_state2 <- (growth_state2 %>% select(Wohnbaufläche))[[1]]

growth_state2
name Bevölkerung Wohnbaufläche
Bayern 1.884582 1.574893

Gewerbeflächen

Gewerblich genutzten Fläche wiederum teilt sich auf in Gewerbe- und Industrie und Handel- und Dienstleistung, wobei letztere hauptverantworlich für den Zuwachs ist. Das ist ein Hinweis darauf, dass sich verstärkt Supermärkte und andere Handelsbetriebe an den Ortsrändern ansiedeln:

values <- growth_area %>% filter(id == "09") %>% select(Gewerbe_Industrie = cat12100_abs, Handel_Dienstleistung = cat12200_abs)

midpoints <- barplot(as.matrix(values))
text(midpoints, as.vector(values), as.integer(as.vector(values)), adj = c(0.5,2), col = "white")

Die bayerische Industrie- und Handelskammer (IHK) betreibt eine Portal, auf dem Investoren nach Gewerbeflächen suchen können. Die Kommunen stellen hier auf freiwilliger Basis Gewerbeflächen ein, die zum Verkauf stehen.


Das von der IHK verzeichnete Gewerbeflächenpotential betrug in Bayern Ende 2017: 1.04310^{4}ha. Damit ist das Gewerbeflächenpotential ca. 12x größer als der jährliche Zuwachs an tatsächlich gewerblich genutzter Fläche (Annahme: Anteil der Straßen in Gewerbegebieten ca. 15 Prozent).

Das sofortige Gewerbeflächenpotential enthält nur Flächen, die baurechtlich sofort oder kurzfristig verfügbar und sofort oder kurzfristig erwerbbar sind. Das sofortige Gewerbeflächenpotential betrug in Bayern Ende 2017: 7800ha. Es ist ca. 9x größer als der jährliche Zuwachs an tatsächlich gewerblich genutzter Fläche (Annahme: Anteil der Straßen in Gewerbegebieten 15 Prozent).

Landwirtschaft

Ziehen wir die landwirtschaftlich genutzte Fläche in Betracht, sehen wir, dass sie von 2014 bis 2016 in absoluten Zahlen (ha) stärker gesunken ist als die Siedlungs- und Verkehrsfläche (SuV) gestiegen ist. Möglicherweise auch zugunsten der Waldfläche:

values <- growth_area_ALKIS %>% filter(id == "09") %>% select(SuV = SuV_abs, Landwirtschaftsfläche = cat31000_abs, Waldfläche = cat32000_abs)

midpoints <- barplot(as.matrix(values))
text(midpoints, sapply(as.vector(values), function(x) {ifelse(x > 0, x, 0)}), as.integer(as.vector(values)), adj = c(0.5,2), col = "white")

Output

Ergebnisse zusammengefasst

Wohnbaufläche

  • Der eigentliche Treiber im Flächenverbrauch: Fläche, die wir bewohnen. Die Wohnbaufläche in Bayern wächst sehr viel stärker als etwa Fläche für Straßen oder Gewerbegebiete, die beim Thema Flächenverbrauch unter viel größerer Beobachtung stehen.
  • Wohnbaufläche wächst v.a. in ländlichen Gebieten: In den Landkreisen ist der Flächenverbrauch fast drei Mal so hoch wie in den kreisfreien Städten, obwohl das Bevölkerungswachstum nur etwas mehr als halb so groß wie in den Städten ist.

Gewerbefläche

  • Gewerbenflächenpotential unverhältnismäßig hoch: Es wird sehr viel mehr Fläche zur gewerblichen Nutzung angeboten als benötigt. Genauer: Die von den bayerischen Gemeinden angebotenen Gewerbeflächen sind etwa zehn Mal so groß wie die jährliche Zunahme an tatsächlich gewerblich genutzten Flächen.