Python/PyQt6-GUI für eine modulare Europa-/Regionalkarte mit Wetter-, Strömungs-, seismischen und Risiko-Layern.
- ZIP entpacken.
install_windows.batstarten.- Danach reicht
run_windows.bat.
Die App nutzt eine lokale .venv. Für Live-Wetterdaten und Live-Erdbebendaten wird Internet benötigt. Die Karte selbst wird offline als SVG gerendert. Wiederholte Open-Meteo-Abfragen werden kurzzeitig lokal in app_data/cache/ gecacht.
Alle Kategorien liegen als einzelne Module in plugins/:
temperature_development.py– Temperatur-/Wetterentwicklung, Druck, Regenwahrscheinlichkeit, Windströmungspfeile und 72h-Chartwind_field.py– Windrichtung/Windstärke als Pfeile; Pfeile zeigen Fließrichtung, Popup nennt Windherkunftprecipitation_risk.py– Regen/Niederschlagswahrscheinlichkeitthunderstorm_risk.py– Gewitterindikatorhazard_situation.py– kombinierter Wetter-Gefahrenindikatorearthquake_activity.py– Erdbebenaktivität aus USGS-Katalogdatenseismic_changes.py– 7/30-Tage-Vergleich seismischer Aktivitätvolcano_activity.py– lokale Vulkanliste als erweiterbarer Platzhalterice_melt_proxy.py– Tauwetter-/Eisschmelze-Proxycrime_trends.py– lokale CSV-Kriminalitätsdaten, keine personenbezogene Prognose
Nach einem Abruf erzeugt der Button LLM-Prompt kopieren einen strukturierten Prompt mit Region, Kennzahlen, Bericht, Caveats und verdichteten Rohdaten. Der Text landet direkt in der Zwischenablage. Diesen kann man dann einfach einfügen per STRG + V in einen ChatGPT, Gemini oder Ollama Dialog zb. für weitere Analysen.
- Wetter/Geocoding: Open-Meteo API
- Erdbeben: USGS Earthquake Catalog API
- Karte: lokales SVG-Rendering mit vereinfachten Europa-Küsten-/Grenzlinien aus
data/basemap_segments.json - Vulkan/Kriminalität: lokale Beispieldaten im Ordner
data/
Ein neues Plugin ist einfach eine neue Datei in plugins/, z. B. my_layer.py:
from datetime import datetime, timezone
from app.core import ForecastPlugin, ForecastContext, PluginResult
class MyLayerPlugin(ForecastPlugin):
id = "my_layer"
name = "Mein Layer"
description = "Beschreibung"
category = "custom"
def fetch(self, context: ForecastContext) -> PluginResult:
region = context.region
return PluginResult(
plugin_id=self.id,
plugin_name=self.name,
region=region,
generated_at=datetime.now(timezone.utc),
summary="Kurzzusammenfassung",
report="Langer Bericht",
metrics={"example": 123},
features=[
{"kind": "circle", "lat": region.latitude, "lon": region.longitude, "radius": 9, "color": "#88c0d0", "popup": "Beispielpunkt"}
],
)Für Raster-/Flächen-Layer kann ein Plugin features mit kind="rect" erzeugen:
{"kind": "rect", "bounds": [south, west, north, east], "fillColor": "#fed330", "fillOpacity": 0.45, "popup": "23 °C"}Für Strömungs-/Vektor-Layer kann ein Plugin kind="arrow" verwenden:
{"kind": "arrow", "lat": 53.55, "lon": 9.99, "direction_deg": 90, "length_km": 40, "color": "#ffffff", "popup": "Strömung nach Osten"}Beim nächsten Start wird das Plugin automatisch geladen. Die sichtbare Reihenfolge kann in app/plugin_loader.py über PREFERRED_PLUGIN_ORDER festgelegt werden.
- Erdbeben und Vulkanereignisse werden nicht seriös exakt vorhergesagt; die App zeigt Aktivität, Indikatoren und Datenlagen.
- Kriminalitätsentwicklung braucht offizielle, normalisierte Daten. Das Plugin verwendet absichtlich nur lokale CSV-Daten und erstellt keine personenbezogenen Bewertungen.
- Die Wetterkarten sind Stichproben aus Modellpunkten, keine hochauflösenden amtlichen Radarkarten.
- Crashfix bei wiederholter Ortssuche/Stadtauswahl: Separator-Zeilen im Region-Dropdown werden jetzt korrekt ignoriert.
- Doppelklick-/Mehrfachklickschutz beim Aktualisieren: ein laufender Abruf wird nicht parallel erneut gestartet.
- Robustere Fallback-Auswahl, falls im Dropdown versehentlich eine Separator-Zeile aktiv wird.