import streamlit as st
import numpy as np
import pandas as pd
import ee
import geemap.foliumap as geemap
from google.oauth2 import id_token
from google.auth.transport import requests
from google.auth import compute_engine
import json
st.set_page_config(layout="wide")
Map = None
vegetation_image = None
evapotranspiration_image = None
composite_image = None
def app():
global Map
st.title("Streamlit App - Composite - evapotranspiration and vegetation")
# Replace contents of service account json file corresponding to your account from here:
# https://console.cloud.google.com/iam-admin/serviceaccounts
json_data = '''
{
}
'''
# Preparing values
json_object = json.loads(json_data, strict=False)
service_account = json_object['client_email']
json_object = json.dumps(json_object)
# Authorising the app
credentials = ee.ServiceAccountCredentials(service_account, key_data=json_object)
print("credentials = ", credentials)
ee.Initialize(credentials)
Map = geemap.Map()
add_evapotranspiration_layer()
add_vegetation_layer()
# Create composite image with above layers
concat_images()
# combine_images_method_2()
def add_vegetation_layer():
print("in add_vegetation_layer")
global Map
global vegetation_image
# Load the image collection
dataset = ee.ImageCollection('MODIS/061/MOD13A2') \
.filterDate('2015-01-01', '2015-01-31') \
.mean()
# Select the NDVI band
ndvi = dataset.select('NDVI')
# Visualization parameters
ndviVis = {
'min': 0,
'max': 9000,
'palette': [
'ffffff', 'ce7e45', 'df923d', 'f1b555', 'fcd163', '99b718', '74a901',
'66a000', '529400', '3e8601', '207401', '056201', '004c00', '023b01',
'012e01', '011d01', '011301'
]
}
try:
print("Adding NDVI vegetation layer/loading to streamlit")
# Add the NDVI layer to the map
vegetation_image = ndvi
print("vegetation_image:", vegetation_image.getInfo())
# # Map.addLayer(ndvi, ndviVis, 'NDVI vegetation layer')
## Map.addLayer(vegetation_image, ndviVis, 'NDVI vegetation layer')
# Map.addLayer(eval(ee_asset))
# st.write(Map)
# Map.to_streamlit()
except Exception as e:
st.error(f"Error adding NDVI vegetation layer/loading to streamlit: {e}")
def add_evapotranspiration_layer():
print("in add_evapotranspiration_layer")
global Map
global evapotranspiration_image
# Load the image collection
dataset = ee.ImageCollection("CSIC/SPEI/2_9") \
.filterDate('2015-01-01', '2015-01-31') \
.mean()
# Select the 24-month analysis
spei24 = dataset.select('SPEI_24_month')
# Set the visualization parameters
visParams = {
'min': -2.33,
'max': 2.33,
'palette': [
'8b1a1a', 'de2929', 'f3641d',
'fdc404', '9afa94', '03f2fd',
'12adf3', '1771de', '00008b',
]
}
try:
# Display the SPEI 24-month layer
print("Adding SPEI 24-month evapotranspiration layer/loading to streamlit")
# evapotranspiration_image = spei24.filterBounds(regionOfInterest).first()
evapotranspiration_image = spei24
print("evapotranspiration_image:", evapotranspiration_image.getInfo())
# Map.addLayer(spei24, visParams, 'SPEI 24 month evapotranspiration layer')
##Map.addLayer(evapotranspiration_image, visParams, 'SPEI 24 month evapotranspiration layer')
# Map.to_streamlit()
except Exception as e:
st.error(f"Error adding SPEI 24-month evapotranspiration layer/loading to streamlit: {e}")
def concat_images():
print("in concat_images")
global Map
global vegetation_image
global evapotranspiration_image
try:
# Create a concat image with vegetation_image and evapotranspiration_image
composite_image = ee.Image.cat([evapotranspiration_image, vegetation_image])
print("composite_image =", composite_image)
Map.addLayer(composite_image, {'bands': ['SPEI_24_month', 'NDVI'], 'min': -1, 'max': 1}, 'Composite Image')
#Map.addLayer(composite_image, name='Concat Image')
evapotranspiration_viz_params = {
'bands': ['SPEI_24_month', 'NDVI'],
'min': -1,
'max': 1
# 'palette': [
# '8b1a1a', 'de2929', 'f3641d',
# 'fdc404', '9afa94', '03f2fd',
# '12adf3', '1771de', '00008b',
# ]
}
#Map.addLayer(composite_image, name='Concat Image', viz_params=evapotranspiration_viz_params)
Map.to_streamlit()
except Exception as e:
st.error(f"Error creating concat image: {e}")
def combine_images():
print("in combine_images")
global Map
global vegetation_image
global evapotranspiration_image
# try:
# Method 1
# Create a combined image with vegetation_image and evapotranspiration_image
composite_image = ee.Image.combine_([evapotranspiration_image, vegetation_image])
print("Combined image:", composite_image.getInfo())
# Map.addLayer(composite_image, {'bands': ['SPEI_24_month', 'NDVI']}, name='Composite Image')
Map.addLayer(composite_image, {'bands': ['SPEI_24_month', 'NDVI'], 'min': -1, 'max': 1}, 'Composite Image')
# Map.addLayer(composite_image, name='Combined Image')
Map.to_streamlit()
# except Exception as e:
# st.error(f"Error creating combined image: {e}")
def combine_images_method_2():
print("in combine_images_method_2")
global Map
global vegetation_image
global evapotranspiration_image
# try:
# Method 2
# try:
# Create a combined image with vegetation_image and evapotranspiration_image
print("evapotranspiration_image image:", evapotranspiration_image)
print("vegetation_image image:", vegetation_image.getInfo())
# composite_image = evapotranspiration_image.addBands(vegetation_image)
composite_image = vegetation_image.addBands(evapotranspiration_image)
# print("Combined image:", composite_image.getInfo())
viz_params = {
'bands': ['SPEI_24_month', 'NDVI'],
'min': -1,
'max': 1,
'gamma': [1, 1, 1] # Adjust gamma if needed
}
evapotranspiration_viz_params = {
'min': -2.33,
'max': 2.33,
'palette': [
'8b1a1a', 'de2929', 'f3641d',
'fdc404', '9afa94', '03f2fd',
'12adf3', '1771de', '00008b',
]
}
Map.addLayer(composite_image, name='Combined Image', viz_params=evapotranspiration_viz_params)
Map.to_streamlit()
# except Exception as e:
# st.error(f"Error creating combined image: {e}")
app()