landmark_recognition / mapbox_map.py
molokhovdmitry's picture
Interface changes
890c31a
raw
history blame
2.14 kB
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)