File size: 2,124 Bytes
46d36c6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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.")