meaguirre3's picture
Update app.py
138a1ea verified
from dash import Dash, dcc, html, Input, Output
import pandas as pd
import numpy as np
import plotly.express as px
import folium
from folium.plugins import MarkerCluster
from branca.element import Figure
import polyline
def get_segment(df , lId):
df = df[df['id'].isin(lId)]
df["polyline"] = df["map_pol"].apply(polyline.decode)
return df["polyline"].tolist()
df_seg = pd.read_csv("segments.csv")
df_tsne = pd.read_csv("tnse_vect_2d.csv")
# app
app = Dash(__name__)
server = app.server # req Hugging Face
scatter_fig = px.scatter(
df_tsne,
x="x",
y="y",
hover_name="item",
hover_data=["item"],
custom_data=["item"],
title="t-SNE visualization Segments Embeddings"
)
scatter_fig.update_layout(dragmode='lasso')
app.layout = html.Div([
html.H3("Select Segment(Embeddings) to visualize them on a Map(location)"),
html.Div([
dcc.Graph(id="scatter", figure=scatter_fig, style={"width": "50%", "height": "500px"}),
html.Iframe(id="folium_map", width="50%", height="500")
], style={"display": "flex", "justify-content": "space-between"}),
html.Div(id="output", style={"marginTop": "20px"})
])
@app.callback(
Output("output", "children"),
Output("folium_map", "srcDoc"),
Input("scatter", "selectedData")
)
def actualizar_mapa(selection):
if not selection or "points" not in selection:
return "Select at least one point.", ""
try:
ids = [p['customdata'][0] for p in selection['points']]
except (KeyError, TypeError):
# Fallback por si no llega customdata
ids = [int(p['hovertext']) for p in selection['points']]
global df_seg
lSegments = get_segment(df_seg , ids)
m = folium.Map(location=[-0.19204405740703162, -78.47700359958313], zoom_start=10)
color_list = [
'red', 'blue', 'green', 'orange', 'purple', 'darkred',
'cadetblue', 'darkgreen', 'pink', 'black'
]
for idx, route in enumerate(lSegments):
color = color_list[idx % len(color_list)]
folium.PolyLine(
locations=route,
color=color,
weight=5,
opacity=0.8
).add_to(m)
fig = Figure()
fig.add_child(m)
mapa_html = m.get_root().render()
return f"IDs : {ids}" , mapa_html
if __name__ == "__main__":
app.run(host="0.0.0.0", port=7860)