| 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() |