bsenst commited on
Commit
46d36c6
·
1 Parent(s): 15237a0

add basic pegel visualization map

Browse files
Files changed (2) hide show
  1. app.py +70 -0
  2. requirements.txt +5 -0
app.py ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import requests
3
+ import pandas as pd
4
+ import pydeck as pdk
5
+
6
+ # Streamlit App Titel
7
+ st.title("PegelOnline - Wasserstandskarten")
8
+
9
+ # API URL
10
+ API_URL = "https://pegelonline.wsv.de/webservices/rest-api/v2/stations.json"
11
+
12
+ @st.cache
13
+ def fetch_data():
14
+ """Ruft die Pegel-Daten von der API ab und gibt sie als DataFrame zurück."""
15
+ response = requests.get(API_URL)
16
+ if response.status_code == 200:
17
+ data = response.json()
18
+ # Nur relevante Informationen extrahieren
19
+ stations = []
20
+ for station in data:
21
+ stations.append({
22
+ "uuid": station.get("uuid"),
23
+ "shortname": station.get("shortname"),
24
+ "longname": station.get("longname"),
25
+ "km": station.get("km"),
26
+ "agency": station.get("agency"),
27
+ "longitude": station.get("longitude"),
28
+ "latitude": station.get("latitude"),
29
+ "water_shortname": station.get("water", {}).get("shortname"),
30
+ "water_longname": station.get("water", {}).get("longname"),
31
+ })
32
+ return pd.DataFrame(stations)
33
+ else:
34
+ st.error("Fehler beim Abrufen der Daten.")
35
+ return pd.DataFrame()
36
+
37
+ # Daten abrufen
38
+ st.write("Rufe Pegel-Daten ab...")
39
+ data = fetch_data()
40
+
41
+ if not data.empty:
42
+ st.success("Daten erfolgreich geladen!")
43
+
44
+ # Kartenanzeige
45
+ st.write("### Pegelstationen auf der Karte")
46
+ # PyDeck Layer für Kartenanzeige
47
+ layer = pdk.Layer(
48
+ "ScatterplotLayer",
49
+ data=data,
50
+ get_position=["longitude", "latitude"],
51
+ get_radius=2000,
52
+ get_color=[255, 0, 0, 140],
53
+ pickable=True,
54
+ )
55
+
56
+ # Deck.gl Map
57
+ view_state = pdk.ViewState(
58
+ latitude=data["latitude"].mean(),
59
+ longitude=data["longitude"].mean(),
60
+ zoom=6,
61
+ pitch=0,
62
+ )
63
+ r = pdk.Deck(layers=[layer], initial_view_state=view_state, tooltip={"text": "{shortname}"})
64
+ st.pydeck_chart(r)
65
+
66
+ # Rohdaten anzeigen
67
+ st.write("### Rohdaten der Pegelstationen")
68
+ st.dataframe(data)
69
+ else:
70
+ st.warning("Keine Daten verfügbar.")
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ streamlit
2
+ requests
3
+ pandas
4
+ geopandas
5
+ pydeck