Spaces:
Sleeping
Sleeping
File size: 2,820 Bytes
bbe788d 940f5b5 bbe788d 0697975 bbe788d c9c2156 bbe788d 643a822 d5bb172 643a822 b5290a2 c9c2156 bbe788d b5290a2 c9c2156 b5290a2 9c795d0 80eb9a3 b5290a2 0f74558 80eb9a3 bbe788d b5290a2 643a822 bbe788d 80eb9a3 bbe788d d669f57 bbe788d efca6f0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
import streamlit as st
import pandas as pd
import numpy as np
import openpyxl
from geopy.distance import geodesic
# Set wide mode
st.set_page_config(layout="wide")
# Set dark theme
st.markdown(
"""
<style>
body {
color: white;
background-color: #1e1e1e;
}
.st-df-header, .st-df-body, .st-df-caption {
color: #f8f9fa; /* Bootstrap table header text color */
}
.st-eb {
background-color: #343a40; /* Streamlit exception box background color */
}
</style>
""",
unsafe_allow_html=True
)
# Create a DataFrame with sample data
data = pd.read_excel('ven_ter_fim_PEDÓ.xlsx')
# Function to calculate distance in meters between two coordinates
def calculate_distance(lat1, lon1, lat2, lon2):
coords_1 = (lat1, lon1)
coords_2 = (lat2, lon2)
return geodesic(coords_1, coords_2).meters
# Find the maximum distance between coordinates
max_distance = 0
for index, row in data.iterrows():
distance = calculate_distance(row['latitude'], row['longitude'], data['latitude'].mean(), data['longitude'].mean())
if distance > max_distance:
max_distance = distance
# Calculate a zoom level based on the maximum distance
zoom_level = round(15 - np.log10(max_distance))
# Create a sidebar for controls
with st.sidebar:
# Display a title
st.title('avalia.se')
# Dropdown to select specific coordinates
selected_coords = st.selectbox('Selecione Coordenadas', ['Random', 'Custom'])
if selected_coords == 'Custom':
custom_lat = st.number_input('Enter Latitude', value=-29.45086)
custom_lon = st.number_input('Enter Longitude', value=-51.9847)
radius_visible = True # Show radius slider for custom coordinates
else:
custom_lat, custom_lon = data['latitude'].mean(), data['longitude'].mean()
radius_visible = False # Hide radius slider for random coordinates
# Slider for setting the zoom level
zoom_level = st.slider('Nível de zoom', min_value=1, max_value=15, value=zoom_level)
# Slider to set the radius in meters (conditionally visible)
radius_in_meters = st.slider('Selecione raio (em metros)', min_value=100, max_value=5000, value=1000, visible=radius_visible)
# Filter data based on the radius
if selected_coords == 'Custom':
filtered_data = data[data.apply(lambda x: calculate_distance(x['latitude'], x['longitude'], custom_lat, custom_lon), axis=1) <= radius_in_meters]
else:
filtered_data = data
# Add a custom CSS class to the map container
st.markdown(f"""<style>
.map {{
width: 100%;
height: 100vh;
}}
</style>""", unsafe_allow_html=True)
# Wrap the map in a container with the custom CSS class
with st.container():
st.map(filtered_data, zoom=zoom_level, use_container_width=True) |