Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -8,7 +8,23 @@ locations = {
|
|
8 |
"School Zone": {"lat": -1.93, "lon": 30.03}
|
9 |
}
|
10 |
|
11 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
markers = ""
|
13 |
alerts = []
|
14 |
|
@@ -34,15 +50,19 @@ def simulate_map_google_style():
|
|
34 |
radius: 10
|
35 |
}}).addTo(map).bindPopup("<b>{name}</b><br>Speed: {speed} km/h<br>Cars: {vehicles}<br>Status: {status}");"""
|
36 |
|
|
|
|
|
|
|
37 |
html = f"""
|
38 |
<div id="map" style="width:100%; height:500px;"></div>
|
39 |
<link rel="stylesheet" href="https://unpkg.com/leaflet/dist/leaflet.css"/>
|
40 |
<script src="https://unpkg.com/leaflet/dist/leaflet.js"></script>
|
41 |
<script>
|
42 |
var map = L.map('map').setView([-1.935, 30.05], 13);
|
43 |
-
L.tileLayer('
|
44 |
-
attribution: '
|
45 |
maxZoom: 19
|
|
|
46 |
}}).addTo(map);
|
47 |
L.control.zoom({{ position: 'topright' }}).addTo(map);
|
48 |
{markers}
|
@@ -52,12 +72,14 @@ def simulate_map_google_style():
|
|
52 |
return "\n".join(alerts), html
|
53 |
|
54 |
with gr.Blocks() as demo:
|
55 |
-
gr.Markdown("## 🗺️
|
56 |
|
|
|
57 |
btn = gr.Button("🔁 Refresh Traffic Data")
|
58 |
report = gr.Textbox(label="Traffic Report", lines=8)
|
59 |
map_html = gr.HTML()
|
60 |
|
61 |
-
btn.click(fn=
|
62 |
|
63 |
demo.launch()
|
|
|
|
8 |
"School Zone": {"lat": -1.93, "lon": 30.03}
|
9 |
}
|
10 |
|
11 |
+
tile_layers = {
|
12 |
+
"Light": {
|
13 |
+
"url": "https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png",
|
14 |
+
"attribution": '© <a href="https://carto.com/">CartoDB</a> contributors'
|
15 |
+
},
|
16 |
+
"Dark": {
|
17 |
+
"url": "https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png",
|
18 |
+
"attribution": '© <a href="https://carto.com/">CartoDB</a> contributors'
|
19 |
+
},
|
20 |
+
"Satellite": {
|
21 |
+
"url": "https://{s}.google.com/vt/lyrs=s&x={x}&y={y}&z={z}",
|
22 |
+
"attribution": "© Google",
|
23 |
+
"subdomains": ["mt0", "mt1", "mt2", "mt3"]
|
24 |
+
}
|
25 |
+
}
|
26 |
+
|
27 |
+
def simulate_map_style(style):
|
28 |
markers = ""
|
29 |
alerts = []
|
30 |
|
|
|
50 |
radius: 10
|
51 |
}}).addTo(map).bindPopup("<b>{name}</b><br>Speed: {speed} km/h<br>Cars: {vehicles}<br>Status: {status}");"""
|
52 |
|
53 |
+
layer = tile_layers[style]
|
54 |
+
subdomains_str = f", subdomains: {layer['subdomains']}" if "subdomains" in layer else ""
|
55 |
+
|
56 |
html = f"""
|
57 |
<div id="map" style="width:100%; height:500px;"></div>
|
58 |
<link rel="stylesheet" href="https://unpkg.com/leaflet/dist/leaflet.css"/>
|
59 |
<script src="https://unpkg.com/leaflet/dist/leaflet.js"></script>
|
60 |
<script>
|
61 |
var map = L.map('map').setView([-1.935, 30.05], 13);
|
62 |
+
L.tileLayer('{layer['url']}', {{
|
63 |
+
attribution: '{layer['attribution']}',
|
64 |
maxZoom: 19
|
65 |
+
{subdomains_str}
|
66 |
}}).addTo(map);
|
67 |
L.control.zoom({{ position: 'topright' }}).addTo(map);
|
68 |
{markers}
|
|
|
72 |
return "\n".join(alerts), html
|
73 |
|
74 |
with gr.Blocks() as demo:
|
75 |
+
gr.Markdown("## 🗺️ Traffic Map with Style Selector (Light, Dark, Satellite)")
|
76 |
|
77 |
+
style_dropdown = gr.Dropdown(label="Hitamo Style ya Map", choices=list(tile_layers.keys()), value="Light")
|
78 |
btn = gr.Button("🔁 Refresh Traffic Data")
|
79 |
report = gr.Textbox(label="Traffic Report", lines=8)
|
80 |
map_html = gr.HTML()
|
81 |
|
82 |
+
btn.click(fn=simulate_map_style, inputs=style_dropdown, outputs=[report, map_html])
|
83 |
|
84 |
demo.launch()
|
85 |
+
|