Spaces:
Sleeping
Sleeping
File size: 4,282 Bytes
5ff2435 ee77ee9 5ff2435 ee77ee9 5ff2435 ee77ee9 fe10d81 ee77ee9 5ff2435 ee77ee9 5ff2435 ee77ee9 9230299 ee77ee9 9230299 ee77ee9 9230299 ee77ee9 5ff2435 ee77ee9 5ff2435 9230299 5ff2435 ee77ee9 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 130 131 132 133 134 135 136 137 138 139 140 141 142 |
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 hamwe 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 zihuje uturere, 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"),
# Edges zunganira connectivity
("Gasabo", "Rwamagana"),
("Rwamagana", "Nyagatare"),
("Nyagatare", "Kayonza"),
("Kicukiro", "Muhanga"),
("Muhanga", "Nyamagabe"),
("Nyamagabe", "Rusizi"),
("Rusizi", "Rubavu"),
("Rubavu", "Nyamasheke"),
("Nyamasheke", "Karongi"),
("Karongi", "Rutsiro"),
("Rutsiro", "Ngororero"),
("Ngororero", "Gakenke"),
("Gakenke", "Burera")
]
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)
# Heuristic function yerekana intera hagati y’uturere mu graph
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()
|