Spaces:
Running
Running
File size: 1,510 Bytes
60b99bb 3761383 60b99bb |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
import re
import leafmap.maplibregl as leafmap
import pandas as pd
import streamlit as st
from ibis import _
def execute_prompt(con, chain, prompt):
response = chain.invoke({"question": prompt})
st.write(response)
gdf = as_geopandas(con, response)
if 'geometry' in gdf.columns:
m = leafmap.Map()
m.add_gdf(gdf)
m.to_streamlit()
else:
gdf.drop(columns=['geometry', 'bbox', 'bbox.minx', 'bbox.maxx', 'bbox.miny', 'bbox.maxy'], errors='ignore', inplace=True)
st.dataframe(pd.DataFrame(gdf), column_config={
"area": st.column_config.NumberColumn("Area (ha)", format="%.5f"),
"perimeter": st.column_config.NumberColumn("Perimeter (m)", format="%.3f"),
"determination_datetime": st.column_config.DatetimeColumn("Determination Date"),
})
def as_geopandas(con, response):
response = re.sub(";$", "", response)
sql_query = f"CREATE OR REPLACE VIEW testing AS ({response})"
con.raw_sql(sql_query)
gdf = con.table("testing")
if 'geometry' in gdf.columns:
gdf = (gdf
.cast({"geometry": "geometry"})
.mutate(geometry = _.geometry.convert("EPSG:4326", "EPSG:4326"))
.to_pandas()
).set_crs(epsg=4326, inplace=True)
else:
gdf = gdf.to_pandas()
for col in gdf.columns:
dtype = str(gdf[col].dtype)
if dtype.startswith("datetime64"):
gdf[col] = gdf[col].astype(str)
return gdf
|