project / y /djangoGEE /streamlit.py
aassiiyAA123's picture
Upload 469 files
1e932e0 verified
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()