import os
import ee
import geemap
import geemap.colormaps as cm
Valor 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
= image.reduceNeighborhood(**{
mean 'reducer': ee.Reducer.mean(),
'kernel': ee.Kernel.circle(**{
'radius':windows,
'units':'pixels',
'normalize':False
}),
})
# Calculando o desvio padrão
= image.reduceNeighborhood(**{
sd 'reducer': ee.Reducer.stdDev(),
'kernel': ee.Kernel.circle(**{
'radius':windows,
'units':'pixels',
'normalize':False
}),
})
# Renomeie os rasters
= mean.rename('mean')
meanValue = sd.rename('sd')
sdValue
# Calculando os valores de Z
= image.subtract(meanValue).divide(sdValue).rename('z')
z
return z
O 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
= ee.Image("projects/ee-lucasljardim9/assets/landform_variety")
landform_variety
= ee.Image("projects/ee-lucasljardim9/assets/elevation_range_residual")
elevation_range
= ee.Image('projects/ee-lucasljardim9/assets/soil_diversity')
soil_diversity
# Importando os dados de wetlands para o wetland score
= ee.Image("projects/ee-lucasljardim9/assets/wetlands_count")
wetlands_count
= ee.Image("projects/ee-lucasljardim9/assets/wetlands_density")
wetlands_density
= ee.Image("projects/ee-lucasljardim9/assets/wetlands_density_1000")
wetlands_density_1000
# Importando o polígono de bioma para definir as
# coordenadas máximas e mínimas do Brasil
= ee.FeatureCollection("projects/ee-lucasljardim9/assets/Biome")
regiao
# ModeloDigital de Elevação para extrair a resolução
= ee.Image("MERIT/DEM/v1_0_3")
DEM
# 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.map(func_cmp).geometry().dissolve(**{'maxError': 1}).bounds()
regiao_box
# Resolução das análises
= DEM.projection().nominalScale() escala
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
= 200
windows
# Calculando os valores de Z para cada variável
= calculate_Z_scores(landform_variety, windows)
Z_landform_variety
= calculate_Z_scores(elevation_range, windows)
Z_elevation_range
= calculate_Z_scores(soil_diversity, windows)
Z_soil_diversity
= calculate_Z_scores(wetlands_count, windows)
Z_wetlands_count
= calculate_Z_scores(wetlands_density, windows)
Z_wetlands_density
= calculate_Z_scores(wetlands_density_1000, windows) Z_wetlands_density_1000
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
= (Z_wetlands_density
wetlands_density 2)
.multiply(
.add(Z_wetlands_density_1000)3))
.divide(
# Testando se o Z da quantidade de áreas úmidas é maior que a densidade média
= wetlands_density.lt(Z_wetlands_count)
wet_test
# Média de densidade local, regional e quantidade de áreas úmidas
= (wetlands_density
wet_average 3)
.multiply(
.add(Z_wetlands_count)4))
.divide(
# Substituindo os locais com densidade menor que a quantidade pelos valores de quantidade
= Z_wetlands_density.where(wet_test, wet_average) Z_wetlands_score
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
= "projects/ee-lucasljardim9/assets/Z_landform_variety"
landform_assetId
= "projects/ee-lucasljardim9/assets/Z_elevation_range"
elevation_assetId
= "projects/ee-lucasljardim9/assets/Z_wetlands_score"
wetland_assetId
= "projects/ee-lucasljardim9/assets/Z_soil_diversity"
soil_assetId
# Exportando as imagens
geemap.ee_export_image_to_asset(
Z_landform_variety, ='Z_landform_variety',
description=landform_assetId,
assetId=regiao_box,
region=escala,
scale=1e13
maxPixels
)
geemap.ee_export_image_to_asset(
Z_elevation_range, ='Z_elevation_range',
description=elevation_assetId,
assetId=regiao_box,
region=escala,
scale=1e13
maxPixels
)
geemap.ee_export_image_to_asset(
Z_wetlands_score, ='Z_wetlands_score',
description=wetland_assetId,
assetId=regiao_box,
region=escala,
scale=1e13
maxPixels
)
geemap.ee_export_image_to_asset(
Z_soil_diversity, ='Z_soil_diversity',
description=soil_assetId,
assetId=regiao_box,
region=escala,
scale=1e13
maxPixels )
Os dados podem ser visualizados abaixo:
# Paleta de cores
= cm.get_palette('terrain', n_class=10)
palette
# Centralize o mapa
= geemap.Map(center=(-11.75, -51.52), zoom=4)
Map
# Importe os assets
= ee.Image("projects/ee-lucasljardim9/assets/Z_landform_variety")
landform
= ee.Image("projects/ee-lucasljardim9/assets/Z_elevation_range")
elevation_range
= ee.Image("projects/ee-lucasljardim9/assets/Z_wetlands_score")
wetland_score
= ee.Image("projects/ee-lucasljardim9/assets/Z_soil_diversity")
soil_diversity
# Plote o mapa
'palette':palette, 'min':-1.05, 'max': 1.6}, "landform")
Map.addLayer(landform, {'palette':palette, 'min':-1.6, 'max': 1.5}, "elevation range")
Map.addLayer(elevation_range, {'palette':palette, 'min':-0.5, 'max': 0.6}, "wetland score")
Map.addLayer(wetland_score, {'palette':palette, 'min':-2.7, 'max': 0.9}, "soil diversity")
Map.addLayer(soil_diversity, {
Map