Autoroute / app.py
Lbasara's picture
v0.2.0 Readable time, distance, price, road ; legend added
a02a3e4
import pandas as pd
import osmnx as ox
import panel as pn
import param
import colorcet as cc
import autoroute
transformer = autoroute.to_Lambert93()
pn.extension()
class Pars(param.Parameterized):
orig_adr= param.String(label="Origine")
dest_adr= param.String(label="Destination")
precision = param.Integer(label="Granularité routes", bounds=(2, 6), default=4)
par=Pars()
calcul=pn.widgets.Button(button_type= "primary", name="Calculer parcours")
carte=pn.pane.plot.Folium(min_height=1000, sizing_mode='stretch_both')
def calculs(dummy):
calcul.disabled=True
orig_coo=ox.geocoder.geocode(par.orig_adr)
dest_coo=ox.geocoder.geocode(par.dest_adr)
calcul.name="Téléchargement carte"
G=autoroute.download_graph(orig_coo, dest_coo, par.precision)
calcul.name="Calcul itinéraires"
Gc=autoroute.add_tarifs(G)
orig_lamb=transformer.transform(*orig_coo)
dest_lamb=transformer.transform(*dest_coo)
orig_id=ox.nearest_nodes(Gc, *orig_lamb)
dest_id=ox.nearest_nodes(Gc, *dest_lamb)
df=autoroute.tariftimedf(Gc, orig_id, dest_id)
calcul.name="Affichage résultats"
gpfs=pd.concat([autoroute.clean_gfast(autoroute.ox.routing.route_to_gdf(Gc, row["path"], weight= "travel_time"))
for _, row in df.iterrows()])
carte.object=gpfs.explore(column="legend", tooltip= ["poids", "rue"], cmap=cc.b_glasbey_category10,
map_kwds={"font_size": 12}, style_kwds={"weight": 3}, highlight_kwds={"weight": 5})
calcul.disabled=False
calcul.on_click(calculs)
app=pn.template.MaterialTemplate(
title="Autoroute v0.2.0",
sidebar=[pn.Param(par, name="Paramètres"), calcul],
main=carte,
)
app.servable()