import os import leafmap import solara import ipywidgets as widgets from leafmap import leafmap import leafmap.colormaps as cm from leafmap.common import get_image_colormap zoom = solara.reactive(2) center = solara.reactive((20, 0)) maps = { 'Agro-ecological Zones: AEZ classification by climate/soil/terrain/LC': 'https://s3.eu-west-1.amazonaws.com/data.gaezdev.aws.fao.org/LR/aez/aez_v9v2_ENSEMBLE_rcp2p6_2020s.tif', 'Koeppen-Geiger (3-character) classification 2011-2040': 'https://s3.eu-west-1.amazonaws.com/data.gaezdev.aws.fao.org/res01/IPSL-CM5A-LR/rcp4p5/KG3_IPSL-CM5A-LR_rcp4p5_2020s.tif', "Total number of growing period days": 'https://s3.eu-west-1.amazonaws.com/data.gaezdev.aws.fao.org/res01/GFDL-ESM2M/rcp2p6/TS/lgd_GFDL-ESM2M_rcp2p6_', "Number of dry days during temperature growing period LGPt=5 (days)" : 'https://s3.eu-west-1.amazonaws.com/data.gaezdev.aws.fao.org/res01/IPSL-CM5A-LR/rcp8p5/TS/ndd2_IPSL-CM5A-LR_rcp8p5_', 'Longest period of consecutive dry days in temperature growing period LGPt=5(days)':'https://s3.eu-west-1.amazonaws.com/data.gaezdev.aws.fao.org/res01/HadGEM2-ES/rcp2p6/TS/ndd_HadGEM2-ES_rcp2p6_', 'Annual temperature amplitude (°C)': 'https://s3.eu-west-1.amazonaws.com/data.gaezdev.aws.fao.org/res01/NorESM1-M/rcp4p5/TS/td2_NorESM1-M_rcp4p5_', 'Mean annual temperature (°C)': 'https://s3.eu-west-1.amazonaws.com/data.gaezdev.aws.fao.org/res01/MIROC-ESM-CHEM/rcp4p5/TS/tmp_MIROC-ESM-CHEM_rcp4p5_', 'Annual precipitation (mm)': 'https://s3.eu-west-1.amazonaws.com/data.gaezdev.aws.fao.org/res01/MIROC-ESM-CHEM/rcp6p0/TS/prc_MIROC-ESM-CHEM_rcp6p0_', 'Total number of rain days (days with P > 1 mm)': 'https://s3.eu-west-1.amazonaws.com/data.gaezdev.aws.fao.org/res01/IPSL-CM5A-LR/rcp4p5/TS/ndr_IPSL-CM5A-LR_rcp4p5_' } anos = list(range(2025, 2041)) #municipios = ee.FeatureCollection('FAO/GAUL_SIMPLIFIED_500m/2015/level2').filter(ee.Filter.eq('ADM0_NAME', 'Brazil')) #municipios_list = # Get the list of municipality names #estados_list = [estados_list] maps_list= list(maps) maps_values= list(maps.values()) aez_colors = { 0: "#FFFFFF", # NAA 1: "#FFD700", # Tropics, lowland; semi-arid, no soil/terrain limitations 2: "#DAA520", # Tropics, lowland; semi-arid, with soil/terrain limitations 3: "#32CD32", # Tropics, lowland; sub-humid, no soil/terrain limitations 4: "#228B22", # Tropics, lowland; sub-humid, with soil/terrain limitations 5: "#008000", # Tropics, lowland; humid, no soil/terrain limitations 6: "#006400", # Tropics, lowland; humid, with soil/terrain limitations 7: "#FFA500", # Tropics, highland; semi-arid, no soil/terrain limitations 8: "#FF8C00", # Tropics, highland; semi-arid, with soil/terrain limitations 9: "#7FFF00", # Tropics, highland; sub-humid, no soil/terrain limitations 10: "#ADFF2F", # Tropics, highland; sub-humid, with soil/terrain limitations 11: "#00FF00", # Tropics, highland; humid, no soil/terrain limitations 12: "#00FA9A", # Tropics, highland; humid, with soil/terrain limitations 13: "#FF4500", # Sub-tropics, warm; semi-arid, no soil/terrain limitations 14: "#FF6347", # Sub-tropics, warm; semi-arid, with soil/terrain limitations 15: "#9ACD32", # Sub-tropics, warm; sub-humid, no soil/terrain limitations 16: "#6B8E23", # Sub-tropics, warm; sub-humid, with soil/terrain limitations 17: "#3CB371", # Sub-tropics, warm; humid, no soil/terrain limitations 18: "#2E8B57", # Sub-tropics, warm; humid, with soil/terrain limitations 19: "#8B4513", # Sub-tropics, mud, cool; semi-arid, no soil/terrain limitations 20: "#A0522D", # Sub-tropics, mud, cool; semi-arid, with soil/terrain limitations 21: "#D2B48C", # Sub-tropics, mud, cool; sub-humid, no soil/terrain limitations 22: "#BC8F8F", # Sub-tropics, mud, cool; sub-humid, with soil/terrain limitations 23: "#8FBC8F", # Sub-tropics, mud, cool; humid, no soil/terrain limitations 24: "#556B2F", # Sub-tropics, mud, cool; humid, with soil/terrain limitations 25: "#CD853F", # Sub-tropics, cool; semi-arid, no soil/terrain limitations 26: "#DEB887", # Sub-tropics, cool; sub-humid, no soil/terrain limitations 27: "#F4A460", # Sub-tropics, cool; humid, with soil/terrain limitations 28: "#D2691E", # Sub-tropics, cool; humid, no soil/terrain limitations 29: "#B0C4DE", # Temperature, moderate; dry, no soil/terrain limitations 30: "#87CEEB", # Temperature, moderate; dry, with soil/terrain limitations 31: "#ADD8E6", # Temperature, moderate; moist, no soil/terrain limitations 32: "#6495ED", # Temperature, moderate; moist, with soil/terrain limitations 33: "#1E90FF", # Temperature, moderate; wet, no soil/terrain limitations 34: "#0000FF", # Temperature, moderate; wet, with soil/terrain limitations 35: "#4682B4", # Temperature, cool; dry, no soil/terrain limitations 36: "#5F9EA0", # Temperature, cool; dry, with soil/terrain limitations 37: "#00CED1", # Temperature, cool; moist, no soil/terrain limitations 38: "#40E0D0", # Temperature, cool; moist, with soil/terrain limitations 39: "#00FFFF", # Temperature, cool; wet, no soil/terrain limitations 40: "#00BFFF", # Temperature, cool; wet, with soil/terrain limitations 41: "#A9A9A9", # Cold, no permafrost; dry, no soil/terrain limitations 42: "#808080", # Cold, no permafrost; dry, with soil/terrain limitations 43: "#C0C0C0", # Cold, no permafrost; moist, no soil/terrain limitations 44: "#D3D3D3", # Cold, no permafrost; moist, with soil/terrain limitations 45: "#E0FFFF", # Cold, no permafrost; wet, no soil/terrain limitations 46: "#F0FFFF", # Cold, no permafrost; wet, with soil/terrain limitations 47: "#8B0000", # Dominantly very steep terrain 48: "#FF0000", # Land with severe soil/terrain limitations 49: "#00FF00", # Ample irrigated soils 50: "#008080", # Dominantly hydromorphic soils 51: "#FFDAB9", # Desert/Arid climate 52: "#000080", # Boreal/Cold climate 53: "#FFFFFF", # Arctic/Very cold climate 54: "#A52A2A", # Dominantly built-up land 55: "#0000FF" # Dominantly water } aez_dict ={ "NAA": "#FFFFFF", # Branco "Tropics, lowland; semi-arid, no soil/terrain limitations": "#FFD700", # Dourado "Tropics, lowland; semi-arid, with soil/terrain limitations": "#DAA520", # Dourado escuro "Tropics, lowland; sub-humid, no soil/terrain limitations": "#32CD32", # Verde Lima "Tropics, lowland; sub-humid, with soil/terrain limitations": "#228B22", # Verde Floresta "Tropics, lowland; humid, no soil/terrain limitations": "#008000", # Verde "Tropics, lowland; humid, with soil/terrain limitations": "#006400", # Verde Escuro "Tropics, highland; semi-arid, no soil/terrain limitations": "#FFA500", # Laranja "Tropics, highland; semi-arid, with soil/terrain limitations": "#FF8C00", # Laranja Escuro "Tropics, highland; sub-humid, no soil/terrain limitations": "#7FFF00", # Verde Chartreuse "Tropics, highland; sub-humid, with soil/terrain limitations": "#ADFF2F", # Verde Amarelo "Tropics, highland; humid, no soil/terrain limitations": "#00FF00", # Verde Limão "Tropics, highland; humid, with soil/terrain limitations": "#00FA9A", # Verde Médio "Sub-tropics, warm; semi-arid, no soil/terrain limitations": "#FF4500", # Laranja Vermelho "Sub-tropics, warm; semi-arid, with soil/terrain limitations": "#FF6347", # Tomate "Sub-tropics, warm; sub-humid, no soil/terrain limitations": "#9ACD32", # Verde Amarelo Escuro "Sub-tropics, warm; sub-humid, with soil/terrain limitations": "#6B8E23", # Verde Oliva "Sub-tropics, warm; humid, no soil/terrain limitations": "#3CB371", # Verde Mar Médio "Sub-tropics, warm; humid, with soil/terrain limitations": "#2E8B57", # Verde Mar "Sub-tropics, mud, cool; semi-arid, no soil/terrain limitations": "#8B4513", # Marrom Sela "Sub-tropics, mud, cool; semi-arid, with soil/terrain limitations": "#A0522D", # Sienna "Sub-tropics, mud, cool; sub-humid, no soil/terrain limitations": "#D2B48C", # Tan "Sub-tropics, mud, cool; sub-humid, with soil/terrain limitations": "#BC8F8F", # Rosa Marrom "Sub-tropics, mud, cool; humid, no soil/terrain limitations": "#8FBC8F", # Verde Mar Claro "Sub-tropics, mud, cool; humid, with soil/terrain limitations": "#556B2F", # Verde Oliva Escuro "Sub-tropics, cool; semi-arid, no soil/terrain limitations": "#CD853F", # Peru "Sub-tropics, cool; sub-humid, no soil/terrain limitations": "#DEB887", # Burlywood "Sub-tropics, cool; humid, with soil/terrain limitations": "#F4A460", # Sandy Brown "Sub-tropics, cool; humid, no soil/terrain limitations": "#D2691E", # Chocolate "Temperature, moderate; dry, no soil/terrain limitations": "#B0C4DE", # Azul Aço Claro "Temperature, moderate; dry, with soil/terrain limitations": "#87CEEB", # Céu Azul "Temperature, moderate; moist, no soil/terrain limitations": "#ADD8E6", # Azul Claro "Temperature, moderate; moist, with soil/terrain limitations": "#6495ED", # Azul Cornflower "Temperature, moderate; wet, no soil/terrain limitations": "#1E90FF", # Azul Dodger "Temperature, moderate; wet, with soil/terrain limitations": "#0000FF", # Azul "Temperature, cool; dry, no soil/terrain limitations": "#4682B4", # Azul Aço "Temperature, cool; dry, with soil/terrain limitations": "#5F9EA0", # Azul Cadet "Temperature, cool; moist, no soil/terrain limitations": "#00CED1", # Azul Turquesa Escuro "Temperature, cool; moist, with soil/terrain limitations": "#40E0D0", # Turquesa "Temperature, cool; wet, no soil/terrain limitations": "#00FFFF", # Ciano "Temperature, cool; wet, with soil/terrain limitations": "#00BFFF", # Azul Céu Profundo "Cold, no permafrost; dry, no soil/terrain limitations": "#A9A9A9", # Cinza Escuro "Cold, no permafrost; dry, with soil/terrain limitations": "#808080", # Cinza "Cold, no permafrost; moist, no soil/terrain limitations": "#C0C0C0", # Prata "Cold, no permafrost; moist, with soil/terrain limitations": "#D3D3D3", # Cinza Claro "Cold, no permafrost; wet, no soil/terrain limitations": "#E0FFFF", # Azul Claro Claro "Cold, no permafrost; wet, with soil/terrain limitations": "#F0FFFF", # Azul Celeste "Dominantly very steep terrain": "#8B0000", # Vermelho Escuro "Land with severe soil/terrain limitations": "#FF0000", # Vermelho "Ample irrigated soils": "#00FF00", # Verde Limão "Dominantly hydromorphic soils": "#008080", # Verde Azulado "Desert/Arid climate": "#FFDAB9", # Pêssego "Boreal/Cold climate": "#000080", # Azul Marinho "Arctic/Very cold climate": "#FFFFFF", # Branco "Dominantly built-up land": "#A52A2A", # Marrom "Dominantly water": "#0000FF" # Azul } legend_dict = { "NA": "#FFFFFF", "Tropics, lowland; semi-arid, no soil/terrain limitations": "#FF99CC", "Tropics, lowland; semi-arid, with soil/terrain limitations": "#FF6699", "Tropics, lowland; sub-humid, no soil/terrain limitations": "#FF9966", "Tropics, lowland; sub-humid, with soil/terrain limitations": "#FF6600", "Tropics, lowland; humid, no soil/terrain limitations": "#FFCC66", "Tropics, lowland; humid, with soil/terrain limitations": "#FF9933", "Tropics, highland; semi-arid, no soil/terrain limitations": "#FFCC99", "Tropics, highland; semi-arid, with soil/terrain limitations": "#FFCC00", "Tropics, highland; sub-humid, no soil/terrain limitations": "#FFFF99", "Tropics, highland; sub-humid, with soil/terrain limitations": "#FFFF33", "Tropics, highland; humid, no soil/terrain limitations": "#FFFF66", "Tropics, highland; humid, with soil/terrain limitations": "#FFFF00", "Sub-tropics, warm; semi-arid, no soil/terrain limitations": "#FFCC33", "Sub-tropics, warm; semi-arid, with soil/terrain limitations": "#FF9900", "Sub-tropics, warm; sub-humid, no soil/terrain limitations": "#FFCC00", "Sub-tropics, warm; sub-humid, with soil/terrain limitations": "#FF9900", "Sub-tropics, warm; humid, no soil/terrain limitations": "#FFD700", "Sub-tropics, warm; humid, with soil/terrain limitations": "#FF8C00", "Sub-tropics, mod. cool; semi-arid, no soil/terrain limitations": "#FFA07A", "Sub-tropics, mod. cool; semi-arid, with soil/terrain limitations": "#FF4500", "Sub-tropics, mod. cool; sub-humid, no soil/terrain limitations": "#FFA500", "Sub-tropics, mod. cool; sub-humid, with soil/terrain limitations": "#FFDAB9", "Sub-tropics, mod. cool; humid, no soil/terrain limitations": "#FFD700", "Sub-tropics, mod. cool; humid, with soil/terrain limitations": "#FFC0CB", "Sub-tropics, cool; semi-arid, no soil/terrain limitations": "#98FB98", "Sub-tropics, cool; semi-arid, with soil/terrain limitations": "#7CFC00", "Sub-tropics, cool; sub-humid, no soil/terrain limitations": "#ADFF2F", "Sub-tropics, cool; sub-humid, with soil/terrain limitations": "#32CD32", "Sub-tropics, cool; humid, no soil/terrain limitations": "#00FF00", "Sub-tropics, cool; humid, with soil/terrain limitations": "#008000", "Temperate, moderate; dry, no soil/terrain limitations": "#ADD8E6", "Temperate, moderate; dry, with soil/terrain limitations": "#4682B4", "Temperate, moderate; moist, no soil/terrain limitations": "#5F9EA0", "Temperate, moderate; moist, with soil/terrain limitations": "#6495ED", "Temperate, moderate; wet, no soil/terrain limitations": "#1E90FF", "Temperate, moderate; wet, with soil/terrain limitations": "#0000FF", "Temperate, cool; dry, no soil/terrain limitations": "#87CEEB", "Temperate, cool; dry, with soil/terrain limitations": "#4169E1", "Temperate, cool; moist, no soil/terrain limitations": "#191970", "Temperate, cool; moist, with soil/terrain limitations": "#00008B", "Temperate, cool; wet, no soil/terrain limitations": "#4B0082", "Temperate, cool; wet, with soil/terrain limitations": "#8A2BE2", "Cold, no permafrost; dry, no soil/terrain limitations": "#708090", "Cold, no permafrost; dry, with soil/terrain limitations": "#2F4F4F", "Cold, no permafrost; moist, no soil/terrain limitations": "#696969", "Cold, no permafrost; moist, with soil/terrain limitations": "#808080", "Cold, no permafrost; wet, no soil/terrain limitations": "#A9A9A9", "Cold, no permafrost; wet, with soil/terrain limitations": "#D3D3D3", "Dominantly very steep terrain": "#FFD700", "Land with severe soil/terrain limitations": "#A0522D", "Ample irrigated soils": "#CD5C5C", "Dominantly hydromorphic soils": "#8B0000", "Desert/Arid climate": "#FF4500", "Boreal/Cold climate": "#2E8B57", "Arctic/Very cold climate": "#00CED1", "Dominantly built-up land": "#8B4513", "Dominantly water": "#0000FF" } def add_widgets(m): setattr(m, "zoom_to_layer", True) style = {"description_width": "initial"} padding = "0px 0px 0px 5px" image = widgets.Dropdown( value=None, options=[('Agro-ecological Zones classification by climate/soil/terrain/LC', maps_values[0]), ('Koeppen-Geiger (3-character) classification 2011-2040', maps_values[1]), ('Total number of growing period days', maps_values[2]), ('Number of dry days during temperature growing period LGPt=5 (days)', maps_values[3]), ('Longest period of consecutive dry days in temperature growing period LGPt=5(days)', maps_values[4]), ('Annual temperature amplitude (°C)', maps_values[5]), ('Mean annual temperature (°C)', maps_values[6]), ('Annual precipitation (mm)', maps_values[7]), ('Total number of rain days (days with P > 1 mm)', maps_values[8]), ], description="Image:", style=style, layout=widgets.Layout(width="270px", padding=padding), ) ano = widgets.Dropdown( value=None, options=anos, description="Ano:", style=style, layout=widgets.Layout(width="270px", padding=padding), ) output = widgets.Output() def change_ano(change): if change.new: if change.new not in m.get_layer_names(): #mosaic = f"{url}/datasets/{dataset.value}/{image.value}.json" m.add_cog_layer(image.value+ str(ano.value) + '.tif', name=str(ano.value), palette = 'inferno' ) output.outputs = () #output.append_stdout(f"Image date: {image_date}\n") ano.observe(change_ano, names="value") def change_image(change): if change.new: if change.new not in m.get_layer_names(): #mosaic = f"{url}/datasets/{dataset.value}/{image.value}.json" layer_list = m.get_layer_names() for layer in layer_list: m.remove_layer(m.find_layer(layer)) m.add_basemap("HYBRID") #m.remove_legend() if image.value == maps_values[0]: m.add_cog_layer(maps_values[0], name=maps_list[0],colormap=aez_colors) m.add_legend(legend_title="Legenda", legend_dict=aez_dict, layer_name=maps_list[0], position="bottomleft") elif image.value == maps_values[1]: #m.remove_colorbar() #raster = 'pages/aez.tif' legend_dict = { "A4 Equatorial rainforest": "#00FF00", # Verde "Am Equatorial monsoon": "#32CD32", # Verde Lima "As Equatorial savannah, dry summer": "#ADFF2F", # Verde Amarelo "Aw Equatorial savannah, dry winter": "#9ACD32", # Verde Amarelo Escuro "BWh Desert climate, hot": "#FF4500", # Laranja Vermelho "BWk Desert climate, cold": "#FF8C00", # Laranja Escuro "BSh Steppe climate, hot": "#FFD700", # Ouro "BSk Steppe climate, cold": "#DAA520", # Ouro Escuro "Cfa Temperate/mesothermal, fully humid, hot": "#87CEEB", # Céu Azul "Cfb Temperate/mesothermal, fully humid, warm": "#ADD8E6", # Azul Claro "Cfc Temperate/mesothermal, fully humid, cold": "#4682B4", # Azul Aço "Csa Temperate/mesothermal, dry summer, hot": "#FFA07A", # Salmão Claro "Csb Temperate/mesothermal, dry summer, warm": "#FA8072", # Salmão "Csc Temperate/mesothermal, dry summer, cold": "#E9967A", # Salmão Escuro "Cwa Temperate/mesothermal, dry winter, hot": "#FFDAB9", # Pêssego "Cwb Temperate/mesothermal, dry winter, warm": "#FFE4B5", # Moccasin "Cwc Temperate/mesothermal, dry winter, cold": "#FFDEAD", # Navajo Branco "Dfa Continental/microthermal, fully humid, hot": "#8B0000", # Vermelho Escuro "Dfb Continental/microthermal, fully humid, warm": "#B22222", # Tijolo Fogo "Dfc Continental/microthermal, fully humid, cold": "#DC143C", # Carmesim "Dfd Continental/microthermal, fully humid, very cold": "#FF0000", # Vermelho "Dsa Continental/microthermal, dry summer, hot": "#800080", # Roxo "Dsb Continental/microthermal, dry summer, warm": "#9370DB", # Roxo Médio "Dsc Continental/microthermal, dry summer, cold": "#8A2BE2", # Azul Violeta "Dsd Continental/microthermal, dry summer, very cold": "#4B0082", # Índigo "Dwa Continental/microthermal, dry winter, hot": "#000080", # Azul Marinho "Dwb Continental/microthermal, dry winter, warm": "#0000CD", # Azul Médio "Dwc Continental/microthermal, dry winter, cold": "#1E90FF", # Azul Dodger "Dwd Continental/microthermal, dry winter, very cold": "#00BFFF", # Azul Céu Profundo "ET Tundra climate": "#F0E68C", # Caqui "EF Eternal Frost climate": "#FFFFFF" # Branco } custom_cmap = { 0: "#00FF00", # A4 Equatorial rainforest 1: "#32CD32", # Am Equatorial monsoon 2: "#ADFF2F", # As Equatorial savannah, dry summer 3: "#9ACD32", # Aw Equatorial savannah, dry winter 4: "#FF4500", # BWh Desert climate, hot 5: "#FF8C00", # BWk Desert climate, cold 6: "#FFD700", # BSh Steppe climate, hot 7: "#DAA520", # BSk Steppe climate, cold 8: "#87CEEB", # Cfa Temperate/mesothermal climate, fully humid, hot 9: "#ADD8E6", # Cfb Temperate/mesothermal climate, fully humid, warm 10: "#4682B4", # Cfc Temperate/mesothermal climate, fully humid, cold 11: "#FFA07A", # Csa Temperate/mesothermal climate, dry summer, hot 12: "#FA8072", # Csb Temperate/mesothermal climate, dry summer, warm 13: "#E9967A", # Csc Temperate/mesothermal climate, dry summer, cold 14: "#FFDAB9", # Cwa Temperate/mesothermal climate, dry winter, hot 15: "#FFE4B5", # Cwb Temperate/mesothermal climate, dry winter, warm 16: "#FFDEAD", # Cwc Temperate/mesothermal climate, dry winter, cold 17: "#8B0000", # Dfa Continental/microthermal climate, fully humid, hot 18: "#B22222", # Dfb Continental/microthermal climate, fully humid, warm 19: "#DC143C", # Dfc Continental/microthermal climate, fully humid, cold 20: "#FF0000", # Dfd Continental/microthermal climate, fully humid, very cold 21: "#800080", # Dsa Continental/microthermal climate, dry summer, hot 22: "#9370DB", # Dsb Continental/microthermal climate, dry summer, warm 23: "#8A2BE2", # Dsc Continental/microthermal climate, dry summer, cold 24: "#4B0082", # Dsd Continental/microthermal climate, dry summer, very cold 25: "#000080", # Dwa Continental/microthermal climate, dry winter, hot 26: "#0000CD", # Dwb Continental/microthermal climate, dry winter, warm 27: "#1E90FF", # Dwc Continental/microthermal climate, dry winter, cold 28: "#00BFFF", # Dwd Continental/microthermal climate, dry winter, very cold 29: "#F0E68C", # ET Tundra climate 30: "#FFFFFF" # EF Eternal Frost climate } m.add_cog_layer(image.value, colormap=custom_cmap, name=maps_list[1]) m.add_legend(legend_title="Legenda", legend_dict=legend_dict, layer_name=maps_list[1], position="bottomleft") elif image.value == maps_values[5] or image.value == maps_values[6]: colors = cm.get_palette(cmap_name='inferno', hashtag=True) m.add_cog_layer(image.value+ str(ano.value) + '.tif', name=str(ano.value), palette = 'inferno' ) m.add_colorbar(colors= colors, vmin=0, vmax=40, position='bottomright', orientation='horizontal', label='°C', caption='Graus Celsius') elif image.value == maps_values[7]: colors = cm.get_palette(cmap_name='inferno', hashtag=True) m.add_cog_layer(image.value+ str(ano.value) + '.tif', name=str(ano.value), palette = 'inferno' ) m.add_colorbar(colors= colors, vmin=0, vmax=3000, position='bottomright', orientation='horizontal', label='mm', caption='Precipitação Anual') else: m.add_cog_layer(image.value+ str(ano.value) + '.tif', name=str(ano.value), palette = 'inferno' ) colors = cm.get_palette(cmap_name='inferno', hashtag=True) m.add_colorbar(colors= colors, vmin=0, vmax=365, position='bottomright', orientation='horizontal', label='Dias', caption='Dias no Ano') #image_date = get_image_date(image.value, m) output.outputs = () #output.append_stdout(f"Image date: {image_date}\n") image.observe(change_image, names="value") box = widgets.VBox( [ ano,image, output] ) m.add_widget(box, position="topright", add_header=False) class Map(leafmap.Map): def __init__(self, **kwargs): super().__init__(**kwargs) #ee.Authenticate() #ee.Initialize(project='ee-curso-gee-rhamon') #self.add_ee_data() add_widgets(self) self.add_layer_manager(opened= True) #self.add_legend(legend_title="Legend", legend_dict=legend_dict, open=False) #self.add_inspector() @solara.component def Page(): with solara.Column(style={"min-width": "500px"}): Map.element( zoom=zoom.value, on_zoom=zoom.set, center=center.value, on_center=center.set, height="600px", toolbar_ctrl=False, data_ctrl=True, add_google_map=True, )