Application web interactive pour visualiser des fichiers KML sur une carte avec navigation entre les points et différents fonds de carte.
-
Cloner et lancer l'application :
git clone https://github.com/ttiot/KmlViewer cd kmlViewer ./start.sh -
Accéder à l'application : Ouvrez votre navigateur à l'adresse : http://localhost:8080
-
Arrêter l'application :
./stop.sh
Installez les dépendances et lancez pytest :
cd web-app
pip install -r requirements.txt
pytest- Upload par glisser-déposer ou sélection de fichiers
- Fichiers d'exemple intégrés pour test rapide
- Support complet des éléments KML (traces GPS, points, annotations)
- Parsing intelligent des métadonnées (nom, description, altitude)
- Modes d'affichage : Double unité (km/h + kts, ft + m) ou unité simple
- 5 fonds de carte différents :
- OpenStreetMap (par défaut)
- Satellite (Esri)
- Terrain topographique (OpenTopoMap)
- CartoDB Positron (minimaliste)
- Stamen Toner (noir et blanc)
- Affichage optimisé des traces GPS et points d'intérêt
- Marqueurs colorés selon le type (points principaux vs annotations)
- Popups informatifs avec détails complets
- Navigation au clavier : Flèches ← → pour passer d'un point à l'autre
- Contrôles visuels : Boutons Précédent/Suivant
- Centrage automatique sur le point sélectionné
- Informations contextuelles : Position actuelle (Point X/Y)
- Clic sur marqueur pour sélection directe
- Liste interactive des points avec navigation
- Statistiques complètes : Distance, durée, vitesses, dénivelés
- Graphiques interactifs : Profils d'élévation et de vitesse
- Détection d'arrêts automatique avec durée et position
- Segmentation intelligente de la trajectoire par type de mouvement
- Zones de vitesse colorées avec pourcentages de répartition
- Analyse du terrain : Montées, descentes, sections plates
- Points d'intérêt détectés automatiquement
- Ajout de points : Clic sur la carte pour créer de nouveaux points
- Modification de points : Édition des noms, descriptions et métadonnées
- Suppression de points : Retrait de points indésirables
- Simplification de traces : Réduction automatique du nombre de points
- Interface intuitive avec modes d'édition dédiés
- Format GPX : Compatible avec les appareils GPS et applications de randonnée
- Format CSV : Pour analyse dans Excel ou autres outils
- Format GeoJSON : Standard web pour applications cartographiques
- Format KML : Compatible Google Earth et autres visualiseurs
- Options personnalisables : Inclusion/exclusion des traces, nom de fichier
- Design responsive compatible mobile/desktop
- Interface moderne avec Bootstrap 5
- Icônes Font Awesome pour une meilleure UX
- Messages d'état informatifs et colorés
- Panneau d'analyse avec onglets organisés
- Sidebar rétractable pour optimiser l'espace
| Script | Description |
|---|---|
./start.sh |
Démarre l'application avec Docker |
./stop.sh |
Arrête l'application |
./restart.sh |
Redémarre l'application |
./logs.sh |
Affiche les logs en temps réel |
./cleanup.sh |
Nettoyage complet (conteneurs, images, volumes) |
- Framework : Flask 2.3.3 avec architecture modulaire par blueprints
- Parsing KML : xml.etree.ElementTree avec validation avancée
- Analyse GPS : Algorithmes de calcul de distance (Haversine), vitesse, dénivelé
- Services métier :
TrajectoryAnalyzer: Analyses avancées et détection d'arrêtsKMLEditor: Édition et simplification de traces (Douglas-Peucker)- Export multi-formats (GPX, CSV, GeoJSON, KML)
- API REST : Endpoints organisés par fonctionnalité
/api/uploadet/api/load-sample: Gestion des fichiers/api/analysis/*: Analyses de trajectoires/api/editor/*: Édition de points et traces/api/export/*: Export multi-formats
- Sécurité : Validation des fichiers, noms sécurisés, gestion d'erreurs
- Cartes : Leaflet.js avec gestion avancée des couches
- Graphiques : Chart.js pour profils d'élévation et vitesse
- UI : Bootstrap 5 + Font Awesome avec interface à onglets
- JavaScript ES6 :
- Navigation entre points avec clavier/souris
- Modes d'édition interactifs
- Gestion des analyses avancées
- Export de données avec téléchargement automatique
- Responsive design : Sidebar rétractable, compatible tous écrans
- Conteneurisation : Docker + Docker Compose
- Port : 8080 (configurable)
- Volumes : Montage des fichiers d'exemple et données temporaires
- Health checks : Surveillance automatique de l'application
- Optimisations : Image légère, cache des dépendances
Option A : Upload de fichier
- Glissez-déposez votre fichier .kml dans la zone prévue
- Ou cliquez pour sélectionner un fichier
- Le fichier est automatiquement traité et affiché
Option B : Fichiers d'exemple
- Cliquez sur un des boutons des fichiers d'exemple
- Parfait pour tester sans avoir ses propres fichiers
- Utilisez les boutons radio dans le panneau de gauche
- 5 options disponibles selon vos préférences
- Changement instantané sans rechargement
Navigation au clavier :
- Flèche gauche (←) : Point précédent
- Flèche droite (→) : Point suivant
Navigation à la souris :
- Cliquez sur un marqueur pour le sélectionner
- Boutons Précédent/Suivant dans le panneau de navigation
- Bouton "Centrer" dans les popups
- Liste des points : Cliquez sur un point dans la liste pour y naviguer
Onglet "Stats" :
- Statistiques générales : distance, durée, vitesses, dénivelés
- Mise à jour automatique lors du chargement d'un fichier
Onglet "Élévation" :
- Graphique du profil d'élévation
- Statistiques détaillées (altitude min/max)
Onglet "Vitesse" :
- Graphique du profil de vitesse
- Statistiques détaillées (vitesse min/moy/max)
Onglet "Avancé" :
- Cliquez sur "Lancer l'analyse avancée" pour obtenir :
- Détection automatique des arrêts
- Segmentation de la trajectoire
- Zones de vitesse colorées
- Analyse du terrain (montées/descentes/plat)
- Cliquez sur "Effacer" pour nettoyer les résultats
Onglet "Édition" : 🚧 Work in progress 🚧
- Ajouter un point : Cliquez sur le bouton puis sur la carte
- Modifier un point : Activez le mode puis cliquez sur un point existant
- Supprimer un point : Activez le mode puis cliquez sur le point à supprimer
- Simplifier la trace : Réduit automatiquement le nombre de points
Formulaire d'édition :
- Modifiez le nom, la description
- Marquez comme point d'annotation si nécessaire
- Sauvegardez ou annulez les modifications
Onglet "Export" :
- GPX : Format standard pour GPS et applications de randonnée
- CSV : Tableau pour analyse dans Excel
- GeoJSON : Format web pour développeurs
- KML : Compatible Google Earth
Options d'export :
- Cochez "Inclure les points de trace" selon vos besoins
- Personnalisez le nom du fichier
- Le téléchargement démarre automatiquement
- Cliquez sur un marqueur pour voir ses détails
- Panneau d'analyse avec onglets organisés
- Liste des points interactive avec recherche visuelle
- Distinction visuelle entre points principaux et annotations
| Type | Couleur | Description |
|---|---|---|
| Points principaux | 🔵 Bleu | Points d'intérêt principaux |
| Annotations | 🔴 Rouge | Points du dossier "Points" (détails) |
| Traces GPS | 🟣 Violet | Lignes de trajectoire |
FLASK_ENV=production # Mode de l'application
FLASK_APP=app.py # Point d'entréeModifiez le fichier docker-compose.yml :
ports:
- "VOTRE_PORT:5000" # Remplacez VOTRE_PORTModifiez le fichier web-app/templates/index.html dans la section baseLayers.
1. Port déjà utilisé
# Changer le port dans docker-compose.yml
# Ou arrêter le service utilisant le port 8080
sudo lsof -i :80802. Fichier KML non reconnu
- Vérifiez que le fichier est un KML valide
- Assurez-vous de l'encodage UTF-8
- Consultez les logs :
./logs.sh
3. Carte ne s'affiche pas
- Vérifiez votre connexion internet
- Ouvrez la console du navigateur (F12)
- Redémarrez l'application :
./restart.sh
4. Navigation clavier ne fonctionne pas
- Cliquez sur la carte pour donner le focus
- Assurez-vous qu'un fichier KML avec des points est chargé
./logs.sh # Logs en temps réel
docker ps # État des conteneurs
docker-compose ps # État spécifique au projet- Fichiers KML : Jusqu'à 16MB supportés
- Points : Navigation optimisée pour milliers de points
- Mémoire : Conteneur léger (~100MB)
- Démarrage : ~10-30 secondes selon la machine
- Validation des fichiers : Extensions et taille limitées
- Noms sécurisés : Protection contre path traversal
- Parsing sécurisé : Protection contre XML bombs
- Pas de persistance : Fichiers uploadés temporaires
- Fork du projet
- Créer une branche feature
- Commit des modifications
- Push vers la branche
- Créer une Pull Request
Ce projet est libre d'utilisation.
- Détection d'arrêts : Identification automatique des pauses avec durée et localisation
- Segmentation intelligente : Division de la trajectoire en segments homogènes
- Zones de vitesse : Classification colorée des sections selon la vitesse
- Analyse du terrain : Répartition automatique montées/descentes/plat
- Points d'intérêt : Détection des lieux remarquables sur le parcours
- Ajout de points : Création de nouveaux waypoints par clic sur carte
- Modification en temps réel : Édition des métadonnées (nom, description)
- Suppression sélective : Retrait de points indésirables
- Simplification Douglas-Peucker : Optimisation automatique des traces
- Interface intuitive : Modes d'édition avec feedback visuel
- Multi-formats : GPX, CSV, GeoJSON, KML avec options personnalisables
- Compatibilité étendue : Support des principaux logiciels GPS et SIG
- Métadonnées préservées : Conservation des informations d'origine
- Téléchargement direct : Export instantané sans rechargement
- Plans de vol : Visualisation et édition de routes aériennes
- Waypoints : Gestion des points de navigation
- Analyse de performance : Vitesses, altitudes, temps de vol
- Export vers GPS : Formats compatibles équipements de bord
- Traces GPS : Visualisation de parcours avec profils d'élévation
- Points d'intérêt : Refuges, sommets, points de vue
- Analyse d'effort : Dénivelés, vitesses, temps d'arrêt
- Partage : Export vers applications mobiles (GPX)
- Points de mesure : Localisation précise d'échantillons
- Parcours terrain : Optimisation des itinéraires de collecte
- Analyse spatiale : Export vers SIG (GeoJSON, CSV)
- Documentation : Métadonnées détaillées par point
- Entraînements : Analyse de performances (vitesse, dénivelé)
- Zones d'effort : Identification des sections difficiles
- Progression : Comparaison de parcours similaires
- Partage : Export vers plateformes sportives
- Optimisation de routes : Analyse de trajets commerciaux
- Points d'arrêt : Détection automatique des pauses
- Rapports : Export de données pour analyse (CSV)
- Suivi : Visualisation de flottes ou livraisons
Profitez de votre exploration cartographique avancée ! 🗺️
- Calculs vectorisés pour la distance totale (numpy)
- Mise en cache des parsings KML/GPX pour éviter les recalculs
- Tests supplémentaires couvrant le cache
- Instructions de test :
pytest