Spaces:
Running
Running
File size: 5,159 Bytes
9ad0e2d a22204c f2cf4fa 9ad0e2d a22204c 9ad0e2d |
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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
import ee
import streamlit as st
import geemap.foliumap as geemap
st.set_page_config(layout="wide")
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)
"""
)
def nlcd():
# st.header("National Land Cover Database (NLCD)")
row1_col1, row1_col2 = st.columns([3, 1])
width = 950
height = 600
Map = geemap.Map(center=[40, -100], zoom=4)
# Select the seven NLCD epoches after 2000.
years = ["2001", "2004", "2006", "2008", "2011", "2013", "2016", "2019"]
# Get an NLCD image by year.
def getNLCD(year):
# Import the NLCD collection.
dataset = ee.ImageCollection("USGS/NLCD_RELEASES/2019_REL/NLCD")
# Filter the collection by year.
nlcd = dataset.filter(ee.Filter.eq("system:index", year)).first()
# Select the land cover band.
landcover = nlcd.select("landcover")
return landcover
with row1_col2:
selected_year = st.multiselect("Select a year", years)
add_legend = st.checkbox("Show legend")
if selected_year:
for year in selected_year:
Map.addLayer(getNLCD(year), {}, "NLCD " + year)
if add_legend:
Map.add_legend(
legend_title="NLCD Land Cover Classification", builtin_legend="NLCD"
)
with row1_col1:
Map.to_streamlit(width=width, height=height)
else:
with row1_col1:
Map.to_streamlit(width=width, height=height)
def search_data():
# st.header("Search Earth Engine Data Catalog")
Map = geemap.Map()
if "ee_assets" not in st.session_state:
st.session_state["ee_assets"] = None
if "asset_titles" not in st.session_state:
st.session_state["asset_titles"] = None
col1, col2 = st.columns([2, 1])
dataset = None
with col2:
keyword = st.text_input(
"Enter a keyword to search (e.g., elevation)", "")
if keyword:
ee_assets = geemap.search_ee_data(keyword)
asset_titles = [x["title"] for x in ee_assets]
asset_types = [x["type"] for x in ee_assets]
translate = {
"image_collection": "ee.ImageCollection('",
"image": "ee.Image('",
"table": "ee.FeatureCollection('",
"table_collection": "ee.FeatureCollection('",
}
dataset = st.selectbox("Select a dataset", asset_titles)
if len(ee_assets) > 0:
st.session_state["ee_assets"] = ee_assets
st.session_state["asset_titles"] = asset_titles
if dataset is not None:
with st.expander("Show dataset details", True):
index = asset_titles.index(dataset)
html = geemap.ee_data_html(
st.session_state["ee_assets"][index])
html = html.replace("\n", "")
st.markdown(html, True)
ee_id = ee_assets[index]["id"]
uid = ee_assets[index]["uid"]
st.markdown(f"""**Earth Engine Snippet:** `{ee_id}`""")
ee_asset = f"{translate[asset_types[index]]}{ee_id}')"
vis_params = st.text_input(
"Enter visualization parameters as a dictionary", {}
)
layer_name = st.text_input("Enter a layer name", uid)
button = st.button("Add dataset to map")
if button:
vis = {}
try:
if vis_params.strip() == "":
# st.error("Please enter visualization parameters")
vis_params = "{}"
vis = eval(vis_params)
if not isinstance(vis, dict):
st.error(
"Visualization parameters must be a dictionary")
try:
Map.addLayer(eval(ee_asset), vis, layer_name)
except Exception as e:
st.error(f"Error adding layer: {e}")
except Exception as e:
st.error(f"Invalid visualization parameters: {e}")
with col1:
Map.to_streamlit()
else:
with col1:
Map.to_streamlit()
def app():
st.title("Earth Engine Data Catalog")
apps = ["Search Earth Engine Data Catalog",
"National Land Cover Database (NLCD)"]
selected_app = st.selectbox("Select an app", apps)
if selected_app == "National Land Cover Database (NLCD)":
nlcd()
elif selected_app == "Search Earth Engine Data Catalog":
search_data()
app()
|