Spaces:
Sleeping
Sleeping
import streamlit as st | |
import pandas as pd | |
import folium | |
from streamlit_folium import st_folium | |
def plot_trip_on_map(trip_id: str, data: dict[str, pd.DataFrame]): | |
trips_df = data["trips"] | |
shapes_df = data["shapes"] | |
stops_times_df = data["stop_times"] | |
stops_df = data["stops"] | |
# Filter trips and shapes by trip_id | |
trip_shapes = trips_df[trips_df["trip_id"] == trip_id]["shape_id"].unique() | |
# Get shape points for the trip | |
shape_points = shapes_df[shapes_df["shape_id"].isin(trip_shapes)] | |
shape_points = shape_points.sort_values( | |
by=["shape_pt_sequence"] | |
) # Sort by sequence | |
# Extract trips coordinates | |
coordinates = shape_points[["shape_pt_lat", "shape_pt_lon"]].values.tolist() | |
# Filter stops | |
stops_times_trip = stops_times_df[stops_times_df["trip_id"] == trip_id][ | |
"stop_id" | |
].unique() | |
stops_points = stops_df[stops_df["stop_id"].isin(stops_times_trip)] | |
# Extract stop coordinates | |
stops_coordinates = stops_points[["stop_lat", "stop_lon"]].values.tolist() | |
# Create folium map centered at the first point | |
if len(coordinates) > 0: | |
map_center = coordinates[0] | |
map = folium.Map(location=map_center, zoom_start=13) # type: ignore | |
# Plot the shape as a polyline leave for later test because is connecting dots | |
# and I am interesting on the points I receive | |
# folium.PolyLine(locations=coordinates, color='blue', weight=5, opacity=0.7).add_to(m) | |
# Add markers for each trip point | |
for coord in coordinates: | |
folium.CircleMarker(location=coord, radius=3, color="red").add_to(map) # type: ignore | |
# Add markers for each stop | |
for stop_coord in stops_coordinates: | |
folium.CircleMarker(location=stop_coord, radius=3, color="green").add_to(map) # type: ignore | |
# Display map | |
st_folium(map, width=2000) | |
else: | |
st.warning(f"No shape data found for trip {trip_id}.") | |
def load_data() -> dict[str, pd.DataFrame]: | |
# read all parquet files | |
return { | |
"routes": pd.read_parquet("./data/routes.parquet.gzip"), | |
"trips": pd.read_parquet("./data/trips.parquet.gzip"), | |
"shapes": pd.read_parquet("./data/shapes.parquet.gzip"), | |
"stops": pd.read_parquet("./data/stops.parquet.gzip"), | |
"stop_times": pd.read_parquet("./data/stop_times.parquet.gzip"), | |
} | |