Spaces:
Runtime error
Runtime error
#!/usr/bin/env python3 | |
# -*- coding: utf-8 -*- | |
""" | |
Created on Sat Jul 30 19:55:23 2022 | |
@author: syed | |
""" | |
import streamlit as st | |
from PIL import Image | |
import base64 | |
from streamlit_folium import folium_static | |
import folium | |
from utils import geoutil | |
from disambiguation import disambiguate | |
import spacy | |
import en_core_web_md | |
from streamlit.components.v1 import html | |
def nav_page(page_name, timeout_secs=3): | |
nav_script = """ | |
<script type="text/javascript"> | |
function attempt_nav_page(page_name, start_time, timeout_secs) { | |
var links = window.parent.document.getElementsByTagName("a"); | |
for (var i = 0; i < links.length; i++) { | |
if (links[i].href.toLowerCase().endsWith("/" + page_name.toLowerCase())) { | |
links[i].click(); | |
return; | |
} | |
} | |
var elasped = new Date() - start_time; | |
if (elasped < timeout_secs * 1000) { | |
setTimeout(attempt_nav_page, 100, page_name, start_time, timeout_secs); | |
} else { | |
alert("Unable to navigate to page '" + page_name + "' after " + timeout_secs + " second(s)."); | |
} | |
} | |
window.addEventListener("load", function() { | |
attempt_nav_page("%s", new Date(), %d); | |
}); | |
</script> | |
""" % (page_name, timeout_secs) | |
html(nav_script) | |
geojson = "" | |
def set_header(): # tetis Geospacy LOGO | |
LOGO_IMAGE = "title.jpg" | |
st.markdown( | |
""" | |
<style> | |
.container { | |
display: flex; | |
} | |
.logo-text { | |
font-weight:700 !important; | |
font-size:50px !important; | |
color: #52aee3 !important; | |
padding-left: 10px !important; | |
} | |
.logo-img { | |
float:right; | |
width: 10%; | |
height: 10%; | |
} | |
</style> | |
""", | |
unsafe_allow_html=True | |
) | |
st.markdown( | |
f""" | |
<div class="container"> | |
<img class="logo-img" src="data:image/png;base64,{base64.b64encode(open(LOGO_IMAGE, "rb").read()).decode()}"> | |
<p class="logo-text">SpatialParse</p> | |
</div> | |
""", | |
unsafe_allow_html=True | |
) | |
def set_selected_entities(doc, types): | |
gpe_selected="" | |
loc_selected="" | |
rse_selected="" | |
if "g" in types: | |
gpe_selected ="GPE" | |
if "l" in types: | |
gpe_selected ="LOC" | |
if "r" in types: | |
gpe_selected ="RSE" | |
ents = [ent for ent in doc.ents if ent.label_ == gpe_selected or ent.label_ == loc_selected or ent.label_ == rse_selected] | |
doc.ents = ents | |
return doc | |
def extract_spatial_entities(model,text, types): | |
# nlp = spacy.load(model) | |
nlp = spacy.load('en_core_web_md') | |
nlp.add_pipe("spatial_pipeline", after="ner") | |
doc = nlp(text) | |
doc = set_selected_entities(doc, types) | |
return doc | |
def view_polygon_menu(): | |
global geojson | |
st.sidebar.markdown("## View") | |
#st.sidebar.markdown("Select the **format** to view coordinates") | |
view = st.sidebar.radio( | |
"Select the format to view coordinates", | |
('Map', 'GEOJson'), horizontal=True) | |
st.sidebar.markdown("## Compute") | |
is_midmid = st.sidebar.radio( | |
"Do you Want to compute polygons with mid or midmid point", | |
('midpoint', 'midmidpoint'), horizontal=True) | |
midmid = False | |
if is_midmid == "midmidpoint": | |
midmid = True | |
params = st.experimental_get_query_params() | |
ase = None | |
level_1= None | |
level_2= None | |
level_3= None | |
if "entity" in params: | |
ase, level_1, level_2, level_3 = geoutil.get_ent(params["entity"][0]) | |
md = "<span><b>ASE:</b> "+ str(ase)+" <b>Level 1:</b> "+ str(level_1)+" <b>Level 2:</b> "+ str(level_2)+" <b>Level 3:</b> "+ str(level_3)+"</span>" | |
st.write(md, unsafe_allow_html=True) | |
if view == "Map": | |
if "text" in params: | |
print(params["model"], 'mmmm') | |
doc = extract_spatial_entities(params["model"][0],params["text"][0],params["type"][0]) | |
geojson = disambiguate.dismabiguate_entities(doc, params["entity"][0],ase, level_1, level_2, level_3, midmid) | |
draw_location(geojson) | |
elif view == "GEOJson": | |
if "text" in params: | |
doc = extract_spatial_entities(params["model"][0],params["text"][0],params["type"][0]) | |
geojson = disambiguate.dismabiguate_entities(doc, params["entity"][0],ase, level_1, level_2, level_3, midmid) | |
displayGeoJson(geojson) | |
def set_geojson_menu(): | |
global geojson | |
st.sidebar.markdown("## Export") | |
st.sidebar.markdown("Do you want to Export **GEOJson**?") | |
export = st.sidebar.button("Export") | |
if(export): | |
params = st.experimental_get_query_params() | |
disambiguate.export(params["entity"][0],geojson) | |
def set_map_menu(): | |
st.sidebar.markdown("## Rate Polygon") | |
#st.sidebar.markdown("Do you want to rate the **Polygon**?") | |
rate = st.sidebar.radio( | |
"Do you want to rate the Polygon?", | |
('Yes', 'No'), horizontal=True) | |
rate_btn = st.sidebar.button("Rate") | |
if rate_btn: | |
if rate == "Yes": | |
nav_page("Rate") | |
def draw_location(geojson): | |
#gj = json.load(geojson) | |
centroid = geojson['features'][0]['properties']['centroid'] | |
centroid = (centroid[0],centroid[1]) | |
my_map = folium.Map(location=[centroid[1], centroid[0]], | |
zoom_start =12) | |
folium.GeoJson(geojson, | |
smooth_factor=1, | |
style_function = lambda x: { | |
'fillColor': 'green', | |
'color': 'blue', | |
'weight': 1.5, | |
'fillOpacity': 0.3 | |
}, | |
popup =True, | |
name= geojson['features'][0]['id']).add_to(my_map) | |
folium_static(my_map) | |
def displayGeoJson(geojson): | |
#path = ent._.rse_id+".geojson" | |
#with open(path) as f: | |
#gj = json.load(geojson) | |
st.json(geojson) | |
set_header() | |
view_polygon_menu() | |
set_map_menu() | |
set_geojson_menu() | |
#displayGeoJson() | |