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" @st.cache 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.")