Spaces:
Sleeping
Sleeping
import streamlit as st | |
import folium | |
from folium import GeoJson | |
import geopandas as gpd | |
import json | |
import geemap | |
import ee | |
import pandas as pd | |
# Initialize Earth Engine | |
ee.Initialize() | |
def main(): | |
st.title("Geospatial Data Viewer") | |
# Sidebar for user inputs | |
st.sidebar.header("Inputs") | |
selected_dataset = st.sidebar.selectbox('Select Dataset', ['Modis']) | |
selected_shapefile = st.sidebar.file_uploader('Upload Shapefile', type=['shp']) | |
selected_date_range_From = st.sidebar.date_input('Start Date', value=pd.to_datetime('2015-07-01')) | |
selected_date_range_To = st.sidebar.date_input('End Date', value=pd.to_datetime('2019-11-30')) | |
if selected_shapefile is not None: | |
shapefile_path = f'./temp_shapefile.shp' | |
with open(shapefile_path, 'wb') as f: | |
f.write(selected_shapefile.read()) | |
# Read the uploaded shapefile | |
roi_gdf = gpd.read_file(shapefile_path) | |
roi_geojson = roi_gdf.to_crs("EPSG:4326").to_json() | |
# Create a folium map | |
figure = folium.Figure() | |
m = folium.Map(location=[25.5973518, 65.54495724], zoom_start=7) | |
m.add_to(figure) | |
# Add GeoJson layer | |
roi_geojson_layer = GeoJson(roi_geojson, name='ROI GeoJSON') | |
roi_geojson_layer.add_to(m) | |
# Convert the GeoJSON content to Earth Engine object | |
ee_object = geemap.geojson_to_ee(json.loads(roi_geojson)) | |
if selected_dataset == "Modis": | |
F = selected_date_range_From.strftime('%Y-%m-%d') | |
T = selected_date_range_To.strftime('%Y-%m-%d') | |
# Fetch MODIS data from Earth Engine | |
dataset = ee.ImageCollection('MODIS/006/MOD13Q1').filter(ee.Filter.date(F, T)).filterBounds(ee_object) | |
modisndvi = dataset.select('NDVI').clip(ee_object) | |
vis_paramsNDVI = { | |
'min': 0, | |
'max': 9000, | |
'palette': ['FE8374', 'C0E5DE', '3A837C', '034B48'] | |
} | |
map_id_dict = ee.Image(modisndvi.mean()).getMapId(vis_paramsNDVI) # Use mean image for visualization | |
folium.raster_layers.TileLayer( | |
tiles=map_id_dict['tile_fetcher'].url_format, | |
attr='Google Earth Engine', | |
name='NDVI', | |
overlay=True, | |
control=True | |
).add_to(m) | |
m.add_child(folium.LayerControl()) | |
# Render the map in Streamlit | |
st_data = st.components.v1.html(figure.render(), height=600, scrolling=True) | |
if __name__ == "__main__": | |
main() | |