import os
import ee
import geemap
import geemap.colormaps as cmValor de Z das variáveis
geemap.ee_initialize()Cálculo do valor de Z
Antes de calcularmos a diversidade da paisagem e a resiliência, nós transformamos as variáveis (variedade de formas de relevo, amplitude altitudinal, densidade, quantidade de áreas úmidas e riqueza de solo) em valores de Z (Anderson et al. 2016). O cálculo de Z é realizado dentro das janelas móveis. Um fato importante é a posterior tranformação dos valores de densidade e quantidade de áreas úmidas em índice de áreas úmidas.
Os valores de Z de cada variável, em cada célula (i), é o desvio do valor da célula da média da janela móvel (u), divido pelo seu desvio padrão:
\[Z-score_{iu} = \frac{i - media_{u}}{desviopadrao_{u}}\]
Índice de áreas úmidas
O índice de áreas úmidas é a média ponderada das densidades locais e regionais de áreas úmidas. Em locais onde o valor de Z da densidade média é menor que o Z da quantidade de áreas úmidas, o índice de áreas úmidas assume o segundo valor Z (Anderson et al. 2016).
\[ \tiny índice\ de\ áreas\ úmidas = \begin{cases} \frac{2 \times densidade_{local}(Z) + densidade_{regional}(Z)}{3} & \text{se densidade média é maior ou igual à quantidade regional}\\ \frac{2 \times densidade_{local}(Z) + densidade_{regional}(Z) + quantidade_{regional}(Z)}{4}& \text {se a quantidade regional for maior a densidade média} \end{cases} \]
Base de dados
Utilizamos as variáveis criadas anteriormente e guardadas como assets no Google Earth Engine. As variáveis são:
Códigos para o cálculo dos valores de Z
As análises foram rodadas no Google Earth Engine (Gorelick et al. 2017), devido a demanda computacional do projeto, usando o pacote geemap (Wu 2020) em Python (Python Software Foundation 2023) como interface pela facilidade na documentação e reprodutividade das análises. O JupyterNotebook para reprodução da análise pode ser encontrado em https://github.com/Resiliencia-climatica-Brasil/diversity-resilience-python/blob/master/jupyternotebook/5_Z_scores.ipynb.
Primeiro, criamos uma função para calcular o valor de Z dentro de cada janela móvel (code) para cada variável (image). A função calcula a média e desvio padrão para a vizinhança de cada célula, utilizando uma janela móvel circular. Depois, os valores e média e desvio padrão convertidos para valores de Z pela subtração da variável pela média e divida pelo desvio padrão.
def calculate_Z_scores(image, windows):
# Calculando a média
mean = image.reduceNeighborhood(**{
'reducer': ee.Reducer.mean(),
'kernel': ee.Kernel.circle(**{
'radius':windows,
'units':'pixels',
'normalize':False
}),
})
# Calculando o desvio padrão
sd = image.reduceNeighborhood(**{
'reducer': ee.Reducer.stdDev(),
'kernel': ee.Kernel.circle(**{
'radius':windows,
'units':'pixels',
'normalize':False
}),
})
# Renomeie os rasters
meanValue = mean.rename('mean')
sdValue = sd.rename('sd')
# Calculando os valores de Z
z = image.subtract(meanValue).divide(sdValue).rename('z')
return zO próximo passo é importar as variáveis de interesse para o cálculo de Z.
# Importando as variáveis
# modificar os endereços para os dos projetos
landform_variety = ee.Image("projects/ee-lucasljardim9/assets/landform_variety")
elevation_range = ee.Image("projects/ee-lucasljardim9/assets/elevation_range_residual")
soil_diversity = ee.Image('projects/ee-lucasljardim9/assets/soil_diversity')
# Importando os dados de wetlands para o wetland score
wetlands_count = ee.Image("projects/ee-lucasljardim9/assets/wetlands_count")
wetlands_density = ee.Image("projects/ee-lucasljardim9/assets/wetlands_density")
wetlands_density_1000 = ee.Image("projects/ee-lucasljardim9/assets/wetlands_density_1000")
# Importando o polígono de bioma para definir as
# coordenadas máximas e mínimas do Brasil
regiao = ee.FeatureCollection("projects/ee-lucasljardim9/assets/Biome")
# ModeloDigital de Elevação para extrair a resolução
DEM = ee.Image("MERIT/DEM/v1_0_3")
# função para extrair as bordas dos polígonos
def func_cmp(feature):
return feature.bounds()
# Extraindo as coordenadas mínimas e máximas do Brasil
regiao_box = regiao.map(func_cmp).geometry().dissolve(**{'maxError': 1}).bounds()
# Resolução das análises
escala = DEM.projection().nominalScale()Calculando os valores de Z
Nós aplicamos a função calculate_Z_scores para cada variável e guardamos o valores de Z calculados.
# Definindo a janela para o cálculo do do Z
windows = 200
# Calculando os valores de Z para cada variável
Z_landform_variety = calculate_Z_scores(landform_variety, windows)
Z_elevation_range = calculate_Z_scores(elevation_range, windows)
Z_soil_diversity = calculate_Z_scores(soil_diversity, windows)
Z_wetlands_count = calculate_Z_scores(wetlands_count, windows)
Z_wetlands_density = calculate_Z_scores(wetlands_density, windows)
Z_wetlands_density_1000 = calculate_Z_scores(wetlands_density_1000, windows)Calculando índice de áreas úmidas
Aqui, nós calculamos o índice de áreas úmidas, aplicando a fórmula descrita anteriormente.
# Calculando a densidade de areas úmidas como a média do local e regional
wetlands_density = (Z_wetlands_density
.multiply(2)
.add(Z_wetlands_density_1000)
.divide(3))
# Testando se o Z da quantidade de áreas úmidas é maior que a densidade média
wet_test = wetlands_density.lt(Z_wetlands_count)
# Média de densidade local, regional e quantidade de áreas úmidas
wet_average = (wetlands_density
.multiply(3)
.add(Z_wetlands_count)
.divide(4))
# Substituindo os locais com densidade menor que a quantidade pelos valores de quantidade
Z_wetlands_score = Z_wetlands_density.where(wet_test, wet_average)Exportando os valores de Z
Por último, exportamos todas as imagens de Z como asset no Google Earth Engine.
# Criando os links dos assets
# modifique os assetIds para os dos seus projetos
landform_assetId = "projects/ee-lucasljardim9/assets/Z_landform_variety"
elevation_assetId = "projects/ee-lucasljardim9/assets/Z_elevation_range"
wetland_assetId = "projects/ee-lucasljardim9/assets/Z_wetlands_score"
soil_assetId = "projects/ee-lucasljardim9/assets/Z_soil_diversity"
# Exportando as imagens
geemap.ee_export_image_to_asset(
Z_landform_variety,
description='Z_landform_variety',
assetId=landform_assetId,
region=regiao_box,
scale=escala,
maxPixels=1e13
)
geemap.ee_export_image_to_asset(
Z_elevation_range,
description='Z_elevation_range',
assetId=elevation_assetId,
region=regiao_box,
scale=escala,
maxPixels=1e13
)
geemap.ee_export_image_to_asset(
Z_wetlands_score,
description='Z_wetlands_score',
assetId=wetland_assetId,
region=regiao_box,
scale=escala,
maxPixels=1e13
)
geemap.ee_export_image_to_asset(
Z_soil_diversity,
description='Z_soil_diversity',
assetId=soil_assetId,
region=regiao_box,
scale=escala,
maxPixels=1e13
)Os dados podem ser visualizados abaixo:
# Paleta de cores
palette = cm.get_palette('terrain', n_class=10)
# Centralize o mapa
Map = geemap.Map(center=(-11.75, -51.52), zoom=4)
# Importe os assets
landform = ee.Image("projects/ee-lucasljardim9/assets/Z_landform_variety")
elevation_range = ee.Image("projects/ee-lucasljardim9/assets/Z_elevation_range")
wetland_score = ee.Image("projects/ee-lucasljardim9/assets/Z_wetlands_score")
soil_diversity = ee.Image("projects/ee-lucasljardim9/assets/Z_soil_diversity")
# Plote o mapa
Map.addLayer(landform, {'palette':palette, 'min':-1.05, 'max': 1.6}, "landform")
Map.addLayer(elevation_range, {'palette':palette, 'min':-1.6, 'max': 1.5}, "elevation range")
Map.addLayer(wetland_score, {'palette':palette, 'min':-0.5, 'max': 0.6}, "wetland score")
Map.addLayer(soil_diversity, {'palette':palette, 'min':-2.7, 'max': 0.9}, "soil diversity")
Map