File size: 2,715 Bytes
1e932e0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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()