File size: 2,122 Bytes
bbe788d
 
 
940f5b5
bbe788d
 
 
c9c2156
bbe788d
 
 
 
 
 
 
643a822
 
 
 
 
 
 
 
 
 
b5290a2
 
 
c9c2156
bbe788d
b5290a2
c9c2156
b5290a2
 
 
 
0f74558
bbe788d
b5290a2
643a822
bbe788d
b5290a2
c9c2156
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
import streamlit as st
import pandas as pd
import numpy as np
import openpyxl
from geopy.distance import geodesic

# 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 = 15 - np.log10(max_distance / 25000)

# 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=0.0)
        custom_lon = st.number_input('Enter Longitude', value=0.0)
    else:
        custom_lat, custom_lon = data['latitude'].mean(), data['longitude'].mean()

    # 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
    radius_in_meters = st.slider('Selecione raio (em metros)', min_value=100, max_value=5000, value=1000)

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