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