Spaces:
Sleeping
Sleeping
import matplotlib.pyplot as plt | |
import numpy as np | |
from typing import List, Dict, Any, Optional | |
def generate_map(gps_coordinates: List[List[float]], map_items: List[Dict[str, Any]]) -> Optional[str]: | |
""" | |
Generate a map showing issue locations based on GPS coordinates. | |
Args: | |
gps_coordinates: List of [latitude, longitude] coordinates. | |
map_items: List of detected items (cracks, holes, potholes, missing patches) to plot. | |
Returns: | |
Path to the generated map image, or None if generation fails. | |
""" | |
try: | |
fig, ax = plt.subplots(figsize=(5, 3)) | |
if gps_coordinates: | |
lats, longs = zip(*gps_coordinates) | |
ax.plot(longs, lats, 'b-', label='Path') # Blue line for path | |
for item in map_items: | |
gps = item.get('gps', [0, 0]) | |
lat, lon = gps | |
# Use a default severity if the key is missing | |
severity = item.get('severity', 'Moderate') # Default to 'Moderate' | |
dtype = item.get('type', '') | |
# Custom colors for holes as per requirement | |
if dtype in ['hole', 'pothole']: | |
if severity == 'Mild': | |
color = 'darkgreen' # Green dot for minor holes | |
elif severity == 'Moderate': | |
color = 'yellow' # Yellow dot for moderate holes | |
else: | |
color = 'darkred' # Severe holes remain dark red | |
else: | |
# Existing logic for other types | |
color = 'darkred' if severity == 'Severe' else 'yellow' if severity == 'Moderate' else 'darkgreen' | |
marker = 'x' if dtype == 'crack' else 'o' if dtype in ['hole', 'pothole'] else '^' | |
ax.scatter(lon, lat, c=color, marker=marker, label=dtype.capitalize(), s=100) | |
ax.set_xlabel('Longitude') | |
ax.set_ylabel('Latitude') | |
ax.set_title('Issue Locations') | |
handles, labels = ax.get_legend_handles_labels() | |
by_label = dict(zip(labels, handles)) | |
ax.legend(by_label.values(), by_label.keys()) | |
ax.grid(True) | |
map_path = "map_temp.png" | |
fig.savefig(map_path, bbox_inches='tight') | |
plt.close(fig) | |
return map_path | |
except Exception as e: | |
print(f"Error generating map: {str(e)}") | |
return None |