Spaces:
Sleeping
Sleeping
import streamlit as st | |
import pandas as pd | |
import plotly.graph_objects as go | |
def preprocess_df(df): | |
""" | |
Убрать строки без координат, преобразовать координаты в float. | |
""" | |
no_coords = df['latitude'] == '' | |
df = df.drop(df[no_coords].index) | |
df['latitude'] = df['latitude'].astype('float') | |
df['longitude'] = df['longitude'].astype('float') | |
return df | |
def plot_map(landmarks): | |
# Загрузка данных | |
data = pd.DataFrame(landmarks) | |
data = preprocess_df(data) | |
# Создание маркеров | |
marker_size = 12 # Размер маркера | |
fig = go.Figure() | |
marker_colors = ['orange', 'purple', 'red', 'green'] | |
for i, row in data.iterrows(): | |
if type(row['latitude']) is not float: | |
continue | |
fig.add_trace(go.Scattermapbox( | |
name=row['find'], | |
lat=[row['latitude']], | |
lon=[row['longitude']], | |
mode='markers', | |
marker=dict( | |
size=marker_size, | |
color=marker_colors[i % len(marker_colors)], | |
sizemode='diameter', # Размер маркера в диаметрах | |
), | |
text=row['find'] | |
)) | |
# Вычисление границы области, содержащей все маркеры | |
min_lat, max_lat = data['latitude'].min(), data['latitude'].max() | |
min_lon, max_lon = data['longitude'].min(), data['longitude'].max() | |
# Рассчитываем центр и масштаб для отображения всех маркеров | |
center_lat = (min_lat + max_lat) / 2 | |
center_lon = (min_lon + max_lon) / 2 | |
zoom_level = 12 # Масштаб (может потребоваться настройка) | |
# Настройка карты | |
fig.update_layout( | |
mapbox_style="carto-darkmatter", | |
mapbox=dict( | |
center=dict(lat=center_lat, lon=center_lon), | |
zoom=zoom_level, | |
), | |
) | |
# Отображение карты в Streamlit | |
st.plotly_chart(fig, use_container_width=True) | |