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 = '''
{
"type": "service_account",
"project_id": "vegetation-2023-408901",
"private_key_id": "01baa265c87e82f4b692497ab1e0fe7db1e31002",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC902BpScIZcJ98\ntpqwAfhtF53aT4Rc8cxCpDL58Dh1rY9psX/n9+ZjUeNPgSBn8+/AvQDdGGcyhiNh\n9IiTNKF8dLr1F//G57tXvxfcEqwpOVjaieoOVI+B5QJJqbGZSs4c9prScMEgKovn\nm8rmF1YyMmeFFKPLTKlPrMBCIymmCWvA7DhETPurEdBmwZiNtg2Qrlv62BKnptF+\niZjk9qW9s6JA9Yla+h5nykV3McgJAaHcX9qbPr7ZzUfO7v5xW2oiR1D6Fw/UxSD4\n0ddbZoUQkAMKxxng/iF5CTcqcjaLwNz1kfjYw4Ht8CQXfa8OsqQcKpqoB/Dm44VD\n63RzpazjAgMBAAECggEAH/POJTropK6b8fqsxBa40egpRn+fCKQc3VTVTdP9NPW/\nj6t0m7/TNIGqsQ3LviPGBhvqYs0CRfNlTk5ClQDFc/UUKUBeagVEuCru4bj06MWB\n6ttPHhVmyJcbUPny7po0YpSyD90x7O+seBJ1z1A7TpzEZxbH0Wc4krRB8oAHuS5O\n+KrghytK4vBuNzRR+o8eZUX3KfFr5h1nFMNml9+PHjvCMLzl+HMQd9PFyKiYWxjV\nYYOxqiLd0a0xKyLwgkfCCv1hXXpbbCGo4bH8vbkxESRpHl2himoQC7cHXTwAOOHB\nPvDH4iUop3lxrScLubyfFyg825AAka1Qbtv2fbnh5QKBgQD6RcYEBHxS0I6WoYf7\n4z0Iac+6vmtQNqEcycYskeXSi4V4pMHtsZchVq2KfdEEMRZYY/KIJwsaIo+dLJfC\n4+gy6rjnZ8gNw+msLjhojnmpPPwo0mTDg8f7YjkFw3mSgYE9rJTclw6vfP4ktxVt\n4gepB8kpMiH0PE+D+LiMbLiDlwKBgQDCK3lY/s6O4V/SJrmx2yVIBfFzml+a8Y4J\nxsWYpGCBARQma1yntZG0Zh9xY33RpY6c/kpqaxexR+6Gb7PArowwkwOVj/KyIdGy\nmswmz0s4Y3fz0mvseQuICU4zggVzn3QrezTbHk3fP3qWEHTbwarVfZcbfGY+uARs\n376fibJalQKBgQC6vT0W2lH5aOw7sKNKay+rC2iYKmTgISLt3BAmSWZ2Rux8LFMX\nDB98HLS4VVCUFBxcL5dTx+4cvhTybcd+/5bOBx2YbHN08e11L7efLE/S21I7E2Fk\nEPwysgNiLYyUqFTKs+8O+RdYEad/tawjpTeaA9kxB9sV5bpe+kKZZLX4WQKBgQCL\nXusmLxeSxUCjNnq5qAQ1k1aBVQBk1hfO+qcgbnR6hIyzGwMRuilQpLDTEcfg8IXS\nOFCv3BjQfkI+qvUKS/+CajP7aayZod7D5Yq+HLLwUa1rDNG8lhHp3kwMerpxCLY4\n86G32iOpKAZUqpFGn9eAkDojV4KIaEt83okUOKEVlQKBgGGb0kSCCt4+2T45qegS\nifFZyFyqE/239PKqV3YTqi/pxtuSa1a5KzhuAPD7c3zrRBc+AU4FIWjd/z746iXS\na7bu5YKJJdkPVAJbwmDM5nzuE/phMVCGGy9djGe8VXJRtjx+I8VoY/UOzDovTYl7\nl8TcdF3wLkkN0IlCUe4W+izB\n-----END PRIVATE KEY-----\n",
"client_email": "vegetation-public-service@vegetation-2023-408901.iam.gserviceaccount.com",
"client_id": "114235178928524820853",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/vegetation-public-service%40vegetation-2023-408901.iam.gserviceaccount.com",
"universe_domain": "googleapis.com"
}
'''
# 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()