A map app to visualize last positions of a fleet.
To upload files, please first save the app
import streamlit as st
import pandas as pd
import pydeck as pdk
import numpy as np
st.title("Fleet Tracker")
# Generate some sample fleet data
np.random.seed(42)
n_vehicles = 20
# Create sample data for the fleet
fleet_data = pd.DataFrame({
'vehicle_id': [f'Vehicle-{i:02d}' for i in range(1, n_vehicles + 1)],
'latitude': np.random.uniform(37.7, 37.9, n_vehicles),
'longitude': np.random.uniform(-122.5, -122.3, n_vehicles),
'status': np.random.choice(['Active', 'Idle', 'Maintenance'], n_vehicles),
'last_updated': pd.date_range(end=pd.Timestamp.now(), periods=n_vehicles, freq='5T')
})
# Color mapping for vehicle status
color_map = {
'Active': [0, 255, 0, 160], # Green
'Idle': [255, 165, 0, 160], # Orange
'Maintenance': [255, 0, 0, 160] # Red
}
fleet_data['color'] = fleet_data['status'].map(color_map)
# Create a layer for the vehicles
layer = pdk.Layer(
'ScatterplotLayer',
data=fleet_data,
get_position='[longitude, latitude]',
get_color='color',
get_radius=100,
pickable=True,
)
# Set the initial viewport location
view_state = pdk.ViewState(
latitude=fleet_data['latitude'].mean(),
longitude=fleet_data['longitude'].mean(),
zoom=11,
pitch=0
)
# Create the map
deck = pdk.Deck(
layers=[layer],
initial_view_state=view_state,
tooltip={
'html': '<b>Vehicle:</b> {vehicle_id}<br/>'
'<b>Status:</b> {status}<br/>'
'<b>Last Updated:</b> {last_updated}',
'style': {
'backgroundColor': 'steelblue',
'color': 'white'
}
}
)
# Show the map
st.pydeck_chart(deck)
# Show the fleet data in a table below the map
st.subheader("Fleet Status")
st.dataframe(
fleet_data.drop('color', axis=1).sort_values('vehicle_id'),
hide_index=True
)
Hi! I can help you with any questions about Streamlit and Python. What would you like to know?