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