DavMelchi commited on
Commit
f3e5a17
·
1 Parent(s): 270acdd

Adding multi points distances calculator

Browse files
Files changed (2) hide show
  1. app.py +5 -1
  2. apps/multi_points_distance_calculator.py +101 -0
app.py CHANGED
@@ -15,9 +15,13 @@ pages = {
15
  "Apps": [
16
  st.Page("apps/database_page.py", title="Generate Databases"),
17
  st.Page("apps/core_dump_page.py", title="Parse dump core"),
18
- st.Page("apps/import_physical_db.py", title="Physical Database Verification"),
19
  st.Page("apps/gps_converter.py", title="GPS Converter"),
20
  st.Page("apps/distance.py", title="Distance Calculator"),
 
 
 
 
 
21
  ],
22
  "Documentations": [
23
  st.Page("documentations/database_doc.py", title="Databases Documentation"),
 
15
  "Apps": [
16
  st.Page("apps/database_page.py", title="Generate Databases"),
17
  st.Page("apps/core_dump_page.py", title="Parse dump core"),
 
18
  st.Page("apps/gps_converter.py", title="GPS Converter"),
19
  st.Page("apps/distance.py", title="Distance Calculator"),
20
+ st.Page(
21
+ "apps/multi_points_distance_calculator.py",
22
+ title="Multi Points Distance Calculator",
23
+ ),
24
+ st.Page("apps/import_physical_db.py", title="Physical Database Verification"),
25
  ],
26
  "Documentations": [
27
  st.Page("documentations/database_doc.py", title="Databases Documentation"),
apps/multi_points_distance_calculator.py ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import streamlit as st
3
+ from geopy.distance import geodesic
4
+
5
+
6
+ # Function to calculate distances while preserving all original columns
7
+ def calculate_distances(
8
+ df1: pd.DataFrame,
9
+ df2: pd.DataFrame,
10
+ code_col1,
11
+ lat_col1,
12
+ long_col1,
13
+ code_col2,
14
+ lat_col2,
15
+ long_col2,
16
+ ):
17
+ distances = []
18
+
19
+ for _, row1 in df1.iterrows():
20
+ for _, row2 in df2.iterrows():
21
+ coord1 = (row1[lat_col1], row1[long_col1])
22
+ coord2 = (row2[lat_col2], row2[long_col2])
23
+ distance_km = geodesic(coord1, coord2).kilometers # Compute distance
24
+
25
+ # Combine all original columns + distance
26
+ combined_row = {
27
+ **row1.to_dict(), # Keep all columns from Dataset1
28
+ **{
29
+ f"{col}_Dataset2": row2[col] for col in df2.columns
30
+ }, # Keep all columns from Dataset2
31
+ "Distance_km": distance_km,
32
+ }
33
+ distances.append(combined_row)
34
+
35
+ df_distances = pd.DataFrame(distances)
36
+
37
+ # Find the closest point for each Point1
38
+ df_closest: pd.DataFrame = df_distances.loc[
39
+ df_distances.groupby(code_col1)["Distance_km"].idxmin()
40
+ ]
41
+
42
+ return df_distances, df_closest
43
+
44
+
45
+ # Streamlit UI
46
+ st.title("Multi Points Distance Calculator")
47
+
48
+ st.write(
49
+ """This app allows you to calculate the distance between multiple points in 2 datasets.
50
+ Please choose a file containing the latitude and longitude columns for each dataset.
51
+ """
52
+ )
53
+
54
+ # Upload Dataset 1
55
+ st.subheader("Upload Dataset 1 (Reference Points)")
56
+ file1 = st.file_uploader("Upload first dataset (Excel)", type=["xlsx"], key="file1")
57
+
58
+ # Upload Dataset 2
59
+ st.subheader("Upload Dataset 2 (Comparison Points)")
60
+ file2 = st.file_uploader("Upload second dataset (Excel)", type=["xlsx"], key="file2")
61
+
62
+ if file1 and file2:
63
+ try:
64
+ # Read the datasets
65
+ df1 = pd.read_excel(file1)
66
+ df2 = pd.read_excel(file2)
67
+
68
+ st.subheader("Select Columns for Dataset 1")
69
+ code_col1 = st.selectbox("Select 'CODE' Column", df1.columns, key="code1")
70
+ lat_col1 = st.selectbox("Select 'Latitude' Column", df1.columns, key="lat1")
71
+ long_col1 = st.selectbox("Select 'Longitude' Column", df1.columns, key="long1")
72
+
73
+ st.subheader("Select Columns for Dataset 2")
74
+ code_col2 = st.selectbox("Select 'CODE' Column", df2.columns, key="code2")
75
+ lat_col2 = st.selectbox("Select 'Latitude' Column", df2.columns, key="lat2")
76
+ long_col2 = st.selectbox("Select 'Longitude' Column", df2.columns, key="long2")
77
+
78
+ # Calculate distances when button is clicked
79
+ if st.button("Calculate Distances"):
80
+ df_distances, df_closest = calculate_distances(
81
+ df1, df2, code_col1, lat_col1, long_col1, code_col2, lat_col2, long_col2
82
+ )
83
+
84
+ # Display all distances
85
+ st.subheader("All Distances")
86
+ st.dataframe(df_distances)
87
+
88
+ # Display closest points
89
+ st.subheader("Closest Matches")
90
+ st.dataframe(df_closest)
91
+
92
+ # Downloadable CSV
93
+ st.download_button(
94
+ label="Download Closest Matches as CSV",
95
+ data=df_closest.to_csv(index=False),
96
+ file_name="closest_matches.csv",
97
+ mime="text/csv",
98
+ )
99
+
100
+ except Exception as e:
101
+ st.error(f"Error processing files: {e}")