Phase 2 : dérive, ImpactScore, slider temporel

Backend :
- OpenMeteoClient : vent horaire 72h (gratuit, sans clé)
- DriftSimulationService : échantillonnage ST_GeneratePoints,
  déplacement itératif Stokes 3%, reconstruction ST_ConcaveHull,
  4 horizons H+6/12/24/48, confiance décroissante
- ImpactScoreService : score 4 composantes (distance/densité/
  vitesse/tendance), cache Redis TTL 3h, invalidation à chaque calcul
- ComputeForecastsCommand : traite les observations sans forecast
- SpotScoreController : score courant + horizons depuis forecasts

Frontend :
- TimelineSlider : navigation Now/+6h/+12h/+24h/+48h
- SargassesMap : couche observations (orange) vs forecasts (violet)
  rechargée à chaque changement d'étape
- SpotPanel : affichage score par horizon actif + indicateur confiance
- Build → backend/public/spa/

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Gwadaking
2026-04-01 03:23:21 -04:00
parent 0c1deb93cb
commit 94bb6f5e8c
18 changed files with 983 additions and 186 deletions

View File

@@ -83,35 +83,34 @@
### Pipeline — simulation de dérive
- [ ] Accès NOAA GRIB (vent + courant)
- [ ] Échantillonnage polygone (centroids + random sampling)
- [ ] Application vecteur dérive par point
- [ ] Reconstruction polygone (convex hull / alpha shape)
- [ ] Génération horizons H+6, H+12, H+24, H+48
- [ ] Persistance `SargassumForecast`
- [ ] Génération vector tiles prédictions (Tippecanoe)
- [x] Vent horaire via Open-Meteo (gratuit, sans clé, JSON)
- [x] Échantillonnage PostGIS ST_GeneratePoints (30 points internes)
- [x] Déplacement horaire itératif (modèle Stokes 3% vent)
- [x] Reconstruction ST_ConcaveHull (PostGIS 3.4)
- [x] Génération horizons H+6, H+12, H+24, H+48 avec confiance décroissante
- [x] Persistance `SargassumForecast`
- [ ] Génération vector tiles prédictions (Tippecanoe) — différé
### Calcul ImpactScore
- [ ] Calcul score par `CoastalPoint` (distance, densité, vitesse d'approche, tendance)
- [ ] Persistance `ImpactScore`
- [ ] Mise en cache Redis (TTL 3h)
- [x] Score par `CoastalPoint` : distance(40) + densité(30) + vitesse(20) + tendance(10)
- [x] Persistance `ImpactScore`
- [x] Mise en cache Redis (TTL 3h) via ImpactScoreService
### API Backend
- [ ] `GET /api/spots/{id}/score` — score courant + horizons
- [ ] `GET /api/spots/{id}/score?at={datetime}` — score à un instant
- [ ] `GET /api/forecasts?observationId=` — prédictions par observation
- [ ] `GET /api/forecasts?bbox=&horizon=` — prédictions par zone + horizon
- [x] `GET /api/spots/{id}/score` — score courant + horizons H+6/12/24/48
- [x] `GET /api/spots/{id}/score?at={datetime}` — score à un instant
- [x] `GET /api/forecasts?bbox=&horizon=` — prédictions par zone + horizon (API Platform)
### Frontend React
- [ ] Spot Mode complet (OK / Risque / Impact par horizon)
- [ ] Slider temporel (Now → +6h → +12h → +24h → +48h)
- [ ] Mise à jour dynamique polygones + score sur slider
- [ ] Gradients radiaux densité
- [ ] Animation légère sur polygones de prédiction
- [ ] Vue mobile optimisée
- [x] Slider temporel (Now → +6h → +12h → +24h → +48h)
- [x] Spot Mode complet par horizon (OK / Risque / Impact + confiance)
- [x] Mise à jour dynamique polygones + score sur slider
- [x] Couche forecasts (violet pointillé) vs observations (orange plein)
- [ ] Gradients radiaux densité — différé
- [ ] Vue mobile optimisée — différé
---