Spaces:
Sleeping
Sleeping
add basic pegel visualization map
Browse files- app.py +70 -0
- 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
|