Spaces:
Sleeping
Sleeping
File size: 3,882 Bytes
5ff2435 ee77ee9 5ff2435 3fbf837 5ff2435 ee77ee9 fe10d81 ee77ee9 5ff2435 ee77ee9 5ff2435 ee77ee9 3fbf837 ee77ee9 3fbf837 ee77ee9 3fbf837 ee77ee9 5ff2435 ee77ee9 5ff2435 9230299 5ff2435 ee77ee9 3fbf837 5ff2435 3fbf837 5ff2435 ee77ee9 5ff2435 ee77ee9 cf2c7b4 9230299 cf2c7b4 5ff2435 ee77ee9 9230299 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
import gradio as gr
import folium
import networkx as nx
from folium import Map, Marker, PolyLine
from math import radians, cos, sin, sqrt, atan2
# Uturere two mu Rwanda na coordinates (latitude, longitude)
places = {
"Nyarugenge": (-1.9577, 30.0619),
"Gasabo": (-1.9400, 30.0861),
"Kicukiro": (-1.9781, 30.0597),
"Burera": (-1.4800, 29.7300),
"Gakenke": (-1.5700, 29.7561),
"Rulindo": (-1.8333, 30.0833),
"Musanze": (-1.5014, 29.6344),
"Gicumbi": (-1.5794, 30.0542),
"Nyagatare": (-1.3100, 30.3000),
"Gatsibo": (-1.6800, 30.3900),
"Kayonza": (-2.0000, 30.5667),
"Kirehe": (-2.3553, 30.7767),
"Ngoma": (-2.1600, 30.4700),
"Rwamagana": (-1.9491, 30.4349),
"Bugesera": (-2.2083, 30.2576),
"Kamonyi": (-2.0833, 29.9000),
"Muhanga": (-2.1200, 29.7561),
"Ruhango": (-2.2136, 29.7628),
"Nyamagabe": (-2.4978, 29.4897),
"Nyaruguru": (-2.5806, 29.4306),
"Huye": (-2.5921, 29.7408),
"Gisagara": (-2.6283, 29.6820),
"Nyanza": (-2.3566, 29.7507),
"Rutsiro": (-2.0986, 29.3269),
"Karongi": (-2.0667, 29.4677),
"Rubavu": (-1.7481, 29.2730),
"Rusizi": (-2.5406, 29.3737),
"Nyamasheke": (-2.4700, 29.3222),
"Ngororero": (-1.8733, 29.5811)
}
# Function yo kubara intera hagati y’ahantu habiri (heuristic)
def haversine(coord1, coord2):
R = 6371 # Radius y'isi muri km
lat1, lon1 = coord1
lat2, lon2 = coord2
dlat = radians(lat2 - lat1)
dlon = radians(lon2 - lon1)
a = sin(dlat/2)**2 + cos(radians(lat1)) * cos(radians(lat2)) * sin(dlon/2)**2
c = 2 * atan2(sqrt(a), sqrt(1 - a))
return R * c
# Kubaka graph y’inzira
G = nx.Graph()
# Edges hagati y’uturere dushobora guhuza (weight ni intera ya km ukoresheje haversine)
edges = [
("Nyarugenge", "Gasabo"),
("Gasabo", "Kicukiro"),
("Burera", "Gakenke"),
("Gakenke", "Rulindo"),
("Musanze", "Gicumbi"),
("Nyagatare", "Gatsibo"),
("Kayonza", "Kirehe"),
("Ngoma", "Rwamagana"),
("Bugesera", "Kamonyi"),
("Muhanga", "Ruhango"),
("Nyamagabe", "Nyaruguru"),
("Huye", "Gisagara"),
("Nyanza", "Ruhango"),
("Rutsiro", "Karongi"),
("Rubavu", "Rusizi"),
("Nyamasheke", "Ngororero"),
("Rulindo", "Gasabo"),
("Gicumbi", "Nyagatare"),
("Kicukiro", "Kamonyi"),
("Kamonyi", "Muhanga"),
("Ruhango", "Nyamagabe"),
("Karongi", "Rubavu"),
("Rusizi", "Nyamasheke"),
("Ngororero", "Rutsiro")
]
for edge in edges:
coord1 = places[edge[0]]
coord2 = places[edge[1]]
distance = haversine(coord1, coord2)
G.add_edge(edge[0], edge[1], weight=distance)
# Function yerekana intera hagati y’uturere mu graph nk'heuristic
def heuristic(u, v):
return haversine(places[u], places[v])
def generate_map(start, end):
m = Map(location=[-2.0, 30.0], zoom_start=8)
for name, coords in places.items():
Marker(location=coords, popup=name).add_to(m)
if start == end:
return "Hitamo aho utangiriye n’aho ugiye bitandukanye.", m._repr_html_()
if not nx.has_path(G, start, end):
return f"Nta nzira ibaho hagati ya {start} na {end}.", m._repr_html_()
try:
path = nx.astar_path(G, start, end, heuristic=heuristic, weight='weight')
coords = [places[p] for p in path]
PolyLine(coords, color="blue", weight=5).add_to(m)
return "Inzira ngufi ni: " + " ➔ ".join(path), m._repr_html_()
except Exception as e:
return f"Ntibishoboka kubona inzira: {str(e)}", m._repr_html_()
iface = gr.Interface(
fn=generate_map,
inputs=[
gr.Dropdown(list(places.keys()), label="Hitamo aho uri"),
gr.Dropdown(list(places.keys()), label="Hitamo aho ugiye")
],
outputs=[
gr.Textbox(label="Ubutumwa"),
gr.HTML(label="Ikarita")
],
title="🗺️ Rwanda Smart Route Planner"
)
iface.launch()
|