Heterogeneidade da paisagem

Importando pacotes e inicializando geemap

import os
import ee
import geemap
geemap.ee_initialize()

A heterogeneidade da paisagem é uma métrica composta pelos valores de Z da variedade de formas de relevo, amplitude altitudinal, índice de áreas úmidas e riqueza de solos (Anderson et al. 2016). O cálculo da heterogeneidade da paisagem consiste de uma série de etapas:

    1. A heterogeneidade da paisagem assume os valores de variedade de formas de relevo;
    1. Locais onde a amplitude altitudinal é maior que variedade de formas de relevo, a heterogeneidade da paisagem é substituída pela média ponderada entre as duas variáveis, atribuindo peso dobrado para a variedade de de formas de relevo;
    1. Locais onde o índice de áreas úmidas é maior que a heterogeneidade da paisagem calculada anteriormente, os valores são substituídos pela média ponderada das variáveis, atribuindo pelo duplo para a variedade de formas de relevo;
    1. Localidades onde a riqueza de solos é maior que a heterogeneidade da paisagem das etapas anteriores, os valores são substituídos pela média ponderada das variáveis naquela localidade, atribuindo peso duplo para a variedade de formas de relevo.

Base de dados

Os dados para a heterogeneidade da paisagem foram criados na etapa de cálculo dos valores de Z.

Códigos para a criação da heterogeneidade da paisagem

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 a reprodução da análise pode ser encontrado em https://github.com/Resiliencia-climatica-Brasil/diversity-resilience-python/blob/master/jupyternotebook/6_landscape_diversity.ipynb.

Importamos os dados de bioma para delimitar a região de análise e definimos a escala espacial da análise como nas etapas anteriores.

# 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()

Importamos os mapas.

# Importando e cortando as imagens para o Brasil
# modifique os endereços para os do seu projeto
landform_Z = ee.Image('projects/ee-lucasljardim9/assets/Z_landform_variety')
              

elevation_range_Z = 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')

O cálculo da heterogeneidade da paisagem inicia atribuindo à heterogeneidade da paisagem os valores de variedade de formas de relevo. Em um segundo momento, avaliamos os locais onde a amplitude altitudinal é maior que a variedade de formas de relevo e substituímos os valores.

landscape_diversity = landform_Z

# Testando se o Z da amplitude altitudinal é maior que o Z da variedade de formas de relevo
test_1 = elevation_range_Z.gt(landscape_diversity)

# Média ponderada entre variedade de formas de relevo e amplitude altitudinal
average_elevation = landform_Z.multiply(2).add(elevation_range_Z).divide(3)

# Substituindo os valores de variedade de formas de relevo por amplitude altitudinal 
# onde o segundo valor é maior que o primeiro
landscape_diversity = landscape_diversity.where(test_1, average_elevation)

Em seguida, adicionamos o índice de áreas úmidas, primeiro avaliando onde esse índice é maior que a heterogeneidade da paisagem calculada anteriormente. Nos locais onde os valores do índice de áreas úmidas são maiores que a heterogeneidade da paisagem, os valores são substituídos.

# testando onde índice de áreas úmidas é maior que a heterogeneidade da paisagem

test_2 = wetland_score.gt(landscape_diversity)

# Médias para cada teste

# Locais que a amplitude altitudinal foi maior que variedade de formas de relevo
average_wetland_1 = landform_Z.multiply(2).add(elevation_range_Z).add(wetland_score).divide(4)

# Locais onde a amplitude altitudinal não foi maior que variedade de formas de relevo
average_wetland_2 = landform_Z.multiply(2).add(wetland_score).divide(3)

# Substitua o valor de heterogeneidade da paisagem pelo índice de áreas úmidas

landscape_diversity = landscape_diversity.where(test_1.And(test_2), average_wetland_1)

landscape_diversity = landscape_diversity.where(test_1.Not().And(test_2), average_wetland_2)

A inclusão da riqueza de solos é um pouco mais complexa. Testamos onde a riqueza de solos é maior a heterogeneidade da paisagem anterior e substituímos os valores por 4 médias ponderadas diferentes, cada uma representando os passos anteriores. A primeira média é para os locais onde a riqueza de solos é maior que o índice de áreas úmidas, que por sua vez é maior que amplitude altitudinal. Na segunda média, os valores são para as regiões com maior riqueza de solos, mas onde o índice de áreas úmidas é menor que a amplitude altitudinal. A terceira média é para os locais onde a amplitude altitudinal é maior que variedade de formas de relevo, mas o índice de áreas úmidas não adiciona informação. A quarta média é para locais onde somente a riqueza de solos é maior que a variedade de formas de relevo.

# teste onde riqueza de solo é maior que a heterogeneidade da paisagem
test_3 = soil_diversity.gt(landscape_diversity)

# Calcule as médias ponderadas
average_soil_1 = (landform_Z.multiply(2)
                 .add(elevation_range_Z)
                 .add(wetland_score)
                 .add(soil_diversity)
                 .divide(5))

average_soil_2 = (landform_Z.multiply(2)
                 .add(elevation_range_Z)
                 .add(soil_diversity)
                 .divide(4))

average_soil_3 = (landform_Z.multiply(2)
                 .add(wetland_score)
                 .add(soil_diversity)
                 .divide(4))

average_soil_4 = (landform_Z.multiply(2)
                 .add(soil_diversity)
                 .divide(3))

# Substitua os valores de heterogeneidade da paisagem pela riqueza de solos

landscape_diversity = (landscape_diversity
                      .where(test_1.And(test_2).And(test_3), average_soil_1))

landscape_diversity = (landscape_diversity
                      .where(test_1.And(test_2.Not()).And(test_3), average_soil_2))

landscape_diversity = (landscape_diversity
                      .where(test_1.Not().And(test_2).And(test_3), average_soil_3))

landscape_diversity = (landscape_diversity
                      .where(test_1.Not().And(test_2.Not()).And(test_3), average_soil_4))

Finalizamos exportando o mapa de heterogeneidade da paisagem como asset no Google Earth Engine.

# Exporte o raster de heterogeneidade da paisagem
# modifique assetId para o do seu projeto
assetId = "projects/ee-lucasljardim9/assets/landscape_heterogeneity"

geemap.ee_export_image_to_asset(
    landscape_diversity, 
    description='landscape_heterogeneity', 
    assetId=assetId, 
    region=regiao_box, 
    scale=escala,
    maxPixels=1e13
)

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.