Streamlit / pages /13_🏘️_Global_Building_Footprints.py
giswqs's picture
Updated links
a22204c
import ee
import geemap.foliumap as geemap
import geopandas as gpd
import streamlit as st
st.set_page_config(layout="wide")
@st.cache(persist=True)
def ee_authenticate(token_name="EARTHENGINE_TOKEN"):
geemap.ee_initialize(token_name=token_name)
st.sidebar.info(
"""
- Web App URL: <https://streamlit.gishub.org>
- GitHub repository: <https://github.com/giswqs/streamlit-geospatial>
"""
)
st.sidebar.title("Contact")
st.sidebar.info(
"""
Qiusheng Wu at [wetlands.io](https://wetlands.io) | [GitHub](https://github.com/giswqs) | [Twitter](https://twitter.com/giswqs) | [YouTube](https://www.youtube.com/c/QiushengWu) | [LinkedIn](https://www.linkedin.com/in/qiushengwu)
"""
)
st.title("Global Building Footprints")
col1, col2 = st.columns([8, 2])
@st.cache(allow_output_mutation=True)
def read_data(url):
return gpd.read_file(url)
countries = 'https://github.com/giswqs/geemap/raw/master/examples/data/countries.geojson'
states = 'https://github.com/giswqs/geemap/raw/master/examples/data/us_states.json'
countries_gdf = read_data(countries)
states_gdf = read_data(states)
country_names = countries_gdf['NAME'].values.tolist()
country_names.remove('United States of America')
country_names.append('USA')
country_names.sort()
country_names = [name.replace('.', '').replace(' ', '_')
for name in country_names]
state_names = states_gdf['name'].values.tolist()
basemaps = list(geemap.basemaps)
Map = geemap.Map()
with col2:
basemap = st.selectbox("Select a basemap", basemaps,
index=basemaps.index('HYBRID'))
Map.add_basemap(basemap)
country = st.selectbox('Select a country', country_names,
index=country_names.index('USA'))
if country == 'USA':
state = st.selectbox('Select a state', state_names,
index=state_names.index('Florida'))
layer_name = state
try:
fc = ee.FeatureCollection(
f'projects/sat-io/open-datasets/MSBuildings/US/{state}')
except:
st.error('No data available for the selected state.')
else:
try:
fc = ee.FeatureCollection(
f'projects/sat-io/open-datasets/MSBuildings/{country}')
except:
st.error('No data available for the selected country.')
layer_name = country
color = st.color_picker('Select a color', '#FF5500')
style = {'fillColor': '00000000', 'color': color}
split = st.checkbox("Split-panel map")
if split:
left = geemap.ee_tile_layer(fc.style(**style), {}, 'Left')
right = left
Map.split_map(left, right)
else:
Map.addLayer(fc.style(**style), {}, layer_name)
Map.centerObject(fc.first(), zoom=16)
with st.expander("Data Sources"):
st.info(
"""
[Microsoft Building Footprints](https://gee-community-catalog.org/projects/msbuildings/)
"""
)
with col1:
Map.to_streamlit(height=1000)