From 967be9e750221ab2ab783f95df79bb26d290a45e Mon Sep 17 00:00:00 2001 From: Martial Simon Date: Mon, 15 Sep 2025 01:07:58 +0200 Subject: add: added projects --- ero1/src/helper/export_to_kml.py | 95 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 ero1/src/helper/export_to_kml.py (limited to 'ero1/src/helper/export_to_kml.py') diff --git a/ero1/src/helper/export_to_kml.py b/ero1/src/helper/export_to_kml.py new file mode 100644 index 0000000..37f123b --- /dev/null +++ b/ero1/src/helper/export_to_kml.py @@ -0,0 +1,95 @@ +from src.helper.debug_printer import debug_print +import simplekml +import random +import math + +def export_to_kml(parcours_deneigeuses, parcours_drone, graph, debug_mode, name="parcours_deneigeuses"): + """ + Exporte les parcours des déneigeuses dans un fichier KML. + Parameters: + parcours_deneigeuses : Les parcours des déneigeuses. + parcours_drone : Le parcours du drone. + graph : Le graphe à exporter. + debug_mode : Indique si le mode debug est activé ou non. + """ + + debug_print(f"Exportation des parcours des déneigeuses dans un fichier KML.", debug_mode) + + # Création d'un nouveau fichier KML + kml = simplekml.Kml() + + # Récupération d'une couleur aléatoire pour chaque déneigeuse + colors = [] + parcours_deneigeuses.insert(0, parcours_drone) + + for _ in range(len(parcours_deneigeuses)): + r = random.randint(0, 255) + g = random.randint(0, 255) + b = random.randint(0, 255) + colors.append(simplekml.Color.rgb(r, g, b)) + + # Traitement du parcours de chaque déneigeuse + for i, path in enumerate(parcours_deneigeuses): + # Création d'un itinéraire pour chaque déneigeuse + nom = f"Déneigeuse {i}" if i != 0 else "Drone" + folder = kml.newfolder(name=nom) + + coordonnées = [] + profondeurs_neige = [] + distance_parcourue = 0 + + # Ajout des coordonnées pour chaque arête du parcours + for u, v in path: + try: + c_u = (graph.nodes[u]['x'], graph.nodes[u]['y']) + c_v = (graph.nodes[v]['x'], graph.nodes[v]['y']) + + coordonnées.append(c_u) + coordonnées.append(c_v) + + # Récupération de la profondeur de neige et de la distance + try: + profondeur_neige = graph[u][v][0].get('snow', 0) + distance_parcourue += graph[u][v][0]["length"] + except KeyError: + try: + profondeur_neige = graph[v][u][0].get('snow', 0) + distance_parcourue += graph[v][u][0]["length"] + except KeyError: + profondeur_neige = 0 + + profondeurs_neige.append(profondeur_neige) + except KeyError: + continue + + moyenne_neige = sum(profondeurs_neige) / len(profondeurs_neige) if profondeurs_neige else 0 + + # Création du point de départ/arrivée + start_point = folder.newpoint(name=f"Départ {nom}") + start_point.coords = [coordonnées[0]] + start_point.style.iconstyle.icon.href = 'http://maps.google.com/mapfiles/kml/shapes/placemark_circle.png' + start_point.style.iconstyle.scale = 0.5 + start_point.style.iconstyle.color = simplekml.Color.red + + + start_point = folder.newpoint(name=f"Fin {nom}") + start_point.coords = [coordonnées[-1]] + start_point.style.iconstyle.icon.href = 'http://maps.google.com/mapfiles/kml/shapes/placemark_circle.png' + start_point.style.iconstyle.scale = 0.5 + start_point.style.iconstyle.color = simplekml.Color.red + + # Création de l'itinéraire + route = folder.newlinestring(name=f"Itinéraire {nom}") + route.coords = coordonnées + route.altitudemode = simplekml.AltitudeMode.clamptoground # Afficher correctement la route + + route.style.linestyle.color = colors[i] + route.style.linestyle.width = 5 + + route.description = f"Itinéraire {nom}\nDistance parcourue: {math.ceil(distance_parcourue/1000)} km" + + # Sauvegarde du fichier KML + kml.save(f"temp/{name}.kml") + debug_print(f"Fichier KML créé avec succès: temp/{name}.kml", debug_mode) + + return True \ No newline at end of file -- cgit v1.2.3