Im ersten Teil sollen Dachflächen auf ihr Potenzial für die Installation von PV-Anlagen untersucht werden. Als Bemessungsgrundlage dient dafür die erwartete Sonneneinstrahlung, welche sich aus der Neigung und Ausrichtung der Fachfläche ergibt.
Autor:in
Zugehörigkeit
Sören Sparmann
Universität Paderborn
Veröffentlichungsdatum
9. März 2026
Photovoltaikanlagen (PV-Anlagen) auf Dachflächen leisten einen bedeutenden Beitrag zum Klimaschutz, da sie erneuerbare Solarenergie nutzen, um Strom zu erzeugen. Dadurch wird der Bedarf an fossilen Brennstoffen wie Kohle, Öl und Gas reduziert, die bei der Verbrennung CO2 und andere Treibhausgase freisetzen, welche den Klimawandel beschleunigen.
Da Dachflächen häufig ungenutzt bleiben, bieten sie eine ideale Möglichkeit, um umweltfreundliche Energie zu gewinnen, ohne zusätzlichen Raum zu beanspruchen. Zudem tragen PV-Anlagen zur Dezentralisierung der Energieversorgung bei, was die Netzstabilität erhöht und Energieverluste minimiert.
Wie sieht es in deiner Nachbarschaft aus? Gibt es dort ungenutzte Dachflächen, die sich für PV-Anlagen eignen?
Um die Fragestellung beantworten zu können, wird eine Übersicht über alle Dachflächen in Ihrer Region benötigt.
Zunächst wird ein Standort festgelegt, für den die Dachflächen eingelesen werden sollen. Dazu wird eine Variable adresse mit der entsprechenden Adresse definiert.
from cdec import get_lat_lon_for# Adresse eingeben (Gesamtschule Salzkotten)adresse ='Upsprunger Straße 65-67, 33154 Salzkotten'# Breiten- und Längengrad bestimmenlatitude, longitude = get_lat_lon_for(adresse)print(f'Breitengrad: {latitude}, Längengrad: {longitude}')
Breitengrad: 51.667625, Längengrad: 8.6001468
HinweisHinweis
Die Adresse muss im Bezirk Detmold liegen.
Mit Hilfe der Funktion load_roofs() kann nun einen Datensatz eingelesen werden, welcher die Umgebung um den angebgenen Standort abdeckt.
Die Daten stammen von dem Landesamt für Natur, Umwelt und Klima Nordrhein-Westfalen (LANUK).
from cdec import load_roofs# Dachflächen für die angegebene Adresse ermittelndf = load_roofs( latitude=latitude, longitude=longitude)# Daten anzeigendf
geb_id
richtung
neigung
dachtyp
himmel_kat
geometry
id
0
Geb80446ln0403_c
342
45
geneigt
Nord
MULTIPOLYGON (((472756 5724106, 472756 5724105...
1
Geb79564ln0403_c
-1
0
flach
Flach
MULTIPOLYGON (((472026 5724631, 472026 5724631...
2
Geb65277ln0403_c
-1
0
flach
Flach
MULTIPOLYGON (((472035 5724263, 472035 5724263...
3
Geb70556ln0403_c
171
49
geneigt
Süd
MULTIPOLYGON (((472390.5 5724618, 472391 57246...
4
Geb70759ln0403_c
61
36
geneigt
Ost
MULTIPOLYGON (((472673.5 5724606.5, 472673 572...
...
...
...
...
...
...
...
3063
Geb75442ln0403_c
352
11
geneigt
Nord
MULTIPOLYGON (((472131 5724786, 472131 5724789...
3064
Geb78589ln0403_c
84
34
geneigt
Ost
MULTIPOLYGON (((472399 5724188.5, 472398.5 572...
3065
Geb67289ln0403_c
307
43
geneigt
West
MULTIPOLYGON (((472820.5 5724379, 472821 57243...
3066
Geb67172ln0403_c
323
17
geneigt
Nord
MULTIPOLYGON (((472064 5724657.5, 472065.5 572...
3067
Geb67289ln0403_c
42
41
geneigt
Nord
MULTIPOLYGON (((472816.5 5724396.5, 472816.5 5...
3068 rows × 6 columns
Aufgabe 1
Was könnten die Spalten richtung, neigung und himmel_kat bedeuten?
Stelle für jede der Spalten eine Vermutung auf! (1 – 2 Sätze)
(5 Minuten)
WarnungLösung
Richtung:
Die Richtung einer Dachfläche wird in Grad angegeben und orientiert sich an den Himmelsrichtungen. Eine Dachfläche, die nach Norden zeigt, hat eine Richtung von 0 Grad, während eine Fläche, die nach Süden ausgerichtet ist, mit 180 Grad angegeben wird.
Neigung:
Die Neigung einer Dachfläche, ebenfalls in Grad angegeben, beschreibt den Winkel der Dachschräge. Eine Neigung von 0 Grad steht für eine vollständig horizontale Fläche, wie bei einem Flachdach.
Himmel Kat.:
Die Variable himmel_kat gibt die Himmelsrichtung als kategorische Angabe wieder. Beispielsweise steht die Kategorie Flach für ein Flachdach.
2 Daten explorieren
Mit der Methode explore() können die Dachflächen auf einer Karte dargestellt werden.
HinweisHinweis
Die Form (Geometrie) einer Dachfläche ergibt sich dabei aus der Spalte geometry. Diese enthält für jede Dachfläche eine Liste mit den entsprechenden Eckpunkten.
df.explore()
Make this Notebook Trusted to load map: File -> Trust Notebook
Mit Hilfe der Methode loc (locate) kann ein einzelner Eintrag aus dem Datensatz ausgewählt (selektiert) werden. Dazu muss nur die Identifikationsnummer id des entsprechenden Eintrags angeben werden. Diese kann aus der ersten Spalte des Datensatzes oder aus der Kartendarstellung abgelesen werden.
Codefragment 1
# Selektiere das Dach mit der ID 270dach = df.loc[270]dach
Ändere oben die Variable adresse zu einem Ort ihrer Wahl (z.B. ihrem Wohnort oder Schule).
Führe anschließend die nachfolgenden Zellen erneut aus.
Wähle auf der Karte eine beliebige Dachfläche aus (z.B. ihr Wohnort oder Schule) und notiere die dazugehörige ID ìd.
Selektiere die Dachfläche mit Hilfe der Methode loc (siehe nächste Zelle). Verwende dazu die ID.
(5 Minuten)
2.1 Neigung und Ausrichtung der Dachfläche
Mit Hilfe der folgenden Schreibweise kann die Neigung und Ausrichtung der Dachfläche bestimmt werden. Diese beiden Werte werden später noch wichtig sein, für die Berechnung der Bestrahlungsstärke!
# Neigungswinkel der Dachflächesurface_tilt = dach['neigung']surface_tilt
np.int16(0)
# Ausrichtung der Dachfläche (Azimutwinkel, -1 = Flachdach)surface_azimuth = dach['richtung']surface_azimuth
np.int16(-1)
2.2 Größe der Dachfläche
In gleicher Weise kann auf die Form (geometry) der Dachfläche zugegriffen werden.
geometry = dach['geometry']geometry
Mit dem Attribut .area kann zudem der Flächeninhalt der Form ermittelt werden. Die Größe der Dachfläche ist ein weiterer wichtiger Faktor für die Eignung einer Dachfläche (in Quadratmeter) für die Nutzung von Photovoltaik.
# Berechnung des Flächeninhalts in Quadratmeternsurface_area = geometry.areasurface_area
11.0
# Berechnung des Flächeninhalts (qm) aller Dachflächendf['flaecheninhalt'] = df['geometry'].areadf
geb_id
richtung
neigung
dachtyp
himmel_kat
geometry
flaecheninhalt
id
0
Geb80446ln0403_c
342
45
geneigt
Nord
MULTIPOLYGON (((472756 5724106, 472756 5724105...
35.832447
1
Geb79564ln0403_c
-1
0
flach
Flach
MULTIPOLYGON (((472026 5724631, 472026 5724631...
175.390078
2
Geb65277ln0403_c
-1
0
flach
Flach
MULTIPOLYGON (((472035 5724263, 472035 5724263...
15.500000
3
Geb70556ln0403_c
171
49
geneigt
Süd
MULTIPOLYGON (((472390.5 5724618, 472391 57246...
20.460276
4
Geb70759ln0403_c
61
36
geneigt
Ost
MULTIPOLYGON (((472673.5 5724606.5, 472673 572...
23.750000
...
...
...
...
...
...
...
...
3063
Geb75442ln0403_c
352
11
geneigt
Nord
MULTIPOLYGON (((472131 5724786, 472131 5724789...
1127.626528
3064
Geb78589ln0403_c
84
34
geneigt
Ost
MULTIPOLYGON (((472399 5724188.5, 472398.5 572...
8.684094
3065
Geb67289ln0403_c
307
43
geneigt
West
MULTIPOLYGON (((472820.5 5724379, 472821 57243...
55.442013
3066
Geb67172ln0403_c
323
17
geneigt
Nord
MULTIPOLYGON (((472064 5724657.5, 472065.5 572...
28.903594
3067
Geb67289ln0403_c
42
41
geneigt
Nord
MULTIPOLYGON (((472816.5 5724396.5, 472816.5 5...
155.073265
3068 rows × 7 columns
3 Bestrahlungsstärke
Die Eignung einer Dachfläche für den Einsatz von Photovoltaik hängt unter anderem von der Ausrichtung und Neigung der Dachfläche ab. Auch der Standort und die zur Verfügung stehende Fläche spielen eine Rolle.
Je besser die Dachfläche zur Sonne ausgerichtet ist, desto höher ist die Sonneneinstrahlung und damit die potenziell nutzbare Energie!
Um das Potenzial der Dachflächen für den Einsatz von Photovoltaik zu ermitteln, wird daher zunächst die Bestrahlungsstärke (engl. irradiance) über einen festgelegten Zeitraum (z.B. ein Jahr) berechnet. Die Bestrahlungsstärke ist ein Maß für die Intensität der Sonneneinstrahlung, die auf die Dachfläche trifft.
Zur Berechnung der Bestrahlungsstärke sind folgende Schritte erforderlich:
Genaue Position und Zeitzone bestimmen (Lokalisierung)
Untersuchungszeitraum festlegen
Stand der Sonne berechnen
Trübung der Atmosphäre ermitteln (Bewölkung)
Bestrahlungsstärke berechnen
Glücklicherweise gibt es eine Programmierbibliothek pvlib, die einen Großteil der Berechnungen übernimmt.
# Bibliothek für den Umgang mit Photovoltaikimport pvlib
3.1 Lokalisierung
Zur Lokalisierung wird neben Längen- und Breitengrad auch die entsprechende Zeitzone benötigt.
from pytz import timezone# Zeitzone festlegentz = timezone('Europe/Berlin')tz
<DstTzInfo 'Europe/Berlin' LMT+0:53:00 STD>
Nun kann eine genaue :Lokalisierung vorgenommen werden. Diese wird für die Berechnung des Sonnenstandes und der Bestrahlungsstärke benötigt.
Elevation (Höhenwinkel): Die Elevation gibt den vertikalen Winkel an, unter dem die Sonne am Himmel steht. Ein Höhenwinkel von 0° bedeutet, dass die Sonne direkt über einem Punkt am Horizont steht, während ein Höhenwinkel von 90° darauf hinweist, dass die Sonne im Zenit steht. Ein negativer Höhenwinkel zeigt an, dass die Sonne unterhalb des Horizonts ist.
Azimuth (Azimutwinkel): Der Azimuthwinkel gibt die horizontale Richtung der Sonne an, gemessen im Uhrzeigersinn von Norden aus. Ein Azimut von 0° entspricht dem Norden, 90° dem Osten, 180° dem Süden und 270° dem Westen. Der Azimuthwinkel gibt also an, in welche Himmelsrichtung die Sonne zu einem bestimmten Zeitpunkt zeigt.
# Sonnenstand für den gegebenen Standort ermittelnsolar_position = location.get_solarposition(date_range)solar_position
apparent_zenith
zenith
apparent_elevation
elevation
azimuth
equation_of_time
2024-06-01 00:00:00+02:00
104.018358
104.018358
-14.018358
-14.018358
340.120111
2.174048
2024-06-01 01:00:00+02:00
106.069184
106.069184
-16.069184
-16.069184
354.351176
2.167611
2024-06-01 02:00:00+02:00
105.807739
105.807739
-15.807739
-15.807739
8.798614
2.161163
2024-06-01 03:00:00+02:00
103.259806
103.259806
-13.259806
-13.259806
22.909173
2.154702
2024-06-01 04:00:00+02:00
98.661620
98.661620
-8.661620
-8.661620
36.265310
2.148229
2024-06-01 05:00:00+02:00
92.376685
92.376685
-2.376685
-2.376685
48.716562
2.141744
2024-06-01 06:00:00+02:00
84.648520
84.802468
5.351480
5.197532
60.371370
2.135247
2024-06-01 07:00:00+02:00
76.249089
76.314988
13.750911
13.685012
71.528068
2.128738
2024-06-01 08:00:00+02:00
67.219521
67.258688
22.780479
22.741312
82.630450
2.122218
2024-06-01 09:00:00+02:00
57.945353
57.971789
32.054647
32.028211
94.287619
2.115685
2024-06-01 10:00:00+02:00
48.826587
48.845562
41.173413
41.154438
107.372442
2.109141
2024-06-01 11:00:00+02:00
40.421492
40.435642
49.578508
49.564358
123.183850
2.102585
2024-06-01 12:00:00+02:00
33.637242
33.648298
56.362758
56.351702
143.437084
2.096017
2024-06-01 13:00:00+02:00
29.855943
29.865481
60.144057
60.134519
169.018387
2.089437
2024-06-01 14:00:00+02:00
30.334872
30.344595
59.665128
59.655405
196.892880
2.082846
2024-06-01 15:00:00+02:00
34.887094
34.898680
55.112906
55.101320
221.411865
2.076243
2024-06-01 16:00:00+02:00
42.116158
42.131176
47.883842
47.868824
240.572891
2.069628
2024-06-01 17:00:00+02:00
50.730081
50.750371
39.269919
39.249629
255.667077
2.063002
2024-06-01 18:00:00+02:00
59.914469
59.943017
30.085531
30.056983
268.356412
2.056364
2024-06-01 19:00:00+02:00
69.158395
69.201499
20.841605
20.798501
279.835291
2.049714
2024-06-01 20:00:00+02:00
78.077099
78.152780
11.922901
11.847220
290.907315
2.043052
2024-06-01 21:00:00+02:00
86.258802
86.460817
3.741198
3.539183
302.139928
2.036379
2024-06-01 22:00:00+02:00
93.775479
93.775479
-3.775479
-3.775479
313.945278
2.029695
2024-06-01 23:00:00+02:00
99.714368
99.714368
-9.714368
-9.714368
326.584623
2.022999
Höhenwinkel
import plotly.express as px# Liniendiagramm des Höhenwinkelsfig = px.line(solar_position, y='elevation', title='Höhenwinkel der Sonne im Verlauf eines Tages')fig.update_xaxes(title="Uhrzeit")fig.update_yaxes(title="Höhenwinkel")fig.show()
Aufgabe 4
Um wie viel Uhr ist die Sonne heute circa aufgegangen?
Um wie viel Uhr wird die die Sonne heute circa untergehen?
(5 Minuten)
Azimutwinkel
Nun wird der Azimuthwinkel, also die Himmelsrichtung aus welcher die Sonne scheint, betrachtet.
px.line(solar_position, y='azimuth')
HinweisHinweis
“Im Osten geht die Sonne auf, im Süden nimmt sie ihren Lauf, im Westen wird sie untergehen, im Norden ist sie nie zu sehen.”
3.4 Sonneneinstrahlung bei klarem Himmel
Neben der Ausrichtung und Neigung der Dachfläche spielt auch das Wetter eine Rolle für die Intensität der Sonneneinstrahlung. Bei starker Bewölkung ist die Sonneneinstrahlung geringer.
Im Rahmen der Analyse wird der Einfachheit halber davon ausgegangen, dass der Himmel klar ist und die Atmosphäre somit nicht durch Wolken getrübt ist (clear sky).
Mit Hilfe der Methode get_clearsky() lässt sich die Sonneneinstrahlung am gegebenen Standort ermitteln. Es werden drei Arten der Sonneneinstrahlung unterschieden: GHI, DNI & DHI (siehe unten).
Die Direktnormalstrahlung (DNI) ist die Menge der Sonnenstrahlung, die pro Flächeneinheit auf eine senkrecht zur Sonne stehende Fläche auftrifft.
Global Horizontal Irradiance (GHI)
Die globale horizontale Einstrahlung (GHI) ist die Gesamtstrahlung, die von einer horizontalen Fläche auf der Erde absorbiert wird.
Diffuse Horizontal Irradiance (DHI)
Die diffuse horizontale Einstrahlung (DHI) ist die terrestrische Einstrahlung, die von einer flachen Oberfläche gestreut oder diffus von der Atmosphäre zurückgestrahlt wird. DHI ist der Teil der globalen horizontalen Einstrahlung, der nicht von der direkten Sonnenstrahlung stammt.
# Sonneneinstrahlung in Liniendiagramm anzeigenpx.line(clear_sky)
3.5 Bestrahlungsstärke berechnen
Zunächst wird die Neigung tilt und die Ausrichtung azimuth der Dachfläche festgelegt.
Nun kann die Bestrahlungsstärke für die Dachfläche mit Hilfe der Funktion get_total_irradiance berechnet werden.
from pvlib.irradiance import get_total_irradiance# Bestrahlungsstärke (irradiance) berechnenirradiance = get_total_irradiance( surface_tilt=surface_tilt, surface_azimuth=surface_azimuth, dni=clear_sky['dni'], ghi=clear_sky['ghi'], dhi=clear_sky['dhi'], solar_zenith=solar_position['zenith'], solar_azimuth=solar_position['azimuth'])# Ausgabe (Watt pro Quadratmeterirradiance
poa_global
poa_direct
poa_diffuse
poa_sky_diffuse
poa_ground_diffuse
2024-06-01 00:00:00+02:00
0.000000
0.000000
0.000000
0.000000
0.000000
2024-06-01 01:00:00+02:00
0.000000
0.000000
0.000000
0.000000
0.000000
2024-06-01 02:00:00+02:00
0.000000
0.000000
0.000000
0.000000
0.000000
2024-06-01 03:00:00+02:00
0.000000
0.000000
0.000000
0.000000
0.000000
2024-06-01 04:00:00+02:00
0.000000
0.000000
0.000000
0.000000
0.000000
2024-06-01 05:00:00+02:00
0.000000
0.000000
0.000000
0.000000
0.000000
2024-06-01 06:00:00+02:00
15.274164
1.474459
13.799705
13.656734
0.142971
2024-06-01 07:00:00+02:00
128.721845
69.730412
58.991433
58.000119
0.991314
2024-06-01 08:00:00+02:00
305.197119
213.083464
92.113655
89.975326
2.138329
2024-06-01 09:00:00+02:00
492.746941
377.695318
115.051624
111.736461
3.315163
2024-06-01 10:00:00+02:00
662.183265
530.646557
131.536708
127.149072
4.387636
2024-06-01 11:00:00+02:00
795.120882
651.916604
143.204278
137.941642
5.262637
2024-06-01 12:00:00+02:00
879.588872
728.906117
150.682755
144.811069
5.871686
2024-06-01 13:00:00+02:00
908.841990
754.657295
154.184696
148.015532
6.169164
2024-06-01 14:00:00+02:00
881.083632
727.317294
153.766338
147.633112
6.133226
2024-06-01 15:00:00+02:00
799.387562
649.964348
149.423214
143.656640
5.766574
2024-06-01 16:00:00+02:00
671.629966
530.550297
141.079669
135.983323
5.096346
2024-06-01 17:00:00+02:00
510.490107
382.023690
128.466417
124.293222
4.173195
2024-06-01 18:00:00+02:00
333.846877
223.035891
110.810985
107.740422
3.070564
2024-06-01 19:00:00+02:00
166.410512
80.264162
86.146351
84.258466
1.887885
2024-06-01 20:00:00+02:00
50.256725
0.000000
50.256725
49.482371
0.774355
2024-06-01 21:00:00+02:00
6.104227
0.000000
6.104227
6.047739
0.056488
2024-06-01 22:00:00+02:00
0.000000
0.000000
0.000000
0.000000
0.000000
2024-06-01 23:00:00+02:00
0.000000
0.000000
0.000000
0.000000
0.000000
Alle Angaben sind in \(W / m^2\) (Watt pro Quadratmeter).
Für die weitere Analyse ist primär die globale Bestrahlungsstärke (poa_global) von Bedeutung. Diese setzt sich aus der direkten und indirekten Sonneneinstrahlung zusammen.
# Liniendiagramm (mit eingeschlossener Fläche) der globalen Bestrahlungsstärkefig = px.area(irradiance, y='poa_global', title="Globale Bestrahlungsstärke im Verlauf eines Tages")fig.update_xaxes(title="Uhrzeit")fig.update_yaxes(title="Globale Bestrahlungsstärke<br>[W/m<sup>2</sup>]")fig.show()
Tagesleistung
WichtigHinweis
Zur Erinnerung: Die Bestrahlungsstärke gibt nur die Intensität der Sonneneinstrahlung an und ist nicht von der Größe der Dachfläche abhängig. Sie wird daher in der Einheit \(W/m^2\) angegeben.
Die Summe der Stundenwerte ergibt die Bestrahlungsenergie pro Quadratmeter (\(Wh / m^2\)) energy_per_area an dem entsprechenden Tag.
# Summe der Stundenwerte (in Wattstunden pro Quadratmeter)energy_per_area = irradiance['poa_global'].sum()energy_per_area
np.float64(7606.884687431055)
Um die Strahlungsenergie zu bestimmen, die im Laufe eines Tages auf die Dachfläche auftrifft, muss das Ergbnis nun nur noch mit der Größe der Dachfläche multipliziert werden.
# Größe der Dachfläche in Quadratmeter (Beispiel)surface_area =10# Berechnung der Strahlungsenergie (Wattstunden)total_energy = energy_per_area * surface_area# Ausgabe (auf zwei Nachkommastellen gerundet)print('Tagesleistung:', total_energy.round(2), 'Wh')
Tagesleistung: 76068.85 Wh
Die Strahlungsenergie hat die Einheit \(Wh\) (Wattstunden).
Beispiel: Mit 1600 Wh kann eine Mikrowelle mit einem Stromverbrauch von 800 Watt 2 Stunden betrieben werden.
Um die Energie in Kilowattstunden anzugeben, muss der Wert einfach durch 1000 geteilt werden.
# W in kW umrechnentotal_energy = total_energy /1000# Ausgabeprint('Tagesleistung:', total_energy.round(2), 'kW')
Tagesleistung: 76.07 kW
HinweisHinweis
Hierbei handelt es sich um die potenziell nutzbare Sonnenenergie, die auf die PV-Anlage trifft. Nur ein Teil davon kann tatsächlich in Strom umgewandelt werden. Zudem kann in der Regel aufgrund der Dachform nicht die gesamte Fläche mit PV-Anlagen versehen werden.
Aufgabe 5
Bestimme die optimale Ausrichtung und Neigung einer Dachfläche für den Einsatz von PV unter den oben definierten Bedigungen.
Verändere dazu die Schieberegler für die Parameter surface_tilt und surface_area.
Ziel ist es, den Wert für die Bestrahlungsenergie zu maximieren.
(5 Minuten)
WichtigHinweis
Um mit der folgenden Abbildung interagieren zu können, muss das Notebook in einer Jupyter Umgebung ausgeführt werden!
from cdec import interactive_irradianceinteractive_irradiance(clear_sky, solar_position)
WarnungLösung
Optimale Neigung und Ausrichtung der Dachfläche:
Parameter
Optimale Belegung
Neigung
18,50 Grad
Ausrichtung
180 Grad
Bestrahlungsenergie
7.655 kWh/qm
Jahresleistung
Nun soll die Bestrahlungsstärke über einen Zeitraum von einem Jahr hinweg betrachtet werden.
Aufgabe 6
Kopiere den folgeden Programmcode in die dafür vorgesehene Zelle.
Vervollständige den Programmcode so, dass die Bestrahlungsstärke im Laufe eines Jahres berechnet wird:
Ändere den Wert der Variablen surface_tilt und surface_azimuth entsprechend den Werten für das von Ihnen ausgewählten Daches (siehe Code 1).
Ändere den Start- und Endzeitpunkt so, dass die Zeitspanne genau ein Jahr beträgt.
(15 Minuten)
Größe
Einheit
Variable
Berechnung
Bestrahlungsstärke
Watt pro Quadratmeter [\(W / m^2\)]
irradiance
Bestrahlungsenergie pro Quadratmeter
Wattstunden pro Quadratmeter [\(Wh / m^2\)]
total_irradiance
irradiance.sum()
Bestrahlungsenergie
Wattstunden [\(Wh\)]
total_energy
total_irradiance * surface_area
# Neigung der Dachfläche eingebensurface_tilt =# Ausrichtung der Dachfläche eingebensurface_azimuth =# Funktion zu Berechnung der Bestrahlungsstärke über ein Jahrdef get_annual_irradiance(surface_tilt, surface_azimuth):# Startzeitpunkt eingeben start =# Endzeitpunkt eingeben end =# Zeitraum festlegen date_range = pd.date_range( start=start, end=end, freq='1h', tz=tz, inclusive='left' )# Stand der Sonne bestimmen solar_position = location.get_solarposition(date_range)# Klarer Himmel clear_sky = location.get_clearsky(date_range)# Bestrahlungsstärke berechnen irradiance = get_total_irradiance( surface_tilt=surface_tilt, surface_azimuth=surface_azimuth, dni=clear_sky['dni'], ghi=clear_sky['ghi'], dhi=clear_sky['dhi'], solar_zenith=solar_position['zenith'], solar_azimuth=solar_position['azimuth'] ) irradiance = irradiance['poa_global']return irradianceirradiance = get_annual_irradiance(surface_tilt, surface_azimuth)irradiance
# Hier Code einfügen
WarnungLösung
# Neigung der Dachfläche eingebensurface_tilt = dach['neigung']# Ausrichtung der Dachfläche eingebensurface_azimuth = dach['richtung']# Funktion zu Berechnung der Bestrahlungsstärke über ein Jahrdef calculate_irradiance_over_one_year(surface_tilt, surface_azimuth):# Startzeitpunkt eingeben start ='2024-01-01'# Endzeitpunkt eingeben end ='2025-01-01'# Zeitraum festlegen date_range = pd.date_range( start=start, end=end, freq='1h', tz=tz, inclusive='left' )# Stand der Sonne bestimmen solar_position = location.get_solarposition(date_range)# Klarer Himmel clear_sky = location.get_clearsky(date_range)# Bestrahlungsstärke berechnen irradiance = get_total_irradiance( surface_tilt=surface_tilt, surface_azimuth=surface_azimuth, dni=clear_sky['dni'], ghi=clear_sky['ghi'], dhi=clear_sky['dhi'], solar_zenith=solar_position['zenith'], solar_azimuth=solar_position['azimuth'] ) irradiance = irradiance['poa_global']return irradianceirradiance = calculate_irradiance_over_one_year(surface_tilt, surface_azimuth)irradiance
Nun kann die Veränderung der Bestrahlungsstärke im Verlauf eines Jahres betrachtet werden.
# Tagesleistung im Verlauf des Jahres bestimmendaily = irradiance.resample('1D').sum()# Liniendiagramm des Jahresverlauffig = px.line(daily, title="Bestrahlungsstärke im Verlauf eines Jahres")fig.update_xaxes(title="Zeitpunkt")fig.update_yaxes(title="Bestrahlungsstärke<br>[W/m<sup>2</sup>]")fig.show()
5 Dachlächenpotenzial berechnen
Mit Hilfe der zuvor erstellten Funktion kann nun die Bestrahlungsenergie aller Dachflächen über den Zeitraum eines Jahres bestimmt werden.
# Fortschrittsbalkenfrom tqdm.auto import tqdmtqdm.pandas()# Funktion zur Berechnung der Bestrahlungsenergie pro Quadratmeter pro Jahr für ein Dachdef calculate_total_energy_per_square_metre(dach):# Ermittel Neigung und Ausrichtung der Dachfläche surface_tilt = dach['neigung'] surface_azimuth = dach['richtung']# Jährliche Bestrahlungsstärke irradiance = calculate_irradiance_over_one_year(surface_tilt, surface_azimuth) total_energy_per_square_metre = irradiance.sum()# Rückgabe der Strahlungsenergie pro Quadratmeterreturn total_energy_per_square_metre# Wende die Funktion auf alle Dächer aus den Datensatz antotal_energy_per_square_metre = df.progress_apply(calculate_total_energy_per_square_metre, axis=1)# Füge das Resultat in die Spalte irradiance eindf['total_energy_per_square_metre'] = total_energy_per_square_metre# Berechne die Bestrahlungsenergiedf['total_energy'] = df['total_energy_per_square_metre'] * df['flaecheninhalt']df
geb_id
richtung
neigung
dachtyp
himmel_kat
geometry
flaecheninhalt
total_energy_per_square_metre
total_energy
id
0
Geb80446ln0403_c
342
45
geneigt
Nord
MULTIPOLYGON (((472756 5724106, 472756 5724105...
35.832447
6.569500e+05
2.354013e+07
1
Geb79564ln0403_c
-1
0
flach
Flach
MULTIPOLYGON (((472026 5724631, 472026 5724631...
175.390078
1.524493e+06
2.673809e+08
2
Geb65277ln0403_c
-1
0
flach
Flach
MULTIPOLYGON (((472035 5724263, 472035 5724263...
15.500000
1.524493e+06
2.362964e+07
3
Geb70556ln0403_c
171
49
geneigt
Süd
MULTIPOLYGON (((472390.5 5724618, 472391 57246...
20.460276
2.056613e+06
4.207886e+07
4
Geb70759ln0403_c
61
36
geneigt
Ost
MULTIPOLYGON (((472673.5 5724606.5, 472673 572...
23.750000
1.089286e+06
2.587054e+07
...
...
...
...
...
...
...
...
...
...
3063
Geb75442ln0403_c
352
11
geneigt
Nord
MULTIPOLYGON (((472131 5724786, 472131 5724789...
1127.626528
1.271190e+06
1.433427e+09
3064
Geb78589ln0403_c
84
34
geneigt
Ost
MULTIPOLYGON (((472399 5724188.5, 472398.5 572...
8.684094
1.347335e+06
1.170038e+07
3065
Geb67289ln0403_c
307
43
geneigt
West
MULTIPOLYGON (((472820.5 5724379, 472821 57243...
55.442013
9.352619e+05
5.185280e+07
3066
Geb67172ln0403_c
323
17
geneigt
Nord
MULTIPOLYGON (((472064 5724657.5, 472065.5 572...
28.903594
1.201488e+06
3.472731e+07
3067
Geb67289ln0403_c
42
41
geneigt
Nord
MULTIPOLYGON (((472816.5 5724396.5, 472816.5 5...
155.073265
8.538725e+05
1.324128e+08
3068 rows × 9 columns
Nun kann die Dachflächen wieder auf einer Karte angezeigt werden. Die Einfärbung der Dachflächen ergibt sich nun aus dem Wert der Strahlungsenergie pro Quadratmeter.
Make this Notebook Trusted to load map: File -> Trust Notebook
6 Eignung bestimmen
Eine geneigte Dachfläche ist dann für den Einsatz von PV geeignet wenn
die Strahlungsenergie pro Quadratmeter pro Jahr mindestens 1500 kW beträgt und
die Dachfläche mindestens 20 Quadratmeter groß ist.
Bei Flachdächern wird angenommen, dass bei einer Aufständerung nach Süden 40 Prozent der Fläche genutzt werden kann. Flachdächer müssen daher mindestens eine Größe von 50 Quadratmeter aufweisen, um als geeignet eingestuft zu werden.
Aufgabe 7
Filtere die Daten ensprechend der oben genannten Kriterien.
Berücksichtige dabei auch die Flachdächer!
Der Datensatz df soll anschließend nurnoch die geeigneten Dachflächen enthalten.
(15 Minuten)
TippTip
Wie im ersten Arbeitsblatt (Luftqualität) können die Daten mit folgender Notation gefiltert werden: