Python

Calcular NDVI no Google Earth Engine

Escrito por Erick Faria · 9 min. >
NDVI no Google Earth Engine

Neste post, vou ensinar como calcular o NDVI no Google Earth Engine usando a API do Python. O NDVI é uma ferramenta fundamental para avaliar a saúde e a cobertura vegetal em áreas geográficas. Por meio desse índice, podemos obter informações sobre a vegetação, como: identificar áreas de desmatamento, monitorar safras agrícolas e até mesmo acompanhar mudanças climáticas. Além disso vou compartilhar com vocês os códigos utilizados e você é livre para copiar e reproduzir em seus estudos.

O que é o NDVI?

O NDVI, ou Índice de Vegetação por Diferença Normalizada, é uma métrica fundamental em sensoriamento remoto e geoprocessamento. Ele é calculado com base em informações espectrais provenientes de imagens de satélite, especificamente nas bandas de luz visível (geralmente a luz vermelha) e na banda do infravermelho próximo.

A ideia por trás do NDVI é que as plantas saudáveis refletem a luz visível, como o vermelho, enquanto absorvem a radiação na faixa do infravermelho próximo. Plantas menos saudáveis ou áreas não vegetadas terão um comportamento diferente. O NDVI quantifica essa diferença e fornece um valor que varia de -1 a +1.

  • Valores próximos a +1 indicam uma alta densidade de vegetação.
  • Valores próximos a 0 sugerem áreas não vegetadas, como corpos d’água ou áreas urbanas.
  • Valores negativos, geralmente próximos a -1, são associados a superfícies artificiais, como estradas ou construções.

Essa métrica é especialmente útil em diversas aplicações, como o monitoramento de safras agrícolas, detecção de desmatamento, estudos de mudanças climáticas e avaliação da saúde das vegetações em ecossistemas naturais. A capacidade de calcular o NDVI a partir de imagens de satélite permite o acompanhamento e a análise de vastas áreas geográficas ao longo do tempo, contribuindo para a tomada de decisões informadas em diversos campos, incluindo a agricultura de precisão e a gestão ambiental.

O que é o Google Earth Engine?

O Google Earth Engine é uma plataforma de processamento e análise de dados geoespaciais baseada na nuvem, desenvolvida pelo Google. Ela oferece acesso a uma vasta coleção de imagens de satélite e dados geoespaciais de alta resolução, permitindo que pesquisadores, cientistas e desenvolvedores realizem análises complexas e projetos relacionados à geoinformação de forma eficiente. Em outro post eu fiz uma pequena Introdução ao Google Earth Engine, confira aqui: Introdução ao Google Earth Engine

Uma das características mais distintas do Google Earth Engine é a sua capacidade de processar grandes volumes de dados geoespaciais de forma rápida e escalável. Isso significa que os usuários podem realizar análises espaciais complexas sem precisar baixar ou armazenar os dados localmente, economizando tempo e recursos de computação.

A plataforma oferece uma variedade de ferramentas e recursos para análise de imagens de satélite, modelagem ambiental, monitoramento de mudanças na terra, detecção de desmatamento, previsão climática, entre muitos outros usos. Além disso, o Google Earth Engine fornece suporte para linguagens de programação como JavaScript e Python, permitindo que os usuários escrevam código personalizado para suas análises e aplicações geoespaciais.

O Google Earth Engine desempenha um papel fundamental em projetos de ciências da terra, ambientais e climáticas, fornecendo acesso a uma enorme quantidade de dados espaciais e recursos de processamento poderosos diretamente na nuvem. Isso o torna uma ferramenta valiosa para quem trabalha com informações geoespaciais em todo o mundo.

Vantagens de se calcular NDVI no Google Earth Engine

  • Acesso a uma enorme base de dados: O Google Earth Engine disponibiliza uma vasta coleção de imagens de satélite de alta resolução, cobrindo todo o globo. Isso garante que os usuários tenham acesso a dados atualizados e históricos para suas análises.
  • Processamento escalável na nuvem: O cálculo do NDVI no Google Earth Engine, por exemplo, em grandes áreas geográficas pode ser intensivo em recursos computacionais. O Google Earth Engine oferece uma capacidade de processamento escalável na nuvem, permitindo que análises em larga escala sejam realizadas sem a necessidade de infraestrutura local robusta.
  • Eficiência de tempo: A plataforma agiliza o processo de análise, eliminando a necessidade de baixar e processar grandes conjuntos de dados localmente. Isso economiza tempo, especialmente para projetos que envolvem grandes áreas geográficas e séries temporais extensas.
  • Acesso a ferramentas de análise avançadas: O Google Earth Engine fornece uma ampla gama de ferramentas de análise geoespacial, permitindo que os usuários realizem análises complexas de vegetação, mudanças na terra e monitoramento ambiental com facilidade.
  • Programação personalizada: Os usuários podem aproveitar linguagens de programação como Python e JavaScript para escrever código personalizado, adaptando as análises às suas necessidades específicas e criando aplicativos geoespaciais personalizados.
  • Colaboração e compartilhamento de resultados: O Google Earth Engine permite que os resultados das análises sejam compartilhados facilmente com colegas e colaboradores, promovendo a colaboração em projetos de geociências.
  • Aplicações em tempo real: A capacidade de acessar dados e calcular o NDVI na nuvem significa que as análises podem ser conduzidas em tempo quase real, permitindo a detecção rápida de mudanças e eventos ambientais.

Calculando NDVI no Google Earth Engine

O Google Earth Engine é fantástico, no entanto, para começar a aproveitar todas as capacidades dessa plataforma, é essencial ter conhecimentos básicos de programação. Se você ainda não se sente à vontade com a programação, não se preocupe! Tenho uma ótima dica para você. Meu livro, “Fundamentos em Python,” oferece exatamente o que você precisa para dar seus primeiros passos na programação e, assim, começar a utilizar os scripts que estou compartilhando aqui para aproveitar ao máximo o Google Earth Engine.

No livro, você aprenderá os conceitos básicos de Python, uma linguagem de programação amplamente utilizada e altamente acessível, que é fundamental para escrever scripts no Google Earth Engine. Com uma abordagem amigável e prática, meu livro orienta você desde o início, proporcionando uma base sólida para a programação. Não importa se você é um iniciante completo ou se já possui alguma experiência, você encontrará o conteúdo adequado para suas necessidades.

Então, por que esperar? Dê o primeiro passo em direção a uma jornada emocionante de análises geoespaciais e comece a desvendar os segredos do Google Earth Engine. Clique no banner para adquirir o livro “Fundamentos em Python” agora mesmo e comece a aprender as habilidades essenciais para aproveitar ao máximo esta plataforma!

Autenticando no Google Earth Engine

O primeiro passo para começar a usar o Google Earth Engine é se cadastrar no serviço. Para fazer isso, siga os seguintes passos:

  1. Cadastro no Google Earth Engine: Acesse o site oficial do Google Earth Engine e clique em “Sign Up” (Inscrever-se) para criar uma conta. Você precisará fornecer suas informações de contato e aceitar os termos de uso.
  2. Aprovação da Conta: Após se inscrever, sua conta será submetida a uma análise pelo Google Earth Engine. Isso pode levar algum tempo, pois a plataforma prioriza pesquisadores e cientistas. Uma vez aprovado, você receberá um e-mail de confirmação.

Agora, você está pronto para autenticar-se no ambiente Python e começar a usar o Google Earth Engine. Geralmente, é possível realizar a autenticação em diferentes ambientes, mas aqui estão duas opções populares:

Opção 1: Ambiente Local com Visual Studio Code (VS Code): Se você preferir trabalhar localmente, siga os seguintes passos:

  • Abra o seu ambiente de desenvolvimento preferido, como o Visual Studio Code (VS Code).
  • Certifique-se de que a biblioteca earthengine-api esteja instalada no seu ambiente Python.
  • Utilize o código de autenticação que mencionei anteriormente para autenticar-se no Google Earth Engine.

Opção 2: Google Colab (Colaboratory): Se você preferir uma abordagem baseada na nuvem e desejar usar o Google Colab, siga estes passos:

  • Acesse o Google Colab e crie um novo notebook.
  • No notebook do Google Colab, você pode utilizar o mesmo código de autenticação mencionado anteriormente.
  • A vantagem do Google Colab é que ele fornece uma plataforma pronta para uso com integração fácil com o Google Earth Engine, eliminando a necessidade de configurar um ambiente local.

Após se cadastrar veja abaixo o código python para autenticar. Todas as vezes será necessário autenticar para usar os produtos do Google Earth Engine.

# Importe a biblioteca earthengine-api
import ee

# Autentique-se no Google Earth Engine usando sua conta do Google
ee.Authenticate()

# Inicialize o Earth Engine para calcular NDVI no Google Earth Engine
ee.Initialize()

import ee: Importa a biblioteca earthengine-api.

ee.Authenticate(): Este comando solicitará que você faça login na sua conta do Google. Após executá-lo, siga as instruções no console para autenticar-se. Isso abrirá uma janela do navegador para autenticação. Após a autenticação bem-sucedida, você receberá um código de autenticação que deverá ser copiado e colado de volta no console Python.

ee.Initialize(): Inicializa o Google Earth Engine após a autenticação bem-sucedida. Agora você está pronto para começar a usar o Google Earth Engine.

Configuração e Coleta de Imagens

Agora que você está registrado no sistema podemos começar os scripts de cálculo do NDVI no Google Earth Engine. A primeira etapa é definir as datas que queremos calcular. Você pode mudar os parâmetros, para definir as datas que desejar.

Definindo as Datas de Início e Término

# Define as datas que iremos calcular o NDVI no Google Earth Engine
start_date = '2022-11-01'
end_date = '2022-12-31'

Nesta parte, definimos as datas de início e término para especificar o período para o qual desejamos coletar as imagens de satélite.

Aqui, criamos uma coleção de imagens Sentinel-2 usando a API do Earth Engine. Estamos filtrando as imagens com base na região de interesse definida em um GeoDataFrame e no intervalo de datas especificado. Filtrando a Coleção Sentinel-2:

# Filtra a coleção Sentinel-2 antes de calcular NDVI no Google Earth Engine
collection = (ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
              .filterBounds(gdf_ee.geometry())
              .filterDate(ee.Date(start_date), ee.Date(end_date)))

Cálculo do NDVI

Nesta parte, definimos uma função chamada calculate_ndvi, que aceita uma imagem de satélite como entrada e calcula o NDVI usando as bandas espectrais B8 (infravermelho próximo) e B4 (vermelho) da imagem. O NDVI é adicionado à imagem como uma nova banda.

# Função para calcular o NDVI no Google Earth Engine
def calculate_ndvi(image):
    ndvi = image.normalizedDifference(['B8', 'B4']).rename('NDVI')
    return image.addBands(ndvi)
# Mapeia a função de cálculo do NDVI no Google Earth Engine
collection_with_ndvi = collection.map(calculate_ndvi)

Aqui, aplicamos a função calculate_ndvi a cada imagem na coleção usando o método map, criando uma nova coleção com o NDVI calculado para cada imagem.

Fique atento para a próxima parte do tutorial, onde abordaremos a aplicação da máscara SCL para remover nuvens e sombras das imagens.

Remoção de Nuvens e Sombras Usando a Máscara SCL

Agora, vamos continuar com a parte do tutorial que se concentra na remoção de nuvens e sombras das imagens de satélite.

# Função para aplicar a máscara SCL para remover nuvens e sombras do NDVI no Google Earth Engine

def apply_scl_mask(image):
    scl = image.select('SCL')
    # Define valores que representam vegetação
    vegetation_mask = scl.eq(4)
    return image.updateMask(vegetation_mask)

Nesta parte, definimos uma função chamada apply_scl_mask que aceita uma imagem como entrada. A função seleciona a banda SCL (Scene Classification Map) da imagem, que identifica diferentes tipos de cobertura terrestre, incluindo nuvens, sombras e vegetação. Em seguida, criamos uma máscara de vegetação, onde o valor 4 na banda SCL representa a vegetação. Você pode ajustar esse valor conforme necessário, dependendo dos dados específicos da sua região de interesse. A função aplica a máscara à imagem, removendo assim as áreas afetadas por nuvens e sombras.

# Aplica a máscara SCL à coleção do NDVI no Google Earth Engine
collection_with_mask = collection_with_ndvi.map(apply_scl_mask)

Aqui, usamos a função apply_scl_mask para aplicar a máscara SCL a cada imagem na coleção que já possui o NDVI calculado. Isso resulta em uma nova coleção onde as imagens foram pré-processadas para remover nuvens e sombras.

Coleta de Dados e Armazenamento em um DataFrame

Agora que temos nossas imagens pré-processadas, vamos coletar os dados do NDVI médio em nossa região de interesse e armazená-los em um DataFrame do Pandas.

# Converte a coleção em uma lista
image_list = collection_with_mask.toList(collection_with_mask.size())

# Inicializa uma lista para armazenar os dados
all_data = []

# Loop sobre as imagens na lista
for i in range(collection_with_mask.size().getInfo()):
    image = ee.Image(image_list.get(i))
    
    # Calcula o NDVI médio na região de interesse
    mean_ndvi_region = image.reduceRegion(
        reducer=ee.Reducer.mean(),
        geometry=gdf_ee.geometry(),  # Use a geometria do GeoDataFrame
        scale=10,
        maxPixels=1e13
    )
    
    date = image.date().format("yyyy-MM-dd").getInfo()
    ndvi_mean = mean_ndvi_region.get('NDVI').getInfo()
    
    data = {'date': date, 'ndvi_mean': ndvi_mean}
    all_data.append(data)

# Cria um DataFrame a partir dos dados
df = pd.DataFrame(all_data)

Nesta parte, estamos coletando os dados do NDVI médio para cada imagem na coleção, usando a função reduceRegion para calcular o valor médio do NDVI na região de interesse. Em seguida, esses dados são armazenados em uma lista chamada all_data. Finalmente, os dados são convertidos em um DataFrame do Pandas para análise e visualização.

Este é o final do tutorial de como calcular NDVI no Google Earth Engine. Agora você aprendeu como coletar e armazenar os dados do NDVI no Google Earth Engine em um DataFrame. Veja abaixo o resultado final:

Data NDVI
2022-11-02 NaN
2022-11-04 0.531155
2022-11-07 0.532685
2022-11-09 0.608312
2022-11-12 NaN
2022-11-14 0.531042
2022-11-17 0.546167
2022-11-19 0.533477
2022-11-22 NaN
2022-11-24 NaN
2022-11-27 0.528339
2022-11-29 0.562482
2022-12-02 0.499800
2022-12-04 0.493658
2022-12-07 NaN
2022-12-09 0.561319
2022-12-12 0.538269
2022-12-14 NaN
2022-12-17 NaN
2022-12-19 NaN
2022-12-22 NaN
2022-12-24 0.414788
2022-12-27 NaN
2022-12-29 0.525121

Os valores que foram classificados como NaN são os valores faltantes. Esses valores podem acontecer por vários motivos, sendo o mais comum a presença de nuvem em toda a área de interesse. Ao calcular o NDVI no Google Earth Engine nós aplicamos uma máscara para pegar apenas área de vegetação, o que pode ocasionar em casos como esses.

Escrito por Erick Faria
Engenheiro de Dados com Ph.D. em Geografia e experiência em análise espacial e geoprocessamento. Expertise em processamento de grandes volumes de dados geoespaciais, imagens de satélite e dados de mercado, utilizando ferramentas como Spark, Databricks e Google Earth Engine. Experiência em projetos de mercado de carbono, modelos preditivos para investimentos agrícolas e liderança de projetos de dados em saúde pública. Habilidades em Python, R, SQL e diversas ferramentas de engenharia de dados. Profile