|
import gradio as gr |
|
import requests |
|
from mapbox import Geocoder |
|
|
|
|
|
MAPBOX_TOKEN = 'pk.eyJ1IjoiYWRpbDk4IiwiYSI6ImNtYjdzODZ1NzBkcXcybHM2OHcwZTZ5NzAifQ.SlPs3gdrGqD7iU3Fk35AFw' |
|
|
|
|
|
geocoder = Geocoder(access_token=MAPBOX_TOKEN) |
|
|
|
|
|
def get_coordinates(location_name): |
|
response = geocoder.forward(location_name, limit=1) |
|
if response.status_code == 200: |
|
data = response.json() |
|
if data['features']: |
|
coords = data['features'][0]['center'] |
|
return coords[1], coords[0] |
|
return None |
|
|
|
|
|
def get_route_info(coord1, coord2): |
|
url = f"http://router.project-osrm.org/route/v1/driving/{coord1[1]},{coord1[0]};{coord2[1]},{coord2[0]}?overview=false" |
|
response = requests.get(url) |
|
data = response.json() |
|
if 'routes' in data and data['routes']: |
|
distance_km = data['routes'][0]['distance'] / 1000 |
|
duration_min = data['routes'][0]['duration'] / 60 |
|
return distance_km, duration_min |
|
return None, None |
|
|
|
|
|
def estimate_fuel(distance_km, avg_kmpl): |
|
return round(distance_km / avg_kmpl, 2) |
|
|
|
|
|
def estimate_all(loc1, loc2, user_kmpl): |
|
coord1 = get_coordinates(loc1) |
|
coord2 = get_coordinates(loc2) |
|
|
|
if not coord1 or not coord2: |
|
return "Failed to get location coordinates. Please check input names.", None, None, None |
|
|
|
distance, duration = get_route_info(coord1, coord2) |
|
if distance is None: |
|
return "Failed to retrieve route data.", None, None, None |
|
|
|
fuel = estimate_fuel(distance, user_kmpl) |
|
return ( |
|
"Here are the results:", |
|
f"π Distance: {distance:.2f} km", |
|
f"β±οΈ Estimated Time: {duration:.2f} minutes", |
|
f"β½ Fuel Used: {fuel:.2f} litres (at {user_kmpl} km/l)" |
|
) |
|
|
|
|
|
demo = gr.Interface( |
|
fn=estimate_all, |
|
inputs=[ |
|
gr.Textbox(label="Enter Location 1"), |
|
gr.Textbox(label="Enter Location 2"), |
|
gr.Slider(1.0, 100.0, value=15.0, label="Vehicle Mileage (km/l)") |
|
], |
|
outputs=[ |
|
gr.Textbox(label="Status"), |
|
gr.Textbox(label="Distance"), |
|
gr.Textbox(label="Time"), |
|
gr.Textbox(label="Fuel Used") |
|
], |
|
title="Distance, Time & Fuel Estimator π", |
|
description="App Developed by Koshur AI" |
|
) |
|
|
|
demo.launch() |
|
|