| import pandas as pd |
| import streamlit as st |
| from geopy.distance import geodesic |
| from st_aggrid import AgGrid |
|
|
|
|
| class DataFrames: |
| Dframe = pd.DataFrame() |
|
|
|
|
| st.title("Distance Calculator") |
|
|
| st.write( |
| """This app allows you to calculate the distance between two points in a dataframe. |
| Please choose a file containing the latitude and longitude columns for the 2 points. |
| """ |
| ) |
|
|
| distance_sample_file_path = "samples/distance.xlsx" |
|
|
| |
| st.download_button( |
| label="Download Distance Calculator Sample File", |
| data=open(distance_sample_file_path, "rb").read(), |
| file_name="distance.xlsx", |
| mime="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", |
| ) |
|
|
| uploaded_file = st.file_uploader( |
| "Upload Excel file", |
| type=["xlsx"], |
| accept_multiple_files=False, |
| help="Upload the Excel file containing the latitude and longitude columns for the 2 points", |
| ) |
|
|
| if uploaded_file: |
| DataFrames.Dframe = pd.read_excel(uploaded_file, keep_default_na=False) |
|
|
| col1_list = DataFrames.Dframe.columns.tolist() |
| latitude1_dd = st.selectbox( |
| "Choose Latitude of point 1", col1_list, key="latitude1" |
| ) |
| longitude1_dd = st.selectbox( |
| "Choose Longitude of point 1", col1_list, key="longitude1" |
| ) |
| latitude2_dd = st.selectbox( |
| "Choose Latitude of point 2", col1_list, key="latitude2" |
| ) |
| longitude2_dd = st.selectbox( |
| "Choose Longitude of point 2", col1_list, key="longitude2" |
| ) |
|
|
| def calculate_distance(row): |
| coord1 = (row[latitude1_dd], row[longitude1_dd]) |
| coord2 = (row[latitude2_dd], row[longitude2_dd]) |
| return geodesic(coord1, coord2).meters |
|
|
| if st.button("CALCULATE DISTANCE", type="primary"): |
| try: |
| df = DataFrames.Dframe.copy() |
| df["distance_meters"] = df.apply(calculate_distance, axis=1) |
| st.success("The distances are calculated successfully") |
| DataFrames.Dframe = df |
|
|
| @st.fragment |
| def table_data(): |
| if DataFrames.Dframe is not None: |
| AgGrid( |
| DataFrames.Dframe, |
| fit_columns_on_grid_load=True, |
| theme="streamlit", |
| enable_enterprise_modules=True, |
| filter=True, |
| ) |
|
|
| table_data() |
|
|
| except Exception as e: |
| st.error( |
| f"An error occurred. Make sure the file contains the latitudes and longitudes columns. Error: {e}" |
| ) |
|
|
| else: |
| st.info( |
| "Please choose a file containing the latitude and longitude columns for the 2 points" |
| ) |
|
|