BorowyP commited on
Commit
fd0472a
1 Parent(s): 5e0eb42
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. 2023_01_30_Mittelwerte_Masseverlust.xlsx +0 -0
  2. Boden Temperatur Feuchte.py +128 -0
  3. Bodenfeuchte.py +190 -0
  4. Bodentemperatur.py +192 -0
  5. Dockerfile +11 -0
  6. HD_Logo.png +0 -0
  7. Hemisfere.py +203 -0
  8. Hemisphere_totals_holzdeko.csv +13 -0
  9. LFE_Logo.png +0 -0
  10. Luftfeuchte.py +184 -0
  11. Lufttemperatur.py +200 -0
  12. Masseverlust.py +450 -0
  13. Nied_holzdeko_csv.csv +1081 -0
  14. Niederschlag.py +151 -0
  15. Stahlrahmen-Fotos/Glienig/K/mA/resized20210901_GLI_3NE_K_mA.jpg +0 -0
  16. Stahlrahmen-Fotos/Glienig/K/mA/resized20210914_GLI_3NE_K_mA.jpg +0 -0
  17. Stahlrahmen-Fotos/Glienig/K/mA/resized20210929_GLI_3NE_K_mA.jpg +0 -0
  18. Stahlrahmen-Fotos/Glienig/K/mA/resized20211014_GLI_3NE_K_mA.JPG +0 -0
  19. Stahlrahmen-Fotos/Glienig/K/mA/resized20211026_GLI_3NE_K_mA.jpg +0 -0
  20. Stahlrahmen-Fotos/Glienig/K/mA/resized20211109_GLI_3NE_K_mA.jpg +0 -0
  21. Stahlrahmen-Fotos/Glienig/K/mA/resized20211124_GLI_3NE_K_mA.JPG +0 -0
  22. Stahlrahmen-Fotos/Glienig/K/mA/resized20211208_GLI_3NE_K_mA.JPG +0 -0
  23. Stahlrahmen-Fotos/Glienig/K/mA/resized20220215_GLI_3NE_K_mA.JPG +0 -0
  24. Stahlrahmen-Fotos/Glienig/K/mA/resized20220317_GLI_3NE_K_mA.jpg +0 -0
  25. Stahlrahmen-Fotos/Glienig/K/mA/resized20220401_GLI_3NE_K_mA.JPG +0 -0
  26. Stahlrahmen-Fotos/Glienig/K/mA/resized20220420_GLI_3NE_K_mA.jpg +0 -0
  27. Stahlrahmen-Fotos/Glienig/K/mA/resized20220518_GLI_3NE_K_mA.jpg +0 -0
  28. Stahlrahmen-Fotos/Glienig/K/mA/resized20220601_GLI_3NE_K_mA.jpg +0 -0
  29. Stahlrahmen-Fotos/Glienig/K/mA/resized20220712_GLI_3NE_K_mA.JPG +0 -0
  30. Stahlrahmen-Fotos/Glienig/K/mA/resized20220809_GLI_3NE_K_mA.jpg +0 -0
  31. Stahlrahmen-Fotos/Glienig/K/mA/resized20221020_GLI_3NE_K_mA.jpg +0 -0
  32. Stahlrahmen-Fotos/Glienig/K/mA/resized20221129_GLI_3NE_K_mA.jpg +0 -0
  33. Stahlrahmen-Fotos/Glienig/K/oA/resized20210929_GLI_3NE_K_oA.jpg +0 -0
  34. Stahlrahmen-Fotos/Glienig/K/oA/resized20211014_GLI_3NE_K_oA.JPG +0 -0
  35. Stahlrahmen-Fotos/Glienig/K/oA/resized20211026_GLI_3NE_K_oA.jpg +0 -0
  36. Stahlrahmen-Fotos/Glienig/K/oA/resized20211109_GLI_3NE_K_oA.jpg +0 -0
  37. Stahlrahmen-Fotos/Glienig/K/oA/resized20211124_GLI_3NE_K_oA.JPG +0 -0
  38. Stahlrahmen-Fotos/Glienig/K/oA/resized20211208_GLI_3NE_K_oA.JPG +0 -0
  39. Stahlrahmen-Fotos/Glienig/K/oA/resized20220215_GLI_3NE_K_oA.JPG +0 -0
  40. Stahlrahmen-Fotos/Glienig/K/oA/resized20220317_GLI_3NE_K_oA.jpg +0 -0
  41. Stahlrahmen-Fotos/Glienig/K/oA/resized20220401_GLI_3NE_K_oA.JPG +0 -0
  42. Stahlrahmen-Fotos/Glienig/K/oA/resized20220420_GLI_3NE_K_oA.jpg +0 -0
  43. Stahlrahmen-Fotos/Glienig/K/oA/resized20220518_GLI_3NE_K_oA.jpg +0 -0
  44. Stahlrahmen-Fotos/Glienig/K/oA/resized20220601_GLI_3NE_K_oA.jpg +0 -0
  45. Stahlrahmen-Fotos/Glienig/K/oA/resized20220712_GLI_3NE_K_oA.JPG +0 -0
  46. Stahlrahmen-Fotos/Glienig/K/oA/resized20220809_GLI_3NE_K_oA.jpg +0 -0
  47. Stahlrahmen-Fotos/Glienig/K/oA/resized20221020_GLI_3NE_K_oA.jpg +0 -0
  48. Stahlrahmen-Fotos/Glienig/K/oA/resized20221129_GLI_3NE_K_oA.jpg +0 -0
  49. Stahlrahmen-Fotos/Glienig/nK/mA/resized20210914_GLI_3NW_nK_mA.jpg +0 -0
  50. Stahlrahmen-Fotos/Glienig/nK/mA/resized20211014_GLI_3NW_nK_mA.JPG +0 -0
2023_01_30_Mittelwerte_Masseverlust.xlsx ADDED
Binary file (36.3 kB). View file
 
Boden Temperatur Feuchte.py ADDED
@@ -0,0 +1,128 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Created on Fri Mar 3 12:57:34 2023
4
+
5
+ @author: BorowyP
6
+ """
7
+
8
+ import pandas as pd
9
+ import hvplot.pandas # Adds .hvplot and .interactive methods to Pandas dataframes
10
+ import panel as pn # Panel is a simple, flexible and enterprise-ready data app framework
11
+ import holoviews as hv
12
+ from holoviews.operation.timeseries import rolling, rolling_outlier_std
13
+
14
+
15
+ hv.extension('bokeh')
16
+ #pn.extension('tabulator')
17
+
18
+ pn.extension(sizing_mode="stretch_width")
19
+ #pd.set_option("precision", 0)
20
+
21
+ PALETTE = ["#ff6f69", "#ffcc5c", "#88d8b0", ]
22
+ import numpy as np
23
+ from bokeh.models.formatters import DatetimeTickFormatter
24
+ formatter = DatetimeTickFormatter(months='%b %Y') # wird in .hvplot benötigt für x-achse!
25
+
26
+ soil_temp = pd.read_csv('df_soil_temp.csv',header=0,sep=',')
27
+
28
+ soil_temp.index = pd.to_datetime(soil_temp['Date'], format='%Y.%m.%d %H:%M:%S')
29
+ soil_temp.index.names = ['Date']
30
+ soil_temp = soil_temp.drop(['Date'], axis=1)
31
+ soil_temp = soil_temp.drop(['Unnamed: 0'], axis=1)
32
+
33
+
34
+ soil_hum = pd.read_csv('df_soil_hum.csv',header=0,sep=',')
35
+ soil_hum.index = pd.to_datetime(soil_hum['Date'], format='%Y.%m.%d %H:%M:%S')
36
+ soil_hum.index.names = ['Date']
37
+ soil_hum = soil_hum.drop(['Date'], axis=1)
38
+ soil_hum = soil_hum.drop(['Unnamed: 0'], axis=1)
39
+
40
+ Stndrt = pn.widgets.RadioButtonGroup(name='Standort', options=['Glienig', 'Groß Liebitz', 'Krausnick', 'Halbe', 'Spreeau', 'Hangelsberg'],button_type='success')
41
+
42
+ soilhumbtn = pn.widgets.ToggleGroup(
43
+ name='soilhumidity',
44
+ options=['Prof100', 'Prof200', 'Prof300', 'Prof400', 'Prof600', 'Prof1000'],
45
+ value=['Prof100'],
46
+ button_type='success')
47
+
48
+
49
+ soiltempbtn = pn.widgets.ToggleGroup(
50
+ name='soiltemperature',
51
+ options=['Temp05', 'Temp10', 'Temp20', 'Temp30', 'Temp50', 'Temp100'],
52
+ value=['Temp05'],
53
+ button_type='success')
54
+ soil_date_slider = pn.widgets.DateRangeSlider(name='Date', start=soil_temp.index.min(), end=soil_temp.index.max())
55
+
56
+ soil_temp_i= soil_temp.interactive()
57
+
58
+ soil_temp_i = (
59
+ soil_temp_i[
60
+ (soil_temp_i.Standort == Stndrt) &
61
+ (soil_temp_i.index >= soil_date_slider.param.value_start) &
62
+ (soil_temp_i.index <= soil_date_slider.param.value_end)
63
+ ]
64
+ )
65
+
66
+
67
+
68
+ soil_hum_i = soil_hum.interactive()
69
+
70
+ soil_hum_i = ( soil_hum_i[
71
+ (soil_hum_i.Standort == Stndrt) &
72
+ (soil_hum_i.index >= soil_date_slider.param.value_start) &
73
+ (soil_hum_i.index <= soil_date_slider.param.value_end) ])
74
+
75
+ soiltempplot = soil_temp_i.hvplot(x='Date',xlabel='Datum',title=Stndrt, y=soiltempbtn, color=PALETTE, line_width=1, xformatter=formatter, ylabel='Bodentemperatur [°C]')
76
+
77
+
78
+ soilhumplot = soil_hum_i.hvplot(x='Date',xlabel='Datum',title=Stndrt, y=soilhumbtn, color=PALETTE, line_width=1, xformatter=formatter, ylabel='Bodenfeuchte[%]')
79
+
80
+ soiltemp_box = soil_temp_i[['Temp05', 'Temp10', 'Temp20', 'Temp30', 'Temp50', 'Temp100']].fillna(0)
81
+ soiltemp_box_plot = soiltemp_box.hvplot(kind='box', legend=False, xlabel=Stndrt, ylabel='Bodentemperatur [°C]')
82
+
83
+
84
+ soilhum_box = soil_hum_i[['Prof100', 'Prof200', 'Prof300', 'Prof400', 'Prof600', 'Prof1000']].fillna(0)
85
+ soilhum_box_plot = soilhum_box.hvplot(kind='box', legend=False, xlabel=Stndrt, ylabel='Bodenfeuchte [%]')
86
+
87
+
88
+
89
+ hd_logo = pn.pane.PNG('HD_Logo.png', width=100)
90
+ hd_logo
91
+
92
+ lfe_logo = pn.pane.PNG('LFE_Logo.png', width=100)
93
+
94
+ fnr_logo = pn.pane.PNG('fnr_logo.png', width=100)
95
+
96
+ template = pn.template.FastListTemplate(
97
+ title='Holzdeko Dashboard',
98
+ sidebar=[hd_logo,
99
+ pn.pane.Markdown("## Einstellungen"),
100
+ 'Standort',Stndrt,
101
+ lfe_logo,
102
+ fnr_logo
103
+ #'Boden',
104
+ #'Gekalkt/ungekalkt', yaxis,
105
+ ],
106
+ main=[pn.pane.Markdown("## Boden"),
107
+ soiltempbtn,
108
+ soil_date_slider,
109
+ soiltempplot.panel(),
110
+ soiltemp_box_plot.panel(),
111
+ soilhumbtn,
112
+ soil_date_slider,
113
+ soilhumplot.panel(),
114
+ soilhum_box_plot.panel()
115
+
116
+ #accent_base_color="#88d8b0",
117
+ #header_background="#88d8b0",
118
+ ])
119
+
120
+
121
+
122
+
123
+ template.servable();
124
+
125
+ #print('fertig!')
126
+ # To launch this dashboard as a web server, we can simply run
127
+ # cd C:\Users\BorowyP\Desktop\Dashboard-Preasi\soil_air\
128
+ # panel serve 20230303_soil_temp_hum_docker.ipynb --autoreload
Bodenfeuchte.py ADDED
@@ -0,0 +1,190 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Created on Tue Mar 7 12:04:33 2023
4
+
5
+ @author: BorowyP
6
+ """
7
+
8
+ import pandas as pd
9
+ import hvplot.pandas # Adds .hvplot and .interactive methods to Pandas dataframes
10
+
11
+ from hvplot.plotting import scatter_matrix
12
+
13
+ import panel as pn # Panel is a simple, flexible and enterprise-ready data app framework
14
+ import holoviews as hv
15
+ from holoviews.operation.timeseries import rolling, rolling_outlier_std
16
+
17
+
18
+ hv.extension('bokeh')
19
+ #pn.extension('tabulator')
20
+
21
+ pn.extension(sizing_mode="stretch_width")
22
+ #pd.set_option("precision", 0)
23
+
24
+ PALETTE = ["#ff6f69", "#ffcc5c", "#88d8b0", ]
25
+ import numpy as np
26
+ from bokeh.models.formatters import DatetimeTickFormatter
27
+ formatter = DatetimeTickFormatter(months='%b %Y') # wird in .hvplot benötigt für x-achse!
28
+
29
+ soil_hum = pd.read_csv('df_soil_hum.csv',header=0,sep=',')
30
+ soil_hum.index = pd.to_datetime(soil_hum['Date'], format='%Y.%m.%d %H:%M:%S')
31
+ soil_hum.index.names = ['Date']
32
+ soil_hum = soil_hum.drop(['Date'], axis=1)
33
+ soil_hum = soil_hum.drop(['Unnamed: 0'], axis=1)
34
+ soil_hum[soil_hum.columns[list(range(6))]] = soil_hum[soil_hum.columns[list(range(6))]].round(1)
35
+
36
+
37
+ soil_hum = soil_hum.rename(columns={'Prof100' : '100',
38
+ 'Prof200' : '200',
39
+ 'Prof300' : '300',
40
+ 'Prof400' : '400',
41
+ 'Prof600' : '600' ,
42
+ 'Prof1000' : '1000',
43
+ 'Standort' : 'Standort'})
44
+
45
+
46
+
47
+
48
+ Stndrt = pn.widgets.RadioButtonGroup(name='Standort', options=['Glienig', 'Groß Liebitz', 'Krausnick', 'Halbe', 'Spreeau', 'Hangelsberg'],button_type='success')
49
+
50
+ soilhumbtn = pn.widgets.ToggleGroup(
51
+ name='soilhumidity',
52
+ options=['100', '200', '300', '400', '600', '1000'],
53
+ value=['100'],
54
+ button_type='success')
55
+
56
+ soil_date_slider = pn.widgets.DateRangeSlider(name='Date', start=soil_hum.index.min(), end=soil_hum.index.max())
57
+
58
+
59
+
60
+ soil_hum_i = soil_hum.interactive()
61
+
62
+ soil_hum_i = ( soil_hum_i[
63
+ (soil_hum_i.Standort == Stndrt) &
64
+ (soil_hum_i.index >= soil_date_slider.param.value_start) &
65
+ (soil_hum_i.index <= soil_date_slider.param.value_end) ])
66
+
67
+
68
+
69
+ soilhumplot = soil_hum_i.hvplot(x='Date',xlabel='Datum',title=Stndrt, y=soilhumbtn, color=PALETTE, line_width=1, xformatter=formatter, ylabel='Bodenfeuchte[%]')
70
+
71
+
72
+
73
+
74
+
75
+ def callback_hum(soil_hum_i):
76
+
77
+ df = soil_hum_i
78
+
79
+ monitor = pd.DataFrame({#'Standort' : [Stndrt.value, Stndrt.value],
80
+ #'von' : soil_temp_i.index.min(),
81
+ #'bis' : soil_temp_i.index.max(),
82
+ 'Mittelwert' : [df['100'].mean(),
83
+ df['200'].mean(),
84
+ df['300'].mean(),
85
+ df['400'].mean(),
86
+ df['600'].mean(),
87
+ df['1000'].mean(),
88
+ ] ,
89
+ 'Median' : [df['100'].median(),
90
+ df['200'].median(),
91
+ df['300'].median(),
92
+ df['400'].median(),
93
+ df['600'].median(),
94
+ df['1000'].median(),
95
+ ] ,
96
+ 'Maximum' : [df['100'].max(),
97
+ df['200'].max(),
98
+ df['300'].max(),
99
+ df['400'].max(),
100
+ df['600'].max(),
101
+ df['1000'].max()],
102
+ 'Minimum' : [df['100'].min(),
103
+ df['200'].min(),
104
+ df['300'].min(),
105
+ df['400'].min(),
106
+ df['600'].min(),
107
+ df['1000'].min()],
108
+ 'Anzahl' : [df['100'].count(),
109
+ df['200'].count(),
110
+ df['300'].count(),
111
+ df['400'].count(),
112
+ df['600'].count(),
113
+ df['1000'].count()]
114
+
115
+ }, index=['100',
116
+ '200',
117
+ '300',
118
+ '400',
119
+ '600',
120
+ '1000',
121
+
122
+ ])
123
+ monitor.index.name='Profiltiefe'
124
+
125
+ #soiltemp_scatter = scatter_matrix(soil_temp, alpha=0.2) #Scattermatrix zum Vergleich der einzelnen Profiltiefen???
126
+
127
+ soiltemp_scatter_df = soil_hum[soil_hum['Standort'] == Stndrt.value]#.iloc[df.index.min(): df.index.max()]
128
+
129
+ soiltemp_scatter = scatter_matrix(soiltemp_scatter_df, alpha=0.2)
130
+
131
+ scatter_headline = pn.pane.Markdown(f"## Scattermatrix Bodenfeuchte **{Stndrt.value}**")
132
+
133
+ scatter_discription = pn.pane.Markdown('scatter_matrix shows all the pairwise relationships between the columns of your data. Each non-diagonal entry plots the corresponding columns against another, while the diagonal plot shows the distribution of the data within each individual column.'
134
+ )
135
+
136
+ monitor_gesamt = pd.DataFrame({'Standort' : [Stndrt.value],
137
+ 'von' : df.index.min(),
138
+ 'bis' : df.index.max(),
139
+ 'Mittelwert' : df.mean(numeric_only=True).mean(),
140
+ 'Median' : df.median(numeric_only=True).median(),
141
+ 'Maximum' : df.max(numeric_only=True).max(),
142
+ 'Minimum' : df.min(numeric_only=True).min()
143
+ }, index=['Gesamt'])
144
+
145
+
146
+
147
+
148
+
149
+ return pn.Column(monitor_gesamt, monitor,scatter_headline, soiltemp_scatter, scatter_discription)
150
+
151
+ callback = soil_hum_i.pipe(callback_hum)
152
+
153
+ callback
154
+
155
+ hd_logo = pn.pane.PNG('HD_Logo.png', width=100)
156
+ hd_logo
157
+
158
+ lfe_logo = pn.pane.PNG('LFE_Logo.png', width=100)
159
+
160
+ fnr_logo = pn.pane.PNG('fnr_logo.png', width=100)
161
+
162
+ template = pn.template.FastListTemplate(
163
+ title='Holzdeko Dashboard',
164
+ sidebar=[hd_logo,
165
+ pn.pane.Markdown("## Einstellungen"),
166
+ 'Standort',Stndrt,
167
+ lfe_logo,
168
+ fnr_logo
169
+ #'Boden',
170
+ #'Gekalkt/ungekalkt', yaxis,
171
+ ],
172
+ main=[pn.pane.Markdown("## Bodenfeuchte"),
173
+ soilhumbtn,
174
+ soil_date_slider,
175
+ soilhumplot.panel(),
176
+ callback
177
+
178
+ #accent_base_color="#88d8b0",
179
+ #header_background="#88d8b0",
180
+ ])
181
+
182
+
183
+
184
+
185
+ template.servable();
186
+
187
+ #print('fertig!')
188
+ # To launch this dashboard as a web server, we can simply run
189
+ # cd C:\Users\BorowyP\Desktop\Dashboard-Preasi\soil_air\
190
+ # panel serve 20230307_soil_hum_docker.ipynb --autoreload
Bodentemperatur.py ADDED
@@ -0,0 +1,192 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Created on Fri Mar 3 12:57:34 2023
4
+
5
+ @author: BorowyP
6
+ """
7
+
8
+ import pandas as pd
9
+ import hvplot.pandas # Adds .hvplot and .interactive methods to Pandas dataframes
10
+
11
+ from hvplot.plotting import scatter_matrix
12
+
13
+ import panel as pn # Panel is a simple, flexible and enterprise-ready data app framework
14
+ import holoviews as hv
15
+ from holoviews.operation.timeseries import rolling, rolling_outlier_std
16
+
17
+
18
+ hv.extension('bokeh')
19
+ #pn.extension('tabulator')
20
+
21
+ pn.extension(sizing_mode="stretch_width")
22
+ #pd.set_option("precision", 0)
23
+
24
+ PALETTE = ["#ff6f69", "#ffcc5c", "#88d8b0", ]
25
+ import numpy as np
26
+ from bokeh.models.formatters import DatetimeTickFormatter
27
+ formatter = DatetimeTickFormatter(months='%b %Y') # wird in .hvplot benötigt für x-achse!
28
+
29
+
30
+
31
+ soil_temp = pd.read_csv('df_soil_temp.csv',header=0,sep=',')
32
+
33
+ soil_temp.index = pd.to_datetime(soil_temp['Date'], format='%Y.%m.%d %H:%M:%S')
34
+ soil_temp.index.names = ['Date']
35
+ soil_temp = soil_temp.drop(['Date'], axis=1)
36
+ soil_temp = soil_temp.drop(['Unnamed: 0'], axis=1)
37
+ soil_temp[soil_temp.columns[list(range(6))]] = soil_temp[soil_temp.columns[list(range(6))]].round(1) #RUNDEN auf 1 Kommastelle fuer bessere Perfomance!!!
38
+
39
+ soil_temp = soil_temp.rename(columns={'Temp05' : '50',
40
+ 'Temp10' : '100',
41
+ 'Temp20' : '200',
42
+ 'Temp30' : '300',
43
+ 'Temp50' : '500' ,
44
+ 'Temp100' : '1000',
45
+ 'Standort' : 'Standort'})
46
+
47
+
48
+
49
+ Stndrt = pn.widgets.RadioButtonGroup(name='Standort', options=['Glienig', 'Groß Liebitz', 'Krausnick', 'Halbe', 'Spreeau', 'Hangelsberg'],button_type='success')
50
+
51
+ soiltempbtn = pn.widgets.ToggleGroup(
52
+ name='soiltemperature',
53
+ options=['50', '100', '200', '300', '500', '1000'],
54
+ value=['50'],
55
+ button_type='success')
56
+
57
+ soil_date_slider = pn.widgets.DateRangeSlider(name='Date', start=soil_temp.index.min(), end=soil_temp.index.max())
58
+
59
+
60
+
61
+ soil_temp_i= soil_temp.interactive()
62
+
63
+ soil_temp_i = (
64
+ soil_temp_i[
65
+ (soil_temp_i.Standort == Stndrt) &
66
+ (soil_temp_i.index >= soil_date_slider.param.value_start) &
67
+ (soil_temp_i.index <= soil_date_slider.param.value_end)
68
+ ]
69
+ )
70
+
71
+ soiltempplot = soil_temp_i.hvplot(x='Date',xlabel='Datum',title=Stndrt, y=soiltempbtn, color=PALETTE, line_width=1, xformatter=formatter, ylabel='Bodentemperatur [°C]')
72
+
73
+
74
+
75
+ def callback_temp(soil_temp_i):
76
+
77
+ df = soil_temp_i
78
+
79
+ monitor = pd.DataFrame({#'Standort' : [Stndrt.value, Stndrt.value],
80
+ #'von' : soil_temp_i.index.min(),
81
+ #'bis' : soil_temp_i.index.max(),
82
+ 'Mittelwert' : [df['50'].mean(),
83
+ df['100'].mean(),
84
+ df['200'].mean(),
85
+ df['300'].mean(),
86
+ df['500'].mean(),
87
+ df['1000'].mean(),
88
+ ] ,
89
+ 'Median' : [df['50'].median(),
90
+ df['100'].median(),
91
+ df['200'].median(),
92
+ df['300'].median(),
93
+ df['500'].median(),
94
+ df['1000'].median(),
95
+ ] ,
96
+ 'Maximum' : [df['50'].max(),
97
+ df['100'].max(),
98
+ df['200'].max(),
99
+ df['300'].max(),
100
+ df['500'].max(),
101
+ df['1000'].max()],
102
+ 'Minimum' : [df['50'].min(),
103
+ df['100'].min(),
104
+ df['200'].min(),
105
+ df['300'].min(),
106
+ df['500'].min(),
107
+ df['1000'].min()],
108
+ 'Anzahl' : [df['50'].count(),
109
+ df['100'].count(),
110
+ df['200'].count(),
111
+ df['300'].count(),
112
+ df['500'].count(),
113
+ df['1000'].count()]
114
+
115
+ }, index=['50',
116
+ '100',
117
+ '200',
118
+ '300',
119
+ '500',
120
+ '1000',
121
+
122
+ ])
123
+ monitor.index.name='Profiltiefe'
124
+
125
+ #soiltemp_scatter = scatter_matrix(soil_temp, alpha=0.2) #Scattermatrix zum Vergleich der einzelnen Profiltiefen???
126
+
127
+ soiltemp_scatter_df = soil_temp[soil_temp['Standort'] == Stndrt.value]#.iloc[df.index.min(): df.index.max()]
128
+
129
+ soiltemp_scatter = scatter_matrix(soiltemp_scatter_df, alpha=0.2)
130
+
131
+ scatter_headline = pn.pane.Markdown(f"## Scattermatrix **{Stndrt.value}**")
132
+
133
+ scatter_discription = pn.pane.Markdown('scatter_matrix shows all the pairwise relationships between the columns of your data. Each non-diagonal entry plots the corresponding columns against another, while the diagonal plot shows the distribution of the data within each individual column.'
134
+ )
135
+
136
+ monitor_gesamt = pd.DataFrame({'Standort' : [Stndrt.value],
137
+ 'von' : df.index.min(),
138
+ 'bis' : df.index.max(),
139
+ 'Mittelwert' : df.mean(numeric_only=True).mean(),
140
+ 'Median' : df.median(numeric_only=True).median(),
141
+ 'Maximum' : df.max(numeric_only=True).max(),
142
+ 'Minimum' : df.min(numeric_only=True).min()
143
+ }, index=['Gesamt'])
144
+
145
+
146
+
147
+
148
+
149
+ return pn.Column(monitor_gesamt, monitor,scatter_headline, soiltemp_scatter, scatter_discription)
150
+
151
+ callback = soil_temp_i.pipe(callback_temp)
152
+
153
+ callback
154
+
155
+ hd_logo = pn.pane.PNG('HD_Logo.png', width=100)
156
+ lfe_logo = pn.pane.PNG('LFE_Logo.png', width=100)
157
+ fnr_logo = pn.pane.PNG('fnr_logo.png', width=100)
158
+
159
+ template = pn.template.FastListTemplate(
160
+ title='Holzdeko Dashboard',
161
+ sidebar=[hd_logo,
162
+ pn.pane.Markdown("## Einstellungen"),
163
+ 'Standort',Stndrt,
164
+ lfe_logo,
165
+ fnr_logo
166
+
167
+
168
+ ],
169
+ main=[pn.pane.Markdown("## Bodentemperatur"),
170
+ soiltempbtn,
171
+ soil_date_slider,
172
+ soiltempplot.panel(),
173
+ callback.panel(),
174
+
175
+
176
+
177
+
178
+
179
+
180
+ #accent_base_color="#88d8b0",
181
+ #header_background="#88d8b0",
182
+ ])
183
+
184
+
185
+
186
+
187
+ template.servable();
188
+
189
+ #print('fertig!')
190
+ # To launch this dashboard as a web server, we can simply run
191
+ # cd C:\Users\BorowyP\Desktop\Dashboard-Preasi\soil_air\
192
+ # panel serve 20230307_soil_temp_docker.ipynb --autoreload
Dockerfile ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.9
2
+
3
+ WORKDIR /code
4
+
5
+ COPY ./requirements.txt /code/requirements.txt
6
+
7
+ RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
8
+
9
+ COPY . .
10
+
11
+ CMD ["panel", "serve", "/code/Lufttemperatur.py", "/code/Luftfeuchte.py", "/code/Niederschlag.py","/code/Bodentemperatur.py", "/code/Bodenfeuchte.py", "/code/Masseverlust.py", "/code/Hemisfere.py", "/code/Stahlrahmen.py", "--address", "0.0.0.0", "--port", "7860", "--allow-websocket-origin", "*"]
HD_Logo.png ADDED
Hemisfere.py ADDED
@@ -0,0 +1,203 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Created on Fri Mar 10 15:10:36 2023
4
+
5
+ @author: BorowyP
6
+ """
7
+
8
+ import os
9
+
10
+ import matplotlib.pyplot as plt
11
+
12
+ import numpy as np
13
+ import pandas as pd
14
+
15
+ import hvplot.pandas
16
+
17
+ import holoviews as hv
18
+
19
+ from holoviews.operation.timeseries import rolling, rolling_outlier_std
20
+
21
+ import xarray as xr
22
+ import panel as pn
23
+
24
+ import panel.widgets as pnw
25
+
26
+
27
+
28
+ import hvplot.xarray
29
+
30
+ cwd = os.getcwd()
31
+ print(cwd)
32
+ print(os.listdir(cwd))
33
+ os.chdir('hemi_fotos')
34
+ pic_cwd = os.getcwd()
35
+ print(pic_cwd)
36
+ os.listdir(pic_cwd)
37
+
38
+ os.chdir(pic_cwd)
39
+ #os.listdir()
40
+ list_pictures_files = os.listdir()
41
+
42
+ rgb_list = []
43
+
44
+ for i in range(len(list_pictures_files)):
45
+ im = plt.imread(list_pictures_files[i])
46
+ x = np.arange(len(im[0]))
47
+ y = np.arange(len(im))
48
+ channel = np.arange(3)
49
+ im_xr = xr.DataArray(im,coords={'y': y,'x': x,'channel': channel},dims=["y", "x", "channel"])
50
+ rgb_list.append(im_xr)
51
+ #print(str(list_pictures_files[i]) + ' ' +
52
+ # 'y-Achse: ' + ' ' + str(len(im)) + ', ' +
53
+ # 'x-Achse: ' + ' ' + str(len(im[0])) + ', ' + 'channel: ' + ' ' + str(len(im[0][0])))
54
+ #print(' ')
55
+
56
+ x = np.arange(len(rgb_list[0][0]))
57
+ y = np.arange(len(rgb_list[0]))
58
+ channel = np.arange(3)
59
+
60
+ Stndrt = np.array([
61
+ 'Krausnick K',
62
+ 'Glienig K',
63
+ 'Glienig nK',
64
+ 'Halbe K',
65
+ 'Halbe nK',
66
+ 'Hangelsberg K',
67
+ 'Hangelsberg nK',
68
+ 'Spreeau K',
69
+ 'Spreeau nK',
70
+ 'Groß Liebitz K',
71
+ 'Groß Liebitz nK'
72
+ ])
73
+
74
+
75
+
76
+
77
+ xar = xr.DataArray(rgb_list,
78
+ dims=(
79
+
80
+ 'Standort',
81
+ "y",
82
+ "x",
83
+ "channel")
84
+ ,
85
+ coords={
86
+ "x": x,
87
+ "y": y,
88
+ "channel": channel,
89
+ 'Standort' : Stndrt,
90
+
91
+ },
92
+ name="rgb")
93
+
94
+
95
+
96
+
97
+ fisheye = xar.hvplot.rgb(x='x', y='y', bands='channel', data_aspect=1, flip_yaxis=True, xaxis=False, yaxis=None, width=500)
98
+
99
+
100
+ os.chdir(cwd)
101
+
102
+
103
+ df = pd.read_csv(
104
+ 'Hemisphere_totals_holzdeko.csv' ,
105
+ encoding_errors='ignore',
106
+ sep=';',
107
+ #skiprows=[5,10],
108
+ header=0,
109
+ decimal=','
110
+ )
111
+
112
+ df['transmission'] = df['transmission'].str.strip('%') # entfernt Character '%'
113
+ df['transm_gaps'] = df['transm_gaps'].str.strip('%')
114
+ df['openness'] = df['openness'].str.strip('%')
115
+ df['openn_gaps'] = df['openn_gaps'].str.strip('%')
116
+
117
+ df['transmission'] = df['transmission'].replace(',', '.', regex=True) # wandelt , in . um
118
+ df['transm_gaps'] = df['transm_gaps'].replace(',', '.', regex=True)
119
+ df['openness'] = df['openness'].replace(',', '.', regex=True)
120
+ df['openn_gaps'] = df['openn_gaps'].replace(',', '.', regex=True)
121
+
122
+ df['transmission'] = df['transmission'].astype('float64', copy=False)
123
+ df['transm_gaps'] = df['transm_gaps'].astype('float64', copy=False)
124
+ df['openness'] = df['openness'].astype('float64', copy=False)
125
+ df['openn_gaps'] = df['openn_gaps'].astype('float64', copy=False)
126
+
127
+
128
+
129
+ params = pn.widgets.RadioButtonGroup(
130
+ name='param',
131
+ options=['white',
132
+ 'black',
133
+ 'transmission',
134
+ 'transm_gaps',
135
+ 'openness',
136
+ 'openn_gaps'
137
+ ],
138
+ button_type='success')
139
+
140
+ data_inter = df.interactive()
141
+
142
+ mean_param = (
143
+ data_inter
144
+ .groupby(['Standort', 'k_nk']).mean()
145
+
146
+ )
147
+
148
+ mean_param_plot = mean_param[params].hvplot(x='Standort', y=params, by='k_nk', kind='bar',
149
+ title=params, xlabel='Standort')
150
+
151
+
152
+
153
+
154
+
155
+ param_discription = pd.DataFrame({'white': ['white pixels (sky)'],
156
+ 'black' : ['black pixels (canopy)'],
157
+ 'transmission' : ['light transmission in 2D (azimutal equidistant projection of the hemisphere)'],
158
+ 'transm_gaps' : ['large gaps of transmission'],
159
+ 'openness' : ['canopy openness in 3D, also called sky view factor (solid angles of the hemisphere)'],
160
+ 'openn_gaps' : ['large gaps of openness']})
161
+
162
+ param_discription = param_discription.interactive()
163
+
164
+ param_discription = param_discription[params].values[0]
165
+
166
+
167
+
168
+ os.chdir(cwd)
169
+ hd_logo = pn.pane.PNG('HD_Logo.png', width=100)
170
+ lfe_logo = pn.pane.PNG('LFE_Logo.png', width=100)
171
+ fnr_logo = pn.pane.PNG('fnr_logo.png', width=100)
172
+
173
+ template = pn.template.FastListTemplate(
174
+ title='Auswertung Hemisfere',
175
+ sidebar=[hd_logo,
176
+ pn.pane.Markdown("## Einstellungen"),
177
+ #'Standort',Stndrt,
178
+ #'gekalkt/ungekalkt', yaxis,
179
+ lfe_logo,
180
+ fnr_logo
181
+ #'Boden',
182
+ #'Gekalkt/ungekalkt', yaxis,
183
+ ],
184
+ main=[pn.pane.Markdown("## Hemisfere"),
185
+ fisheye,#.panel(),
186
+ #params,
187
+ param_discription,
188
+ mean_param_plot.panel(),
189
+
190
+ #accent_base_color="#88d8b0",
191
+ #header_background="#88d8b0",
192
+ ])
193
+
194
+
195
+
196
+
197
+ template.servable();
198
+
199
+ print('fertig!')
200
+ # To launch this dashboard as a web server, we can simply run
201
+ # cd C:\Users\BorowyP\Desktop\Dashboard-Preasi\hemisfer
202
+
203
+ # panel serve 2023_02_10_hemi_dashboard.ipynb --autoreload
Hemisphere_totals_holzdeko.csv ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Standort;k_nk;white;black;transmission;transm_gaps;openness;openn_gaps
2
+ Glienig;k;44692;105485;26,90%;7,38%;28,50%;9,74%
3
+ Glienig;nk;44282;105895;26,10%;10,50%;27,80%;16,10%
4
+ Gro� Liebitz;k;110364;39813;70,80%;39,50%;72,70%;55,50%
5
+ Gro� Liebitz;nk;109132;41045;69,10%;41,10%;71,50%;62,40%
6
+ Halbe;k;37387;112790;21,70%;2,24%;23,30%;3,27%
7
+ Halbe;nk;37146;113031;21,00%;2,02%;22,70%;2,21%
8
+ Hangelsberg;k;33137;117040;18,70%;2,76%;20,30%;3,23%
9
+ Hangelsberg;nk;35564;114613;20,50%;2,03%;22,10%;2,66%
10
+ Spreeau;k;50361;99816;30,10%;7,96%;31,90%;9,67%
11
+ Spreeau;nk;54555;95622;32,70%;5,83%;34,60%;6,63%
12
+ Krausnick;k;39726;110451;23,00%;8,80%;24,80%;11,70%
13
+ Krausnick;nk;;;;;;
LFE_Logo.png ADDED
Luftfeuchte.py ADDED
@@ -0,0 +1,184 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Created on Fri Mar 3 12:12:35 2023
4
+
5
+ @author: BorowyP
6
+ """
7
+
8
+ import pandas as pd
9
+ import numpy as np
10
+ import hvplot.pandas # Adds .hvplot and .interactive methods to Pandas dataframes
11
+ import panel as pn # Panel is a simple, flexible and enterprise-ready data app framework
12
+ import holoviews as hv
13
+
14
+ pn.extension(sizing_mode="stretch_width")
15
+
16
+ PALETTE = ["#ff6f69", "#ffcc5c", "#88d8b0", ]
17
+ from bokeh.models.formatters import DatetimeTickFormatter
18
+ formatter = DatetimeTickFormatter(months='%b %Y') # wird in .hvplot benötigt für x-achse!
19
+
20
+ air_hum = pd.read_csv(r'df_air_hum.csv', sep=',',
21
+ header=0,
22
+ #skiprows=[1],
23
+ decimal=',',
24
+ na_values=('#-INF', '#NAN'))
25
+
26
+ air_hum.index = pd.to_datetime(air_hum['Date'], format='%Y.%m.%d %H:%M:%S')
27
+ #air_hum.index.names = ['Date']
28
+ air_hum = air_hum.drop(['Date'], axis=1)
29
+ air_hum['hum'] = air_hum['hum'].astype(np.float64, copy=True, errors='ignore')
30
+
31
+ air_hum = air_hum.round(1)
32
+
33
+
34
+
35
+ air_date_slider = pn.widgets.DateRangeSlider(name='Date', start=air_hum.index.min(), end=air_hum.index.max())
36
+ Stndrt = pn.widgets.RadioButtonGroup(name='Standort', options=['Glienig', 'Groß Liebitz', 'Krausnick', 'Halbe', 'Spreeau', 'Hangelsberg'],button_type='success')
37
+ air_date_slider
38
+
39
+ air_hum_inter = air_hum.interactive()
40
+
41
+ air_hum_inter = (
42
+ air_hum_inter[
43
+ (air_hum_inter.Standort == Stndrt) &
44
+ (air_hum_inter.index >= air_date_slider.param.value_start) &
45
+ (air_hum_inter.index <= air_date_slider.param.value_end)
46
+
47
+ ])
48
+
49
+ def lin_reg_hum(dfx,dfy, date):
50
+ # Formel für regres-gerade: y= alpha + b * x
51
+ # https://www.crashkurs-statistik.de/einfache-lineare-regression/
52
+
53
+ lin_df = pd.DataFrame({'Date' : date,
54
+ 'Luftfeuchte' : dfy,
55
+ 'x-x.mean' : dfx-dfx.mean(),
56
+ 'y-y.mean' : dfy-dfy.mean(),
57
+ '(x-x.mean) * (y-y.mean)': (dfx-dfx.mean()) * (dfy-dfy.mean()),
58
+ '(x-x.mean)²' : (dfx-dfx.mean()) * (dfx-dfx.mean())
59
+ })
60
+
61
+ b = lin_df['(x-x.mean) * (y-y.mean)'].sum()/ lin_df['(x-x.mean)²'].sum()
62
+
63
+ alpha = dfy.mean() - b * dfx.mean()
64
+
65
+ lin_df['Lineare Regression'] = round(alpha + b * dfx,2)
66
+
67
+ lin_plot = lin_df.hvplot(x='Date',
68
+ xlabel='Datum',
69
+ title=Stndrt,
70
+ y=['Luftfeuchte', 'Lineare Regression'],
71
+ ylabel='rel Luftfeuchte [%]',
72
+ color=PALETTE,
73
+ line_width=0.5,
74
+ xformatter=formatter)
75
+
76
+ SQE = ((lin_df['Lineare Regression']-dfy.mean())*(lin_df['Lineare Regression']-dfy.mean())).sum()
77
+
78
+ SQT = (lin_df['y-y.mean'] * lin_df['y-y.mean']).sum()
79
+
80
+ R_Wert = round(SQE/SQT,2)
81
+
82
+
83
+ mean = round(dfy.mean(),2)
84
+ median = dfy.median()
85
+ maxm = dfy.max()
86
+ minm = dfy.min()
87
+ anz = dfy.count()
88
+
89
+ monitor_df = pd.DataFrame({'Standort' : [Stndrt.value],
90
+ 'von' : [air_date_slider.value[0]],
91
+ 'bis' : [air_date_slider.value[1]],
92
+ 'Mittelwert' : [mean],
93
+ 'Median' : [median],
94
+ 'Maximum' : [maxm],
95
+ 'Minimum' : [minm],
96
+ 'Anzahl' : [anz],
97
+ 'R²' : [R_Wert]
98
+
99
+ })
100
+
101
+ return pn.Column(lin_plot, monitor_df)
102
+
103
+
104
+
105
+ def callback_hum(air_hum_inter):
106
+ y = air_hum_inter.hum
107
+ x = air_hum_inter['Unnamed: 0']
108
+ return pn.Column(lin_reg_hum(x,y, air_hum_inter.index))
109
+
110
+
111
+ airhumplot = air_hum_inter.pipe(callback_hum)
112
+
113
+ airhumplot
114
+
115
+
116
+ hum_glienig = pd.DataFrame({'Glienig': air_hum.loc[air_hum['Standort'] == 'Glienig']['hum']},
117
+ index = air_hum.loc[air_hum['Standort'] == 'Glienig'].index)
118
+ hum_grlieb = pd.DataFrame({'Groß Liebitz': air_hum.loc[air_hum['Standort'] == 'Groß Liebitz']['hum']},
119
+ index = air_hum.loc[air_hum['Standort'] == 'Groß Liebitz'].index)
120
+ hum_halbe = pd.DataFrame({'Halbe' : air_hum.loc[air_hum['Standort'] == 'Halbe']['hum']},
121
+ index= air_hum.loc[air_hum['Standort'] == 'Halbe'].index)
122
+ hum_hberg = pd.DataFrame({'Hangelsberg' : air_hum.loc[air_hum['Standort'] == 'Hangelsberg']['hum']},
123
+ index= air_hum.loc[air_hum['Standort'] == 'Hangelsberg'].index)
124
+ hum_kraunick = pd.DataFrame({'Krausnick' : air_hum.loc[air_hum['Standort'] == 'Krausnick']['hum']},
125
+ index= air_hum.loc[air_hum['Standort'] == 'Krausnick'].index)
126
+ hum_spreeau = pd.DataFrame({'Spreeau' : air_hum.loc[air_hum['Standort'] == 'Spreeau']['hum']},
127
+ index= air_hum.loc[air_hum['Standort'] == 'Spreeau'].index)
128
+ air_hum_hist = pd.concat([hum_glienig,hum_grlieb,hum_halbe,hum_hberg,hum_kraunick,hum_spreeau])
129
+
130
+
131
+
132
+
133
+ dfi_hum = air_hum_hist.interactive()
134
+
135
+ filtered = dfi_hum[
136
+ (dfi_hum.index >= air_date_slider.param.value_start) &
137
+ (dfi_hum.index <= air_date_slider.param.value_end)]
138
+
139
+ plot_air_humhist = filtered.hvplot(y=['Glienig',
140
+ 'Groß Liebitz',
141
+ 'Halbe',
142
+ 'Hangelsberg',
143
+ 'Krausnick',
144
+ 'Spreeau'],
145
+ kind='hist',
146
+ responsive=True,
147
+ min_height=300,
148
+ xlabel='rel Luftfeuchte[%]',
149
+ alpha=0.5)
150
+
151
+ plot_air_humhist
152
+
153
+ hd_logo = pn.pane.PNG('HD_Logo.png', width=100)
154
+ hd_logo
155
+
156
+ lfe_logo = pn.pane.PNG('LFE_Logo.png', width=100)
157
+
158
+ fnr_logo = pn.pane.PNG('fnr_logo.png', width=100)
159
+
160
+ template = pn.template.FastListTemplate(
161
+ title='Holzdeko Dashboard',
162
+ sidebar=[hd_logo,
163
+ pn.pane.Markdown("## Einstellungen"),
164
+ 'Standort',Stndrt,
165
+ lfe_logo,
166
+ fnr_logo
167
+ ],
168
+ main=[pn.pane.Markdown("## Relative Luftfeuchte"),
169
+ air_date_slider,
170
+ airhumplot.panel(),
171
+ plot_air_humhist # LUFT
172
+ #accent_base_color="#88d8b0",
173
+ #header_background="#88d8b0",
174
+ ])
175
+
176
+
177
+
178
+
179
+ template.servable();
180
+
181
+ #print('fertig!')
182
+ # To launch this dashboard as a web server, we can simply run
183
+ # cd C:\Users\BorowyP\Desktop\Dashboard-Preasi\soil_air\
184
+ # panel serve 20230303_air_hum_docker.ipynb --autoreload
Lufttemperatur.py ADDED
@@ -0,0 +1,200 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Created on Fri Feb 24 15:24:06 2023
4
+
5
+ @author: BorowyP
6
+ """
7
+
8
+ import pandas as pd
9
+ import hvplot.pandas # Adds .hvplot and .interactive methods to Pandas dataframes
10
+ import panel as pn # Panel is a simple, flexible and enterprise-ready data app framework
11
+ import holoviews as hv
12
+ from holoviews.operation.timeseries import rolling, rolling_outlier_std
13
+
14
+
15
+ hv.extension('bokeh')
16
+ #pn.extension('tabulator')
17
+
18
+ pn.extension(sizing_mode="stretch_width")
19
+ #pd.set_option("precision", 0)
20
+
21
+ PALETTE = ["#ff6f69", "#ffcc5c", "#88d8b0", ]
22
+ ACCENT_BASE_COLOR = PALETTE[0]
23
+
24
+ #import time
25
+ #start = time.time()
26
+ #print('load data')
27
+
28
+ import numpy as np
29
+
30
+ from math import pi
31
+
32
+ from bokeh.palettes import Category20c, Category20
33
+ from bokeh.plotting import figure
34
+ from bokeh.transform import cumsum
35
+ from bokeh.layouts import row
36
+ from bokeh.models.formatters import DatetimeTickFormatter
37
+ formatter = DatetimeTickFormatter(months='%b %Y') # wird in .hvplot benötigt für x-achse!
38
+
39
+
40
+ air_temp = pd.read_csv(r'df_air_temp.csv', sep=',',
41
+ header=0,
42
+ #skiprows=[1],
43
+ decimal=',',
44
+ #dtype={'temp': np.float64},
45
+ na_values=('#-INF', '#NAN'))
46
+
47
+ air_temp.index = pd.to_datetime(air_temp['Date'], format='%Y.%m.%d %H:%M:%S')
48
+
49
+ air_temp = air_temp.drop(['Date'], axis=1)
50
+ air_temp['temp'] = air_temp['temp'].astype(np.float64, copy=True, errors='ignore')
51
+ air_temp = air_temp.round(1)
52
+
53
+
54
+ air_date_slider = pn.widgets.DateRangeSlider(name='Date', start=air_temp.index.min(), end=air_temp.index.max())
55
+
56
+ Stndrt = pn.widgets.RadioButtonGroup(name='Standort', options=['Glienig', 'Groß Liebitz', 'Krausnick', 'Halbe', 'Spreeau', 'Hangelsberg'],button_type='success')
57
+
58
+ air_temp_inter = air_temp.interactive()
59
+
60
+ air_temp_inter = (
61
+ air_temp_inter[
62
+ (air_temp_inter.Standort == Stndrt) &
63
+ (air_temp_inter.index >= air_date_slider.param.value_start) &
64
+ (air_temp_inter.index <= air_date_slider.param.value_end)
65
+
66
+ ])
67
+
68
+
69
+ def lin_reg(dfx,dfy, date):
70
+ # Formel für regres-gerade: y= alpha + b * x
71
+ # https://www.crashkurs-statistik.de/einfache-lineare-regression/
72
+
73
+ lin_df = pd.DataFrame({'Date' : date,
74
+ 'Temperatur' : dfy,
75
+ 'x-x.mean' : dfx-dfx.mean(),
76
+ 'y-y.mean' : dfy-dfy.mean(),
77
+ '(x-x.mean) * (y-y.mean)': (dfx-dfx.mean()) * (dfy-dfy.mean()),
78
+ '(x-x.mean)²' : (dfx-dfx.mean()) * (dfx-dfx.mean()),})
79
+
80
+ b = lin_df['(x-x.mean) * (y-y.mean)'].sum()/ lin_df['(x-x.mean)²'].sum()
81
+
82
+ alpha = dfy.mean() - b * dfx.mean()
83
+
84
+ lin_df['Lineare Regression'] = round(alpha + b * dfx,2)
85
+
86
+ lin_plot = lin_df.hvplot(x='Date',
87
+ xlabel='Datum',
88
+ title=Stndrt,
89
+ y=['Temperatur', 'Lineare Regression'],
90
+ ylabel='Lufttemperatur [°C]',
91
+ color=PALETTE,
92
+ line_width=0.5,
93
+ xformatter=formatter)
94
+
95
+ SQE = ((lin_df['Lineare Regression']-dfy.mean())*(lin_df['Lineare Regression']-dfy.mean())).sum()
96
+
97
+ SQT = (lin_df['y-y.mean'] * lin_df['y-y.mean']).sum()
98
+
99
+ R_Wert = round(SQE/SQT,2)
100
+
101
+
102
+ mean = round(dfy.mean(),2)
103
+ median = dfy.median()
104
+ maxm = dfy.max()
105
+ minm = dfy.min()
106
+ anz = dfy.count()
107
+
108
+ monitor_df = pd.DataFrame({'Standort' : [Stndrt.value],
109
+ 'von' : [air_date_slider.value[0]],
110
+ 'bis' : [air_date_slider.value[1]],
111
+ 'Mittelwert' : [mean],
112
+ 'Median' : [median],
113
+ 'Maximum' : [maxm],
114
+ 'Minimum' : [minm],
115
+ 'Anzahl' : [anz],
116
+ 'R²' : [R_Wert]
117
+
118
+ })
119
+
120
+ return pn.Column(lin_plot, monitor_df)
121
+
122
+
123
+
124
+ def callback(air_temp_inter):
125
+ y = air_temp_inter.temp
126
+ x = air_temp_inter['Unnamed: 0']
127
+ return pn.Column(lin_reg(x,y, air_temp_inter.index))
128
+
129
+
130
+ airtempplot = air_temp_inter.pipe(callback)
131
+
132
+
133
+
134
+
135
+ temp_glienig = pd.DataFrame({'Glienig': air_temp.loc[air_temp['Standort'] == 'Glienig']['temp']},
136
+ index = air_temp.loc[air_temp['Standort'] == 'Glienig'].index)
137
+ temp_grlieb = pd.DataFrame({'Groß Liebitz': air_temp.loc[air_temp['Standort'] == 'Groß Liebitz']['temp']},
138
+ index = air_temp.loc[air_temp['Standort'] == 'Groß Liebitz'].index)
139
+ temp_halbe = pd.DataFrame({'Halbe' : air_temp.loc[air_temp['Standort'] == 'Halbe']['temp']},
140
+ index= air_temp.loc[air_temp['Standort'] == 'Halbe'].index)
141
+ temp_hberg = pd.DataFrame({'Hangelsberg' : air_temp.loc[air_temp['Standort'] == 'Hangelsberg']['temp']},
142
+ index= air_temp.loc[air_temp['Standort'] == 'Hangelsberg'].index)
143
+ temp_krausnick = pd.DataFrame({'Krausnick' : air_temp.loc[air_temp['Standort'] == 'Krausnick']['temp']},
144
+ index= air_temp.loc[air_temp['Standort'] == 'Krausnick'].index)
145
+ temp_spreeau = pd.DataFrame({'Spreeau' : air_temp.loc[air_temp['Standort'] == 'Spreeau']['temp']},
146
+ index= air_temp.loc[air_temp['Standort'] == 'Spreeau'].index)
147
+
148
+ air_temp_hist = pd.concat([temp_glienig,temp_grlieb,temp_halbe,temp_hberg,temp_krausnick,temp_spreeau])
149
+
150
+ dfi_temp = air_temp_hist.interactive()
151
+
152
+ filtered = dfi_temp[
153
+ (dfi_temp.index >= air_date_slider.param.value_start) &
154
+ (dfi_temp.index <= air_date_slider.param.value_end)]
155
+
156
+ plot_air_temphist = filtered.hvplot(y=['Glienig',
157
+ 'Groß Liebitz',
158
+ 'Halbe',
159
+ 'Hangelsberg',
160
+ 'Krausnick',
161
+ 'Spreeau'], kind='hist', responsive=True, min_height=300, xlabel='Lufttemperatur', alpha=0.5)
162
+
163
+
164
+
165
+ import os
166
+
167
+
168
+ hd_logo = pn.pane.PNG('HD_Logo.png', width=100)
169
+ hd_logo
170
+
171
+ lfe_logo = pn.pane.PNG('LFE_Logo.png', width=100)
172
+
173
+ fnr_logo = pn.pane.PNG('fnr_logo.png', width=100)
174
+
175
+
176
+ template = pn.template.FastListTemplate(
177
+ title='Holzdeko Dashboard',
178
+ sidebar=[hd_logo,
179
+ pn.pane.Markdown("## Einstellungen"),
180
+ 'Standort',Stndrt,
181
+ lfe_logo,
182
+ fnr_logo
183
+ ],
184
+ main=[pn.pane.Markdown("## Luft Temperaturdaten"),
185
+ air_date_slider,
186
+ airtempplot.panel(),
187
+ plot_air_temphist,
188
+
189
+
190
+
191
+
192
+
193
+ #accent_base_color="#88d8b0",
194
+ #header_background="#88d8b0",
195
+ ])
196
+
197
+
198
+
199
+
200
+ template.servable();
Masseverlust.py ADDED
@@ -0,0 +1,450 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Created on Thu Mar 9 14:48:52 2023
4
+
5
+ @author: BorowyP
6
+ """
7
+
8
+ import pandas as pd
9
+ import hvplot
10
+ import hvplot.pandas # Adds .hvplot and .interactive methods to Pandas dataframes
11
+ import panel as pn # Panel is a simple, flexible and enterprise-ready data app framework
12
+ import holoviews as hv
13
+ from holoviews.operation.timeseries import rolling, rolling_outlier_std
14
+ import panel as pn
15
+
16
+ from bokeh.models import ColumnDataSource, PrintfTickFormatter, FuncTickFormatter, LabelSet
17
+ from bokeh.palettes import GnBu3, OrRd3
18
+ from bokeh.plotting import figure, show, output_notebook, output_file, save
19
+ from bokeh.layouts import row
20
+ from bokeh.io import curdoc
21
+
22
+
23
+
24
+ hv.extension('bokeh')
25
+ pn.extension('tabulator')
26
+
27
+ pn.extension(sizing_mode="stretch_width")
28
+ #pd.set_option("precision", 0)
29
+
30
+ PALETTE = ["#ff6f69", "#ffcc5c", "#88d8b0", ]
31
+ ACCENT_BASE_COLOR = PALETTE[0]
32
+
33
+ import time
34
+ start = time.time()
35
+ print('load data')
36
+
37
+ import numpy as np
38
+
39
+ Stndrt_button = pn.widgets.RadioButtonGroup(
40
+ name='Standort',
41
+ options=['Glienig', 'Groß Liebitz', 'Halbe', 'Krausnick', 'Hangelsberg', 'Spreeau'],
42
+ button_type = 'success'
43
+ )
44
+
45
+
46
+
47
+ mpa = pd.read_excel('2023_01_30_Mittelwerte_Masseverlust.xlsx',
48
+ header=5,
49
+ #decimal=','
50
+ )
51
+
52
+
53
+ def create_df(standort):
54
+ name = str(standort)
55
+
56
+ tiefen = [ '40-50','30-40', '20-30', '10-20', '0-10', '-10-0']
57
+ zeitpunkt = ['März 21', 'Oktober 21', 'Oktober 22']
58
+
59
+
60
+
61
+ mrz21 = mpa.loc[mpa['Bestand'] == standort].loc[mpa['Kalk?'] == 'Kalk'].loc[mpa['bau'] == '2021-03-01'][['50-60.1',
62
+ '40-50.1',
63
+ '30-40.1',
64
+ '20-30.1',
65
+ '10-20.1',
66
+ '0-10.1']].values[0]
67
+
68
+ okt21 = mpa.loc[mpa['Bestand'] == standort].loc[mpa['Kalk?'] == 'Kalk'].loc[mpa['bau'] == '2021-10-01'][['50-60.1',
69
+ '40-50.1',
70
+ '30-40.1',
71
+ '20-30.1',
72
+ '10-20.1',
73
+ '0-10.1']].values[0]
74
+
75
+ okt22 = mpa.loc[mpa['Bestand'] == standort].loc[mpa['Kalk?'] == 'Kalk'].loc[mpa['bau'] == '2022-10-01'][['50-60.1',
76
+ '40-50.1',
77
+ '30-40.1',
78
+ '20-30.1',
79
+ '10-20.1',
80
+ '0-10.1']].values[0]
81
+
82
+ kiefer_k = pd.DataFrame({'tiefen' : tiefen,
83
+ '10 Mon' : mrz21,
84
+ '18 Mon' : okt21,
85
+ '28 Mon' : okt22})
86
+
87
+ kiefer_k_label = pd.DataFrame({'tiefen' : tiefen,
88
+ '10 Mon' : mrz21,
89
+ '18 Mon' : okt21,
90
+ '28 Mon' : okt22})
91
+
92
+
93
+
94
+ kiefer_k['28 Mon'] = kiefer_k['28 Mon']-kiefer_k['18 Mon']
95
+ kiefer_k['18 Mon'] = kiefer_k['18 Mon']-kiefer_k['10 Mon']
96
+
97
+ mrz21 = mpa.loc[mpa['Bestand'] == standort].loc[mpa['Kalk?'] == 'Kalk'].loc[mpa['bau'] == '2021-03-01'][['50-60.3',
98
+ '40-50.3',
99
+ '30-40.3',
100
+ '20-30.3',
101
+ '10-20.3',
102
+ '0-10.3']].values[0]
103
+
104
+
105
+ okt21 = mpa.loc[mpa['Bestand'] == standort].loc[mpa['Kalk?'] == 'Kalk'].loc[mpa['bau'] == '2021-10-01'][['50-60.3',
106
+ '40-50.3',
107
+ '30-40.3',
108
+ '20-30.3',
109
+ '10-20.3',
110
+ '0-10.3']].values[0]
111
+
112
+ okt22 = mpa.loc[mpa['Bestand'] == standort].loc[mpa['Kalk?'] == 'Kalk'].loc[mpa['bau'] == '2022-10-01'][['50-60.3',
113
+ '40-50.3',
114
+ '30-40.3',
115
+ '20-30.3',
116
+ '10-20.3',
117
+ '0-10.3']].values[0]
118
+
119
+ buche_k = pd.DataFrame({'tiefen' : tiefen,
120
+ '10 Mon' : mrz21,
121
+ '18 Mon' : okt21,
122
+ '28 Mon' : okt22})
123
+
124
+ buche_k_label = pd.DataFrame({'tiefen' : tiefen,
125
+ '10 Mon' : mrz21,
126
+ '18 Mon' : okt21,
127
+ '28 Mon' : okt22})
128
+
129
+ buche_k['28 Mon'] = buche_k['28 Mon']-buche_k['18 Mon']
130
+ buche_k['18 Mon'] = buche_k['18 Mon']-buche_k['10 Mon']
131
+
132
+ buche_k[['10 Mon', '18 Mon', '28 Mon']] = buche_k[['10 Mon', '18 Mon', '28 Mon']]*-1
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+ ########################################## K E I N K A L K (ohne Kalk) ############################################################################
141
+ mrz21 = mpa.loc[mpa['Bestand'] == standort].loc[mpa['Kalk?'] == 'ohne Kalk'].loc[mpa['bau'] == '2021-03-01'][['50-60.1',
142
+ '40-50.1',
143
+ '30-40.1',
144
+ '20-30.1',
145
+ '10-20.1',
146
+ '0-10.1']].values[0]
147
+
148
+ okt21 = mpa.loc[mpa['Bestand'] == standort].loc[mpa['Kalk?'] == 'ohne Kalk'].loc[mpa['bau'] == '2021-10-01'][['50-60.1',
149
+ '40-50.1',
150
+ '30-40.1',
151
+ '20-30.1',
152
+ '10-20.1',
153
+ '0-10.1']].values[0]
154
+
155
+ okt22 = mpa.loc[mpa['Bestand'] == standort].loc[mpa['Kalk?'] == 'ohne Kalk'].loc[mpa['bau'] == '2022-10-01'][['50-60.1',
156
+ '40-50.1',
157
+ '30-40.1',
158
+ '20-30.1',
159
+ '10-20.1',
160
+ '0-10.1']].values[0]
161
+
162
+ kiefer_nk = pd.DataFrame({'tiefen' : tiefen,
163
+ '10 Mon' : mrz21,
164
+ '18 Mon' : okt21,
165
+ '28 Mon' : okt22})
166
+
167
+ kiefer_nk_label = pd.DataFrame({'tiefen' : tiefen,
168
+ '10 Mon' : mrz21,
169
+ '18 Mon' : okt21,
170
+ '28 Mon' : okt22})
171
+
172
+
173
+
174
+
175
+ kiefer_nk['28 Mon'] = kiefer_nk['28 Mon']-kiefer_nk['18 Mon']
176
+ kiefer_nk['18 Mon'] = kiefer_nk['18 Mon']-kiefer_nk['10 Mon']
177
+
178
+
179
+ mrz21 = mpa.loc[mpa['Bestand'] == standort].loc[mpa['Kalk?'] == 'ohne Kalk'].loc[mpa['bau'] == '2021-03-01'][['50-60.3',
180
+ '40-50.3',
181
+ '30-40.3',
182
+ '20-30.3',
183
+ '10-20.3',
184
+ '0-10.3']].values[0]
185
+
186
+
187
+ okt21 = mpa.loc[mpa['Bestand'] == standort].loc[mpa['Kalk?'] == 'ohne Kalk'].loc[mpa['bau'] == '2021-10-01'][['50-60.3',
188
+ '40-50.3',
189
+ '30-40.3',
190
+ '20-30.3',
191
+ '10-20.3',
192
+ '0-10.3']].values[0]
193
+
194
+ okt22 = mpa.loc[mpa['Bestand'] == standort].loc[mpa['Kalk?'] == 'ohne Kalk'].loc[mpa['bau'] == '2022-10-01'][['50-60.3',
195
+ '40-50.3',
196
+ '30-40.3',
197
+ '20-30.3',
198
+ '10-20.3',
199
+ '0-10.3']].values[0]
200
+
201
+ buche_nk = pd.DataFrame({'tiefen' : tiefen,
202
+ '10 Mon' : mrz21,
203
+ '18 Mon' : okt21,
204
+ '28 Mon' : okt22})
205
+
206
+ buche_nk_label = pd.DataFrame({'tiefen' : tiefen,
207
+ '10 Mon' : mrz21,
208
+ '18 Mon' : okt21,
209
+ '28 Mon' : okt22})
210
+
211
+
212
+ buche_nk['28 Mon'] = buche_nk['28 Mon']-buche_nk['18 Mon']
213
+ buche_nk['18 Mon'] = buche_nk['18 Mon']-buche_nk['10 Mon']
214
+
215
+ buche_nk[['10 Mon', '18 Mon', '28 Mon']] = buche_nk[['10 Mon', '18 Mon', '28 Mon']]*-1
216
+
217
+ ######################################################################################################################
218
+
219
+ return buche_k.round(1), kiefer_k.round(1), buche_nk.round(1), kiefer_nk.round(1), buche_k_label.round(1), kiefer_k_label.round(1), buche_nk_label.round(1), kiefer_nk_label.round(1), name
220
+
221
+
222
+
223
+ def plot(df):
224
+ curdoc().clear()
225
+
226
+ tiefen = [ '40-50','30-40', '20-30', '10-20', '0-10', '-10-0']
227
+ zeitpunkt = ['10 Mon', '18 Mon', '28 Mon']
228
+
229
+ hoehe = 500
230
+ breite = 600
231
+
232
+ plot_k = figure(y_range=tiefen, height=hoehe,width=breite, x_range=([-100, 100]), title="Masseverlust Bu/Ki (K)",
233
+ toolbar_location='left')
234
+
235
+ plot_k.xaxis.axis_label = 'Masseverlust [%]'
236
+ plot_k.yaxis.axis_label = 'Tiefenstufe'
237
+ #plot_k.image_url(url=['Bodenhorizont_entnahme_pruefkoerper.jpg'],
238
+ # x=-300,
239
+ # y=9,
240
+ # #dw = 100,
241
+ # #dh = 100,
242
+ # w=600,
243
+ # h=10
244
+ # )
245
+
246
+
247
+ plot_k.hbar_stack(zeitpunkt, y='tiefen', height=0.9, color=GnBu3, source=ColumnDataSource(df[1]),
248
+ legend_label=["Ki %s" % x for x in zeitpunkt], fill_alpha = 0.7)
249
+
250
+
251
+ plot_k.hbar_stack(zeitpunkt, y='tiefen', height=0.9, color=OrRd3, source=ColumnDataSource(df[0]),
252
+ legend_label=["Bu %s" % x for x in zeitpunkt], fill_alpha = 0.7)
253
+
254
+
255
+
256
+ plot_k.xaxis.ticker = [ -100, -75 , -50 , -25 , 0 , 25 , 50 , 75 , 100 ]
257
+ plot_k.xaxis.major_label_overrides = { -100: '100', -75:' ', -50 : '50', -25 : ' ' , 0 : '0', 25: ' ',50 : '50', 75 : ' ', 100 :'100'}
258
+
259
+
260
+
261
+
262
+ plot_k.y_range.range_padding = 0.1
263
+ plot_k.ygrid.grid_line_color = None
264
+ plot_k.axis.minor_tick_line_color = None
265
+ plot_k.outline_line_color = None
266
+
267
+ labels = {'x': (
268
+ list((df[1][zeitpunkt].cumsum(axis=1)['28 Mon'] + 10).to_numpy().flatten()
269
+ )
270
+ + list((df[0][zeitpunkt].cumsum(axis=1)['28 Mon'] -10).to_numpy().flatten()
271
+ )
272
+ ),
273
+
274
+ 'y': list(np.array([i+0.5 for i in range(len(tiefen))]))*2,
275
+ 'labels': (
276
+ list(np.around(df[5][zeitpunkt]['28 Mon'], 2).abs().astype(str).replace('^0$','', regex=True).to_numpy().flatten()
277
+ )
278
+ +list(np.around(df[4][zeitpunkt]['28 Mon'], 2).abs().astype(str).replace('^0$','', regex=True).to_numpy().flatten()
279
+ )
280
+ )
281
+ }
282
+
283
+
284
+ labels = LabelSet(x="x", y="y", text='labels', text_font_size="11px", text_color="#555555",
285
+ source=ColumnDataSource(labels), text_align='center')
286
+
287
+ plot_k.add_layout(labels)
288
+ plot_k.legend.title = df[8]
289
+ plot_k.legend.title_text_font_style = "bold"
290
+ plot_k.legend.title_text_font_size = "10px"
291
+ plot_k.add_layout(plot_k.legend[0], 'right')
292
+
293
+ bokeh_k = pn.pane.Bokeh(plot_k)
294
+
295
+
296
+
297
+ ############################## P L O T n_k ##################################################
298
+
299
+ plot_nk = figure(y_range=tiefen, height=hoehe,width=breite-150, x_range=([-100, 100]), title="Masseverlust Bu/Ki (nK)",
300
+ toolbar_location='right', y_axis_location="right")
301
+
302
+
303
+ plot_nk.xaxis.axis_label = 'Masseverlust [%]'
304
+ plot_nk.yaxis.axis_label = 'Tiefenstufe'
305
+
306
+ #plot_nk.image_url(url=['Bodenhorizont_entnahme_pruefkoerper.jpg'],
307
+ # x=-300,
308
+ # y=9,
309
+ # #dw = 100,
310
+ # #dh = 100,
311
+ # w=600,
312
+ # h=10
313
+ # )
314
+
315
+
316
+ plot_nk.hbar_stack(zeitpunkt, y='tiefen', height=0.9, color=GnBu3, source=ColumnDataSource(df[3]),
317
+ legend_label=["Ki %s" % x for x in zeitpunkt], fill_alpha = 0.7)
318
+
319
+
320
+ plot_nk.hbar_stack(zeitpunkt, y='tiefen', height=0.9, color=OrRd3, source=ColumnDataSource(df[2]),
321
+ legend_label=["Bu %s" % x for x in zeitpunkt], fill_alpha = 0.7)
322
+
323
+
324
+
325
+ plot_nk.xaxis.ticker = [ -100, -75 , -50 , -25 , 0 , 25 , 50 , 75 , 100 ]
326
+ plot_nk.xaxis.major_label_overrides = { -100: '100', -75:' ', -50 : '50', -25 : ' ' , 0 : '0', 25: ' ',50 : '50', 75 : ' ', 100 :'100'}
327
+ plot_nk.y_range.range_padding = 0.1
328
+ plot_nk.ygrid.grid_line_color = None
329
+ plot_nk.legend.location = (600,100)
330
+ plot_nk.axis.minor_tick_line_color = None
331
+ plot_nk.outline_line_color = None
332
+
333
+
334
+
335
+ labels = {'x': (
336
+ list((df[3][zeitpunkt].cumsum(axis=1)['28 Mon']+10).to_numpy().flatten())
337
+
338
+ + list((df[2][zeitpunkt].cumsum(axis=1)['28 Mon']-10).to_numpy().flatten())
339
+
340
+ ),
341
+
342
+ 'y': list(np.array([i+0.5 for i in range(len(tiefen))]))*2,
343
+ 'labels': (
344
+ list(np.around(df[7][zeitpunkt]['28 Mon'], 2).abs().astype(str).replace('^0$','', regex=True).to_numpy().flatten()
345
+ )
346
+ +list(np.around(df[6][zeitpunkt]['28 Mon'], 2).abs().astype(str).replace('^0$','', regex=True).to_numpy().flatten()
347
+ )
348
+ )
349
+ }
350
+
351
+
352
+
353
+ labels = LabelSet(x="x", y="y", text='labels', text_font_size="11px", text_color="#555555",
354
+ source=ColumnDataSource(labels), text_align='center')
355
+ plot_nk.add_layout(labels)
356
+
357
+ bokeh_nk = pn.pane.Bokeh(plot_nk)
358
+
359
+
360
+ return pn.Row(bokeh_k, bokeh_nk)
361
+
362
+
363
+
364
+
365
+
366
+ df_mpa = pd.DataFrame({'Standort' : ['Glienig', 'Groß Liebitz', 'Halbe', 'Krausnick', 'Hangelsberg', 'Spreeau']})
367
+
368
+ df_mpa_i = df_mpa.interactive()
369
+
370
+
371
+ df_mpa_pipe = df_mpa_i[
372
+ (df_mpa_i.Standort == Stndrt_button)
373
+ ]
374
+
375
+
376
+
377
+
378
+ glienig = create_df('KVF 3 Glienig')
379
+ grliebitz = create_df('KVF 4 Groß Liebitz')
380
+ halbe = create_df('KVF 12 Halbe')
381
+ krausnick = create_df('KVF 9 Krausnick')
382
+ hangelsberg = create_df('KVF 10 Hangelsberg')
383
+ spreeau = create_df('KVF 19 Spreeau')
384
+ mittelwerte = create_df('Mittelwerte')
385
+
386
+
387
+ plot_mittelwerte = plot(mittelwerte)
388
+
389
+
390
+
391
+ def callback(df_mpa_pipe):
392
+ if Stndrt_button.value == 'Groß Liebitz':
393
+ return plot(grliebitz)
394
+ if Stndrt_button.value == 'Glienig':
395
+ return plot(glienig)
396
+ if Stndrt_button.value == 'Halbe':
397
+ return plot(halbe)
398
+ if Stndrt_button.value == 'Krausnick':
399
+ return plot(krausnick)
400
+ if Stndrt_button.value == 'Hangelsberg':
401
+ return plot(hangelsberg)
402
+ if Stndrt_button.value == 'Spreeau':
403
+ return plot(spreeau)
404
+
405
+
406
+
407
+ masseverlust_plot = df_mpa_pipe.pipe(callback)
408
+
409
+
410
+ hd_logo = pn.pane.PNG('HD_Logo.png', width=100)
411
+ hd_logo
412
+
413
+ lfe_logo = pn.pane.PNG('LFE_Logo.png', width=100)
414
+
415
+ fnr_logo = pn.pane.PNG('fnr_logo.png', width=100)
416
+
417
+
418
+
419
+ diagram_text = 'Die Diagramme stellen die zu den 3 Ausbauzeitpunkten ermittelten Masseverluste für die Buche (BU)- und Kiefer (KI)-Prüfkörper in allen 6 Tiefenstufen, auf dem jeweiligen Standort (Fläche) sowie für die Teilflächen gekalkt (K) und ungekalkt (nK) dar. Dabei sind die für die Holzart BU ermittelten Werte ausgehend von der vertikalen Mittellinie nach links in rot/gelb dargestellt und die für die Holzart KI ausgehend von der Mittellinie nach rechts in blau/grün. Die Masseverluste wurden vor Einbau und zu den Ausbauzeitpunkten (an den bei 103° C bis zur Massekonstanz gedarrten Stab-Prüfkörpern) bestimmt und sind auf der Abszisse in Prozent ablesbar.'
420
+
421
+ template = pn.template.FastListTemplate(
422
+ title='Holzdeko Dashboard',
423
+ sidebar=[hd_logo,
424
+ pn.pane.Markdown("## Einstellungen"),
425
+ 'Standort',Stndrt_button,
426
+ #checkbox, # Aktiviert Hintergrundbild
427
+ lfe_logo,
428
+ fnr_logo
429
+ ],
430
+ main=[pn.pane.Markdown("## Masseverlust"),
431
+ masseverlust_plot,
432
+
433
+ pn.pane.Markdown(f'{diagram_text}'),
434
+ pn.pane.Markdown("## Mittelwerte"),
435
+ plot_mittelwerte
436
+
437
+ #accent_base_color="#88d8b0",
438
+ #header_background="#88d8b0",
439
+ ])
440
+
441
+
442
+
443
+
444
+ template.servable();
445
+
446
+ #print('fertig!')
447
+ # To launch this dashboard as a web server, we can simply run
448
+
449
+ # cd C:\Users\BorowyP\Desktop\Dashboard-Preasi\MPA_Masseverlust_docker
450
+ # panel serve 2023_03_09_MW_MPA.ipynb --autoreload
Nied_holzdeko_csv.csv ADDED
@@ -0,0 +1,1081 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ;Kampagne;MessDat;Menge;FNR + NWP;Standort;Kalk
2
+ 0;11;08.06.2017;19,5;3NE;Glienig;K
3
+ 1;11;08.06.2017;22,5;3NW;Glienig;nK
4
+ 2;11;08.06.2017;43;4NW;Gro� Liebitz;nK
5
+ 3;11;08.06.2017;42;4SE;Gro� Liebitz;K
6
+ 4;11;08.06.2017;17,5;9NE;Krausnick;K
7
+ 5;11;08.06.2017;20;9NW;Krausnick;nK
8
+ 6;11;09.06.2017;22,5;10SE;Hangelsberg;K
9
+ 7;11;09.06.2017;24;10SW;Hangelsberg;nK
10
+ 8;11;09.06.2017;17,5;12NE;Halbe;K
11
+ 9;11;09.06.2017;35;12NW;Halbe;nK
12
+ 10;11;09.06.2017;13;19NE;Spreeau;K
13
+ 11;11;09.06.2017;13;19NW;Spreeau;nK
14
+ 12;12;26.06.2017;9;3NE;Glienig;K
15
+ 13;12;26.06.2017;12;3NW;Glienig;nK
16
+ 14;12;26.06.2017;11,5;4NW;Gro� Liebitz;nK
17
+ 15;12;26.06.2017;9,5;4SE;Gro� Liebitz;K
18
+ 16;12;26.06.2017;10;9NE;Krausnick;K
19
+ 17;12;26.06.2017;12,5;9NW;Krausnick;nK
20
+ 18;12;27.06.2017;45;10SE;Hangelsberg;K
21
+ 19;12;27.06.2017;49;10SW;Hangelsberg;nK
22
+ 20;12;26.06.2017;19,5;12NE;Halbe;K
23
+ 21;12;26.06.2017;27,5;12NW;Halbe;nK
24
+ 22;12;27.06.2017;40,5;19NE;Spreeau;K
25
+ 23;12;27.06.2017;39;19NW;Spreeau;nK
26
+ 24;13;11.07.2017;45;3NE;Glienig;K
27
+ 25;13;11.07.2017;45;3NW;Glienig;nK
28
+ 26;13;11.07.2017;65;4NW;Gro� Liebitz;nK
29
+ 27;13;11.07.2017;68;4SE;Gro� Liebitz;K
30
+ 28;13;11.07.2017;55;9NE;Krausnick;K
31
+ 29;13;11.07.2017;58;9NW;Krausnick;nK
32
+ 30;13;11.07.2017;64;12NE;Halbe;K
33
+ 31;13;11.07.2017;92;12NW;Halbe;nK
34
+ 32;13;10.07.2017;67;10SE;Hangelsberg;K
35
+ 33;13;10.07.2017;73;10SW;Hangelsberg;nK
36
+ 34;13;10.07.2017;80;19NE;Spreeau;K
37
+ 35;13;10.07.2017;88;19NW;Spreeau;nK
38
+ 36;14;01.08.2017;65;3NE;Glienig;K
39
+ 37;14;01.08.2017;72;3NW;Glienig;nK
40
+ 38;14;01.08.2017;132;4NW;Gro� Liebitz;nK
41
+ 39;14;01.08.2017;140;4SE;Gro� Liebitz;K
42
+ 40;14;01.08.2017;72;9NE;Krausnick;K
43
+ 41;14;01.08.2017;85;9NW;Krausnick;nK
44
+ 42;14;02.08.2017;76;10SE;Hangelsberg;K
45
+ 43;14;02.08.2017;78;10SW;Hangelsberg;nK
46
+ 44;25;15.03.2018;21,5;3NE;Glienig;K
47
+ 45;25;15.03.2018;21,5;3NW;Glienig;nK
48
+ 46;25;15.03.2018;25;4NW;Gro� Liebitz;nK
49
+ 47;25;15.03.2018;28;4SE;Gro� Liebitz;K
50
+ 48;25;15.03.2018;23;9NE;Krausnick;K
51
+ 49;25;15.03.2018;18;9NW;Krausnick;nK
52
+ 50;25;14.03.2018;24;10SE;Hangelsberg;K
53
+ 51;25;14.03.2018;29;10SW;Hangelsberg;nK
54
+ 52;25;14.03.2018;19;12NE;Halbe;K
55
+ 53;25;14.03.2018;24;12NW;Halbe;nK
56
+ 54;25;14.03.2018;20;19NE;Spreeau;K
57
+ 55;25;14.03.2018;21;19NW;Spreeau;nK
58
+ 56;26;03.04.2018;12;3NE;Glienig;K
59
+ 57;26;03.04.2018;13;3NW;Glienig;nK
60
+ 58;26;03.04.2018;12;4NW;Gro� Liebitz;nK
61
+ 59;26;03.04.2018;13;4SE;Gro� Liebitz;K
62
+ 60;26;03.04.2018;9;9NE;Krausnick;K
63
+ 61;26;03.04.2018;9;9NW;Krausnick;nK
64
+ 62;26;05.04.2018;21,5;10SE;Hangelsberg;K
65
+ 63;26;05.04.2018;22;10SW;Hangelsberg;nK
66
+ 64;26;05.04.2018;11;12NE;Halbe;K
67
+ 65;26;05.04.2018;14;12NW;Halbe;nK
68
+ 66;26;05.04.2018;22;19NE;Spreeau;K
69
+ 67;26;05.04.2018;22,5;19NW;Spreeau;nK
70
+ 68;27;25.04.2018;19,5;3NE;Glienig;K
71
+ 69;27;25.04.2018;20;3NW;Glienig;nK
72
+ 70;27;25.04.2018;20;4NW;Gro� Liebitz;nK
73
+ 71;27;25.04.2018;16;4SE;Gro� Liebitz;K
74
+ 72;27;25.04.2018;35;9NE;Krausnick;K
75
+ 73;27;25.04.2018;28;9NW;Krausnick;nK
76
+ 74;27;26.04.2018;14;10SE;Hangelsberg;K
77
+ 75;27;26.04.2018;14;10SW;Hangelsberg;nK
78
+ 76;27;26.04.2018;27;12NE;Halbe;K
79
+ 77;27;26.04.2018;43;12NW;Halbe;nK
80
+ 78;27;26.04.2018;17;19NE;Spreeau;K
81
+ 79;27;26.04.2018;14;19NW;Spreeau;nK
82
+ 80;28;17.05.2018;18,5;3NE;Glienig;K
83
+ 81;28;17.05.2018;15,5;3NW;Glienig;nK
84
+ 82;28;17.05.2018;11,5;4NW;Gro� Liebitz;nK
85
+ 83;28;17.05.2018;10,5;4SE;Gro� Liebitz;K
86
+ 84;28;17.05.2018;29;9NE;Krausnick;K
87
+ 85;28;17.05.2018;18;9NW;Krausnick;nK
88
+ 86;28;18.05.2018;15,5;10SE;Hangelsberg;K
89
+ 87;28;18.05.2018;15;10SW;Hangelsberg;nK
90
+ 88;28;17.05.2018;47,5;12NE;Halbe;K
91
+ 89;28;17.05.2018;50;12NW;Halbe;nK
92
+ 90;28;18.05.2018;10;19NE;Spreeau;K
93
+ 91;28;18.05.2018;9;19NW;Spreeau;nK
94
+ 92;29;07.06.2018;42;3NE;Glienig;K
95
+ 93;29;07.06.2018;42;3NW;Glienig;nK
96
+ 94;29;07.06.2018;42;4NW;Gro� Liebitz;nK
97
+ 95;29;07.06.2018;43;4SE;Gro� Liebitz;K
98
+ 96;29;07.06.2018;14;9NE;Krausnick;K
99
+ 97;29;07.06.2018;12;9NW;Krausnick;nK
100
+ 98;29;06.06.2018;5,5;10SE;Hangelsberg;K
101
+ 99;29;06.06.2018;11;10SW;Hangelsberg;nK
102
+ 100;29;06.06.2018;11,5;12NE;Halbe;K
103
+ 101;29;06.06.2018;14;12NW;Halbe;nK
104
+ 102;29;06.06.2018;39;19NE;Spreeau;K
105
+ 103;29;06.06.2018;41;19NW;Spreeau;nK
106
+ 104;30;28.06.2018;6,5;3NE;Glienig;K
107
+ 105;30;28.06.2018;6,5;3NW;Glienig;nK
108
+ 106;30;28.06.2018;55;4NW;Gro� Liebitz;nK
109
+ 107;30;28.06.2018;53;4SE;Gro� Liebitz;K
110
+ 108;30;28.06.2018;12;9NE;Krausnick;K
111
+ 109;30;28.06.2018;8,5;9NW;Krausnick;nK
112
+ 110;30;27.06.2018;6;10SE;Hangelsberg;K
113
+ 111;30;27.06.2018;7;10SW;Hangelsberg;nK
114
+ 112;30;27.06.2018;5;12NE;Halbe;K
115
+ 113;30;27.06.2018;7;12NW;Halbe;nK
116
+ 114;30;27.06.2018;6;19NE;Spreeau;K
117
+ 115;30;27.06.2018;6;19NW;Spreeau;nK
118
+ 116;31;26.07.2018;25;3NE;Glienig;K
119
+ 117;31;26.07.2018;25;3NW;Glienig;nK
120
+ 118;31;26.07.2018;31;4NW;Gro� Liebitz;nK
121
+ 119;31;26.07.2018;25;4SE;Gro� Liebitz;K
122
+ 120;31;26.07.2018;35;9NE;Krausnick;K
123
+ 121;31;26.07.2018;30;9NW;Krausnick;nK
124
+ 122;31;25.07.2018;34;10SE;Hangelsberg;K
125
+ 123;31;25.07.2018;42;10SW;Hangelsberg;nK
126
+ 124;31;25.07.2018;24;12NE;Halbe;K
127
+ 125;31;25.07.2018;35;12NW;Halbe;nK
128
+ 126;31;25.07.2018;31;19NE;Spreeau;K
129
+ 127;14;02.08.2017;135;12NE;Halbe;K
130
+ 128;14;02.08.2017;135;12NW;Halbe;nK
131
+ 129;14;02.08.2017;93;19NE;Spreeau;K
132
+ 130;14;02.08.2017;97;19NW;Spreeau;nK
133
+ 131;15;29.08.2017;37,5;3NE;Glienig;K
134
+ 132;15;29.08.2017;33,5;3NW;Glienig;nK
135
+ 133;15;29.08.2017;49;4NW;Gro� Liebitz;nK
136
+ 134;15;29.08.2017;47;4SE;Gro� Liebitz;K
137
+ 135;15;29.08.2017;40;9NE;Krausnick;K
138
+ 136;15;29.08.2017;45;9NW;Krausnick;nK
139
+ 137;15;30.08.2017;32;10SE;Hangelsberg;K
140
+ 138;15;30.08.2017;41;10SW;Hangelsberg;nK
141
+ 139;15;30.08.2017;57;12NE;Halbe;K
142
+ 140;15;30.08.2017;57;12NW;Halbe;nK
143
+ 141;15;30.08.2017;33,5;19NE;Spreeau;K
144
+ 142;15;30.08.2017;31;19NW;Spreeau;nK
145
+ 143;16;21.09.2017;23,5;3NE;Glienig;K
146
+ 144;16;21.09.2017;25;3NW;Glienig;nK
147
+ 145;16;21.09.2017;51;4NW;Gro� Liebitz;nK
148
+ 146;16;21.09.2017;51;4SE;Gro� Liebitz;K
149
+ 147;16;25.09.2017;27;9NE;Krausnick;K
150
+ 148;16;25.09.2017;30;9NW;Krausnick;nK
151
+ 149;16;26.09.2017;19;10SE;Hangelsberg;K
152
+ 150;16;26.09.2017;23;10SW;Hangelsberg;nK
153
+ 151;16;26.09.2017;7;12NE;Halbe;K
154
+ 152;16;26.09.2017;15,5;12NW;Halbe;nK
155
+ 153;16;25.09.2017;21;19NE;Spreeau;K
156
+ 154;16;25.09.2017;23,5;19NW;Spreeau;nK
157
+ 155;17;12.10.2017;47;3NE;Glienig;K
158
+ 156;17;12.10.2017;50;3NW;Glienig;nK
159
+ 157;17;12.10.2017;45;4NW;Gro� Liebitz;nK
160
+ 158;17;12.10.2017;40;4SE;Gro� Liebitz;K
161
+ 159;17;12.10.2017;37;9NE;Krausnick;K
162
+ 160;17;12.10.2017;40;9NW;Krausnick;nK
163
+ 161;17;13.10.2017;36;19NE;Spreeau;K
164
+ 162;17;13.10.2017;38;19NW;Spreeau;nK
165
+ 163;17;13.10.2017;41;10SE;Hangelsberg;K
166
+ 164;17;13.10.2017;57;10SW;Hangelsberg;nK
167
+ 165;17;13.10.2017;33;12NE;Halbe;K
168
+ 166;17;13.10.2017;34;12NW;Halbe;nK
169
+ 167;18;08.11.2017;33;3NE;Glienig;K
170
+ 168;18;08.11.2017;35;3NW;Glienig;nK
171
+ 169;18;08.11.2017;44;4NW;Gro� Liebitz;nK
172
+ 170;18;08.11.2017;39;4SE;Gro� Liebitz;K
173
+ 171;18;08.11.2017;28;9NE;Krausnick;K
174
+ 172;18;08.11.2017;28;9NW;Krausnick;nK
175
+ 173;18;07.11.2017;58;19NE;Spreeau;K
176
+ 174;18;07.11.2017;69;19NW;Spreeau;nK
177
+ 175;18;07.11.2017;31;10SE;Hangelsberg;K
178
+ 176;18;07.11.2017;41;10SW;Hangelsberg;nK
179
+ 177;18;07.11.2017;54;12NE;Halbe;K
180
+ 178;18;07.11.2017;58;12NW;Halbe;nK
181
+ 179;19;24.11.2017;18;3NE;Glienig;K
182
+ 180;19;24.11.2017;18,5;3NW;Glienig;nK
183
+ 181;19;24.11.2017;20,5;4NW;Gro� Liebitz;nK
184
+ 182;19;24.11.2017;22;4SE;Gro� Liebitz;K
185
+ 183;19;24.11.2017;12,5;9NE;Krausnick;K
186
+ 184;19;24.11.2017;12,5;9NW;Krausnick;nK
187
+ 185;19;23.11.2017;14;10SE;Hangelsberg;K
188
+ 186;19;23.11.2017;15;10SW;Hangelsberg;nK
189
+ 187;19;23.11.2017;10;12NE;Halbe;K
190
+ 188;19;23.11.2017;15;12NW;Halbe;nK
191
+ 189;19;23.11.2017;11;19NE;Spreeau;K
192
+ 190;19;23.11.2017;10;19NW;Spreeau;nK
193
+ 191;20;15.12.2017;35;3NE;Glienig;K
194
+ 192;20;15.12.2017;38;3NW;Glienig;nK
195
+ 193;20;15.12.2017;39;4NW;Gro� Liebitz;nK
196
+ 194;20;15.12.2017;43;4SE;Gro� Liebitz;K
197
+ 195;20;15.12.2017;23,5;9NE;Krausnick;K
198
+ 196;20;15.12.2017;23,5;9NW;Krausnick;nK
199
+ 197;20;18.12.2017;43;10SE;Hangelsberg;K
200
+ 198;20;18.12.2017;43;10SW;Hangelsberg;nK
201
+ 199;20;15.12.2017;29;12NE;Halbe;K
202
+ 200;20;15.12.2017;35;12NW;Halbe;nK
203
+ 201;20;18.12.2017;37;19NE;Spreeau;K
204
+ 202;20;18.12.2017;39;19NW;Spreeau;nK
205
+ 203;21;08.01.2018;27;3NE;Glienig;K
206
+ 204;21;08.01.2018;32;3NW;Glienig;nK
207
+ 205;21;08.01.2018;30;4NW;Gro� Liebitz;nK
208
+ 206;21;08.01.2018;36;4SE;Gro� Liebitz;K
209
+ 207;21;08.01.2018;28;9NE;Krausnick;K
210
+ 208;21;08.01.2018;24;9NW;Krausnick;nK
211
+ 209;21;05.01.2018;25;10SE;Hangelsberg;K
212
+ 210;21;05.01.2018;24;10SW;Hangelsberg;nK
213
+ 211;21;05.01.2018;32;12NE;Halbe;K
214
+ 212;21;05.01.2018;19;12NW;Halbe;nK
215
+ 213;21;08.01.2018;22;19NE;Spreeau;K
216
+ 214;21;05.01.2018;22;19NW;Spreeau;nK
217
+ 215;22;23.01.2018;17;3NE;Glienig;K
218
+ 216;22;23.01.2018;17;3NW;Glienig;nK
219
+ 217;22;23.01.2018;18;4NW;Gro� Liebitz;nK
220
+ 218;22;23.01.2018;21;4SE;Gro� Liebitz;K
221
+ 219;22;23.01.2018;12;9NE;Krausnick;K
222
+ 220;22;23.01.2018;10;9NW;Krausnick;nK
223
+ 221;22;24.01.2018;23;10SE;Hangelsberg;K
224
+ 222;22;24.01.2018;22;10SW;Hangelsberg;nK
225
+ 223;22;24.01.2018;13,5;12NE;Halbe;K
226
+ 224;22;24.01.2018;16,5;12NW;Halbe;nK
227
+ 225;22;24.01.2018;18;19NE;Spreeau;K
228
+ 226;22;24.01.2018;20;19NW;Spreeau;nK
229
+ 227;23;05.02.2018;10;3NE;Glienig;K
230
+ 228;23;05.02.2018;11;3NW;Glienig;nK
231
+ 229;23;05.02.2018;14;4NW;Gro� Liebitz;nK
232
+ 230;23;05.02.2018;11;4SE;Gro� Liebitz;K
233
+ 231;23;05.02.2018;9;9NE;Krausnick;K
234
+ 232;23;05.02.2018;7;9NW;Krausnick;nK
235
+ 233;23;06.02.2018;13;10SE;Hangelsberg;K
236
+ 234;23;06.02.2018;15;10SW;Hangelsberg;nK
237
+ 235;23;06.02.2018;13;12NE;Halbe;K
238
+ 236;23;06.02.2018;9;12NW;Halbe;nK
239
+ 237;23;06.02.2018;6;19NE;Spreeau;K
240
+ 238;23;06.02.2018;5;19NW;Spreeau;nK
241
+ 239;24;20.02.2018;1;3NE;Glienig;K
242
+ 240;24;20.02.2018;1;3NW;Glienig;nK
243
+ 241;24;20.02.2018;1;4NW;Gro� Liebitz;nK
244
+ 242;24;20.02.2018;3,5;4SE;Gro� Liebitz;K
245
+ 243;24;20.02.2018;1;9NE;Krausnick;K
246
+ 244;24;20.02.2018;1;9NW;Krausnick;nK
247
+ 245;24;21.02.2018;2,5;10SE;Hangelsberg;K
248
+ 246;24;21.02.2018;3;10SW;Hangelsberg;nK
249
+ 247;24;21.02.2018;1;12NE;Halbe;K
250
+ 248;24;21.02.2018;1;12NW;Halbe;nK
251
+ 249;24;21.02.2018;1;19NE;Spreeau;K
252
+ 250;24;21.02.2018;1;19NW;Spreeau;nK
253
+ 251;31;25.07.2018;32;19NW;Spreeau;nK
254
+ 252;32;21.08.2018;5;3NE;Glienig;K
255
+ 253;32;21.08.2018;6;3NW;Glienig;nK
256
+ 254;32;21.08.2018;24;4NW;Gro� Liebitz;nK
257
+ 255;32;21.08.2018;23;4SE;Gro� Liebitz;K
258
+ 256;32;21.08.2018;17;9NE;Krausnick;K
259
+ 257;32;21.08.2018;11;9NW;Krausnick;nK
260
+ 258;32;22.08.2018;6;10SE;Hangelsberg;K
261
+ 259;32;22.08.2018;4,5;10SW;Hangelsberg;nK
262
+ 260;32;22.08.2018;20;12NE;Halbe;K
263
+ 261;32;22.08.2018;24,5;12NW;Halbe;nK
264
+ 262;32;22.08.2018;9;19NE;Spreeau;K
265
+ 263;32;22.08.2018;5;19NW;Spreeau;nK
266
+ 264;33;18.09.2018;8;3NE;Glienig;K
267
+ 265;33;18.09.2018;6;3NW;Glienig;nK
268
+ 266;33;18.09.2018;3,5;4NW;Gro� Liebitz;nK
269
+ 267;33;18.09.2018;2;4SE;Gro� Liebitz;K
270
+ 268;33;18.09.2018;12;9NE;Krausnick;K
271
+ 269;33;18.09.2018;8;9NW;Krausnick;nK
272
+ 270;33;19.09.2018;12;10SE;Hangelsberg;K
273
+ 271;33;19.09.2018;12;10SW;Hangelsberg;nK
274
+ 272;33;19.09.2018;12;12NE;Halbe;K
275
+ 273;33;19.09.2018;18;12NW;Halbe;nK
276
+ 274;33;19.09.2018;2;19NE;Spreeau;K
277
+ 275;33;19.09.2018;3;19NW;Spreeau;nK
278
+ 276;34;04.10.2018;25;3NE;Glienig;K
279
+ 277;34;04.10.2018;22;3NW;Glienig;nK
280
+ 278;34;04.10.2018;36;4NW;Gro� Liebitz;nK
281
+ 279;34;04.10.2018;38;4SE;Gro� Liebitz;K
282
+ 280;34;04.10.2018;25;9NE;Krausnick;K
283
+ 281;34;04.10.2018;17;9NW;Krausnick;nK
284
+ 282;34;02.10.2018;14;10SE;Hangelsberg;K
285
+ 283;34;02.10.2018;14;10SW;Hangelsberg;nK
286
+ 284;34;02.10.2018;13;12NE;Halbe;K
287
+ 285;34;02.10.2018;12;12NW;Halbe;nK
288
+ 286;34;02.10.2018;16;19NE;Spreeau;K
289
+ 287;34;02.10.2018;15;19NW;Spreeau;nK
290
+ 288;35;06.11.2018;9;3NE;Glienig;K
291
+ 289;35;06.11.2018;7;3NW;Glienig;nK
292
+ 290;35;06.11.2018;21;4NW;Gro� Liebitz;nK
293
+ 291;35;06.11.2018;21;4SE;Gro� Liebitz;K
294
+ 292;35;06.11.2018;11;9NE;Krausnick;K
295
+ 293;35;06.11.2018;8;9NW;Krausnick;nK
296
+ 294;35;06.11.2018;12;10SE;Hangelsberg;K
297
+ 295;35;06.11.2018;14;10SW;Hangelsberg;nK
298
+ 296;35;06.11.2018;8;12NE;Halbe;K
299
+ 297;35;06.11.2018;9;12NW;Halbe;nK
300
+ 298;35;06.11.2018;12;19NE;Spreeau;K
301
+ 299;35;06.11.2018;12;19NW;Spreeau;nK
302
+ 300;36;29.11.2018;7;3NE;Glienig;K
303
+ 301;36;29.11.2018;7,5;3NW;Glienig;nK
304
+ 302;36;29.11.2018;8;4NW;Gro� Liebitz;nK
305
+ 303;36;29.11.2018;7,5;4SE;Gro� Liebitz;K
306
+ 304;36;29.11.2018;6,5;9NE;Krausnick;K
307
+ 305;36;29.11.2018;5;9NW;Krausnick;nK
308
+ 306;36;04.12.2018;17,5;10SE;Hangelsberg;K
309
+ 307;36;04.12.2018;19,5;10SW;Hangelsberg;nK
310
+ 308;36;04.12.2018;32;12NE;Halbe;K
311
+ 309;36;04.12.2018;32;12NW;Halbe;nK
312
+ 310;36;04.12.2018;25;19NE;Spreeau;K
313
+ 311;36;04.12.2018;24;19NW;Spreeau;nK
314
+ 312;37;10.01.2019;90;3NE;Glienig;K
315
+ 313;37;10.01.2019;99;3NW;Glienig;nK
316
+ 314;37;10.01.2019;83;4NW;Gro� Liebitz;nK
317
+ 315;37;10.01.2019;87;4SE;Gro� Liebitz;K
318
+ 316;37;10.01.2019;90;9NE;Krausnick;K
319
+ 317;37;10.01.2019;75;9NW;Krausnick;nK
320
+ 318;37;09.01.2019;45;10SE;Hangelsberg;K
321
+ 319;37;09.01.2019;50;10SW;Hangelsberg;nK
322
+ 320;37;09.01.2019;65;12NE;Halbe;K
323
+ 321;37;09.01.2019;65;12NW;Halbe;nK
324
+ 322;37;09.01.2019;45;19NE;Spreeau;K
325
+ 323;37;09.01.2019;46;19NW;Spreeau;nK
326
+ 324;38;31.01.2019;30;3NE;Glienig;K
327
+ 325;38;31.01.2019;32;3NW;Glienig;nK
328
+ 326;38;31.01.2019;26;4NW;Gro� Liebitz;nK
329
+ 327;38;31.01.2019;28;4SE;Gro� Liebitz;K
330
+ 328;38;31.01.2019;25;9NE;Krausnick;K
331
+ 329;38;31.01.2019;19;9NW;Krausnick;nK
332
+ 330;38;30.01.2019;25;10SE;Hangelsberg;K
333
+ 331;38;30.01.2019;27;10SW;Hangelsberg;nK
334
+ 332;38;30.01.2019;17,5;12NE;Halbe;K
335
+ 333;38;30.01.2019;25;12NW;Halbe;nK
336
+ 334;38;30.01.2019;29;19NE;Spreeau;K
337
+ 335;38;30.01.2019;29;19NW;Spreeau;nK
338
+ 336;39;18.02.2019;17;3NE;Glienig;K
339
+ 337;39;18.02.2019;18,5;3NW;Glienig;nK
340
+ 338;39;20.02.2019;12;4NW;Gro� Liebitz;nK
341
+ 339;39;20.02.2019;13;4SE;Gro� Liebitz;K
342
+ 340;39;20.02.2019;15,5;9NE;Krausnick;K
343
+ 341;39;20.02.2019;15;9NW;Krausnick;nK
344
+ 342;39;18.02.2019;14,5;10SE;Hangelsberg;K
345
+ 343;39;18.02.2019;14,5;10SW;Hangelsberg;nK
346
+ 344;39;18.02.2019;13;12NE;Halbe;K
347
+ 345;39;18.02.2019;17,5;12NW;Halbe;nK
348
+ 346;39;18.02.2019;14;19NE;Spreeau;K
349
+ 347;39;18.02.2019;13;19NW;Spreeau;nK
350
+ 348;40;12.03.2019;33;3NE;Glienig;K
351
+ 349;40;12.03.2019;34;3NW;Glienig;nK
352
+ 350;40;11.03.2019;29;4NW;Gro� Liebitz;nK
353
+ 351;40;11.03.2019;28;4SE;Gro� Liebitz;K
354
+ 352;40;11.03.2019;33;9NE;Krausnick;K
355
+ 353;40;11.03.2019;25;9NW;Krausnick;nK
356
+ 354;40;12.03.2019;33;10SE;Hangelsberg;K
357
+ 355;40;12.03.2019;33;10SW;Hangelsberg;nK
358
+ 356;40;11.03.2019;27;12NE;Halbe;K
359
+ 357;40;11.03.2019;32;12NW;Halbe;nK
360
+ 358;40;12.03.2019;33;19NE;Spreeau;K
361
+ 359;40;12.03.2019;32;19NW;Spreeau;nK
362
+ 360;41;26.03.2019;16;3NE;Glienig;K
363
+ 361;41;26.03.2019;16;3NW;Glienig;nK
364
+ 362;41;26.03.2019;16;4NW;Gro� Liebitz;nK
365
+ 363;41;26.03.2019;16;4SE;Gro� Liebitz;K
366
+ 364;41;26.03.2019;18;9NE;Krausnick;K
367
+ 365;41;26.03.2019;14;9NW;Krausnick;nK
368
+ 366;41;26.03.2019;18,5;10SE;Hangelsberg;K
369
+ 367;41;26.03.2019;19,5;10SW;Hangelsberg;nK
370
+ 368;41;26.03.2019;13;12NE;Halbe;K
371
+ 369;41;26.03.2019;18;12NW;Halbe;nK
372
+ 370;41;26.03.2019;16;19NE;Spreeau;K
373
+ 371;41;26.03.2019;15;19NW;Spreeau;nK
374
+ 372;42;11.04.2019;2,5;3NE;Glienig;K
375
+ 373;42;11.04.2019;3;3NW;Glienig;nK
376
+ 374;42;11.04.2019;1;4NW;Gro� Liebitz;nK
377
+ 375;42;11.04.2019;1;4SE;Gro� Liebitz;K
378
+ 376;42;11.04.2019;1;9NE;Krausnick;K
379
+ 377;42;11.04.2019;1;9NW;Krausnick;nK
380
+ 378;42;10.04.2019;1,5;10SE;Hangelsberg;K
381
+ 379;42;10.04.2019;1,7;10SW;Hangelsberg;nK
382
+ 380;42;10.04.2019;0,5;12NE;Halbe;K
383
+ 381;42;10.04.2019;1;12NW;Halbe;nK
384
+ 382;42;10.04.2019;1,5;19NE;Spreeau;K
385
+ 383;42;10.04.2019;2;19NW;Spreeau;nK
386
+ 384;43;02.05.2019;9,5;3NE;Glienig;K
387
+ 385;43;02.05.2019;10;3NW;Glienig;nK
388
+ 386;43;02.05.2019;10;4NW;Gro� Liebitz;nK
389
+ 387;43;02.05.2019;9,5;4SE;Gro� Liebitz;K
390
+ 388;43;02.05.2019;11;9NE;Krausnick;K
391
+ 389;43;02.05.2019;8;9NW;Krausnick;nK
392
+ 390;43;03.05.2019;9;10SE;Hangelsberg;K
393
+ 391;43;03.05.2019;9;10SW;Hangelsberg;nK
394
+ 392;43;03.05.2019;4,5;12NE;Halbe;K
395
+ 393;43;03.05.2019;7;12NW;Halbe;nK
396
+ 394;43;07.05.2019;14;19NE;Spreeau;K
397
+ 395;43;07.05.2019;12,5;19NW;Spreeau;nK
398
+ 396;44;23.05.2019;22;3NE;Glienig;K
399
+ 397;44;23.05.2019;22;3NW;Glienig;nK
400
+ 398;44;23.05.2019;59;4NW;Gro� Liebitz;nK
401
+ 399;44;23.05.2019;57;4SE;Gro� Liebitz;K
402
+ 400;44;23.05.2019;36;9NE;Krausnick;K
403
+ 401;44;23.05.2019;24;9NW;Krausnick;nK
404
+ 402;44;22.05.2019;42;10SE;Hangelsberg;K
405
+ 403;44;22.05.2019;32;10SW;Hangelsberg;nK
406
+ 404;44;22.05.2019;16;12NE;Halbe;K
407
+ 405;44;22.05.2019;20;12NW;Halbe;nK
408
+ 406;44;22.05.2019;34;19NE;Spreeau;K
409
+ 407;44;22.05.2019;32;19NW;Spreeau;nK
410
+ 408;45;12.06.2019;27,5;3NE;Glienig;K
411
+ 409;45;12.06.2019;33,5;3NW;Glienig;nK
412
+ 410;45;12.06.2019;47;4NW;Gro� Liebitz;nK
413
+ 411;45;12.06.2019;42;4SE;Gro� Liebitz;K
414
+ 412;45;12.06.2019;22,5;9NE;Krausnick;K
415
+ 413;45;12.06.2019;19;9NW;Krausnick;nK
416
+ 414;45;04.06.2019;9;10SE;Hangelsberg;K
417
+ 415;45;04.06.2019;7;10SW;Hangelsberg;nK
418
+ 416;45;04.06.2019;0;12NE;Halbe;K
419
+ 417;45;04.06.2019;0;12NW;Halbe;nK
420
+ 418;45;04.06.2019;3,5;19NE;Spreeau;K
421
+ 419;45;04.06.2019;3,5;19NW;Spreeau;nK
422
+ 420;46;02.07.2019;3;3NE;Glienig;K
423
+ 421;46;02.07.2019;4;3NW;Glienig;nK
424
+ 422;46;02.07.2019;1,5;4NW;Gro� Liebitz;nK
425
+ 423;46;02.07.2019;0;4SE;Gro� Liebitz;K
426
+ 424;46;02.07.2019;7;9NE;Krausnick;K
427
+ 425;46;02.07.2019;8,5;9NW;Krausnick;nK
428
+ 426;46;04.07.2019;35;10SE;Hangelsberg;K
429
+ 427;46;04.07.2019;36;10SW;Hangelsberg;nK
430
+ 428;46;04.07.2019;18,5;12NE;Halbe;K
431
+ 429;46;04.07.2019;21,5;12NW;Halbe;nK
432
+ 430;46;04.07.2019;41;19NE;Spreeau;K
433
+ 431;46;04.07.2019;35,5;19NW;Spreeau;nK
434
+ 432;47;12.08.2019;52;3NE;Glienig;K
435
+ 433;47;12.08.2019;49;3NW;Glienig;nK
436
+ 434;47;12.08.2019;56,5;4NW;Gro� Liebitz;nK
437
+ 435;47;12.08.2019;52,5;4SE;Gro� Liebitz;K
438
+ 436;47;12.08.2019;58,5;9NE;Krausnick;K
439
+ 437;47;12.08.2019;59,5;9NW;Krausnick;nK
440
+ 438;47;13.08.2019;53;10SE;Hangelsberg;K
441
+ 439;47;13.08.2019;62;10SW;Hangelsberg;nK
442
+ 440;47;13.08.2019;39;12NE;Halbe;K
443
+ 441;47;13.08.2019;46;12NW;Halbe;nK
444
+ 442;47;13.08.2019;66,5;19NE;Spreeau;K
445
+ 443;47;13.08.2019;63,5;19NW;Spreeau;nK
446
+ 444;48;05.09.2019;4;3NE;Glienig;K
447
+ 445;48;05.09.2019;4;3NW;Glienig;nK
448
+ 446;48;05.09.2019;6;4NW;Gro� Liebitz;nK
449
+ 447;48;05.09.2019;3,5;4SE;Gro� Liebitz;K
450
+ 448;48;05.09.2019;10;9NE;Krausnick;K
451
+ 449;48;05.09.2019;9,5;9NW;Krausnick;nK
452
+ 450;48;04.09.2019;11;10SE;Hangelsberg;K
453
+ 451;48;04.09.2019;10,5;10SW;Hangelsberg;nK
454
+ 452;48;04.09.2019;2,5;12NE;Halbe;K
455
+ 453;48;04.09.2019;5;12NW;Halbe;nK
456
+ 454;48;04.09.2019;9,5;19NE;Spreeau;K
457
+ 455;48;04.09.2019;8,5;19NW;Spreeau;nK
458
+ 456;49;07.10.2019;61;3NE;Glienig;K
459
+ 457;49;07.10.2019;61;3NW;Glienig;nK
460
+ 458;49;07.10.2019;56;4NW;Gro� Liebitz;nK
461
+ 459;49;07.10.2019;56;4SE;Gro� Liebitz;K
462
+ 460;49;07.10.2019;64;9NE;Krausnick;K
463
+ 461;49;07.10.2019;48;9NW;Krausnick;nK
464
+ 462;49;04.10.2019;48,5;10SE;Hangelsberg;K
465
+ 463;49;04.10.2019;57;10SW;Hangelsberg;nK
466
+ 464;49;08.10.2019;57;12NE;Halbe;K
467
+ 465;49;08.10.2019;70;12NW;Halbe;nK
468
+ 466;49;04.10.2019;45;19NE;Spreeau;K
469
+ 467;49;04.10.2019;42,5;19NW;Spreeau;nK
470
+ 468;50;06.11.2019;21;3NE;Glienig;K
471
+ 469;50;06.11.2019;24;3NW;Glienig;nK
472
+ 470;50;06.11.2019;20,5;4NW;Gro� Liebitz;nK
473
+ 471;50;06.11.2019;20,5;4SE;Gro� Liebitz;K
474
+ 472;50;06.11.2019;23,5;9NE;Krausnick;K
475
+ 473;50;06.11.2019;20,5;9NW;Krausnick;nK
476
+ 474;50;05.11.2019;34;10SE;Hangelsberg;K
477
+ 475;50;05.11.2019;37;10SW;Hangelsberg;nK
478
+ 476;50;06.11.2019;16,5;12NE;Halbe;K
479
+ 477;50;06.11.2019;26;12NW;Halbe;nK
480
+ 478;50;05.11.2019;37;19NE;Spreeau;K
481
+ 479;50;05.11.2019;32;19NW;Spreeau;nK
482
+ 480;51;26.11.2019;16;3NE;Glienig;K
483
+ 481;51;26.11.2019;16;3NW;Glienig;nK
484
+ 482;51;26.11.2019;7,5;4NW;Gro� Liebitz;nK
485
+ 483;51;26.11.2019;9;4SE;Gro� Liebitz;K
486
+ 484;51;26.11.2019;14,5;9NE;Krausnick;K
487
+ 485;51;26.11.2019;10,5;9NW;Krausnick;nK
488
+ 486;51;28.11.2019;17;10SE;Hangelsberg;K
489
+ 487;51;28.11.2019;17,5;10SW;Hangelsberg;nK
490
+ 488;51;28.11.2019;14,5;12NE;Halbe;K
491
+ 489;51;28.11.2019;17;12NW;Halbe;nK
492
+ 490;51;28.11.2019;22;19NE;Spreeau;K
493
+ 491;51;28.11.2019;20;19NW;Spreeau;nK
494
+ 492;52;17.12.2019;16;3NE;Glienig;K
495
+ 493;52;17.12.2019;18;3NW;Glienig;nK
496
+ 494;52;17.12.2019;17;4NW;Gro� Liebitz;nK
497
+ 495;52;17.12.2019;12,5;4SE;Gro� Liebitz;K
498
+ 496;52;17.12.2019;19;9NE;Krausnick;K
499
+ 497;52;17.12.2019;13,5;9NW;Krausnick;nK
500
+ 498;52;18.12.2019;16;10SE;Hangelsberg;K
501
+ 499;52;18.12.2019;19,5;10SW;Hangelsberg;nK
502
+ 500;52;18.12.2019;10;12NE;Halbe;K
503
+ 501;52;18.12.2019;14,5;12NW;Halbe;nK
504
+ 502;52;18.12.2019;18;19NE;Spreeau;K
505
+ 503;52;18.12.2019;17,5;19NW;Spreeau;nK
506
+ 504;53;07.01.2020;17;3NE;Glienig;K
507
+ 505;53;07.01.2020;17;3NW;Glienig;nK
508
+ 506;53;07.01.2020;17;4NW;Gro� Liebitz;nK
509
+ 507;53;07.01.2020;14;4SE;Gro� Liebitz;K
510
+ 508;53;07.01.2020;24;9NE;Krausnick;K
511
+ 509;53;07.01.2020;20;9NW;Krausnick;nK
512
+ 510;53;06.01.2020;17;10SE;Hangelsberg;K
513
+ 511;53;06.01.2020;21,5;10SW;Hangelsberg;nK
514
+ 512;53;06.01.2020;15;12NE;Halbe;K
515
+ 513;53;06.01.2020;22;12NW;Halbe;nK
516
+ 514;53;06.01.2020;19,5;19NE;Spreeau;K
517
+ 515;53;06.01.2020;19;19NW;Spreeau;nK
518
+ 516;54;31.01.2020;18,5;3NE;Glienig;K
519
+ 517;54;31.01.2020;20;3NW;Glienig;nK
520
+ 518;54;03.02.2020;35;4NW;Gro� Liebitz;nK
521
+ 519;54;03.02.2020;24,5;4SE;Gro� Liebitz;K
522
+ 520;54;03.02.2020;33;9NE;Krausnick;K
523
+ 521;54;03.02.2020;23;9NW;Krausnick;nK
524
+ 522;54;29.01.2020;21,5;10SE;Hangelsberg;K
525
+ 523;54;29.01.2020;22,5;10SW;Hangelsberg;nK
526
+ 524;54;31.01.2020;16,5;12NE;Halbe;K
527
+ 525;54;31.01.2020;22,5;12NW;Halbe;nK
528
+ 526;54;29.01.2020;22;19NE;Spreeau;K
529
+ 527;54;29.01.2020;23;19NW;Spreeau;nK
530
+ 528;55;03.03.2020;68;3NE;Glienig;K
531
+ 529;55;03.03.2020;74;3NW;Glienig;nK
532
+ 530;55;03.03.2020;60;4NW;Gro� Liebitz;nK
533
+ 531;55;03.03.2020;58;4SE;Gro� Liebitz;K
534
+ 532;55;03.03.2020;53;9NE;Krausnick;K
535
+ 533;55;03.03.2020;46;9NW;Krausnick;nK
536
+ 534;55;11.03.2020;89;10SE;Hangelsberg;K
537
+ 535;55;11.03.2020;96,5;10SW;Hangelsberg;nK
538
+ 536;55;03.03.2020;60;12NE;Halbe;K
539
+ 537;55;03.03.2020;60;12NW;Halbe;nK
540
+ 538;55;11.03.2020;87;19NE;Spreeau;K
541
+ 539;55;11.03.2020;82;19NW;Spreeau;nK
542
+ 540;56;25.03.2020;17;3NE;Glienig;K
543
+ 541;56;25.03.2020;20;3NW;Glienig;nK
544
+ 542;56;25.03.2020;27;4NW;Gro� Liebitz;nK
545
+ 543;56;25.03.2020;26;4SE;Gro� Liebitz;K
546
+ 544;56;25.03.2020;18,5;9NE;Krausnick;K
547
+ 545;56;25.03.2020;15,5;9NW;Krausnick;nK
548
+ 546;56;26.03.2020;2;10SE;Hangelsberg;K
549
+ 547;56;26.03.2020;3;10SW;Hangelsberg;nK
550
+ 548;56;26.03.2020;15;12NE;Halbe;K
551
+ 549;56;26.03.2020;19,5;12NW;Halbe;nK
552
+ 550;56;26.03.2020;2,5;19NE;Spreeau;K
553
+ 551;56;26.03.2020;3;19NW;Spreeau;nK
554
+ 552;57;08.04.2020;0,1;3NE;Glienig;K
555
+ 553;57;08.04.2020;0,3;3NW;Glienig;nK
556
+ 554;57;15.04.2020;1;4NW;Gro� Liebitz;nK
557
+ 555;57;15.04.2020;2,5;4SE;Gro� Liebitz;K
558
+ 556;57;15.04.2020;3,5;9NE;Krausnick;K
559
+ 557;57;15.04.2020;3;9NW;Krausnick;nK
560
+ 558;57;15.04.2020;1,5;10SE;Hangelsberg;K
561
+ 559;57;15.04.2020;2;10SW;Hangelsberg;nK
562
+ 560;57;08.04.2020;0,2;12NE;Halbe;K
563
+ 561;57;08.04.2020;0;12NW;Halbe;nK
564
+ 562;57;15.04.2020;2;19NE;Spreeau;K
565
+ 563;57;15.04.2020;2;19NW;Spreeau;nK
566
+ 564;58;05.05.2020;13;3NE;Glienig;K
567
+ 565;58;05.05.2020;12,5;3NW;Glienig;nK
568
+ 566;58;05.05.2020;6,5;4NW;Gro� Liebitz;nK
569
+ 567;58;05.05.2020;6,5;4SE;Gro� Liebitz;K
570
+ 568;58;05.05.2020;10;9NE;Krausnick;K
571
+ 569;58;05.05.2020;8,5;9NW;Krausnick;nK
572
+ 570;58;06.05.2020;12;10SE;Hangelsberg;K
573
+ 571;58;06.05.2020;14;10SW;Hangelsberg;nK
574
+ 572;58;06.05.2020;5;12NE;Halbe;K
575
+ 573;58;06.05.2020;7;12NW;Halbe;nK
576
+ 574;58;06.05.2020;16;19NE;Spreeau;K
577
+ 575;58;06.05.2020;13;19NW;Spreeau;nK
578
+ 576;59;27.05.2020;16,5;3NE;Glienig;K
579
+ 577;59;27.05.2020;19;3NW;Glienig;nK
580
+ 578;59;27.05.2020;22;4NW;Gro� Liebitz;nK
581
+ 579;59;27.05.2020;20;4SE;Gro� Liebitz;K
582
+ 580;59;27.05.2020;21;9NE;Krausnick;K
583
+ 581;59;27.05.2020;16,5;9NW;Krausnick;nK
584
+ 582;59;26.05.2020;23;10SE;Hangelsberg;K
585
+ 583;59;26.05.2020;24;10SW;Hangelsberg;nK
586
+ 584;59;26.05.2020;13,5;12NE;Halbe;K
587
+ 585;59;26.05.2020;14;12NW;Halbe;nK
588
+ 586;59;26.05.2020;28;19NE;Spreeau;K
589
+ 587;59;26.05.2020;28;19NW;Spreeau;nK
590
+ 588;60;26.06.2020;10;3NE;Glienig;K
591
+ 589;60;26.06.2020;10;3NW;Glienig;nK
592
+ 590;60;22.06.2020;18,5;4NW;Gro� Liebitz;nK
593
+ 591;60;22.06.2020;24;4SE;Gro� Liebitz;K
594
+ 592;60;22.06.2020;14;9NE;Krausnick;K
595
+ 593;60;22.06.2020;9;9NW;Krausnick;nK
596
+ 594;60;23.06.2020;24;10SE;Hangelsberg;K
597
+ 595;60;23.06.2020;23,5;10SW;Hangelsberg;nK
598
+ 596;60;26.06.2020;13;12NE;Halbe;K
599
+ 597;60;26.06.2020;15;12NW;Halbe;nK
600
+ 598;60;23.06.2020;35;19NE;Spreeau;K
601
+ 599;60;23.06.2020;32;19NW;Spreeau;nK
602
+ 600;61;14.07.2020;21,5;3NE;Glienig;K
603
+ 601;61;14.07.2020;20;3NW;Glienig;nK
604
+ 602;61;14.07.2020;32,5;4NW;Gro� Liebitz;nK
605
+ 603;61;14.07.2020;30;4SE;Gro� Liebitz;K
606
+ 604;61;14.07.2020;56;9NE;Krausnick;K
607
+ 605;61;14.07.2020;48;9NW;Krausnick;nK
608
+ 606;61;15.07.2020;24;10SE;Hangelsberg;K
609
+ 607;61;15.07.2020;29;10SW;Hangelsberg;nK
610
+ 608;61;15.07.2020;38,5;12NE;Halbe;K
611
+ 609;61;15.07.2020;43;12NW;Halbe;nK
612
+ 610;61;15.07.2020;19;19NE;Spreeau;K
613
+ 611;61;15.07.2020;18;19NW;Spreeau;nK
614
+ 612;62;17.08.2020;58,5;3NE;Glienig;K
615
+ 613;62;17.08.2020;54;3NW;Glienig;nK
616
+ 614;62;17.08.2020;39;4NW;Gro� Liebitz;nK
617
+ 615;62;17.08.2020;51;4SE;Gro� Liebitz;K
618
+ 616;62;17.08.2020;32;9NE;Krausnick;K
619
+ 617;62;17.08.2020;25;9NW;Krausnick;nK
620
+ 618;62;14.08.2020;13,5;10SE;Hangelsberg;K
621
+ 619;62;14.08.2020;17,5;10SW;Hangelsberg;nK
622
+ 620;62;17.08.2020;21,5;12NE;Halbe;K
623
+ 621;62;17.08.2020;27;12NW;Halbe;nK
624
+ 622;62;14.08.2020;15;19NE;Spreeau;K
625
+ 623;63;01.09.2020;38;3NE;Glienig;K
626
+ 624;63;01.09.2020;34;3NW;Glienig;nK
627
+ 625;63;01.09.2020;45;4NW;Gro� Liebitz;nK
628
+ 626;63;01.09.2020;65;4SE;Gro� Liebitz;K
629
+ 627;63;01.09.2020;45;9NE;Krausnick;K
630
+ 628;63;01.09.2020;35;9NW;Krausnick;nK
631
+ 629;63;02.09.2020;33;10SE;Hangelsberg;K
632
+ 630;63;02.09.2020;36;10SW;Hangelsberg;nK
633
+ 631;63;04.09.2020;28;12NE;Halbe;K
634
+ 632;63;04.09.2020;38;12NW;Halbe;nK
635
+ 633;63;02.09.2020;39;19NE;Spreeau;K
636
+ 634;63;02.09.2020;39;19NW;Spreeau;nK
637
+ 635;64;22.09.2020;10;3NE;Glienig;K
638
+ 636;64;22.09.2020;9;3NW;Glienig;nK
639
+ 637;64;22.09.2020;5;4NW;Gro� Liebitz;nK
640
+ 638;64;22.09.2020;3;4SE;Gro� Liebitz;K
641
+ 639;64;22.09.2020;7;9NE;Krausnick;K
642
+ 640;64;22.09.2020;5;9NW;Krausnick;nK
643
+ 641;64;23.09.2020;16;10SE;Hangelsberg;K
644
+ 642;64;23.09.2020;12,5;10SW;Hangelsberg;nK
645
+ 643;64;22.09.2020;0,5;12NE;Halbe;K
646
+ 644;64;22.09.2020;1;12NW;Halbe;nK
647
+ 645;64;23.09.2020;24;19NE;Spreeau;K
648
+ 646;64;23.09.2020;18;19NW;Spreeau;nK
649
+ 647;65;30.09.2020;32,5;3NE;Glienig;K
650
+ 648;65;30.09.2020;33,5;3NW;Glienig;nK
651
+ 649;65;08.10.2020;28;4NW;Gro� Liebitz;nK
652
+ 650;65;08.10.2020;32;4SE;Gro� Liebitz;K
653
+ 651;65;08.10.2020;26;9NE;Krausnick;K
654
+ 652;65;08.10.2020;23;9NW;Krausnick;nK
655
+ 653;65;07.10.2020;28,5;10SE;Hangelsberg;K
656
+ 654;65;07.10.2020;29;10SW;Hangelsberg;nK
657
+ 655;65;07.10.2020;18;12NE;Halbe;K
658
+ 656;65;07.10.2020;22,5;12NW;Halbe;nK
659
+ 657;65;07.10.2020;29;19NE;Spreeau;K
660
+ 658;65;07.10.2020;29;19NW;Spreeau;nK
661
+ 659;66;29.10.2020;35;3NE;Glienig;K
662
+ 660;66;29.10.2020;41,5;3NW;Glienig;nK
663
+ 661;66;29.10.2020;43;4NW;Gro� Liebitz;nK
664
+ 662;66;29.10.2020;37;4SE;Gro� Liebitz;K
665
+ 663;66;29.10.2020;35;9NE;Krausnick;K
666
+ 664;66;29.10.2020;28;9NW;Krausnick;nK
667
+ 665;66;30.10.2020;44;10SE;Hangelsberg;K
668
+ 666;66;30.10.2020;48;10SW;Hangelsberg;nK
669
+ 667;66;30.10.2020;33;12NE;Halbe;K
670
+ 668;66;30.10.2020;36;12NW;Halbe;nK
671
+ 669;66;30.10.2020;50;19NE;Spreeau;K
672
+ 670;66;30.10.2020;46;19NW;Spreeau;nK
673
+ 671;67;18.11.2020;26;3NE;Glienig;K
674
+ 672;67;18.11.2020;26,5;3NW;Glienig;nK
675
+ 673;67;18.11.2020;25;4NW;Gro� Liebitz;nK
676
+ 674;67;18.11.2020;21;4SE;Gro� Liebitz;K
677
+ 675;67;18.11.2020;25,5;9NE;Krausnick;K
678
+ 676;67;18.11.2020;23,5;9NW;Krausnick;nK
679
+ 677;67;19.11.2020;22;10SE;Hangelsberg;K
680
+ 678;67;19.11.2020;20,5;10SW;Hangelsberg;nK
681
+ 679;67;19.11.2020;12;12NE;Halbe;K
682
+ 680;67;19.11.2020;14;12NW;Halbe;nK
683
+ 681;67;19.11.2020;17;19NE;Spreeau;K
684
+ 682;67;19.11.2020;18;19NW;Spreeau;nK
685
+ 683;68;09.12.2020;5;3NE;Glienig;K
686
+ 684;68;09.12.2020;5;3NW;Glienig;nK
687
+ 685;68;09.12.2020;3,5;4NW;Gro� Liebitz;nK
688
+ 686;68;09.12.2020;4;4SE;Gro� Liebitz;K
689
+ 687;68;09.12.2020;4,5;9NE;Krausnick;K
690
+ 688;68;09.12.2020;3,5;9NW;Krausnick;nK
691
+ 689;68;07.12.2020;2;10SE;Hangelsberg;K
692
+ 690;68;07.12.2020;3;10SW;Hangelsberg;nK
693
+ 691;68;07.12.2020;2;12NE;Halbe;K
694
+ 692;68;07.12.2020;3,5;12NW;Halbe;nK
695
+ 693;68;09.12.2020;2;19NE;Spreeau;K
696
+ 694;68;09.12.2020;2,5;19NW;Spreeau;nK
697
+ 695;69;06.01.2021;24;3NE;Glienig;K
698
+ 696;69;06.01.2021;27;3NW;Glienig;nK
699
+ 697;69;06.01.2021;36;4NW;Gro� Liebitz;nK
700
+ 698;69;06.01.2021;38;4SE;Gro� Liebitz;K
701
+ 699;69;06.01.2021;25;9NE;Krausnick;K
702
+ 700;69;06.01.2021;23,5;9NW;Krausnick;nK
703
+ 701;69;07.01.2021;37;10SE;Hangelsberg;K
704
+ 702;69;07.01.2021;33;10SW;Hangelsberg;nK
705
+ 703;69;07.01.2021;24,5;12NE;Halbe;K
706
+ 704;69;07.01.2021;25,5;12NW;Halbe;nK
707
+ 705;62;14.08.2020;14;19NW;Spreeau;nK
708
+ 706;69;07.01.2021;28;19NE;Spreeau;K
709
+ 707;69;07.01.2021;27,5;19NW;Spreeau;nK
710
+ 708;70;26.01.2021;34;3NE;Glienig;K
711
+ 709;70;26.01.2021;38;3NW;Glienig;nK
712
+ 710;70;26.01.2021;41;4NW;Gro� Liebitz;nK
713
+ 711;70;26.01.2021;45;4SE;Gro� Liebitz;K
714
+ 712;70;26.01.2021;28;9NE;Krausnick;K
715
+ 713;70;26.01.2021;28;9NW;Krausnick;nK
716
+ 714;70;27.01.2021;39;10SE;Hangelsberg;K
717
+ 715;70;27.01.2021;31;10SW;Hangelsberg;nK
718
+ 716;70;27.01.2021;31,5;12NE;Halbe;K
719
+ 717;70;27.01.2021;26,5;12NW;Halbe;nK
720
+ 718;70;27.01.2021;27,5;19NE;Spreeau;K
721
+ 719;70;27.01.2021;31,5;19NW;Spreeau;nK
722
+ 720;71;17.02.2021;25;3NE;Glienig;K
723
+ 721;71;17.02.2021;16;3NW;Glienig;nK
724
+ 722;71;17.02.2021;18;4NW;Gro� Liebitz;nK
725
+ 723;71;17.02.2021;14;4SE;Gro� Liebitz;K
726
+ 724;71;17.02.2021;18;9NE;Krausnick;K
727
+ 725;71;17.02.2021;19;9NW;Krausnick;nK
728
+ 726;71;18.02.2021;18;10SE;Hangelsberg;K
729
+ 727;71;18.02.2021;17;10SW;Hangelsberg;nK
730
+ 728;71;18.02.2021;26;12NE;Halbe;K
731
+ 729;71;18.02.2021;25;12NW;Halbe;nK
732
+ 730;71;18.02.2021;17;19NE;Spreeau;K
733
+ 731;71;18.02.2021;18;19NW;Spreeau;nK
734
+ 732;72;11.03.2021;18;3NE;Glienig;K
735
+ 733;72;11.03.2021;21;3NW;Glienig;nK
736
+ 734;72;19.03.2021;40;4NW;Gro� Liebitz;nK
737
+ 735;72;19.03.2021;51,5;4SE;Gro� Liebitz;K
738
+ 736;72;19.03.2021;42;9NE;Krausnick;K
739
+ 737;72;19.03.2021;33;9NW;Krausnick;nK
740
+ 738;72;12.03.2021;21,5;10SE;Hangelsberg;K
741
+ 739;72;12.03.2021;19;10SW;Hangelsberg;nK
742
+ 740;72;19.03.2021;27;12NE;Halbe;K
743
+ 741;72;19.03.2021;44;12NW;Halbe;nK
744
+ 742;72;12.03.2021;17,5;19NE;Spreeau;K
745
+ 743;72;12.03.2021;15;19NW;Spreeau;nK
746
+ 744;73;12.04.2021;31;3NE;Glienig;K
747
+ 745;73;12.04.2021;31;3NW;Glienig;nK
748
+ 746;73;13.04.2021;11;4NW;Gro� Liebitz;nK
749
+ 747;73;13.04.2021;15,5;4SE;Gro� Liebitz;K
750
+ 748;73;13.04.2021;14;9NE;Krausnick;K
751
+ 749;73;13.04.2021;11;9NW;Krausnick;nK
752
+ 750;73;12.04.2021;21;10SE;Hangelsberg;K
753
+ 751;73;12.04.2021;24,5;10SW;Hangelsberg;nK
754
+ 752;73;13.04.2021;9;12NE;Halbe;K
755
+ 753;73;13.04.2021;12;12NW;Halbe;nK
756
+ 754;73;13.04.2021;24,5;19NE;Spreeau;K
757
+ 755;73;13.04.2021;23;19NW;Spreeau;nK
758
+ 756;74;03.05.2021;13;3NE;Glienig;K
759
+ 757;74;03.05.2021;13;3NW;Glienig;nK
760
+ 758;74;03.05.2021;18;4NW;Gro� Liebitz;nK
761
+ 759;74;03.05.2021;29;4SE;Gro� Liebitz;K
762
+ 760;74;03.05.2021;24;9NE;Krausnick;K
763
+ 761;74;03.05.2021;16;9NW;Krausnick;nK
764
+ 762;74;04.05.2021;28;10SE;Hangelsberg;K
765
+ 763;74;04.05.2021;25;10SW;Hangelsberg;nK
766
+ 764;74;04.05.2021;25;12NE;Halbe;K
767
+ 765;74;04.05.2021;24;12NW;Halbe;nK
768
+ 766;74;04.05.2021;13,5;19NE;Spreeau;K
769
+ 767;74;04.05.2021;18,5;19NW;Spreeau;nK
770
+ 768;75;27.05.2021;29;3NE;Glienig;K
771
+ 769;75;27.05.2021;32;3NW;Glienig;nK
772
+ 770;75;27.05.2021;37;4NW;Gro� Liebitz;nK
773
+ 771;75;27.05.2021;44;4SE;Gro� Liebitz;K
774
+ 772;75;27.05.2021;;9NE;Krausnick;K
775
+ 773;75;27.05.2021;47;9NW;Krausnick;nK
776
+ 774;75;20.05.2021;12;10SE;Hangelsberg;K
777
+ 775;75;20.05.2021;14;10SW;Hangelsberg;nK
778
+ 776;75;20.05.2021;24;12NE;Halbe;K
779
+ 777;75;20.05.2021;33;12NW;Halbe;nK
780
+ 778;75;20.05.2021;10;19NE;Spreeau;K
781
+ 779;75;20.05.2021;11;19NW;Spreeau;nK
782
+ 0;79;04.08.2021;7;3NE;Glienig;K
783
+ 1;79;04.08.2021;8;3NW;Glienig;nK
784
+ 2;79;04.08.2021;2;4NW;Gro� Liebitz;nK
785
+ 3;79;04.08.2021;1,5;4SE;Gro� Liebitz;K
786
+ 4;79;04.08.2021;13;9NE;Krausnick;K
787
+ 5;79;04.08.2021;10;9NW;Krausnick;nK
788
+ 6;79;06.08.2021;9;10SE;Hangelsberg;K
789
+ 7;79;06.08.2021;11;10SW;Hangelsberg;nK
790
+ 8;79;06.08.2021;6;12NE;Halbe;K
791
+ 9;79;06.08.2021;7;12NW;Halbe;nK
792
+ 10;79;06.08.2021;7;19NE;Spreeau;K
793
+ 11;79;06.08.2021;0;19NW;Spreeau;nK
794
+ 12;80;18.08.2021;4;3NE;Glienig;K
795
+ 13;80;18.08.2021;5;3NW;Glienig;nK
796
+ 14;80;18.08.2021;6;4NW;Gro� Liebitz;nK
797
+ 15;80;18.08.2021;5;4SE;Gro� Liebitz;K
798
+ 16;80;18.08.2021;4;9NE;Krausnick;K
799
+ 17;80;18.08.2021;6;9NW;Krausnick;nK
800
+ 18;80;20.08.2021;3;10SE;Hangelsberg;K
801
+ 19;80;20.08.2021;4;10SW;Hangelsberg;nK
802
+ 20;80;20.08.2021;0,5;12NE;Halbe;K
803
+ 21;80;20.08.2021;3,5;12NW;Halbe;nK
804
+ 22;80;20.08.2021;4;19NE;Spreeau;K
805
+ 23;80;20.08.2021;4;19NW;Spreeau;nK
806
+ 24;81;01.09.2021;0;3NE;Glienig;K
807
+ 25;81;01.09.2021;76;3NW;Glienig;nK
808
+ 26;81;01.09.2021;69;4NW;Gro� Liebitz;nK
809
+ 27;81;01.09.2021;107;4SE;Gro� Liebitz;K
810
+ 28;81;03.09.2021;98;9NE;Krausnick;K
811
+ 29;81;03.09.2021;0;9NW;Krausnick;nK
812
+ 30;81;03.09.2021;106;10SE;Hangelsberg;K
813
+ 31;81;03.09.2021;80;10SW;Hangelsberg;nK
814
+ 32;81;03.09.2021;94;12NE;Halbe;K
815
+ 33;81;03.09.2021;101;12NW;Halbe;nK
816
+ 34;81;03.09.2021;79;19NE;Spreeau;K
817
+ 35;81;03.09.2021;64;19NW;Spreeau;nK
818
+ 36;82;14.09.2021;0;3NE;Glienig;K
819
+ 37;82;14.09.2021;1,5;3NW;Glienig;nK
820
+ 38;82;14.09.2021;1;4NW;Gro� Liebitz;nK
821
+ 39;82;14.09.2021;2;4SE;Gro� Liebitz;K
822
+ 40;82;15.09.2021;1;9NE;Krausnick;K
823
+ 41;82;15.09.2021;1;9NW;Krausnick;nK
824
+ 42;82;15.09.2021;3;10SE;Hangelsberg;K
825
+ 43;82;15.09.2021;4;10SW;Hangelsberg;nK
826
+ 44;82;15.09.2021;1;12NE;Halbe;K
827
+ 45;82;15.09.2021;1,5;12NW;Halbe;nK
828
+ 46;82;15.09.2021;5;19NE;Spreeau;K
829
+ 47;82;15.09.2021;4;19NW;Spreeau;nK
830
+ 48;83;29.09.2021;0;3NE;Glienig;K
831
+ 49;83;29.09.2021;13;3NW;Glienig;nK
832
+ 50;83;29.09.2021;5;4NW;Gro� Liebitz;nK
833
+ 51;83;29.09.2021;5;4SE;Gro� Liebitz;K
834
+ 52;83;30.09.2021;18;9NE;Krausnick;K
835
+ 53;83;30.09.2021;21;9NW;Krausnick;nK
836
+ 54;83;30.09.2021;12;10SE;Hangelsberg;K
837
+ 55;83;30.09.2021;15;10SW;Hangelsberg;nK
838
+ 56;83;30.09.2021;15;12NE;Halbe;K
839
+ 57;83;30.09.2021;20;12NW;Halbe;nK
840
+ 58;83;30.09.2021;14;19NE;Spreeau;K
841
+ 59;83;30.09.2021;14;19NW;Spreeau;nK
842
+ 60;84;14.10.2021;4;3NE;Glienig;K
843
+ 61;84;14.10.2021;9;3NW;Glienig;nK
844
+ 62;84;15.10.2021;5;4NW;Gro� Liebitz;nK
845
+ 63;84;15.10.2021;2;4SE;Gro� Liebitz;K
846
+ 64;84;15.10.2021;6;9NE;Krausnick;K
847
+ 65;84;15.10.2021;5;9NW;Krausnick;nK
848
+ 66;84;15.10.2021;4;10SE;Hangelsberg;K
849
+ 67;84;15.10.2021;4;10SW;Hangelsberg;nK
850
+ 68;84;13.10.2021;3;12NE;Halbe;K
851
+ 69;84;13.10.2021;0;12NW;Halbe;nK
852
+ 70;84;11.10.2021;2;19NE;Spreeau;K
853
+ 71;84;11.10.2021;2;19NW;Spreeau;nK
854
+ 72;85;26.10.2021;4;3NE;Glienig;K
855
+ 73;85;26.10.2021;6;3NW;Glienig;nK
856
+ 74;85;26.10.2021;5;4NW;Gro� Liebitz;nK
857
+ 75;85;26.10.2021;5;4SE;Gro� Liebitz;K
858
+ 76;85;27.10.2021;5;9NE;Krausnick;K
859
+ 77;85;27.10.2021;4;9NW;Krausnick;nK
860
+ 78;85;27.10.2021;5;10SE;Hangelsberg;K
861
+ 79;85;27.10.2021;7;10SW;Hangelsberg;nK
862
+ 80;85;27.10.2021;4;12NE;Halbe;K
863
+ 81;85;27.10.2021;5;12NW;Halbe;nK
864
+ 82;85;27.10.2021;8;19NE;Spreeau;K
865
+ 83;85;27.10.2021;7;19NW;Spreeau;nK
866
+ 84;86;09.11.2021;45;3NE;Glienig;K
867
+ 85;86;09.11.2021;43;3NW;Glienig;nK
868
+ 86;86;09.11.2021;42;4NW;Gro� Liebitz;nK
869
+ 87;86;09.11.2021;43;4SE;Gro� Liebitz;K
870
+ 88;86;11.11.2021;40;9NE;Krausnick;K
871
+ 89;86;11.11.2021;36;9NW;Krausnick;nK
872
+ 90;86;11.11.2021;45;10SE;Hangelsberg;K
873
+ 91;86;11.11.2021;37;10SW;Hangelsberg;nK
874
+ 92;86;11.11.2021;33;12NE;Halbe;K
875
+ 93;86;11.11.2021;36;12NW;Halbe;nK
876
+ 94;86;11.11.2021;43;19NE;Spreeau;K
877
+ 95;86;11.11.2021;35;19NW;Spreeau;nK
878
+ 96;87;24.11.2021;5;3NE;Glienig;K
879
+ 97;87;24.11.2021;5,5;3NW;Glienig;nK
880
+ 98;87;23.11.2021;3;4NW;Gro� Liebitz;nK
881
+ 99;87;23.11.2021;3;4SE;Gro� Liebitz;K
882
+ 100;87;23.11.2021;2;9NE;Krausnick;K
883
+ 101;87;23.11.2021;2;9NW;Krausnick;nK
884
+ 102;87;26.11.2021;4;10SE;Hangelsberg;K
885
+ 103;87;26.11.2021;4;10SW;Hangelsberg;nK
886
+ 104;87;26.11.2021;2;12NE;Halbe;K
887
+ 105;87;26.11.2021;3;12NW;Halbe;nK
888
+ 106;87;26.11.2021;5;19NE;Spreeau;K
889
+ 107;87;26.11.2021;2;19NW;Spreeau;nK
890
+ 108;88;08.12.2021;17;3NE;Glienig;K
891
+ 109;88;08.12.2021;14;3NW;Glienig;nK
892
+ 110;88;08.12.2021;14;4NW;Gro� Liebitz;nK
893
+ 111;88;08.12.2021;13;4SE;Gro� Liebitz;K
894
+ 112;88;17.12.2021;16;9NE;Krausnick;K
895
+ 113;88;17.12.2021;18,5;9NW;Krausnick;nK
896
+ 114;88;16.12.2021;25;10SE;Hangelsberg;K
897
+ 115;88;16.12.2021;21;10SW;Hangelsberg;nK
898
+ 116;88;17.12.2021;16,5;12NE;Halbe;K
899
+ 117;88;17.12.2021;13;12NW;Halbe;nK
900
+ 118;88;16.12.2021;26;19NE;Spreeau;K
901
+ 119;88;16.12.2021;24;19NW;Spreeau;nK
902
+ 120;89;13.01.2022;49;3NE;Glienig;K
903
+ 121;89;13.01.2022;55;3NW;Glienig;nK
904
+ 122;89;10.01.2022;40;4NW;Gro� Liebitz;nK
905
+ 123;89;10.01.2022;40;4SE;Gro� Liebitz;K
906
+ 124;89;10.01.2022;29;9NE;Krausnick;K
907
+ 125;89;10.01.2022;27;9NW;Krausnick;nK
908
+ 126;89;12.01.2022;25;10SE;Hangelsberg;K
909
+ 127;89;12.01.2022;27;10SW;Hangelsberg;nK
910
+ 128;89;12.01.2022;25;12NE;Halbe;K
911
+ 129;89;12.01.2022;28;12NW;Halbe;nK
912
+ 130;89;12.01.2022;27;19NE;Spreeau;K
913
+ 131;89;12.01.2022;25;19NW;Spreeau;nK
914
+ 132;90;26.01.2022;0;3NE;Glienig;K
915
+ 133;90;26.01.2022;0;3NW;Glienig;nK
916
+ 134;90;26.01.2022;0;4NW;Gro� Liebitz;nK
917
+ 135;90;26.01.2022;0;4SE;Gro� Liebitz;K
918
+ 136;90;25.01.2022;9;9NE;Krausnick;K
919
+ 137;90;25.01.2022;10;9NW;Krausnick;nK
920
+ 138;90;26.01.2022;0;10SE;Hangelsberg;K
921
+ 139;90;26.01.2022;0;10SW;Hangelsberg;nK
922
+ 140;90;25.01.2022;6;12NE;Halbe;K
923
+ 141;90;25.01.2022;6;12NW;Halbe;nK
924
+ 142;90;25.01.2022;10;19NE;Spreeau;K
925
+ 143;90;25.01.2022;8;19NW;Spreeau;nK
926
+ 144;91;15.02.2022;33;3NE;Glienig;K
927
+ 145;91;15.02.2022;36;3NW;Glienig;nK
928
+ 146;91;15.02.2022;24;4NW;Gro� Liebitz;nK
929
+ 147;91;15.02.2022;23;4SE;Gro� Liebitz;K
930
+ 148;91;16.02.2022;19;9NE;Krausnick;K
931
+ 149;91;16.02.2022;18;9NW;Krausnick;nK
932
+ 150;91;16.02.2022;25;10SE;Hangelsberg;K
933
+ 151;91;16.02.2022;27;10SW;Hangelsberg;nK
934
+ 152;91;16.02.2022;17;12NE;Halbe;K
935
+ 153;91;16.02.2022;18;12NW;Halbe;nK
936
+ 154;91;16.02.2022;27;19NE;Spreeau;K
937
+ 155;91;16.02.2022;25;19NW;Spreeau;nK
938
+ 156;92;17.03.2022;23;3NE;Glienig;K
939
+ 157;92;17.03.2022;22;3NW;Glienig;nK
940
+ 158;92;10.03.2022;18;4NW;Gro� Liebitz;nK
941
+ 159;92;10.03.2022;17;4SE;Gro� Liebitz;K
942
+ 160;92;10.03.2022;18;9NE;Krausnick;K
943
+ 161;92;10.03.2022;18;9NW;Krausnick;nK
944
+ 162;92;08.03.2022;18;10SE;Hangelsberg;K
945
+ 163;92;08.03.2022;19;10SW;Hangelsberg;nK
946
+ 164;92;08.03.2022;0;12NE;Halbe;K
947
+ 165;92;08.03.2022;0;12NW;Halbe;nK
948
+ 166;92;08.03.2022;18;19NE;Spreeau;K
949
+ 167;92;08.03.2022;15;19NW;Spreeau;nK
950
+ 168;93;01.04.2022;0;3NE;Glienig;K
951
+ 169;93;01.04.2022;0;3NW;Glienig;nK
952
+ 170;93;29.03.2022;0;4NW;Gro� Liebitz;nK
953
+ 171;93;29.03.2022;0;4SE;Gro� Liebitz;K
954
+ 172;93;29.03.2022;0;9NE;Krausnick;K
955
+ 173;93;29.03.2022;0;9NW;Krausnick;nK
956
+ 174;93;31.03.2022;0;10SE;Hangelsberg;K
957
+ 175;93;31.03.2022;0;10SW;Hangelsberg;nK
958
+ 176;93;31.03.2022;0;12NE;Halbe;K
959
+ 177;93;31.03.2022;0;12NW;Halbe;nK
960
+ 178;93;31.03.2022;0;19NE;Spreeau;K
961
+ 179;93;31.03.2022;0;19NW;Spreeau;nK
962
+ 180;94;20.04.2022;28;3NE;Glienig;K
963
+ 181;94;20.04.2022;31;3NW;Glienig;nK
964
+ 182;94;19.04.2022;20;4NW;Gro� Liebitz;nK
965
+ 183;94;19.04.2022;19;4SE;Gro� Liebitz;K
966
+ 184;94;19.04.2022;21;9NE;Krausnick;K
967
+ 185;94;19.04.2022;21;9NW;Krausnick;nK
968
+ 186;94;22.04.2022;19;10SE;Hangelsberg;K
969
+ 187;94;22.04.2022;21;10SW;Hangelsberg;nK
970
+ 188;94;22.04.2022;19;12NE;Halbe;K
971
+ 189;94;22.04.2022;20;12NW;Halbe;nK
972
+ 190;94;22.04.2022;20;19NE;Spreeau;K
973
+ 191;94;22.04.2022;15;19NW;Spreeau;nK
974
+ 192;95;18.05.2022;9;3NE;Glienig;K
975
+ 193;95;18.05.2022;5;3NW;Glienig;nK
976
+ 194;95;10.05.2022;5;4NW;Gro� Liebitz;nK
977
+ 195;95;10.05.2022;7;4SE;Gro� Liebitz;K
978
+ 196;95;10.05.2022;6;9NE;Krausnick;K
979
+ 197;95;10.05.2022;4;9NW;Krausnick;nK
980
+ 198;95;12.05.2022;7;10SE;Hangelsberg;K
981
+ 199;95;12.05.2022;6;10SW;Hangelsberg;nK
982
+ 200;95;12.05.2022;0;12NE;Halbe;K
983
+ 201;95;12.05.2022;0;12NW;Halbe;nK
984
+ 202;95;12.05.2022;4;19NE;Spreeau;K
985
+ 203;95;12.05.2022;3;19NW;Spreeau;nK
986
+ 204;96;01.06.2022;31;3NE;Glienig;K
987
+ 205;96;01.06.2022;31;3NW;Glienig;nK
988
+ 206;96;01.06.2022;28,5;4NW;Gro� Liebitz;nK
989
+ 207;96;01.06.2022;30,5;4SE;Gro� Liebitz;K
990
+ 208;96;02.06.2022;23;9NE;Krausnick;K
991
+ 209;96;02.06.2022;19,5;9NW;Krausnick;nK
992
+ 210;96;02.06.2022;10;10SE;Hangelsberg;K
993
+ 211;96;02.06.2022;12;10SW;Hangelsberg;nK
994
+ 212;96;02.06.2022;24;12NE;Halbe;K
995
+ 213;96;02.06.2022;32;12NW;Halbe;nK
996
+ 214;96;02.06.2022;15;19NE;Spreeau;K
997
+ 215;96;02.06.2022;14;19NW;Spreeau;nK
998
+ 216;97;22.06.2022;30;3NE;Glienig;K
999
+ 217;97;22.06.2022;25;3NW;Glienig;nK
1000
+ 218;97;22.06.2022;53;4NW;Gro� Liebitz;nK
1001
+ 219;97;22.06.2022;54;4SE;Gro� Liebitz;K
1002
+ 220;97;20.06.2022;25;9NE;Krausnick;K
1003
+ 221;97;20.06.2022;20;9NW;Krausnick;nK
1004
+ 222;97;20.06.2022;24;10SE;Hangelsberg;K
1005
+ 223;97;20.06.2022;22;10SW;Hangelsberg;nK
1006
+ 224;97;20.06.2022;16;12NE;Halbe;K
1007
+ 225;97;20.06.2022;17;12NW;Halbe;nK
1008
+ 226;97;22.06.2022;17;19NE;Spreeau;K
1009
+ 227;97;22.06.2022;15;19NW;Spreeau;nK
1010
+ 228;98;12.07.2022;11;3NE;Glienig;K
1011
+ 229;98;12.07.2022;11;3NW;Glienig;nK
1012
+ 230;98;12.07.2022;19;4NW;Gro� Liebitz;nK
1013
+ 231;98;12.07.2022;21;4SE;Gro� Liebitz;K
1014
+ 232;98;14.07.2022;18;9NE;Krausnick;K
1015
+ 233;98;14.07.2022;15;9NW;Krausnick;nK
1016
+ 234;98;14.07.2022;12;10SE;Hangelsberg;K
1017
+ 235;98;14.07.2022;16;10SW;Hangelsberg;nK
1018
+ 236;98;14.07.2022;10;12NE;Halbe;K
1019
+ 237;98;14.07.2022;16,5;12NW;Halbe;nK
1020
+ 238;98;14.07.2022;9;19NE;Spreeau;K
1021
+ 239;98;14.07.2022;8,5;19NW;Spreeau;nK
1022
+ 240;99;09.08.2022;12;3NE;Glienig;K
1023
+ 241;99;09.08.2022;11;3NW;Glienig;nK
1024
+ 242;99;09.08.2022;4;4NW;Gro� Liebitz;nK
1025
+ 243;99;09.08.2022;3,5;4SE;Gro� Liebitz;K
1026
+ 244;99;09.08.2022;14;9NE;Krausnick;K
1027
+ 245;99;09.08.2022;11;9NW;Krausnick;nK
1028
+ 246;99;11.08.2022;12;10SE;Hangelsberg;K
1029
+ 247;99;11.08.2022;14;10SW;Hangelsberg;nK
1030
+ 248;99;10.08.2022;10;12NE;Halbe;K
1031
+ 249;99;10.08.2022;13;12NW;Halbe;nK
1032
+ 250;99;11.08.2022;6;19NE;Spreeau;K
1033
+ 251;99;11.08.2022;4;19NW;Spreeau;nK
1034
+ 252;100;02.09.2022;12;3NE;Glienig;K
1035
+ 253;100;02.09.2022;12;3NW;Glienig;nK
1036
+ 254;100;02.09.2022;83;4NW;Gro� Liebitz;nK
1037
+ 255;100;02.09.2022;91;4SE;Gro� Liebitz;K
1038
+ 256;100;02.09.2022;20,5;9NE;Krausnick;K
1039
+ 257;100;02.09.2022;;9NW;Krausnick;nK
1040
+ 258;100;30.08.2022;42;10SE;Hangelsberg;K
1041
+ 259;100;30.08.2022;39;10SW;Hangelsberg;nK
1042
+ 260;100;30.08.2022;36;12NE;Halbe;K
1043
+ 261;100;30.08.2022;49;12NW;Halbe;nK
1044
+ 262;100;30.08.2022;30;19NE;Spreeau;K
1045
+ 263;100;30.08.2022;29;19NW;Spreeau;nK
1046
+ 264;101;28.09.2022;40;3NE;Glienig;K
1047
+ 265;101;28.09.2022;40;3NW;Glienig;nK
1048
+ 266;101;29.09.2022;40;4NW;Gro� Liebitz;nK
1049
+ 267;101;29.09.2022;42;4SE;Gro� Liebitz;K
1050
+ 268;101;30.09.2022;37;9NE;Krausnick;K
1051
+ 269;101;30.09.2022;50;9NW;Krausnick;nK
1052
+ 270;101;05.10.2022;57,5;10SE;Hangelsberg;K
1053
+ 271;101;05.10.2022;61;10SW;Hangelsberg;nK
1054
+ 272;101;06.10.2022;44;12NE;Halbe;K
1055
+ 273;101;06.10.2022;51;12NW;Halbe;nK
1056
+ 274;101;04.10.2022;45;19NE;Spreeau;K
1057
+ 275;101;04.10.2022;41;19NW;Spreeau;nK
1058
+ 276;102;20.10.2022;18;3NE;Glienig;K
1059
+ 277;102;20.10.2022;16,5;3NW;Glienig;nK
1060
+ 278;102;21.10.2022;19,5;4NW;Gro� Liebitz;nK
1061
+ 279;102;21.10.2022;22;4SE;Gro� Liebitz;K
1062
+ 280;102;21.10.2022;18;9NE;Krausnick;K
1063
+ 281;102;21.10.2022;13;9NW;Krausnick;nK
1064
+ 282;102;21.10.2022;11;10SE;Hangelsberg;K
1065
+ 283;102;21.10.2022;14;10SW;Hangelsberg;nK
1066
+ 284;102;21.10.2022;10;12NE;Halbe;K
1067
+ 285;102;21.10.2022;11,5;12NW;Halbe;nK
1068
+ 286;102;21.10.2022;12;19NE;Spreeau;K
1069
+ 287;102;21.10.2022;13;19NW;Spreeau;nK
1070
+ 288;103;09.11.2022;14;3NE;Glienig;K
1071
+ 289;103;09.11.2022;13;3NW;Glienig;nK
1072
+ 290;103;10.11.2022;21;4NW;Gro� Liebitz;nK
1073
+ 291;103;10.11.2022;25;4SE;Gro� Liebitz;K
1074
+ 292;103;10.11.2022;14,5;9NE;Krausnick;K
1075
+ 293;103;10.11.2022;12;9NW;Krausnick;nK
1076
+ 294;103;08.11.2022;12;10SE;Hangelsberg;K
1077
+ 295;103;08.11.2022;14;10SW;Hangelsberg;nK
1078
+ 296;103;08.11.2022;13;12NE;Halbe;K
1079
+ 297;103;08.11.2022;16;12NW;Halbe;nK
1080
+ 298;103;08.11.2022;8;19NE;Spreeau;K
1081
+ 299;103;08.11.2022;9;19NW;Spreeau;nK
Niederschlag.py ADDED
@@ -0,0 +1,151 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Created on Fri Mar 3 12:57:17 2023
4
+
5
+ @author: BorowyP
6
+ """
7
+
8
+ import pandas as pd
9
+ import numpy as np
10
+ import hvplot.pandas # Adds .hvplot and .interactive methods to Pandas dataframes
11
+ import panel as pn # Panel is a simple, flexible and enterprise-ready data app framework
12
+ import holoviews as hv
13
+ from holoviews.operation.timeseries import rolling, rolling_outlier_std
14
+
15
+ PALETTE = ["#ff6f69", "#ffcc5c", "#88d8b0", ]
16
+
17
+
18
+
19
+ df_nied = pd.read_csv('Nied_holzdeko_csv.csv' ,
20
+ encoding_errors='ignore',
21
+ sep=';',
22
+ usecols=[1,2, 3, 4,5,6],
23
+ decimal=',')
24
+
25
+ def createStndrt(stnd_kennz, Stndrt,K_nK):
26
+ df = df_nied.loc[df_nied['FNR + NWP'] == stnd_kennz].copy()
27
+ df['Standort'] = Stndrt
28
+ df['K_nK'] = K_nK
29
+
30
+ df.index = pd.to_datetime(df_nied.loc[df_nied['FNR + NWP'] == '3NE']['MessDat'], dayfirst=True)
31
+
32
+ if K_nK == 'K':
33
+ df['K'] = df['Menge']
34
+ else:
35
+ df['nK'] = df['Menge']
36
+
37
+ return df
38
+
39
+ glienig_nied_K = createStndrt('3NE', 'Glienig','K')
40
+ glienig_nied_nK = createStndrt('3NW', 'Glienig','nK')
41
+
42
+ grlieb_nied_K = createStndrt('4SE', 'Groß Liebitz','K')
43
+ grlieb_nied_nK= createStndrt('4NW', 'Groß Liebitz','nK')
44
+
45
+ krausnick_nied_K = createStndrt('9NE', 'Krausnick','K')
46
+ krausnick_nied_nK = createStndrt('9NW', 'Krausnick','nK')
47
+
48
+ hberg_nied_K = createStndrt('10SE', 'Hangelsberg','K')
49
+ hberg_nied_nK = createStndrt('10SW', 'Hangelsberg','nK')
50
+
51
+ halbe_nied_K = createStndrt('12NE', 'Halbe','K')
52
+ halbe_nied_nK = createStndrt('12NW', 'Halbe','nK')
53
+
54
+ spreeau_nied_K = createStndrt('19NE', 'Spreeau','K')
55
+ spreeau_nied_nK = createStndrt('19NW', 'Spreeau','nK')
56
+
57
+ nied = pd.concat([glienig_nied_K,glienig_nied_nK,
58
+ grlieb_nied_K, grlieb_nied_nK,
59
+ krausnick_nied_K, krausnick_nied_nK,
60
+ hberg_nied_K, hberg_nied_nK,
61
+ halbe_nied_K, halbe_nied_nK,
62
+ spreeau_nied_K, spreeau_nied_nK])
63
+
64
+ nied = nied.drop(nied.columns[[1]], axis=1)
65
+
66
+ nied_inter = nied.interactive()
67
+
68
+
69
+ yaxis = pn.widgets.ToggleGroup(
70
+ name='Kalkung',
71
+ options=['K','nK'],
72
+ value=['K'],
73
+ button_type='success')
74
+
75
+
76
+ nied_date_slider = pn.widgets.DateRangeSlider(name='Date', start=nied.index.min(), end=nied.index.max())
77
+
78
+ Stndrt = pn.widgets.RadioButtonGroup(name='Standort', options=['Glienig', 'Groß Liebitz', 'Krausnick', 'Halbe', 'Spreeau', 'Hangelsberg'],button_type='success')
79
+
80
+ nied_pipe = (
81
+ nied_inter[
82
+ (nied_inter.Standort == Stndrt ) &
83
+ (nied_inter.K_nK.isin(yaxis)) &
84
+ (nied_inter.index >= nied_date_slider.param.value_start) &
85
+ (nied_inter.index <= nied_date_slider.param.value_end)
86
+ ]
87
+ .groupby(['MessDat'])[yaxis].mean()
88
+ )
89
+
90
+ nied_lin_plot = nied_pipe.hvplot(x='MessDat',
91
+ xlabel='Datum',
92
+ y=yaxis,
93
+ #y='Menge',
94
+ ylabel= 'Niederschlag [mm]',
95
+ title=Stndrt,
96
+ #by='origin',
97
+ color=PALETTE,
98
+ line_width=2)
99
+
100
+
101
+
102
+
103
+
104
+ nied_lin_plot
105
+
106
+ summe = (
107
+ nied_inter[
108
+ (nied_inter.index >= nied_date_slider.param.value_start) &
109
+ (nied_inter.index <= nied_date_slider.param.value_end)]
110
+ .groupby(['Standort', 'K_nK']).sum()
111
+ )
112
+ summe_plot = summe.hvplot(x='Standort', y=('Menge'), by='K_nK', kind='bar',
113
+ title='Summe Niederschlag', xlabel='Standort', ylabel='Menge [mm]')
114
+
115
+
116
+
117
+ hd_logo = pn.pane.PNG('HD_Logo.png', width=100)
118
+ hd_logo
119
+
120
+ lfe_logo = pn.pane.PNG('LFE_Logo.png', width=100)
121
+
122
+ fnr_logo = pn.pane.PNG('fnr_logo.png', width=100)
123
+
124
+ template = pn.template.FastListTemplate(
125
+ title='Holzdeko Dashboard',
126
+ sidebar=[hd_logo,
127
+ pn.pane.Markdown("## Einstellungen"),
128
+ 'Standort',Stndrt,
129
+ 'gekalkt/ungekalkt', yaxis,
130
+ lfe_logo,
131
+ fnr_logo
132
+ #'Boden',
133
+ #'Gekalkt/ungekalkt', yaxis,
134
+ ],
135
+ main=[pn.pane.Markdown("## Niederschlag"),
136
+ nied_date_slider,
137
+ nied_lin_plot.panel(),
138
+ summe_plot,#.panel() #NIEDERSCHLAG
139
+ #accent_base_color="#88d8b0",
140
+ #header_background="#88d8b0",
141
+ ])
142
+
143
+
144
+
145
+
146
+ template.servable();
147
+
148
+ #print('fertig!')
149
+ # To launch this dashboard as a web server, we can simply run
150
+ # cd C:\Users\BorowyP\Desktop\Dashboard-Preasi\soil_air\
151
+ # panel serve 20230303_niederschlag_docker.ipynb --autoreload
Stahlrahmen-Fotos/Glienig/K/mA/resized20210901_GLI_3NE_K_mA.jpg ADDED
Stahlrahmen-Fotos/Glienig/K/mA/resized20210914_GLI_3NE_K_mA.jpg ADDED
Stahlrahmen-Fotos/Glienig/K/mA/resized20210929_GLI_3NE_K_mA.jpg ADDED
Stahlrahmen-Fotos/Glienig/K/mA/resized20211014_GLI_3NE_K_mA.JPG ADDED
Stahlrahmen-Fotos/Glienig/K/mA/resized20211026_GLI_3NE_K_mA.jpg ADDED
Stahlrahmen-Fotos/Glienig/K/mA/resized20211109_GLI_3NE_K_mA.jpg ADDED
Stahlrahmen-Fotos/Glienig/K/mA/resized20211124_GLI_3NE_K_mA.JPG ADDED
Stahlrahmen-Fotos/Glienig/K/mA/resized20211208_GLI_3NE_K_mA.JPG ADDED
Stahlrahmen-Fotos/Glienig/K/mA/resized20220215_GLI_3NE_K_mA.JPG ADDED
Stahlrahmen-Fotos/Glienig/K/mA/resized20220317_GLI_3NE_K_mA.jpg ADDED
Stahlrahmen-Fotos/Glienig/K/mA/resized20220401_GLI_3NE_K_mA.JPG ADDED
Stahlrahmen-Fotos/Glienig/K/mA/resized20220420_GLI_3NE_K_mA.jpg ADDED
Stahlrahmen-Fotos/Glienig/K/mA/resized20220518_GLI_3NE_K_mA.jpg ADDED
Stahlrahmen-Fotos/Glienig/K/mA/resized20220601_GLI_3NE_K_mA.jpg ADDED
Stahlrahmen-Fotos/Glienig/K/mA/resized20220712_GLI_3NE_K_mA.JPG ADDED
Stahlrahmen-Fotos/Glienig/K/mA/resized20220809_GLI_3NE_K_mA.jpg ADDED
Stahlrahmen-Fotos/Glienig/K/mA/resized20221020_GLI_3NE_K_mA.jpg ADDED
Stahlrahmen-Fotos/Glienig/K/mA/resized20221129_GLI_3NE_K_mA.jpg ADDED
Stahlrahmen-Fotos/Glienig/K/oA/resized20210929_GLI_3NE_K_oA.jpg ADDED
Stahlrahmen-Fotos/Glienig/K/oA/resized20211014_GLI_3NE_K_oA.JPG ADDED
Stahlrahmen-Fotos/Glienig/K/oA/resized20211026_GLI_3NE_K_oA.jpg ADDED
Stahlrahmen-Fotos/Glienig/K/oA/resized20211109_GLI_3NE_K_oA.jpg ADDED
Stahlrahmen-Fotos/Glienig/K/oA/resized20211124_GLI_3NE_K_oA.JPG ADDED
Stahlrahmen-Fotos/Glienig/K/oA/resized20211208_GLI_3NE_K_oA.JPG ADDED
Stahlrahmen-Fotos/Glienig/K/oA/resized20220215_GLI_3NE_K_oA.JPG ADDED
Stahlrahmen-Fotos/Glienig/K/oA/resized20220317_GLI_3NE_K_oA.jpg ADDED
Stahlrahmen-Fotos/Glienig/K/oA/resized20220401_GLI_3NE_K_oA.JPG ADDED
Stahlrahmen-Fotos/Glienig/K/oA/resized20220420_GLI_3NE_K_oA.jpg ADDED
Stahlrahmen-Fotos/Glienig/K/oA/resized20220518_GLI_3NE_K_oA.jpg ADDED
Stahlrahmen-Fotos/Glienig/K/oA/resized20220601_GLI_3NE_K_oA.jpg ADDED
Stahlrahmen-Fotos/Glienig/K/oA/resized20220712_GLI_3NE_K_oA.JPG ADDED
Stahlrahmen-Fotos/Glienig/K/oA/resized20220809_GLI_3NE_K_oA.jpg ADDED
Stahlrahmen-Fotos/Glienig/K/oA/resized20221020_GLI_3NE_K_oA.jpg ADDED
Stahlrahmen-Fotos/Glienig/K/oA/resized20221129_GLI_3NE_K_oA.jpg ADDED
Stahlrahmen-Fotos/Glienig/nK/mA/resized20210914_GLI_3NW_nK_mA.jpg ADDED
Stahlrahmen-Fotos/Glienig/nK/mA/resized20211014_GLI_3NW_nK_mA.JPG ADDED