import streamlit as st import pandas as pd import plotly.express as px class GeospatialAnalyzer: def analyze_geospatial_data(self, df): lat_columns = [col for col in df.columns if 'lat' in col.lower()] lon_columns = [col for col in df.columns if 'lon' in col.lower()] if len(lat_columns) > 0 and len(lon_columns) > 0: lat_column = st.selectbox("Select latitude column", lat_columns) lon_column = st.selectbox("Select longitude column", lon_columns) map_type = st.selectbox("Select map type", ["Scatter Mapbox", "Density Mapbox"]) if map_type == "Scatter Mapbox": self.create_scatter_mapbox(df, lat_column, lon_column) elif map_type == "Density Mapbox": self.create_density_mapbox(df, lat_column, lon_column) else: st.write("No latitude and longitude columns found in the dataset.") def create_scatter_mapbox(self, df, lat_column, lon_column): st.subheader("Scatter Mapbox") color_column = st.selectbox("Select color column (optional)", ["None"] + df.columns.tolist()) size_column = st.selectbox("Select size column (optional)", ["None"] + df.columns.tolist()) fig = px.scatter_mapbox(df, lat=lat_column, lon=lon_column, color=None if color_column == "None" else color_column, size=None if size_column == "None" else size_column, zoom=3) fig.update_layout(mapbox_style="open-street-map") st.plotly_chart(fig) def create_density_mapbox(self, df, lat_column, lon_column): st.subheader("Density Mapbox") fig = px.density_mapbox(df, lat=lat_column, lon=lon_column, zoom=3, radius=10) fig.update_layout(mapbox_style="open-street-map") st.plotly_chart(fig)