Spaces:
Sleeping
Sleeping
import streamlit as st | |
import requests | |
import pandas as pd | |
import pydeck as pdk | |
# Streamlit App Titel | |
st.title("PegelOnline - Wasserstandskarten") | |
# API URL | |
API_URL = "https://pegelonline.wsv.de/webservices/rest-api/v2/stations.json" | |
def fetch_data(): | |
"""Ruft die Pegel-Daten von der API ab und gibt sie als DataFrame zurück.""" | |
response = requests.get(API_URL) | |
if response.status_code == 200: | |
data = response.json() | |
# Nur relevante Informationen extrahieren | |
stations = [] | |
for station in data: | |
stations.append({ | |
"uuid": station.get("uuid"), | |
"shortname": station.get("shortname"), | |
"longname": station.get("longname"), | |
"km": station.get("km"), | |
"agency": station.get("agency"), | |
"longitude": station.get("longitude"), | |
"latitude": station.get("latitude"), | |
"water_shortname": station.get("water", {}).get("shortname"), | |
"water_longname": station.get("water", {}).get("longname"), | |
}) | |
return pd.DataFrame(stations) | |
else: | |
st.error("Fehler beim Abrufen der Daten.") | |
return pd.DataFrame() | |
# Daten abrufen | |
st.write("Rufe Pegel-Daten ab...") | |
data = fetch_data() | |
if not data.empty: | |
st.success("Daten erfolgreich geladen!") | |
# Kartenanzeige | |
st.write("### Pegelstationen auf der Karte") | |
# PyDeck Layer für Kartenanzeige | |
layer = pdk.Layer( | |
"ScatterplotLayer", | |
data=data, | |
get_position=["longitude", "latitude"], | |
get_radius=2000, | |
get_color=[255, 0, 0, 140], | |
pickable=True, | |
) | |
# Deck.gl Map | |
view_state = pdk.ViewState( | |
latitude=data["latitude"].mean(), | |
longitude=data["longitude"].mean(), | |
zoom=6, | |
pitch=0, | |
) | |
r = pdk.Deck(layers=[layer], initial_view_state=view_state, tooltip={"text": "{shortname}"}) | |
st.pydeck_chart(r) | |
# Rohdaten anzeigen | |
st.write("### Rohdaten der Pegelstationen") | |
st.dataframe(data) | |
else: | |
st.warning("Keine Daten verfügbar.") | |