Zeel commited on
Commit
7eeceec
·
1 Parent(s): ec37d32

restrict to one polygon

Browse files
Files changed (1) hide show
  1. app.py +25 -5
app.py CHANGED
@@ -5,6 +5,22 @@ import pandas as pd
5
  import geopandas as gpd
6
  import leafmap.foliumap as leafmap
7
  from optree import tree_map
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
 
9
  # wide streamlit display
10
  st.set_page_config(layout="wide")
@@ -40,7 +56,7 @@ if not file_url:
40
  if not file_url:
41
  st.stop()
42
 
43
- if ("file_url" in st.session_state) and (st.session_state.file_url == file_url):
44
  # st.toast("Using cached data")
45
  input_gdf = st.session_state.input_gdf
46
  else:
@@ -53,8 +69,12 @@ else:
53
  ID = file_url.replace("https://drive.google.com/open?id=", "")
54
  file_url = f"https://drive.google.com/uc?id={ID}"
55
 
56
- input_gdf = gpd.read_file(file_url)
57
- input_gdf = input_gdf.to_crs(epsg=7761) # Gujarat zone
 
 
 
 
58
  st.session_state.input_gdf = input_gdf
59
  # st.toast("Data loaded and cached")
60
 
@@ -64,7 +84,7 @@ def format_fn(x):
64
 
65
 
66
  with st.expander("Advanced Controls", expanded=False):
67
- input_geometry_idx = st.selectbox("Select the geometry", input_gdf.index, format_func=format_fn)
68
  map_type = st.radio(
69
  "",
70
  ["Esri Satellite Map", "Google Hybrid Map (displays place names)", "Google Satellite Map"],
@@ -72,7 +92,7 @@ with st.expander("Advanced Controls", expanded=False):
72
  )
73
  height = st.number_input("Map height (px)", 1, 10000, 600, 1)
74
 
75
- geometry_gdf = input_gdf[input_gdf.index == input_geometry_idx]
76
 
77
 
78
  def check_valid_geometry(geometry_gdf):
 
5
  import geopandas as gpd
6
  import leafmap.foliumap as leafmap
7
  from optree import tree_map
8
+ from shapely.ops import transform
9
+
10
+
11
+ def shape_3d_to_2d(shape):
12
+ if shape.has_z:
13
+ return transform(lambda x, y, z: (x, y), shape)
14
+ else:
15
+ return shape
16
+
17
+
18
+ def preprocess_gdf(gdf):
19
+ gdf = gdf.to_crs(epsg=7761) # epsg for Gujarat
20
+ gdf["geometry"] = gdf["geometry"].apply(shape_3d_to_2d)
21
+ gdf["geometry"] = gdf.buffer(0) # Fixes some invalid geometries
22
+ return gdf
23
+
24
 
25
  # wide streamlit display
26
  st.set_page_config(layout="wide")
 
56
  if not file_url:
57
  st.stop()
58
 
59
+ if ("file_url" in st.session_state) and ("input_gdf" in st.session_state) and (st.session_state.file_url == file_url):
60
  # st.toast("Using cached data")
61
  input_gdf = st.session_state.input_gdf
62
  else:
 
69
  ID = file_url.replace("https://drive.google.com/open?id=", "")
70
  file_url = f"https://drive.google.com/uc?id={ID}"
71
 
72
+ input_gdf = preprocess_gdf(gpd.read_file(file_url))
73
+ if len(input_gdf) != 1:
74
+ st.error(
75
+ f"Expecting only one geometry per KML, but found {len(input_gdf)} geometries. Please fix the KML or provide another KML."
76
+ )
77
+ st.stop()
78
  st.session_state.input_gdf = input_gdf
79
  # st.toast("Data loaded and cached")
80
 
 
84
 
85
 
86
  with st.expander("Advanced Controls", expanded=False):
87
+ # input_geometry_idx = st.selectbox("Select the geometry", input_gdf.index, format_func=format_fn)
88
  map_type = st.radio(
89
  "",
90
  ["Esri Satellite Map", "Google Hybrid Map (displays place names)", "Google Satellite Map"],
 
92
  )
93
  height = st.number_input("Map height (px)", 1, 10000, 600, 1)
94
 
95
+ geometry_gdf = input_gdf[input_gdf.index == 0]
96
 
97
 
98
  def check_valid_geometry(geometry_gdf):