Spaces:
Sleeping
Sleeping
first commit
Browse files- app.py +50 -0
- requirements.txt +2 -0
app.py
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import json
|
2 |
+
import streamlit as st
|
3 |
+
import pandas as pd
|
4 |
+
import geopandas as gpd
|
5 |
+
import leafmap.foliumap as leafmap
|
6 |
+
|
7 |
+
# wide streamlit display
|
8 |
+
st.set_page_config(layout="wide")
|
9 |
+
|
10 |
+
query_params = st.experimental_get_query_params()
|
11 |
+
file_url = query_params.get("file_url", [None])[0]
|
12 |
+
|
13 |
+
if file_url:
|
14 |
+
input_gdf = gpd.read_file(file_url)
|
15 |
+
input_gdf = input_gdf.to_crs(epsg=7761) # Gujarat zone
|
16 |
+
|
17 |
+
def format_fn(x):
|
18 |
+
return input_gdf.drop(columns=["geometry"]).loc[x].to_dict()
|
19 |
+
|
20 |
+
input_geometry_idx = st.selectbox("Select the geometry", input_gdf.index, format_func=format_fn)
|
21 |
+
geometry_gdf = input_gdf[input_gdf.index == input_geometry_idx]
|
22 |
+
|
23 |
+
m = leafmap.Map()
|
24 |
+
m.add_wms_layer(
|
25 |
+
"https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/56450/{z}/{y}/{x}"
|
26 |
+
)
|
27 |
+
m.add_gdf(
|
28 |
+
geometry_gdf,
|
29 |
+
layer_name="Geometry",
|
30 |
+
zoom_to_layer=True,
|
31 |
+
style_function=lambda x: {"color": "red", "fillOpacity": 0.0},
|
32 |
+
)
|
33 |
+
m.to_streamlit()
|
34 |
+
|
35 |
+
# Metrics
|
36 |
+
stats_df = pd.DataFrame()
|
37 |
+
stats_df.loc["Points"] = json.loads(geometry_gdf.to_crs(4326).to_json())["features"][0]["geometry"]["coordinates"]
|
38 |
+
stats_df.loc["Area (ha)"] = geometry_gdf.geometry.area.item() / 10000
|
39 |
+
stats_df.loc["Perimeter (m)"] = geometry_gdf.geometry.length.item()
|
40 |
+
|
41 |
+
st.write("<h3><div style='text-align: center;'>Geometry Metrics</div></h3>", unsafe_allow_html=True)
|
42 |
+
st.markdown(
|
43 |
+
f"""| Metric | Value |
|
44 |
+
| --- | --- |
|
45 |
+
| Area (m^2) | {stats_df['Area (m^2)'].item():.2f} m^2 = {stats_df['Area (m^2)'].item()/10000:.2f} ha |
|
46 |
+
| Perimeter (m) | {stats_df['Perimeter (m)'].item():.2f} m |
|
47 |
+
"""
|
48 |
+
)
|
49 |
+
else:
|
50 |
+
st.warning("Please provide a KML or GeoJSON URL as a query parameter, e.g., `?file_url=<your_file_url>`")
|
requirements.txt
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
leafmap
|
2 |
+
geopandas
|