-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathVisualisierung_map.py
86 lines (66 loc) · 5.19 KB
/
Visualisierung_map.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import pandas as pd
import folium
from folium.plugins import HeatMap
import ipywidgets as widgets
from IPython.display import display
# Koordinaten von Münster (Beispielwerte)
muenster_lat = 51.9607
muenster_lon = 7.6261
zoom_level = 12
# CSV-Datei einlesen
df = pd.read_csv('Unfallorte_Muenster_comb.csv')
# Koordinatenwerte im deutschen Zahlenformat in das amerikanische Zahlenformat konvertieren
df['ygcswgs84'] = df['ygcswgs84'].str.replace(',', '.').astype(float)
df['xgcswgs84'] = df['xgcswgs84'].str.replace(',', '.').astype(float)
# Funktion zum Aktualisieren der Karte basierend auf der ausgewählten Zeitspanne, dem Wochentag, dem Fahrzeugtyp und dem Straßenzustand
def update_map(weekday_range, hour_range, vehicle, roadcondition):
start_weekday = weekday_range[0]
end_weekday = weekday_range[1]
start_hour = hour_range[0]
end_hour = hour_range[1]
if vehicle == 'alle':
filtered_df = df[(df['uwochentag'].between(start_weekday, end_weekday)) & (df['ustunde'].between(start_hour, end_hour)) & ((df['ustrzustand'] == 0) | (df['ustrzustand'] == 1) | (df['ustrzustand'] == 2))]
elif vehicle == 'Fußgänger':
filtered_df = df[(df['uwochentag'].between(start_weekday, end_weekday)) & (df['ustunde'].between(start_hour, end_hour)) & ((df['ustrzustand'] == 0) | (df['ustrzustand'] == 1) | (df['ustrzustand'] == 2)) & (df['istfuss'] == 1)]
elif vehicle == 'PKW':
filtered_df = df[(df['uwochentag'].between(start_weekday, end_weekday)) & (df['ustunde'].between(start_hour, end_hour)) & ((df['ustrzustand'] == 0) | (df['ustrzustand'] == 1) | (df['ustrzustand'] == 2)) & (df['istpkw'] == 1)]
elif vehicle == 'Fahrrad':
filtered_df = df[(df['uwochentag'].between(start_weekday, end_weekday)) & (df['ustunde'].between(start_hour, end_hour)) & ((df['ustrzustand'] == 0) | (df['ustrzustand'] == 1) | (df['ustrzustand'] == 2)) & (df['istrad'] == 1)]
else:
filtered_df = pd.DataFrame(columns=df.columns) # Leerer DataFrame, wenn kein Fahrzeugtyp ausgewählt ist
if roadcondition == 'alle':
filtered_df = df[(df['uwochentag'].between(start_weekday, end_weekday)) & (df['ustunde'].between(start_hour, end_hour)) & ((df['istfuss'] == 1) | (df['istpkw'] == 1) | (df['istrad'] == 1))]
elif roadcondition == 'trocken':
filtered_df = df[(df['uwochentag'].between(start_weekday, end_weekday)) & (df['ustunde'].between(start_hour, end_hour)) & ((df['istfuss'] == 1) | (df['istpkw'] == 1) | (df['istrad'] == 1)) & (df['ustrzustand'] == 0)]
elif roadcondition == 'nass/ feucht':
filtered_df = df[(df['uwochentag'].between(start_weekday, end_weekday)) & (df['ustunde'].between(start_hour, end_hour)) & ((df['istfuss'] == 1) | (df['istpkw'] == 1) | (df['istrad'] == 1)) & (df['ustrzustand'] == 1)]
elif roadcondition == 'winterglatt':
filtered_df = df[(df['uwochentag'].between(start_weekday, end_weekday)) & (df['ustunde'].between(start_hour, end_hour)) & ((df['istfuss'] == 1) | (df['istpkw'] == 1) | (df['istrad'] == 1)) & (df['ustrzustand'] == 2)]
locations = filtered_df[['ygcswgs84', 'xgcswgs84']].dropna() # Standorte für Heatmap vorbereiten
# Karte erstellen und auf Münster zoomen
map = folium.Map(location=[muenster_lat, muenster_lon], zoom_start=zoom_level)
# Heatmap erstellen
heatmap = HeatMap(data=locations, radius=15)
heatmap.add_to(map)
# Karte anzeigen
display(map)
# Wochentagsbezeichnungen
weekday_labels = ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag']
# Schieberegler für Wochentagsbereich und Stundenbereich sowie Dropdown-Liste für Fahrzeugtyp erstellen
weekday_range_slider = widgets.IntRangeSlider(value=[1, 7], min=1, max=7, description='Wochentagsbereich:', continuous_update=False, step=1, layout={'width': '400px'}, readout_format='02d')
weekday_range_slider.style.handle_color = '#4287f5'
weekday_range_slider.style.slider_color = '#4287f5'
weekday_range_slider_labels = widgets.Label(value='Wochentage: ' + weekday_labels[weekday_range_slider.value[0]-1] + ' - ' + weekday_labels[weekday_range_slider.value[1]-1])
hour_range_slider = widgets.IntRangeSlider(value=[0, 23], min=0, max=23, description='Stundenbereich:', continuous_update=False, step=1, layout={'width': '400px'})
hour_range_slider.style.handle_color = '#4287f5'
hour_range_slider.style.slider_color = '#4287f5'
vehicle_dropdown = widgets.Dropdown(options=['alle', 'Fußgänger', 'PKW', 'Fahrrad'], description='Am Fahrradunfall beteiligter Fahrzeugtyp:')
roadcondition_dropdown = widgets.Dropdown(options=['alle', 'trocken', 'nass/ feucht', 'winterglatt'], description='Straßenzustand:')
def update_weekday_labels(change):
start_label = weekday_labels[change['new'][0]-1]
end_label = weekday_labels[change['new'][1]-1]
weekday_range_slider_labels.value = 'Wochentage: ' + start_label + ' - ' + end_label
weekday_range_slider.observe(update_weekday_labels, 'value')
# Interaktive Anzeige der Karte mit den Widgets
display(widgets.VBox([weekday_range_slider_labels]))
widgets.interactive(update_map, weekday_range=weekday_range_slider, weekday_range_slider_labels = widgets.Label, hour_range=hour_range_slider, vehicle=vehicle_dropdown, roadcondition=roadcondition_dropdown)