En vedette

Land Fire Alerts (LFA) - Surveillance Internationale

ResearchContexte: Kasetsart University / NOAA / NASA
PythonPostGISFlaskFoliumMapLibreLINE APIGmail API
Land Fire Alerts (LFA) - Surveillance Internationale
Présentation du projet international LFA à l'ONU (Organisation des Nations Unies) en Thaïlande

Plateforme de surveillance satellitaire des feux de forêt en temps réel, développée pour NOAA, NASA, AFoCO, le Royal Forest Department et l'Université de Kasetsart. Déployée en production dans 4 pays (Thaïlande, Cambodge, Laos, Vietnam), utilisée quotidiennement par des responsables gouvernementaux et des décideurs de haut niveau pour la gestion de crises environnementales.


Pipeline de Data Engineering

1775919166954-6d2ei7.png

Daemon ETL entièrement autonome fonctionnant 24h/24 et 7j/7, interrogeant l'API Gmail toutes les 5 minutes pour récupérer les données de détection de feux des capteurs VIIRS & MODIS embarqués sur les satellites NOAA-20, NOAA-21 et S-NPP (résolution 375m).

  • Ingestion de pièces jointes CSV/KML et normalisation de formats de données hétérogènes (schémas NASA vs. NOAA)
  • Déduplication des alertes par géolocalisation et date à travers les passages satellites simultanés
  • Enrichissement spatial via PostGIS par requêtes point-dans-polygone sur 6 couches de limites géographiques : provinces, districts, sous-districts, aires protégées, forêts classées et 14 zones de gestion forestière
  • Insertion en masse dans PostgreSQL avec résolution ON CONFLICT garantissant l'intégrité des données

Visualisation Géospatiale

1775920313453-xoaycj.png

Génération de cartes interactives Folium/Leaflet affichant jusqu'à ~3 500 marqueurs de feux simultanés, plafonnés et priorisés par fraîcheur pour la performance navigateur.

  • Couches d'alertes temporelles : dernières 6h, aujourd'hui, hier
  • Code couleur par satellite avec icônes personnalisées pour les zones protégées (parcs nationaux, forêts classées)
  • Popups détaillées : double affichage de coordonnées (WGS84 + UTM), noms administratifs en thaï et anglais, scores de confiance, puissance radiative du feu (FRP) et lien direct Google Maps
  • 6 couches GeoJSON superposables avec infobulles au survol

Alertes & Opérations

Système de notification multicanal avec résilience complète grâce à des décorateurs de retry avec backoff exponentiel sur tous les appels externes.

  • LINE Bot : enregistrement automatique des utilisateurs et groupes via webhook, envoi d'alertes push aux parties prenantes avec liens directs vers la carte
  • Webhooks Discord : routage par niveau de sévérité sur 3 canaux (critique / erreur / info), fichiers de log en pièce jointe et métriques automatisées de taux de succès par exécution du pipeline

Application Web

1775920347449-toizmz.png

Frontend Flask + Jinja2 servant l'interface opérationnelle.

  • Panneau d'administration avec session et toggles de configuration en temps réel (consommés par le daemon via API REST)
  • Navigateur d'archives de cartes avec navigation chronologique par année/mois
  • Export Excel : feuilles par satellite avec enrichissement des noms géographiques depuis les lookups PostGIS
  • Nettoyage automatique des cartes et exports de plus de 3 jours

Déploiement & Fiabilité

Conçu pour un fonctionnement ininterrompu 24h/24 sur une VM Linux derrière Apache WSGI.

  • Logging structuré multi-niveaux : logs globaux du daemon, logs par traitement d'email et logs d'événements bot
  • Gestion explicite de la mémoire avec nettoyage des variables à chaque itération de boucle pour prévenir les fuites dans les processus longue durée
  • Cache de données géographiques (PostGIS → CSV avec sérialisation WKT) minimisant la charge base de données sur les exécutions répétées

Stack technique

PythonFlaskPostgreSQL/PostGISPandas/GeoPandasFolium/Leafletpsycopg2SQLAlchemyGmail API (OAuth2)LINE Messaging APIDiscord WebhooksPandasShapely / Pyproj