---
title: "À propos"
description: "Découvrez FlightLog Pro - Journal de vol automatisé professionnel"
---
```{r setup, include=FALSE}
library(jsonlite)
library(DT)
library(knitr)
# Chargement des statistiques globales
if (file.exists("data/processed/flights.json")) {
db <- fromJSON("data/processed/flights.json", simplifyVector = FALSE)
stats <- db$global_stats
} else {
stats <- NULL
}
```
## 🚁 Mon journal de vol
Ce site rassemble mes vols en parapente — statistiques, traces et profils d'altitude — générés automatiquement depuis les fichiers IGC de mon vario.
## 👨✈️ À propos de moi
Passionné de parapente basé en Suisse, je vole principalement en **Hook 5P** depuis les sites du Valais et de la région lémanique. Je travaille dans l'enseignement, avec un pied dans la programmation et la gestion de données — et un faible assumé pour **R** et **Quarto**, qui font tourner ce carnet de bout en bout.
**Mes terrains de jeu favoris :**
- **Frassette (Torgon)** - Mon spot de prédilection avec vue sur le Lac Léman
- **Vionnaz (stade)** - Atterrissage de précision habituel
- **Région Valaisanne** - Pour les vols cross et thermiques
## 🎯 L'idée de départ
Une frustration toute simple : pourquoi ressaisir à la main ce que le fichier IGC contient déjà ? Le système lit ces données et fait le reste — calculs, graphiques, carte et page de chaque vol.
## 📊 Mes statistiques actuelles
```{r stats-overview, echo=FALSE, results='asis'}
if (!is.null(stats) && length(stats) > 0) {
source("scripts/flightlog_theme.R")
cat(fl_stat_tiles(data.frame(
icon = c("🛫", "⏱️", "📏", "🏔️", "🪂", "📈", "🥇", "🎯"),
label = c(
"Nombre de vols", "Temps de vol total", "Distance parcourue",
"Plus haute altitude", "Hauteur-sol record", "Vol le plus long",
"Site favori (décollage)", "Site favori (atterrissage)"
),
value = c(
as.character(stats$total_flights %||% 0),
as.character(stats$total_airtime_hours %||% 0),
as.character(stats$total_distance_km %||% 0),
as.character(stats$highest_altitude_m %||% 0),
as.character(stats$highest_agl_m %||% 0),
as.character(stats$longest_flight_km %||% 0),
names(stats$favorite_takeoff_sites)[1] %||% "Aucun",
names(stats$favorite_landing_sites)[1] %||% "Aucun"
),
unit = c("vols", "h", "km", "m", "m", "km", "", ""),
stringsAsFactors = FALSE
)))
} else {
cat("*Aucune statistique disponible pour le moment.*")
}
```
## 🛠️ Choix techniques
**Pourquoi ce stack ?**
- **R + Quarto** : Écosystème scientifique robuste pour l'analyse de données
- **Format IGC** : Standard international aviation, données immuables et traçables
- **Ultrabip (XSD UB343B)** : Mon fidèle compagnon avec capteur barométrique DPS310
- **Architecture JSON** : Base de données légère et versionnable
## 🔬 Lecture des fichiers IGC
Le système extrait directement du fichier IGC tout ce qui est exploitable :
- **Nettoyage des en-têtes** : `HFPLTPILOTINCHARGE:Bressoud Nicolas` → `Bressoud Nicolas`
- **Détection du vario** : Ultrabip par défaut, ajusté selon l'IGC
- **Fuseau horaire** : UTC du fichier → heure locale suisse (UTC+1/+2 selon la saison)
- **Double altitude** : barométrique (précise) et GPS (référence)
- **Relief** : hauteur au-dessus du sol via modèle numérique de terrain
- **Qualité** : pourcentage de points GPS valides
## 🧮 Comment on calcule nos chiffres
Cette section documente, vol par vol, chaque choix de calcul derrière les statistiques affichées sur ce site. L'objectif est double : être transparent envers toi, pilote qui consultes ces chiffres, et garder une trace pour nous-mêmes de ce qui a été programmé. Si tu rejoues un de nos fichiers IGC dans un autre logiciel, voici exactement ce qu'il faudrait reproduire pour retrouver les mêmes valeurs. Le détail complet (formules exactes) est dans `scripts/flight_processor.R`, fonction `calculate_flight_stats()` ; ce qui suit en est la traduction en langage clair.
### D'où viennent les points de vol
Chaque point du fichier IGC (position GPS, altitude barométrique, altitude GPS, horodatage) est lu tel quel — un point par seconde pour notre vario (Ultrabip). Rien n'est interpolé ni rééchantillonné à cette étape.
### Où commence et où finit le vol
Les statistiques (durée, distances, vitesses, montée/chute) ne portent pas sur tout le fichier IGC, mais sur la portion identifiée comme « en vol » : on garde les points où la vitesse sol dépasse **2 km/h**. S'il n'y a jamais 2 km/h dans tout le fichier (cas rare), on retombe sur un critère de secours basé sur les variations d'altitude (changement de plus de 10 m). Concrètement, le temps passé à préparer la voile au sol avant de décoller n'est pas compté dans la durée du vol.
### Le lissage du vario (montée/chute)
Le taux de montée ou de chute brut, calculé point à point (différence d'altitude ÷ différence de temps entre deux points), est bruité — le baromètre et le GPS ont chacun leur imprécision seconde par seconde. On applique donc une **moyenne glissante centrée sur 5 points**, soit 5 secondes avec notre échantillonnage à 1 point/seconde. C'est cette version lissée, et uniquement elle, qui sert ensuite à tout ce qui touche au vario :
- **Taux de montée max** et **taux de chute max** : le maximum et le minimum (en valeur absolue) de cette série lissée, sur la portion « en vol ». Ce sont donc des pics *lissés sur ~5 secondes*, pas des pics instantanés seconde par seconde — un thermique très bref et violent peut afficher une valeur plus modérée que ce qu'aurait montré un variomètre de bord réglé en mode instantané.
- **Cumul de gain / perte d'altitude** : on additionne, seconde par seconde, l'altitude gagnée (ou perdue) uniquement quand le vario lissé dépasse **0.5 m/s** en valeur absolue — ce seuil sert à ignorer le bruit résiduel autour de zéro (palier stable) et à ne pas le compter comme une micro-montée ou une micro-descente.
Le choix de 5 secondes n'a rien d'absolu : c'est un compromis entre un signal trop bruité (fenêtre courte) et des pics trop écrasés (fenêtre longue). Si tu recalcules ces valeurs ailleurs avec un réglage différent, tu obtiendras des nombres différents — c'est attendu, pas une erreur.
### Distance totale vs distance directe
- **Distance totale** : somme des distances (Haversine, donc à vol d'oiseau entre deux points GPS consécutifs) sur toute la portion « en vol ». Comme elle additionne aussi les petits écarts dus au bruit GPS et aux boucles de thermique, elle est légèrement surestimée par rapport à la trajectoire réelle.
- **Distance directe** : distance à vol d'oiseau entre le tout premier et le tout dernier point de la portion « en vol » (donc décollage → atterrissage en ligne droite), indépendamment du chemin parcouru.
### Altitude : baromètre ou GPS ?
Le fichier IGC contient deux altitudes indépendantes à chaque point, et elles ne sont **pas** utilisées de la même façon partout sur ce site — un point important pour qui voudrait reproduire nos chiffres :
- **Vario (taux de montée/chute), cumul de dénivelé, et altitude minimale du vol** : toujours calculés sur l'**altitude barométrique**, sans jamais basculer sur le GPS même quand celui-ci est disponible.
- **Altitude max, altitude de décollage et d'atterrissage affichées en tuile** : préfèrent l'**altitude GPS** quand elle est présente dans le fichier, et ne retombent sur le baromètre que si le GPS est absent.
- **Finesse** : calculée à partir de l'altitude **barométrique** de décollage/atterrissage — donc potentiellement une valeur légèrement différente de celle affichée dans les tuiles d'altitude (qui, elles, peuvent préférer le GPS) si les deux capteurs ne sont pas parfaitement d'accord.
Le baromètre peut dériver de quelques mètres au fil d'une journée avec la pression atmosphérique qui change (ce n'est pas corrigé automatiquement), ce qui explique pourquoi l'altitude affichée et l'altitude GPS peuvent légèrement diverger, et pourquoi la finesse peut ne pas coller exactement aux deux altitudes de tuile qu'on vient de lire juste au-dessus.
### Hauteur-sol (AGL)
La hauteur au-dessus du sol n'est pas mesurée directement : elle est **estimée** en comparant l'altitude du vol à un modèle numérique de terrain (MNT, service `elevatr`, résolution zoom 12, interpolation bilinéaire entre pixels voisins). Ce MNT est calé au décollage : on prend l'écart médian entre le relief du MNT et l'altitude barométrique mesurée, sur les 5 premiers points du vol pour lesquels le MNT a effectivement renvoyé une valeur (pas nécessairement les 5 tout premiers points chronologiques, si jamais le relief était temporairement indisponible juste après le décollage), et on applique cette correction à toute la trace. Cette calibration suppose que le relief au point de décollage est fiable ; un MNT localement imprécis ou une dérive barométrique en cours de vol peuvent introduire une erreur qui se voit en comparant la hauteur-sol calculée à l'atterrissage à 0 (elle devrait être proche de zéro — un écart de plus de 20 m signale un problème, actuellement visible seulement dans les journaux de traitement, pas encore sur le site).
### Finesse
::: {.callout-warning}
La **finesse** affichée ici est **distance directe (décollage → atterrissage) ÷ perte d'altitude nette (décollage → atterrissage)**, calculée sur l'ensemble du vol. Ce n'est **pas** une finesse de plané au sens classique (qui se mesure sur une phase de descente stabilisée, sans remontées). Un vol avec beaucoup de thermiques peut ainsi afficher une finesse très optimiste, ou au contraire peu représentative de la performance réelle de plané de la voile. À lire comme un indicateur global du vol, pas comme la finesse de la voile.
:::
### Vitesses (max / moyenne)
Vitesse sol calculée à partir des positions GPS consécutives (distance ÷ temps), lissée avec la même moyenne glissante sur 5 points que le vario, sur la portion « en vol ». La vitesse max est le maximum de cette série lissée ; la vitesse moyenne, sa moyenne arithmétique sur tout le vol (donc incluant aussi les phases de vol lent en thermique).
### Qualité des données GPS
Le pourcentage de « qualité GPS » affiché sur chaque vol est la proportion de points marqués valides (`A`) par le vario dans le fichier IGC — un indicateur de la réception GPS, pas une mesure de la précision du baromètre ni de la qualité générale du vol.
### Heure locale
Les heures de décollage/atterrissage affichées convertissent l'UTC du fichier IGC en heure suisse via une règle simplifiée : **UTC+2 d'avril à octobre inclus, UTC+1 le reste de l'année**. C'est une approximation du changement d'heure été/hiver (les dates réelles de bascule varient chaque année de quelques jours fin mars et fin octobre) ; un vol tout début avril ou fin octobre peut donc afficher une heure locale décalée d'une heure par rapport à l'heure officielle de ce jour précis.
### Vols manuels vs vols trackés
Les vols sans fichier IGC (saisis manuellement, sans traceur GPS) comptent dans le nombre total de vols et dans les sites favoris, mais sont exclus de toutes les statistiques qui nécessitent une trace GPS : vitesses, montée/chute, finesse, distances, altitudes.
### Comment les statistiques globales agrègent les vols
- Les totaux (temps de vol cumulé, distance cumulée, gain d'altitude cumulé) sont des **sommes** sur tous les vols trackés.
- Les moyennes (durée, distance, vitesse, finesse) sont des **moyennes arithmétiques simples** sur tous les vols trackés — un vol exceptionnel pèse donc autant qu'un vol court dans le calcul, sans pondération.
- Les records (vol le plus long, altitude max, taux de montée max, meilleure finesse, hauteur-sol record) sont le **maximum** de la statistique correspondante parmi tous les vols trackés — donc le meilleur pic jamais atteint, pas une valeur typique. Par exemple, le « vol le plus long » se base sur la distance parcourue, pas sur la durée.
- La tendance de fréquence de vol (graphique en bas de la page d'accueil) est une **régression linéaire simple** sur le nombre de vols par mois, mois sans vol inclus dans le calcul — une tendance approximative sur toute la période, pas une prédiction.
## 🙏 Merci à la communauté
Ce carnet ne serait rien sans l'écosystème open source : **R**, **Quarto** et les centaines de paquets — `sf`, `terra`, `leaflet`, `ggplot2`, `elevatr` et tant d'autres — maintenus bénévolement. Un grand merci à cette communauté de développeuses et développeurs qui met, gratuitement, des outils d'une telle qualité entre les mains d'un passionné comme moi.
## 📬 Contact
Pilote et curieux du projet ? N'hésite pas à me contacter — toujours partant pour une discussion technique ou un vol dans la région.
---
*Dernière mise à jour : `r format(Sys.time(), "%d/%m/%Y à %H:%M")`*
*Développé avec l'aide de [Claude](https://claude.ai).*
🧮 Comment on calcule nos chiffres
Cette section documente, vol par vol, chaque choix de calcul derrière les statistiques affichées sur ce site. L’objectif est double : être transparent envers toi, pilote qui consultes ces chiffres, et garder une trace pour nous-mêmes de ce qui a été programmé. Si tu rejoues un de nos fichiers IGC dans un autre logiciel, voici exactement ce qu’il faudrait reproduire pour retrouver les mêmes valeurs. Le détail complet (formules exactes) est dans
scripts/flight_processor.R, fonctioncalculate_flight_stats(); ce qui suit en est la traduction en langage clair.D’où viennent les points de vol
Chaque point du fichier IGC (position GPS, altitude barométrique, altitude GPS, horodatage) est lu tel quel — un point par seconde pour notre vario (Ultrabip). Rien n’est interpolé ni rééchantillonné à cette étape.
Où commence et où finit le vol
Les statistiques (durée, distances, vitesses, montée/chute) ne portent pas sur tout le fichier IGC, mais sur la portion identifiée comme « en vol » : on garde les points où la vitesse sol dépasse 2 km/h. S’il n’y a jamais 2 km/h dans tout le fichier (cas rare), on retombe sur un critère de secours basé sur les variations d’altitude (changement de plus de 10 m). Concrètement, le temps passé à préparer la voile au sol avant de décoller n’est pas compté dans la durée du vol.
Le lissage du vario (montée/chute)
Le taux de montée ou de chute brut, calculé point à point (différence d’altitude ÷ différence de temps entre deux points), est bruité — le baromètre et le GPS ont chacun leur imprécision seconde par seconde. On applique donc une moyenne glissante centrée sur 5 points, soit 5 secondes avec notre échantillonnage à 1 point/seconde. C’est cette version lissée, et uniquement elle, qui sert ensuite à tout ce qui touche au vario :
Le choix de 5 secondes n’a rien d’absolu : c’est un compromis entre un signal trop bruité (fenêtre courte) et des pics trop écrasés (fenêtre longue). Si tu recalcules ces valeurs ailleurs avec un réglage différent, tu obtiendras des nombres différents — c’est attendu, pas une erreur.
Distance totale vs distance directe
Altitude : baromètre ou GPS ?
Le fichier IGC contient deux altitudes indépendantes à chaque point, et elles ne sont pas utilisées de la même façon partout sur ce site — un point important pour qui voudrait reproduire nos chiffres :
Le baromètre peut dériver de quelques mètres au fil d’une journée avec la pression atmosphérique qui change (ce n’est pas corrigé automatiquement), ce qui explique pourquoi l’altitude affichée et l’altitude GPS peuvent légèrement diverger, et pourquoi la finesse peut ne pas coller exactement aux deux altitudes de tuile qu’on vient de lire juste au-dessus.
Hauteur-sol (AGL)
La hauteur au-dessus du sol n’est pas mesurée directement : elle est estimée en comparant l’altitude du vol à un modèle numérique de terrain (MNT, service
elevatr, résolution zoom 12, interpolation bilinéaire entre pixels voisins). Ce MNT est calé au décollage : on prend l’écart médian entre le relief du MNT et l’altitude barométrique mesurée, sur les 5 premiers points du vol pour lesquels le MNT a effectivement renvoyé une valeur (pas nécessairement les 5 tout premiers points chronologiques, si jamais le relief était temporairement indisponible juste après le décollage), et on applique cette correction à toute la trace. Cette calibration suppose que le relief au point de décollage est fiable ; un MNT localement imprécis ou une dérive barométrique en cours de vol peuvent introduire une erreur qui se voit en comparant la hauteur-sol calculée à l’atterrissage à 0 (elle devrait être proche de zéro — un écart de plus de 20 m signale un problème, actuellement visible seulement dans les journaux de traitement, pas encore sur le site).Finesse
La finesse affichée ici est distance directe (décollage → atterrissage) ÷ perte d’altitude nette (décollage → atterrissage), calculée sur l’ensemble du vol. Ce n’est pas une finesse de plané au sens classique (qui se mesure sur une phase de descente stabilisée, sans remontées). Un vol avec beaucoup de thermiques peut ainsi afficher une finesse très optimiste, ou au contraire peu représentative de la performance réelle de plané de la voile. À lire comme un indicateur global du vol, pas comme la finesse de la voile.
Vitesses (max / moyenne)
Vitesse sol calculée à partir des positions GPS consécutives (distance ÷ temps), lissée avec la même moyenne glissante sur 5 points que le vario, sur la portion « en vol ». La vitesse max est le maximum de cette série lissée ; la vitesse moyenne, sa moyenne arithmétique sur tout le vol (donc incluant aussi les phases de vol lent en thermique).
Qualité des données GPS
Le pourcentage de « qualité GPS » affiché sur chaque vol est la proportion de points marqués valides (
A) par le vario dans le fichier IGC — un indicateur de la réception GPS, pas une mesure de la précision du baromètre ni de la qualité générale du vol.Heure locale
Les heures de décollage/atterrissage affichées convertissent l’UTC du fichier IGC en heure suisse via une règle simplifiée : UTC+2 d’avril à octobre inclus, UTC+1 le reste de l’année. C’est une approximation du changement d’heure été/hiver (les dates réelles de bascule varient chaque année de quelques jours fin mars et fin octobre) ; un vol tout début avril ou fin octobre peut donc afficher une heure locale décalée d’une heure par rapport à l’heure officielle de ce jour précis.
Vols manuels vs vols trackés
Les vols sans fichier IGC (saisis manuellement, sans traceur GPS) comptent dans le nombre total de vols et dans les sites favoris, mais sont exclus de toutes les statistiques qui nécessitent une trace GPS : vitesses, montée/chute, finesse, distances, altitudes.
Comment les statistiques globales agrègent les vols