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