.\backend\setup.ps1
.\frontend\setup.ps1chmod +x backend/setup.sh frontend/setup.sh startScript.sh
./backend/setup.sh
./frontend/setup.shDies führt folgende Schritte aus:
- Erstellt die Python virtuelle Umgebung und installiert Backend-Abhängigkeiten
- Installiert Node.js-Pakete für das Frontend
- Dauert ca. 2-3 Minuten
Nach der Einrichtung verwenden Sie das Start-Skript, um Backend und Frontend zu starten:
Doppelklick auf start.ps1 oder in PowerShell ausführen:
.\start.ps1./startScript.shDie Anwendung startet und zeigt folgende URLs an:
- Frontend: http://localhost:5173 (Hauptanwendung)
- Backend API: http://localhost:8000
- API Dokumentation: http://localhost:8000/docs (interaktive Swagger UI)
Echtzeit-Überwachung von Fischereifahrzeugen in Fisch-Migrationszonen.
OceanGuard kombiniert drei isolierte Datenquellen zu einem einzigen Overlap-Score, der eine Frage beantwortet:
„Fahren gerade Fischereifahrzeuge genau dort, wo Fische saisonal wandern – und wie kritisch ist die Situation?"
Jedes Jahr werden Millionen Tonnen Fisch während ihrer saisonalen Wanderungen gefangen – genau dann, wenn Fischpopulationen am verwundbarsten sind. Die Daten, um das zu erkennen, existieren (Schiffspositionen, Fischsichtungen, Meerestemperaturen) – aber sie liegen in drei getrennten Systemen, die niemand verbindet.
OceanGuard verknüpft diese Datenquellen und berechnet in Echtzeit einen Bedrohungs-Score für jedes Fischereifahrzeug.
| Datenquelle | Liefert | Rolle |
|---|---|---|
| OBIS API | Historische Artensichtungen | → Saisonale Verbreitungszonen |
| AISstream | Live-Schiffspositionen (WebSocket) | → Fischereifahrzeug-Tracking |
| Open-Meteo Marine API | Aktuelle Meeresbedingungen | → Temperatur-Plausibilitätsprüfung |
D (Distanz) fungiert als Gatekeeper – wenn das Schiff weit entfernt ist, ist der gesamte Score 0. A (Aktivität) und T (Temperatur) verfeinern den Score, wenn das Schiff in der Nähe ist.
Alle drei Faktoren nutzen dasselbe Muster:
Der Schwellenwert (
- Roter Thun: 200 km
- Atlantischer Kabeljau: 100 km
- Sardine: 50 km
- Schwertfisch: 150 km
| Entfernung (z. B. Kabeljau mit |
D | Bedeutung |
|---|---|---|
| 0 km (im Zentrum) | 1.0 | Maximale Bedrohung |
|
|
0.5 | Mittel |
|
|
0.0 | Keine Bedrohung → gesamter Score = 0 |
Distanz berechnet via Haversine-Formel.
| Geschwindigkeit | A | Bedeutung |
|---|---|---|
| 0 kn | 1.0 | Steht still, fischt wahrscheinlich |
| 2–3 kn | 0.7–0.8 | Schleppgeschwindigkeit |
| 5 kn | 0.5 | Grenzbereich |
| 10+ kn | 0.0 | Transit, fischt nicht |
Basiert auf der Methodik von Global Fishing Watch (Kroodsma et al., Science, 2018).
Prüft, ob Fische wahrscheinlich anwesend sind – basierend auf der aktuellen Meeresoberflächentemperatur vs. Optimalbereich der Art.
| Score | Stufe |
|---|---|
| > 0.7 | 🔴 KRITISCH |
| 0.4 – 0.7 | 🟡 WARNUNG |
| < 0.4 | 🟢 GERING |
| Art | Wissenschaftl. Name | Region | Opt. Temp. | IUCN-Status |
|---|---|---|---|---|
| 🐟 Roter Thun | Thunnus thynnus | Mittelmeer / Ostatlantik | 15–25°C | Nicht gefährdet |
| 🐟 Atlantischer Kabeljau | Gadus morhua | Nordsee / Nordatlantik | 0–12°C | Gefährdet |
| 🐟 Sardine | Sardina pilchardus | Europ. Atlantikküste | 10–20°C | Nicht gefährdet |
| 🐟 Schwertfisch | Xiphias gladius | Mittelmeer / Atlantik | 18–28°C | Potenziell gefährdet |
MVP startet mit Rotem Thun (beste OBIS-Datenabdeckung, hohe Schutzrelevanz).
- Backend: REST Web Service, konsumiert alle drei externen APIs
- Frontend: Kartenbasierte UI mit MapTiler SDK
- Echtzeit: WebSocket (AISstream → Backend → Frontend via REST-Polling)
- Datenformat: Durchgehend JSON
| API | Typ | Auth |
|---|---|---|
| OBIS | REST | Keine |
| AISstream | WebSocket | Kostenloser API-Key |
| Open-Meteo Marine | REST | Keine |
OceanGuard bietet die API-Dokumentation in zwei Formaten:
| Format | Ort | Beschreibung |
|---|---|---|
| OpenAPI YAML | documentation/openapi.yaml |
Maschinenlesbare Spezifikation (vollständige OpenAPI 3.1.0 Definition) |
| Interaktive HTML | http://localhost:8000/docs | Swagger UI – läuft mit dem Backend, ermöglicht direktes Testen aller Endpoints |
Hinweis: Die Swagger UI unter
/docsist die generierte HTML-Version der API-Beschreibung. Sie bietet:
- Vollständige Endpoint-Dokumentation
- Interaktives Testen mit echten Requests
- Request/Response-Beispiele
- Authentifizierungsunterstützung (Bearer Token)
| Endpoint | Beschreibung |
|---|---|
GET /species/ |
Liste aller unterstützten, aktiven Arten |
GET /species/{species_id}/migration?month= |
Saisonale Verbreitungszone (GeoJSON) |
GET /vessels |
Aktive Schiffspositionen (ohne Filter) |
GET /overlap?species_id=&month= |
Kern: Overlap-Score Berechnung für eine Fischart |
GET /marine-conditions?lat=&lng= |
Meeresbedingungen an einem Koordinatenpunkt |
GET /alerts?species_id= |
Aktive Warnungen für eine Fischart |
Demonstration des ETag-basierten HTTP-Cachings mit curl:
# Erster Request – vollständige Antwort + ETag Header
curl -i http://localhost:8000/species/
# Antwort enthält: ETag: W/"abc123..."
# Zweiter Request mit If-None-Match – Server antwortet mit 304 Not Modified
curl -i -H 'If-None-Match: W/"abc123..."' http://localhost:8000/species/
# Antwort: HTTP 304 Not Modified (kein Body, Bandbreite gespart)Dies demonstriert zeitbasiertes Caching (Cache-Control: max-age=86400, 24 Stunden)
kombiniert mit validierungsbasiertem Caching (ETag/If-None-Match).
Getestete Endpoints mit ETag-Support:
GET /species/– Liste aller FischartenGET /species/{species_id}/migration?month=– Migrationszonen einer Art