Valor de Z das variáveis

import os
import ee
import geemap
import geemap.colormaps as cm
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 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

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

Referências

Anderson, M. G., Barnett, Analie, M. Clark, A. O. Sheldon, e Prince, John. 2016. Resilient Sites for Terrestrial Conservation in Eastern North America. Página 186. The Nature Conservancy, Eastern Conservation Science.
Gorelick, N., M. Hancher, M. Dixon, S. Ilyushchenko, D. Thau, e R. Moore. 2017. Google Earth Engine: Planetary-scale geospatial analysis for everyone. Remote Sensing of Environment.
Python Software Foundation. 2023. Python Language Reference.
Wu, Q. 2020. geemap: A Python package for interactive mapping with Google Earth Engine. Journal of Open Source Software 5(), ,:2305.