import geopandas as gpd
from shapely.ops import unary_union
import matplotlib.pyplot as plt
#Abstände Siedlungsstrukturen
abstand_Wohngebäude= 2000
abstand_KurKlinikgebiete= 0
abstand_Camping= 0
abstand_Gewerbe_Industriegebiete= 1000
abstand_SportFreizeit= 400
abstand_Friedhöfe= 400
abstand_SonstigeGebäude= 400
#abstände Schutzgebiete
abstand_Biosphaerenreservate= 1000
abstand_FFH_Gebiete= 0
abstand_Nationale_Naturmomente= 1000
abstand_Nationalparke= 1000
abstand_Naturschutzgebiete= 1000
abstand_SPA_Gebiete= 2000
#Abstände Gewässer
abstand_Fließgewässer= 50
abstand_Kanäle= 50
abstand_Bundeswasserstraßen= 50
abstand_stehendeGewässer= 50
abstand_SonstigeGewässer= 50
#Abstände Infrastruktur
abstand_Luftverkehr= 0
abstand_Bundesautobahnen= 40
abstand_Bundesstraßen= 40
abstand_Landstraßen= 20
abstand_Kreisstraßen= 15
abstand_Bahnlinien= 150
abstand_Seilbahn= 0
abstand_Hochspannungsleitung= 100
#Abstand Waldgebiete
abstand_wald = 0
# Daten einlesen Deutschland
import geopandas as gpd
gebiet = gpd.read_file("data/geb01_f.shp")
deutschland = gebiet[gebiet["OBJART"] == 75004]
#Daten einlesen Siedlungsstrukturen
Wohngebäude = gpd.read_file("data/sie05_p.shp")
Wohngebäude = Wohngebäude[Wohngebäude["OBJART"] == "31001"]
buffer_Wohngebäude = Wohngebäude.buffer(abstand_Wohngebäude)
KurKlinikgebiete = gpd.read_file("data/sie02_f.shp")
KurKlinikgebiete = KurKlinikgebiete[KurKlinikgebiete["OBJART"] == "41007"]
buffer_KurKlinikgebiete = KurKlinikgebiete.buffer(abstand_KurKlinikgebiete)
Camping = gpd.read_file("data/sie02_f.shp")
Camping = Camping[Camping["OBJART"] == "41008"]
buffer_Camping = Camping.buffer(abstand_Camping)
Gewerbe_Industriegebiete = gpd.read_file("data/sie02_f.shp")
Gewerbe_Industriegebiete = Gewerbe_Industriegebiete[Gewerbe_Industriegebiete["OBJART"] == "41002"]
buffer_Gewerbe_Industriegebiete = Gewerbe_Industriegebiete.buffer(abstand_Gewerbe_Industriegebiete)
SportFreizeit = gpd.read_file("data/sie02_f.shp")
SportFreizeit = SportFreizeit[SportFreizeit["OBJART"] == "41008"]
buffer_SportFreizeit = SportFreizeit.buffer(abstand_SportFreizeit)
Friedhöfe = gpd.read_file("data/sie02_f.shp")
Friedhöfe = Friedhöfe[Friedhöfe["OBJART"] == "41009"]
buffer_Friedhöfe = Friedhöfe.buffer(abstand_Friedhöfe)
SonstigeGebäude = gpd.read_file("data/sie02_f.shp")
SonstigeGebäude = SonstigeGebäude[SonstigeGebäude["OBJART"] == "41008"]
buffer_SonstigeGebäude = SonstigeGebäude.buffer(abstand_SonstigeGebäude)
# Daten einlesen "Gewässer"
Fließgewässer = gpd.read_file("data/gew01_f.shp")
Fließgewässer = Fließgewässer[Fließgewässer["OBJART"] == "44001"]
buffer_Fließgewässer = Fließgewässer.buffer(abstand_Fließgewässer)
Kanäle = gpd.read_file("data/gew01_f.shp")
Kanäle = Kanäle[Kanäle["OBJART"] == "44001"]
buffer_Kanäle = Kanäle.buffer(abstand_Kanäle)
Bundeswasserstraßen = gpd.read_file("data/gew01_f.shp")
Bundeswasserstraßen = Bundeswasserstraßen[Bundeswasserstraßen["OBJART"] == "44001"]
buffer_Bundeswasserstraßen = Bundeswasserstraßen.buffer(abstand_Bundeswasserstraßen)
stehendeGewässer = gpd.read_file("data/gew01_f.shp")
stehendeGewässer = stehendeGewässer[stehendeGewässer["OBJART"] == "44006"]
buffer_stehendeGewässer = stehendeGewässer.buffer(abstand_stehendeGewässer)
SonstigeGewässer = gpd.read_file("data/gew01_f.shp")
SonstigeGewässer = SonstigeGewässer[SonstigeGewässer["OBJART"] == "44007"]
buffer_SonstigeGewässer = SonstigeGewässer.buffer(abstand_SonstigeGewässer)
# Daten einlesen "Wald"
wald = gpd.read_file("data/veg02_f.shp")
wald = wald[wald["OBJART"] == "43002"]
buffer_wald = wald.buffer(abstand_wald)
# Daten einlesen "Infrastruktur"
Luftverkehr = gpd.read_file("data/ver04_f.shp")
Luftverkehr = Luftverkehr[Luftverkehr["OBJART"] == "42015"]
buffer_Luftverkehr = Luftverkehr.buffer(abstand_Luftverkehr)
Bundesautobahnen = gpd.read_file("data/ver01_l.shp")
Bundesautobahnen = Bundesautobahnen[Bundesautobahnen["OBJART"] == "42003"]
buffer_Bundesautobahnen = Bundesautobahnen.buffer(abstand_Bundesautobahnen)
Bundesstraßen = gpd.read_file("data/ver01_l.shp")
Bundesstraßen = Bundesstraßen[Bundesstraßen["OBJART"] == "42003"]
buffer_Bundesstraßen = Bundesstraßen.buffer(abstand_Bundesstraßen)
Landstraßen = gpd.read_file("data/ver02_l.shp")
Landstraßen = Landstraßen[Landstraßen["OBJART"] == "42003"] # objart noch für kreis- und landstraßen einfügen
buffer_Landstraßen = Landstraßen.buffer(abstand_Landstraßen)
Kreisstraßen = gpd.read_file("data/ver02_l.shp")
Kreisstraßen = Kreisstraßen[Kreisstraßen["OBJART"] == "42003"]
buffer_Kreisstraßen = Kreisstraßen.buffer(abstand_Kreisstraßen)
Bahnlinien = gpd.read_file("data/ver03_l.shp")
Bahnlinien = Bahnlinien[Bahnlinien["OBJART"] == "42014"]
buffer_Bahnlinien = Bahnlinien.buffer(abstand_Bahnlinien)
Seilbahn = gpd.read_file("data/ver01_l.shp")
Seilbahn = Seilbahn[Seilbahn["OBJART"] == "42003"]
buffer_Seilbahn = Seilbahn.buffer(abstand_Seilbahn)
Hochspannungsleitung = gpd.read_file("data/sie03_l.shp")
Hochspannungsleitung = Hochspannungsleitung[Hochspannungsleitung["OBJART"] == "51005"]
buffer_Hochspannungsleitung = Hochspannungsleitung.buffer(abstand_Hochspannungsleitung)
# Daten einlesen "Schutzgebiete"
Biospaerenreservate = gpd.read_file("data/Biosphaerenreservate.shp")
buffer_Biospaerenreservate = Biospaerenreservate.buffer(abstand_Biosphaerenreservate)
FFH_Gebiete = gpd.read_file("data/FFH_Gebiete.shp")
buffer_FFH_Gebiete = FFH_Gebiete.buffer(abstand_FFH_Gebiete)
Nationalparke = gpd.read_file("data/Nationalparke.shp")
buffer_Nationalparke = Nationalparke.buffer(abstand_Nationalparke)
SPA_Gebiete = gpd.read_file("data/SPA_Gebiete.shp")
buffer_SPA_Gebiete = SPA_Gebiete.buffer(abstand_SPA_Gebiete)
Naturschutzgebiete = gpd.read_file("data/Naturschutzgebiete.shp")
buffer_Naturschutzgebiete = Naturschutzgebiete.buffer(abstand_Naturschutzgebiete)
Nationale_Naturmomente = gpd.read_file("data/Nationale_Naturmomente.shp")
buffer_Nationale_Naturmomente = Nationale_Naturmomente.buffer(abstand_Nationale_Naturmomente)
# CRS annehmen von erster Quelle
crs = Wohngebäude.crs
# Ausschlusskriterien zu einem Hauptpunkt zusammenfassen
# Siedlungsstruktur
siedlungsstruktur = gpd.GeoSeries(unary_union([
*buffer_Wohngebäude,
*buffer_KurKlinikgebiete,
*buffer_SonstigeGebäude,
*buffer_Camping,
*buffer_Gewerbe_Industriegebiete,
*buffer_SportFreizeit,
*buffer_Friedhöfe,
]), crs=crs)
# Infrastruktur
infrastruktur = gpd.GeoSeries(unary_union([
*buffer_Luftverkehr,
*buffer_Hochspannungsleitung,
*buffer_Bundesautobahnen,
*buffer_Landstraßen,
*buffer_Kreisstraßen,
*buffer_Bahnlinien,
*buffer_Seilbahn,
*buffer_Bundesstraßen,
]), crs=crs)
#Schutzgebiete
schutzgebiete = gpd.GeoSeries(unary_union([
*buffer_Biospaerenreservate,
*buffer_FFH_Gebiete,
*buffer_Nationalparke,
*buffer_SPA_Gebiete,
*buffer_Naturschutzgebiete,
*buffer_Nationale_Naturmomente,
]), crs=crs)
# Gewässer
gewässer = gpd.GeoSeries(unary_union([
*buffer_stehendeGewässer,
*buffer_Fließgewässer,
*buffer_Kanäle,
*buffer_Bundeswasserstraßen,
*buffer_SonstigeGewässer,
]), crs=crs)
#Wald
wald = gpd.GeoSeries(unary_union([
*buffer_wald,
]), crs=crs)
# Einheitliches Koordinatensystem
crs = gebiet.crs
siedlungen = siedlungsstruktur.to_crs(crs)
gewaesser = gewässer.to_crs(crs)
wald = wald.to_crs(crs)
infrastruktur = infrastruktur.to_crs(crs)
schutzgebiete = schutzgebiete.to_crs(crs)
from geopandas import GeoDataFrame
# -----------------------------
# 1. Ausschlussflächen vereinigen
# -----------------------------
# Alle Gruppen in einer Liste zusammenführen
alle_buffer = [
*siedlungen.geometry,
*gewaesser.geometry,
*infrastruktur.geometry,
*wald.geometry,
*schutzgebiete.geometry
]
# Geometrien vereinigen
ausschlussflaeche_geom = unary_union(alle_buffer)
ausschlussflaeche = GeoDataFrame(geometry=[ausschlussflaeche_geom], crs=crs)
# -----------------------------
# 2. Verfügbare Fläche berechnen
# -----------------------------
verfuegbare_flaeche = gpd.overlay(deutschland, ausschlussflaeche, how='difference')
# -----------------------------
# 3. Flächenstatistik in km² berechnen
# -----------------------------
planungsgebiet_fl = deutschland.geometry.area.sum() / 1e6
ausschluss_fl = ausschlussflaeche.geometry.area.sum() / 1e6
verfuegbar_fl = verfuegbare_flaeche.geometry.area.sum() / 1e6
print("\n

Flächenübersicht [km²]")
print(f"Gesamtfläche : {planungsgebiet_fl:.2f}")
print(f"Ausschlussfläche : {ausschluss_fl:.2f}")
print(f"Verfügbare Fläche : {verfuegbar_fl:.2f}")
Das ist der code den ich bisher habe zur Berechnung der Flächen. Dieser funktioniert aber irgendwie nicht