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: - GitHub repository: """ ) 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)