KITT / skills /routing.py
sasan's picture
Add .gitignore file and update skills package
cb47347
raw
history blame
3.35 kB
def calculate_route():
api_key = "api_key"
origin = "49.631997,6.171029"
destination = "49.586745,6.140002"
url = f"https://api.tomtom.com/routing/1/calculateRoute/{origin}:{destination}/json?key={api_key}"
response = requests.get(url)
data = response.json()
lats = []
lons = []
for point in data['routes'][0]['legs'][0]['points']:
lats.append(point['latitude'])
lons.append(point['longitude'])
# fig = px.line_geo(lat=lats, lon=lons)
# fig.update_geos(fitbounds="locations")
fig = px.line_mapbox(lat=lats, lon=lons, zoom=12, height=600)
fig.update_layout(mapbox_style="open-street-map", mapbox_zoom=12, mapbox_center_lat=lats[0], mapbox_center_lon=lons[0])
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
return fig
def find_route(lat_depart="0", lon_depart="0", city_depart="", address_destination="", depart_time ="", **kwargs):
"""
Return the distance and the estimated time to go to a specific destination from the current place, at a specified depart time.
:param lat_depart (string): latitude of depart
:param lon_depart (string): longitude of depart
:param city_depart (string): Required. city of depart
:param address_destination (string): Required. The destination
:param depart_time (string): departure hour, in the format '08:00:20'.
"""
print(address_destination)
date = "2025-03-29T"
departure_time = '2024-02-01T' + depart_time
lat, lon, city = check_city_coordinates(lat_depart,lon_depart,city_depart)
lat_dest, lon_dest = find_coordinates(address_destination)
#print(lat_dest, lon_dest)
#print(departure_time)
r = requests.get('https://api.tomtom.com/routing/1/calculateRoute/{0},{1}:{2},{3}/json?key={4}&departAt={5}'.format(
lat_depart,
lon_depart,
lat_dest,
lon_dest,
TOMTOM_KEY,
departure_time
))
# Parse JSON from the response
data = r.json()
#print(data)
#print(data)
result = data['routes'][0]['summary']
# Calculate distance in kilometers (1 meter = 0.001 kilometers)
distance_km = result['lengthInMeters'] * 0.001
# Calculate travel time in minutes (1 second = 1/60 minutes)
time_minutes = result['travelTimeInSeconds'] / 60
if time_minutes < 60:
time_display = f"{time_minutes:.0f} minutes"
else:
hours = int(time_minutes / 60)
minutes = int(time_minutes % 60)
time_display = f"{hours} hours" + (f" and {minutes} minutes" if minutes > 0 else "")
# Extract arrival time from the JSON structure
arrival_time_str = result['arrivalTime']
# Convert string to datetime object
arrival_time = datetime.fromisoformat(arrival_time_str)
# Extract and display the arrival hour in HH:MM format
arrival_hour_display = arrival_time.strftime("%H:%M")
# return the distance and time
return(f"The route to go to {address_destination} is {distance_km:.2f} km and {time_display}. Leaving now, the arrival time is estimated at {arrival_hour_display} " )
# Sort the results based on distance
#sorted_results = sorted(results, key=lambda x: x['dist'])
#return ". ".join(formatted_results)